use CGI;
use CGI::Ajax;
-use List::Util qw(max first);
+use List::Util qw(min max first);
use SL::CVar;
use SL::Common;
my $is_purchase = (first { $_ eq $form->{type} } qw(request_quotation purchase_order purchase_delivery_order)) || ($form->{script} eq 'ir.pl');
my $show_min_order_qty = first { $_ eq $form->{type} } qw(request_quotation purchase_order);
my $is_delivery_order = $form->{type} =~ /_delivery_order$/;
+ my $is_s_p_order = (first { $_ eq $form->{type} } qw(sales_order purchase_order));
if ($is_delivery_order) {
$readonly = ' readonly' if ($form->{closed});
{ id => 'runningnumber', width => 5, value => $locale->text('No.'), display => 1, },
{ id => 'partnumber', width => 8, value => $locale->text('Number'), display => 1, },
{ id => 'description', width => 30, value => $locale->text('Part Description'), display => 1, },
- { id => 'ship', width => 5, value => ($form->{type} eq 'purchase_order' ? $locale->text('Ship rcvd') : $locale->text('Ship')),
- display => $form->{type} =~ /sales_order/ || ($form->{type} =~ /purchase_order/ && !($lizenzen && $form->{vc} eq "customer")) , },
+ { id => 'ship', width => 5, value => $locale->text('Delivered'), display => $is_s_p_order, },
{ id => 'qty', width => 5, value => $locale->text('Qty'), display => 1, },
{ id => 'price_factor', width => 5, value => $locale->text('Price Factor'), display => !$is_delivery_order, },
{ id => 'unit', width => 5, value => $locale->text('Unit'), display => 1, },
$projectnumber_labels{$item->{"id"}} = $item->{"projectnumber"};
}
+ _update_part_information();
+ _update_ship() if ($is_s_p_order);
+
# rows
for $i (1 .. $numrows) {
# undo formatting
- map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(qty ship discount sellprice price_new price_old) unless ($form->{simple_save});
+ map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(qty discount sellprice price_new price_old) unless ($form->{simple_save});
# unit begin
$form->{"unit_old_$i"} ||= $form->{"unit_$i"};
$decimalplaces = max 2, length $1;
$price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1;
- $discount = $form->round_amount($form->{"sellprice_$i"} * $form->{"discount_$i"} / 100, $decimalplaces);
- $linetotal = $form->round_amount(($form->{"sellprice_$i"} - $discount) / $price_factor, $decimalplaces);
- $linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
+ $discount = $form->round_amount($form->{"qty_$i"} * $form->{"sellprice_$i"} * $form->{"discount_$i"} / 100 / $price_factor, 2);
+ $linetotal = $form->round_amount($form->{"qty_$i"} * $form->{"sellprice_$i"} * (100 - $form->{"discount_$i"}) / 100 / $price_factor, 2);
$column_data{runningnumber} = $cgi->textfield(-name => "runningnumber_$i", -size => 5, -value => $i); # HuT
$column_data{partnumber} = $cgi->textfield(-name => "partnumber_$i", -size => 12, -value => $form->{"partnumber_$i"});
$column_data{qty} .= $cgi->button(-onclick => "calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)", -value => $locale->text('*/'))
. $cgi->hidden(-name => "formel_$i", -value => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"})
if $form->{"formel_$i"};
- $column_data{ship} = $cgi->textfield(-name => "ship_$i", -size => 5, -value => $form->format_amount(\%myconfig, $form->{"ship_$i"}));
+
+ $column_data{ship} = '';
+ if ($form->{"id_$i"}) {
+ my $ship_qty = $form->{"ship_$i"} * 1;
+ $ship_qty *= $all_units->{$form->{"partunit_$i"}}->{factor};
+ $ship_qty /= $all_units->{$form->{"unit_$i"}}->{factor};
+
+ $column_data{ship} = $form->format_amount(\%myconfig, $form->round_amount($ship_qty, 2) * 1) . ' ' . $form->{"unit_$i"};
+ }
# build in drop down list for pricesgroups
if ($form->{"prices_$i"}) {
push @ROW2, { value => qq|<b>$projectnumber</b> | . NTI($cgi->popup_menu('-name' => "project_id_$i", '-values' => \@projectnumber_values,
'-labels' => \%projectnumber_labels, '-default' => $form->{"project_id_$i"})) };
push @ROW2, { value => qq|<b>$reqdate</b> <input name="reqdate_$i" size="11" onBlur="check_right_date_format(this)" value="$form->{"reqdate_$i"}">| }
- if $form->{type} =~ /order/;
+ if ($form->{type} =~ /order/ || $form->{type} =~ /invoice/);
push @ROW2, { value => sprintf qq|<b>%s</b> <input type="checkbox" name="subtotal_$i" value="1" %s>|,
$locale->text('Subtotal'), $form->{"subtotal_$i"} ? 'checked' : '' };
$marge_color, $locale->text('Ertrag'),$form->{"marge_absolut_$i"}, $form->{"marge_percent_$i"},
$locale->text('LP'), $form->format_amount(\%myconfig, $form->{"listprice_$i"}, 2),
$locale->text('EK'), $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2) }
- if $form->{"id_$i"} && $form->{type} =~ /^sales_/ && !$is_delivery_order;
+ if $form->{"id_$i"} && ($form->{type} =~ /^sales_/ || $form->{type} =~ /invoice/) && !$is_delivery_order;
# / marge calculations ending
my @hidden_vars;
_check_io_auth();
+ my $price_key = ($form->{type} =~ m/request_quotation|purchase_order/) || ($form->{script} eq 'ir.pl') ? 'lastcost' : 'sellprice';
+
# change callback
$form->{old_callback} = $form->escape($form->{callback}, 1);
$form->{callback} = $form->escape("$form->{script}?action=display_form", 1);
push @HIDDENS, { 'name' => 'previousform', 'value' => $form->escape($previousform, 1) };
push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{$_} }, qw(rowcount vc);
- push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{"${_}_$form->{rowcount}"} }, qw(partnumber description unit sellprice);
+ push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{"${_}_$form->{rowcount}"} }, qw(partnumber description unit);
push @HIDDENS, { 'name' => 'taxaccount2', 'value' => $form->{taxaccounts} };
+ push @HIDDENS, { 'name' => $price_key, 'value' => $form->parse_amount(\%myconfig, $form->{"sellprice_$form->{rowcount}"}) };
+ push @HIDDENS, { 'name' => 'notes', 'value' => $form->{"longdescription_$form->{rowcount}"} };
$form->header();
print $form->parse_html_template("generic/new_item", { HIDDENS => [ sort { $a->{name} cmp $b->{name} } @HIDDENS ] } );
@hidden_keys = sort grep { !$dont_hide_key{$_} } grep { !ref $form->{$_} } keys %$form;
print $form->parse_html_template('generic/edit_email',
- { title => $title,
- a_filename => $attachment_filename,
- subject => $subject,
- _print_options_ => print_options('inline' => 1),
- HIDDEN => [ map +{ name => $_, value => $form->{$_} }, @hidden_keys ],
- SHOW_BCC => $myconfig{role} eq 'admin' });
+ { title => $title,
+ a_filename => $attachment_filename,
+ subject => $subject,
+ print_options => print_options('inline' => 1),
+ HIDDEN => [ map +{ name => $_, value => $form->{$_} }, @hidden_keys ],
+ SHOW_BCC => $myconfig{role} eq 'admin' });
$lxdebug->leave_sub();
}
($form->{type} =~ /_delivery_order$/) ? (
opthash($form->{type}, $form->{PD}{$form->{type}}, $locale->text('Delivery Order')),
opthash('pick_list', $form->{PD}{pick_list}, $locale->text('Pick List')),
- ) : undef;
+ ) : undef,
($form->{type} eq 'credit_note') ?
opthash("credit_note", $form->{PD}{credit_note}, $locale->text('Credit Note')) : undef;
IS->invoice_details(\%myconfig, \%$form, $locale);
}
- $form->get_salesman(\%myconfig, $salesman_id_saved);
+ $form->get_employee_data('prefix' => 'employee', 'id' => $form->{employee_id});
+ $form->get_employee_data('prefix' => 'salesman', 'id' => $salesman_id_saved);
if ($form->{shipto_id}) {
$form->get_shipto(\%myconfig);
reformat_numbers($output_numberformat, $precision, @{ $field_list });
}
- $form->{IN} = "$form->{formname}$form->{language}${printer_code}.html";
+ my $extension = '';
if ($form->{format} eq 'postscript') {
- $form->{postscript} = 1;
- $form->{IN} =~ s/html$/tex/;
+ $form->{postscript} = 1;
+ $extension = 'tex';
+
} elsif ($form->{"format"} =~ /pdf/) {
- $form->{pdf} = 1;
- if ($form->{"format"} =~ /opendocument/) {
- $form->{IN} =~ s/html$/odt/;
- } else {
- $form->{IN} =~ s/html$/tex/;
- }
+ $form->{pdf} = 1;
+ $extension = $form->{'format'} =~ m/opendocument/i ? 'odt' : 'tex';
+
} elsif ($form->{"format"} =~ /opendocument/) {
- $form->{"opendocument"} = 1;
- $form->{"IN"} =~ s/html$/odt/;
+ $form->{opendocument} = 1;
+ $extension = 'odt';
}
+ my $email_extension = '_email' if (($form->{media} eq 'email') && (-f "$myconfig{templates}/$form->{formname}_email$form->{language}${printer_code}.${extension}"));
+
+ $form->{IN} = "$form->{formname}${email_extension}$form->{language}${printer_code}.${extension}";
+
delete $form->{OUT};
if ($form->{media} eq 'printer') {
+ print (STDERR "io--------------------------------------");
+ print (STDERR $form->{printer_command});
+ #$form->{OUT} = "| $form->{printer_command} ";
$form->{OUT} = "| $form->{printer_command} &>/dev/null";
$form->{printed} .= " $form->{formname}";
$form->{printed} =~ s/^ //;
$form->get_duedate(\%myconfig);
- print $cgi->header() . $form->{duedate};
+ print $form->ajax_response_header() . $form->{duedate};
+
+ $lxdebug->leave_sub();
+}
+
+sub _update_part_information {
+ $lxdebug->enter_sub();
+
+ my %part_information = IC->get_basic_part_info('id' => [ grep { $_ } map { $form->{"id_${_}"} } (1..$form->{rowcount}) ],
+ 'vendor_id' => $form->{vendor_id});
+
+ $form->{PART_INFORMATION} = \%part_information;
+
+ foreach my $i (1..$form->{rowcount}) {
+ next unless ($form->{"id_${i}"});
+
+ my $info = $form->{PART_INFORMATION}->{$form->{"id_${i}"}} || { };
+ $form->{"partunit_${i}"} = $info->{unit};
+ }
$lxdebug->leave_sub();
}
+sub _update_ship {
+ $lxdebug->enter_sub();
+
+ if (!$form->{ordnumber} || !$form->{id}) {
+ map { $form->{"ship_$_"} = 0 } (1..$form->{rowcount});
+ $lxdebug->leave_sub();
+ return;
+ }
+
+ AM->retrieve_all_units();
+
+ my %ship = DO->get_shipped_qty('type' => ($form->{type} eq 'purchase_order') ? 'purchase' : 'sales',
+ '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"}};
+
+ next if (!$ship_entry || ($ship_entry->{qty} <= 0.01));
+
+ $form->{"ship_$i"} += $ship_entry->{qty};
+ $ship_entry->{qty} = 0;
+ }
+
+ $lxdebug->leave_sub();
+}