fix FSF address
[kivitendo-erp.git] / bin / mozilla / io.pl
index b96f770..628a0c2 100644 (file)
@@ -28,7 +28,8 @@
 # GNU General Public License for more details.
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1335, USA.
 #
 #######################################################################
 #
@@ -57,7 +58,7 @@ use SL::DB::Language;
 use SL::DB::Printer;
 use SL::DB::Vendor;
 use SL::Helper::CreatePDF;
-use SL::Helper::Flash;
+use SL::Helper::Flash qw(flash);
 
 require "bin/mozilla/common.pl";
 
@@ -604,7 +605,7 @@ sub item_selected {
 
     my @new_fields =
         qw(id partnumber description sellprice listprice inventory_accno
-           income_accno expense_accno bin unit weight assembly taxaccounts
+           income_accno expense_accno bin unit weight part_type taxaccounts
            partsgroup formel longdescription not_discountable partnotes lastcost
            price_factor_id price_factor);
 
@@ -672,8 +673,8 @@ sub item_selected {
     map {
       $form->{"${_}_$i"} =
           $form->format_amount(\%myconfig, $form->{"${_}_$i"}, $decimalplaces)
-    } qw(sellprice lastcost qty) if $form->{item} ne 'assembly';
-    $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100.0) if $form->{item} ne 'assembly';
+    } qw(sellprice lastcost qty) if $form->{part_type} ne 'assembly';
+    $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100.0) if $form->{part_type} ne 'assembly';
 
     delete $form->{nextsub};
 
@@ -727,7 +728,7 @@ sub check_form {
   my $count = 0;
 
   # remove any makes or model rows
-  if ($form->{item} eq 'assembly') {
+  if ($form->{part_type} eq 'assembly') {
 
     # fuer assemblies auskommentiert. seiteneffekte? ;-) wird die woanders benoetigt?
     #$form->{sellprice} = 0;
@@ -760,7 +761,7 @@ sub check_form {
     $form->redo_rows(\@flds, \@a, $count, $form->{assembly_rows});
     $form->{assembly_rows} = $count;
 
-  } elsif ($form->{item} !~ m{^(?:part|service)$}) {
+  } elsif ($form->{part_type} !~ m{^(?:part|service)$}) {
     remove_emptied_rows(1);
 
     $form->{creditremaining} -= &invoicetotal;
@@ -860,7 +861,7 @@ sub validate_items {
   if ($form->{rowcount} == 1) {
     flash('warning', $::locale->text('The action you\'ve chosen has not been executed because the document does not contain any item yet.'));
     &update;
-    ::end_of_request();
+    $::dispatcher->end_request;
   }
 
   for my $i (1 .. $form->{rowcount} - 1) {
@@ -888,10 +889,22 @@ sub order {
   $form->{old_employee_id} = $form->{employee_id};
   $form->{old_salesman_id} = $form->{salesman_id};
 
-  # link doc invoice -> quotation (single id no multi mode)
-  $form->{convert_from_ar_ids} = delete $form->{id};
-
   delete $form->{$_} foreach (qw(printed emailed queued));
+
+  # When creating a new sales order from a saved sales invoice, reset id,
+  # ordnumber, transdate and deliverydate as we are creating a new order. This
+  # workflow is probably mainly used as a template mechanism for creating new
+  # orders from existing invoices, so we probably don't want to link the items.
+  # Is this order function called anywhere else?
+  # The worksflows in oe already call sales_order and purchase_order in oe, not
+  # this general function which now only seems to be called from saved sales
+  # invoices
+  # Why is ordnumber set to invnumber above, does this ever make sense?
+
+  if ( $form->{script} eq 'is.pl' && $form->{type} eq 'invoice' ) {
+    delete $form->{$_} foreach (qw(ordnumber id transdate deliverydate));
+  };
+
   my $buysell;
   if ($form->{script} eq 'ir.pl' || $form->{type} eq 'request_quotation') {
     $form->{title} = $locale->text('Add Purchase Order');
@@ -954,9 +967,6 @@ sub quotation {
   if ($form->{type} =~  /(sales|purchase)_order/) {
     $form->{"converted_from_orderitems_id_$_"} = delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
   }
-  # link doc order -> quotation (single id no multi mode)
-  $form->{convert_from_oe_ids} = delete $form->{id};
-
   if ($form->{second_run}) {
     $form->{print_and_post} = 0;
   }
@@ -1059,6 +1069,7 @@ sub edit_e_mail {
                                      a_filename    => $attachment_filename,
                                      subject       => $subject,
                                      print_options => print_options('inline' => 1),
+                                     action        => 'send_email',
                                      HIDDEN        => [ map +{ name => $_, value => $form->{$_} }, @hidden_keys ],
                                      SHOW_BCC      => $::auth->assert('email_bcc', 'may fail') });
 
@@ -1146,7 +1157,7 @@ sub print {
     $form->{formname} = $formname;
     &edit();
     $::lxdebug->leave_sub();
-    ::end_of_request();
+    $::dispatcher->end_request;
   }
 
   &print_form($old_form);
@@ -1590,7 +1601,7 @@ sub print_form {
       }
 
       call_sub($display_form);
-      ::end_of_request();
+      $::dispatcher->end_request;
     }
 
     my $msg =
@@ -1604,7 +1615,7 @@ sub print_form {
   }
   if ($form->{printing}) {
    call_sub($display_form);
-   ::end_of_request();
+   $::dispatcher->end_request;
   }
 
   $main::lxdebug->leave_sub();
@@ -1957,6 +1968,7 @@ sub _make_record_item {
 }
 
 sub _make_record {
+  Form::disconnect_standard_dbh;
   my $class = {
     sales_order             => 'Order',
     purchase_order          => 'Order',