]> wagnertech.de Git - mfinanz.git/blobdiff - bin/mozilla/do.pl
speak better perlish for last commit
[mfinanz.git] / bin / mozilla / do.pl
index ede2116e6921c6be45f72ab8fbe91ad6923ef24a..c54940826751859527c98309d7370df0748032b4 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);
@@ -708,6 +709,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 +788,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 +842,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 +1024,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();
 
@@ -1706,6 +1720,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 +1732,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);