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";
$ship_qty *= $all_units->{$form->{"partunit_$i"}}->{factor};
$ship_qty /= ( $all_units->{$form->{"unit_$i"}}->{factor} || 1 );
- $column_data{ship} = $form->format_amount(\%myconfig, $form->round_amount($ship_qty, 2) * 1) . ' ' . $form->{"unit_$i"};
+ $column_data{ship} = $form->format_amount(\%myconfig, $form->round_amount($ship_qty, 2) * 1) . ' ' . $form->{"unit_$i"}
+ . $cgi->hidden(-name => "ship_$i", -value => $form->format_amount(\%myconfig, $form->{"ship_$i"}, $qty_dec));
my $ship_missing_qty = $form->{"qty_$i"} - $ship_qty;
my $ship_missing_amount = $form->round_amount($ship_missing_qty * $form->{"sellprice_$i"} * (100 - $form->{"discount_$i"}) / 100 / $price_factor, 2);
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) {
$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');
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;
}
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') });
$form->{formname} = $formname;
&edit();
$::lxdebug->leave_sub();
- ::end_of_request();
+ $::dispatcher->end_request;
}
&print_form($old_form);
}
call_sub($display_form);
- ::end_of_request();
+ $::dispatcher->end_request;
}
my $msg =
}
if ($form->{printing}) {
call_sub($display_form);
- ::end_of_request();
+ $::dispatcher->end_request;
}
$main::lxdebug->leave_sub();
my $all_units = AM->retrieve_all_units();
- my %ship = DO->get_shipped_qty('type' => ($form->{type} eq 'purchase_order') ? 'purchase' : 'sales',
- 'oe_id' => $form->{id},);
+ my %ship = DO->get_shipped_qty('oe_id' => $form->{id});
foreach my $i (1..$form->{rowcount}) {
next unless ($form->{"id_${i}"});
$form->{"ship_$i"} = 0;
- my $ship_entry = $ship{$form->{"id_$i"}};
-
- next if (!$ship_entry || ($ship_entry->{qty} <= 0));
-
- my $rowqty =
- ($form->{simple_save} ? $form->{"qty_$i"} : $form->parse_amount(\%myconfig, $form->{"qty_$i"}))
- * $all_units->{$form->{"unit_$i"}}->{factor}
- / $all_units->{$form->{"partunit_$i"}}->{factor};
-
- $form->{"ship_$i"} = min($rowqty, $ship_entry->{qty});
- $ship_entry->{qty} -= $form->{"ship_$i"};
- }
-
- foreach my $i (1..$form->{rowcount}) {
- next unless ($form->{"id_${i}"});
-
- my $ship_entry = $ship{$form->{"id_$i"}};
+ my $ship_entry = $ship{$i};
- next if (!$ship_entry || ($ship_entry->{qty} <= 0.01));
+ next if (!$ship_entry || ($ship_entry->{qty_ordered} <= 0));
- $form->{"ship_$i"} += $ship_entry->{qty};
- $ship_entry->{qty} = 0;
+ my $rowqty = $ship_entry->{qty_ordered} - $ship_entry->{qty_notdelivered};
+ $rowqty *= $all_units->{$form->{"unit_$i"}}->{factor} /
+ $all_units->{$form->{"partunit_$i"}}->{factor} if !$form->{simple_save};
+ $form->{"ship_$i"} = $rowqty;
}
$main::lxdebug->leave_sub();
}
sub _make_record {
+ Form::disconnect_standard_dbh;
my $class = {
sales_order => 'Order',
purchase_order => 'Order',