Merge branch 'master' of ssh://lx-office/~/lx-office-erp
[kivitendo-erp.git] / bin / mozilla / oe.pl
index b3a6568..add4b46 100644 (file)
@@ -38,6 +38,7 @@ use SL::FU;
 use SL::OE;
 use SL::IR;
 use SL::IS;
+use SL::MoreCommon qw(ary_diff);
 use SL::PE;
 use SL::ReportGenerator;
 use List::Util qw(max reduce sum);
@@ -238,7 +239,7 @@ sub order_links {
 
   $form->{"old$form->{vc}"}  = $form->{$form->{vc}};
 
-  if ($form->{"old$form->{vc}"} !~ m/--\d+$/ && $form->{"$form->{vc_}id}"}) {
+  if ($form->{"old$form->{vc}"} !~ m/--\d+$/ && $form->{"$form->{vc}_id"}) {
     $form->{"old$form->{vc}"} .= qq|--$form->{"$form->{vc}_id"}|
   }
 
@@ -316,7 +317,7 @@ sub form_header {
   $TMPL_VAR{department_labels}     = sub { "$_[0]->{description}--$_[0]->{id}" };
 
   # vendor/customer
-  $TMPL_VAR{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" };
+  $TMPL_VAR{vc_keys} = sub { E($_[0]->{name}) . "--$_[0]->{id}" };
   $TMPL_VAR{vclimit} = $myconfig{vclimit};
   $TMPL_VAR{vc_select} = "customer_or_vendor_selection_window('$form->{vc}', '', @{[ $form->{vc} eq 'vendor' ? 1 : 0 ]}, 0)";
   push @custom_hiddens, "$form->{vc}_id";
@@ -526,9 +527,17 @@ sub update {
       } else {
 
         $sellprice             = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"});
-        $form->{"discount_$i"} = 0 if $form->{"not_discountable_$i"};
+        # hier werden parts (Artikeleigenschaften) aus item_list (retrieve_item aus IS.pm)
+        # (item wahrscheinlich synonym für parts) entsprechend in die form geschrieben ...
+
+        # Wäre dieses Mapping nicht besser in retrieve_items aufgehoben?
+        #(Eine Funktion bekommt Daten -> ARBEIT -> Rückgabe DATEN)
+        #  Das quot sieht doch auch nach Überarbeitung aus ... (hmm retrieve_items gibt es in IS und IR)
         map { $form->{item_list}[$i]{$_} =~ s/\"/"/g }    qw(partnumber description unit);
         map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } keys %{ $form->{item_list}[0] };
+
+        # ... deswegen muss die prüfung, ob es sich um einen nicht rabattierfähigen artikel handelt später erfolgen (Bug 1136)
+        $form->{"discount_$i"} = 0 if $form->{"not_discountable_$i"};
         $form->{payment_id} = $form->{"part_payment_id_$i"} if $form->{"part_payment_id_$i"} ne "";
 
         $form->{"marge_price_factor_$i"} = $form->{item_list}->[0]->{price_factor};
@@ -629,12 +638,12 @@ sub search {
   # constants and subs for template
   $form->{jsscript}        = 1;
   $form->{employee_labels} = sub { $_[0]->{"name"} || $_[0]->{"login"} };
-  $form->{vc_keys}         = sub { "$_[0]->{name}--$_[0]->{id}" };
+  $form->{vc_keys}         = sub { E($_[0]->{name}) . "--$_[0]->{id}" };
   $form->{salesman_labels} = $form->{employee_labels};
 
   $form->header();
 
-  print $form->parse_html_template('oe/search');
+  print $form->parse_html_template('oe/search', { %myconfig });
 
   $lxdebug->leave_sub();
 }
@@ -664,7 +673,7 @@ sub orders {
 
   $ordnumber = ($form->{type} =~ /_order$/) ? "ordnumber" : "quonumber";
 
-  ($form->{ $form->{vc} }, $form->{"${form->{vc}}_id"}) = split(/--/, $form->{ $form->{vc} });
+  ($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} });
 
   report_generator_set_default_sort('transdate', 1);
 
@@ -681,7 +690,8 @@ sub orders {
     "salesman",
     "shipvia",                 "globalprojectnumber",
     "transaction_description", "open",
-    "delivered", "marge_total", "marge_percent"
+    "delivered", "marge_total", "marge_percent",
+    "country",                 "ustid",
   );
 
   # only show checkboxes if gotten here via sales_order form.
@@ -742,7 +752,9 @@ sub orders {
     'open'                    => { 'text' => $locale->text('Open'), },
     'delivered'               => { 'text' => $locale->text('Delivered'), },
     'marge_total'             => { 'text' => $locale->text('Ertrag'), },
-    'marge_percent'           => { 'text' => $locale->text('Ertrag prozentual'), }
+    'marge_percent'           => { 'text' => $locale->text('Ertrag prozentual'), },
+    'country'                 => { 'text' => $locale->text('Country'), },
+    'ustid'                   => { 'text' => $locale->text('USt-IdNr.'), },
   );
 
   foreach my $name (qw(id transdate reqdate quonumber ordnumber name employee salesman shipvia transaction_description)) {
@@ -1089,8 +1101,8 @@ sub save {
 
   $form->{simple_save} = 1;
   if(!$form->{print_and_save}) {
-    set_headings("edit");
-    &update;
+    delete @{$form}{ary_diff([keys %{ $form }], [qw(login stylesheet id script type)])};
+    edit();
     exit;
   }
   $lxdebug->leave_sub();
@@ -1179,8 +1191,9 @@ sub invoice {
   check_oe_access();
   $auth->assert($form->{type} eq 'purchase_order' || $form->{type} eq 'request_quotation' ? 'vendor_invoice_edit' : 'invoice_edit');
 
-  $form->{old_employee_id} = $form->{employee_id};
   $form->{old_salesman_id} = $form->{salesman_id};
+  $form->get_employee();
+
 
   if ($form->{type} =~ /_order$/) {
 
@@ -1273,7 +1286,7 @@ sub invoice {
 
   require "bin/mozilla/$form->{script}";
 
-  map { $form->{"select$_"} = "" } ($form->{vc}, currency);
+  map { $form->{"select$_"} = "" } ($form->{vc}, "currency");
 
   $currency = $form->{currency};
   &invoice_links;
@@ -1474,8 +1487,7 @@ sub save_as_new {
   check_oe_access();
 
   $form->{saveasnew} = 1;
-  $form->{closed}    = 0;
-  map { delete $form->{$_} } qw(printed emailed queued);
+  map { delete $form->{$_} } qw(printed emailed queued delivered closed);
 
   # Let Lx-Office assign a new order number if the user hasn't changed the
   # previous one. If it has been changed manually then use it as-is.
@@ -1487,6 +1499,17 @@ sub save_as_new {
     delete($form->{$idx});
   }
 
+  # clear reqdate unless changed
+  if ($form->{reqdate} && $form->{id}) {
+    my $saved_order = OE->retrieve_simple(id => $form->{id});
+    if ($saved_order && $saved_order->{reqdate} eq $form->{reqdate}) {
+      delete $form->{reqdate};
+    }
+  }
+
+  # update employee
+  $form->get_employee();
+
   &save;
 
   $lxdebug->leave_sub();
@@ -1566,6 +1589,8 @@ sub purchase_order {
   $form->{vc}    = "vendor";
   $form->{type}  = "purchase_order";
 
+  $form->get_employee();
+
   &poso;
 
   $lxdebug->leave_sub();
@@ -1587,6 +1612,8 @@ sub sales_order {
   $form->{vc}     = "customer";
   $form->{type}   = "sales_order";
 
+  $form->get_employee();
+
   &poso;
 
   $lxdebug->leave_sub();
@@ -1612,7 +1639,7 @@ sub poso {
                                 ordnumber);
 
   for $i (1 .. $form->{rowcount}) {
-    map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor);
+    map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
   }
 
   my %saved_vars = map { $_ => $form->{$_} } grep { $form->{$_} } qw(currency);
@@ -1623,6 +1650,12 @@ sub poso {
 
   &prepare_order;
 
+  # prepare_order assumes that the discount is in db-notation (0.05) and not user-notation (5)
+  # and therefore multiplies the values by 100 in the case of reading from db or making an order from several quotation, so we convert this back into percent-notation for the user interface by multiplying with 0.01
+  for $i (1 .. $form->{rowcount}) {
+    $form->{"discount_$i"}  = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 0.01);
+  };
+
   # format amounts
   for $i (1 .. $form->{rowcount} - 1) {
     map { $form->{"${_}_$i"} =~ s/\"/"/g } qw(partnumber description unit);
@@ -1649,8 +1682,11 @@ sub delivery_order {
     $form->{type}  = 'purchase_delivery_order';
   }
 
+  $form->get_employee();
+
   require "bin/mozilla/do.pl";
 
+  $form->{script}               = 'do.pl';
   $form->{cp_id}               *= 1;
   $form->{convert_from_oe_ids}  = $form->{id};
   $form->{transdate}            = $form->current_date(\%myconfig);
@@ -1663,7 +1699,7 @@ sub delivery_order {
   delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)};
 
   for $i (1 .. $form->{rowcount}) {
-    map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor);
+    map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
   }
 
   my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor);