]> wagnertech.de Git - mfinanz.git/blobdiff - bin/mozilla/do.pl
Lagerberichte auf shippingdate statt itime umgestellt
[mfinanz.git] / bin / mozilla / do.pl
index ede2116e6921c6be45f72ab8fbe91ad6923ef24a..e0a40f350c18b54e4ff0e092adf6cbe683f1344c 100644 (file)
@@ -30,6 +30,7 @@
 # Delivery orders
 #======================================================================
 
+use Carp;
 use List::MoreUtils qw(uniq);
 use List::Util qw(max sum);
 use POSIX qw(strftime);
@@ -45,7 +46,6 @@ use SL::WH;
 use Sort::Naturally ();
 require "bin/mozilla/arap.pl";
 require "bin/mozilla/common.pl";
-require "bin/mozilla/invoice_io.pl";
 require "bin/mozilla/io.pl";
 require "bin/mozilla/reportgenerator.pl";
 
@@ -172,8 +172,6 @@ sub order_links {
   $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
 
   # retrieve order/quotation
-  $form->{webdav}   = $::instance_conf->get_webdav;
-
   my $editing = $form->{id};
 
   DO->retrieve('vc'  => $form->{vc},
@@ -708,6 +706,8 @@ sub save {
   my %myconfig = %main::myconfig;
   my $locale   = $main::locale;
 
+  $form->mtime_ischanged('delivery_orders');
+
   $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
 
   $form->isblank("transdate", $locale->text('Delivery Order Date missing!'));
@@ -785,6 +785,8 @@ sub invoice {
   my $locale   = $main::locale;
 
   check_do_access();
+  $form->mtime_ischanged('delivery_orders');
+
   $main::auth->assert($form->{type} eq 'purchase_delivery_order' ? 'vendor_invoice_edit' : 'invoice_edit');
 
   $form->{convert_from_do_ids} = $form->{id};
@@ -837,6 +839,15 @@ sub invoice {
   my $currency = $form->{currency};
   invoice_links();
 
+  if ($form->{ordnumber}) {
+    require SL::DB::Order;
+    if (my $order = SL::DB::Manager::Order->find_by(ordnumber => $form->{ordnumber})) {
+      $order->load;
+      $form->{orddate} = $order->transdate_as_date;
+      $form->{$_}      = $order->$_ for qw(payment_id salesman_id taxzone_id quonumber);
+    }
+  }
+
   $form->{currency}     = $currency;
   $form->{exchangerate} = "";
   $form->{forex}        = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{invdate}, $buysell);
@@ -1010,9 +1021,9 @@ sub e_mail {
 
   check_do_access();
 
-  my $form     = $main::form;
+  $::form->mtime_ischanged('delivery_orders','mail');
 
-  $form->{print_and_save} = 1;
+  $::form->{print_and_save} = 1;
 
   my $saved_form = save_form();
 
@@ -1526,6 +1537,27 @@ sub mark_closed {
   $main::lxdebug->leave_sub();
 }
 
+sub display_form {
+  $::lxdebug->enter_sub;
+
+  $::auth->assert('purchase_delivery_order_edit | sales_delivery_order_edit');
+
+  relink_accounts();
+  retrieve_partunits();
+
+  my $new_rowcount = $::form->{"rowcount"} * 1 + 1;
+  $::form->{"project_id_${new_rowcount}"} = $::form->{"globalproject_id"};
+
+  $::form->language_payment(\%::myconfig);
+
+  Common::webdav_folder($::form);
+
+  form_header();
+  display_row(++$::form->{rowcount});
+  form_footer();
+
+  $::lxdebug->leave_sub;
+}
 
 sub yes {
   call_sub($main::form->{yes_nextsub});
@@ -1706,6 +1738,9 @@ sub transfer_in_out_default {
   # dieser array_ref ist für DO->save da:
   # einmal die all_requests in YAML verwandeln, damit delivery_order_items_stock
   # gefüllt werden kann.
+  # could be dumped to the form in the first loop,
+  # but maybe bin_id and warehouse_id has changed to the "korrekturlager" with
+  # allowed negative qty ($::instance_conf->get_warehouse_id_ignore_onhand) ...
   my $i = 0;
   foreach (@all_requests){
     $i++;
@@ -1715,6 +1750,13 @@ sub transfer_in_out_default {
 
   save(no_redirect => 1); # Wir können auslagern, deshalb beleg speichern
                           # und in delivery_order_items_stock speichern
+
+  # ... and fill back the persistent dois_id for inventory fk
+  undef (@all_requests);
+  foreach my $i (1 .. $form->{rowcount}) {
+    next unless ($form->{"id_$i"} && $form->{"stock_${prefix}_$i"});
+    push @all_requests, @{ DO->unpack_stock_information('packed' => $form->{"stock_${prefix}_$i"}) };
+  }
   DO->transfer_in_out('direction' => $prefix,
                       'requests'  => \@all_requests);