use CGI::Ajax;
use List::Util qw(max first);
+use SL::CVar;
use SL::Common;
use SL::CT;
use SL::IC;
use SL::PE;
use SL::AM;
use Data::Dumper;
+
+sub _check_io_auth {
+ $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
+ 'request_quotation_edit | sales_quotation_edit | purchase_order_edit | ' .
+ 'purchase_delivery_order_edit | sales_delivery_order_edit');
+}
+
########################################
# Eintrag fuer Version 2.2.0 geaendert #
# neue Optik im Rechnungsformular #
sub display_row {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my $numrows = shift;
my ($readonly, $stock_in_out, $stock_in_out_title);
- my $is_purchase = (first { $_ eq $form->{type} } qw(request_quotation purchase_order)) || ($form->{script} eq 'ir.pl');
+ 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$/;
+
+ if ($is_delivery_order) {
+ $readonly = ' readonly' if ($form->{closed});
+
+ if ($form->{type} eq 'sales_delivery_order') {
+ $stock_in_out_title = $locale->text('Release From Stock');
+ $stock_in_out = 'out';
+ } else {
+ $stock_in_out_title = $locale->text('Transfer To Stock');
+ $stock_in_out = 'in';
+ }
+ }
# column_index
my @header_sort = qw(runningnumber partnumber description ship qty unit sellprice_pg sellprice discount linetotal);
{ 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 => 'qty', width => 5, value => $locale->text('Qty'), display => 1, },
- { id => 'price_factor', width => 5, value => $locale->text('Price Factor'), 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, },
{ id => 'license', width => 10, value => $locale->text('License'), display => 0, },
{ id => 'serialnr', width => 10, value => $locale->text('Serial No.'), display => 0, },
{ id => 'projectnr', width => 10, value => $locale->text('Project'), display => 0, },
- { id => 'sellprice', width => 15, value => $locale->text('Price'), display => 1, },
- { id => 'sellprice_pg', width => 15, value => $locale->text('Pricegroup'), display => ($form->{type} =~ /^sales_/), },
- { id => 'discount', width => 5, value => $locale->text('Discount'), display => ($form->{vc} eq 'customer'), },
- { id => 'linetotal', width => 10, value => $locale->text('Extended'), display => 1, },
+ { id => 'sellprice', width => 15, value => $locale->text('Price'), display => !$is_delivery_order, },
+ { id => 'sellprice_pg', width => 15, value => $locale->text('Pricegroup'), display => ($form->{type} =~ /^sales_/) && !$is_delivery_order, },
+ { id => 'discount', width => 5, value => $locale->text('Discount'), display => ($form->{vc} eq 'customer') && !$is_delivery_order, },
+ { id => 'linetotal', width => 10, value => $locale->text('Extended'), display => !$is_delivery_order, },
{ id => 'bin', width => 10, value => $locale->text('Bin'), display => 0, },
+ { id => 'stock_in_out', width => 10, value => $stock_in_out_title, display => $is_delivery_order, },
);
my @column_index = map { $_->{id} } grep { $_->{display} } @HEADER;
$deliverydate = $locale->text('Required by');
# special alignings
- my %align = map { $_ => 'right' } qw(qty ship right sellprice_pg discount linetotal);
+ my %align = map { $_ => 'right' } qw(qty ship right sellprice_pg discount linetotal stock_in_out);
my %nowrap = map { $_ => 1 } qw(description unit);
$form->{marge_total} = 0;
$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{description} = ((($rows = $form->numtextrows($form->{"description_$i"}, 30, 6)) > 1) # if description is too large, use a textbox instead
- ? $cgi->textarea( -name => "description_$i", -default => H($form->{"description_$i"}), -rows => $rows, -columns => 30)
+ ? $cgi->textarea( -name => "description_$i", -default => $form->{"description_$i"}, -rows => $rows, -columns => 30)
: $cgi->textfield(-name => "description_$i", -size => 30, -value => $form->quote($form->{"description_$i"})))
. $cgi->button(-value => $locale->text('L'), -onClick => "set_longdescription_window('longdescription_$i')");
$column_data{linetotal} = $form->format_amount(\%myconfig, $linetotal, 2);
$column_data{bin} = $form->{"bin_$i"};
+ if ($is_delivery_order) {
+ $column_data{stock_in_out} = (!$form->{"assembly_$i"} && $form->{"inventory_accno_$i"}) ? calculate_stock_in_out($i) : ' ';
+ }
+
my @ROW1 = map { value => $column_data{$_}, align => $align{$_}, nowrap => $nowrap{$_} }, @column_index;
# second row
my @hidden_vars;
+ if ($is_delivery_order) {
+ map { $form->{"${_}_${i}"} = $form->format_amount(\%myconfig, $form->{"${_}_${i}"}) } qw(sellprice discount);
+ push @hidden_vars, qw(sellprice discount price_factor_id);
+ push @hidden_vars, "stock_${stock_in_out}_sum_qty", "stock_${stock_in_out}";
+ }
+
push @hidden_vars, qw(partunit) if ($is_purchase);
my @HIDDENS = map { value => $_}, (
sub set_pricegroup {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my $rowcount = shift;
for $j (1 .. $rowcount) {
sub select_item {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
@column_index = qw(ndx partnumber description onhand unit sellprice);
sub item_selected {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
# replace the last row with the checked row
$i = $form->{rowcount};
sub new_item {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
# change callback
$form->{old_callback} = $form->escape($form->{callback}, 1);
my $previousform = join '&', map { $form->{$_} =~ s/&/%26/; "$_=$form->{$_}" } grep { !/action/ } keys %$form;
push @HIDDENS, { 'name' => 'previousform', 'value' => $form->escape($previousform, 1) };
- push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{$_} }, qw(rowcount vc login password);
+ push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{$_} }, qw(rowcount vc);
push @HIDDENS, map +{ 'name' => $_, 'value' => $form->{"${_}_$form->{rowcount}"} }, qw(partnumber description unit sellprice);
push @HIDDENS, { 'name' => 'taxaccount2', 'value' => $form->{taxaccounts} };
- next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key}));
$form->header();
print $form->parse_html_template("generic/new_item", { HIDDENS => [ sort { $a->{name} cmp $b->{name} } @HIDDENS ] } );
sub check_form {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my @a = ();
my $count = 0;
not_discountable shop ve gv buchungsgruppen_id language_values
sellprice_pg pricegroup_old price_old price_new unit_old ordnumber
transdate longdescription basefactor marge_total marge_percent
- marge_price_factor lastcost price_factor_id);
+ marge_price_factor lastcost price_factor_id
+ stock_out stock_in);
# remove any makes or model rows
if ($form->{item} eq 'part') {
sub invoicetotal {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
$form->{oldinvtotal} = 0;
sub validate_items {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
# check if items are valid
if ($form->{rowcount} == 1) {
sub order {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
if ($form->{second_run}) {
$form->{print_and_post} = 0;
sub quotation {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
if ($form->{second_run}) {
$form->{print_and_post} = 0;
sub edit_e_mail {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
if ($form->{second_run}) {
$form->{print_and_post} = 0;
sub send_email {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my $callback = $form->{script} . "?action=edit";
map({ $callback .= "\&${_}=" . E($form->{$_}); } qw(type id));
sub print_options {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit | dunning_edit');
+ _check_io_auth();
my %options = @_;
($form->{type} eq 'sales_order') ? (
opthash("sales_order", $form->{PD}{sales_order}, $locale->text('Confirmation')),
opthash("proforma", $form->{PD}{proforma}, $locale->text('Proforma Invoice')),
- opthash("pick_list", $form->{PD}{pick_list}, $locale->text('Pick List')),
- opthash("packing_list", $form->{PD}{packing_list}, $locale->text('Packing List'))
) : undef,
- ($form->{type} =~ /_quotation$/) ?
- opthash("$`_quotation", $form->{PD}{"$`_quotation"}, $locale->text('Quotation')) : undef,
+ ($form->{type} =~ /sales_quotation$/) ?
+ opthash('sales_quotation', $form->{PD}{sales_quotation}, $locale->text('Quotation')) : undef,
+ ($form->{type} =~ /request_quotation$/) ?
+ opthash('request_quotation', $form->{PD}{request_quotation}, $locale->text('Request for Quotation')) : undef,
($form->{type} eq 'invoice') ? (
opthash("invoice", $form->{PD}{invoice}, $locale->text('Invoice')),
opthash("proforma", $form->{PD}{proforma}, $locale->text('Proforma Invoice')),
- opthash("packing_list", $form->{PD}{packing_list}, $locale->text('Packing List'))
) : undef,
($form->{type} eq 'invoice' && $form->{storno}) ? (
opthash("storno_invoice", $form->{PD}{storno_invoice}, $locale->text('Storno Invoice')),
opthash("storno_packing_list", $form->{PD}{storno_packing_list}, $locale->text('Storno Packing List'))
) : undef,
+ ($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;
($form->{type} eq 'credit_note') ?
opthash("credit_note", $form->{PD}{credit_note}, $locale->text('Credit Note')) : undef;
sub print {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit | ' .
- 'order_request_edit_all | order_request_edit');
+ _check_io_auth();
if ($form->{print_nextsub}) {
call_sub($form->{print_nextsub});
sub print_form {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my ($old_form) = @_;
# set invnumber for template packing_list
$form->{invnumber} = $form->{ordnumber};
}
- if ($form->{formname} eq 'pick_list') {
- $inv = "ord";
- $due = "req";
- $form->{"${inv}date"} = ($form->{transdate}) ? $form->{transdate} : $form->{invdate};
- $form->{label} = $locale->text('Pick List');
- $order = 1 unless $form->{type} eq 'invoice';
- }
if ($form->{formname} eq 'purchase_order') {
$inv = "ord";
$due = "req";
$order = 1;
}
+ if ($form->{type} =~ /_delivery_order$/) {
+ undef $due;
+ $inv = "do";
+ $form->{"${inv}date"} = $form->{transdate};
+ $numberfld = $form->{type} =~ /^sales/ ? 'sdonumber' : 'pdonumber';
+ $form->{label} = $form->{formname} eq 'pick_list' ? $locale->text('Pick List') : $locale->text('Delivery Order');
+ }
+
$form->isblank("email", $locale->text('E-mail address missing!'))
if ($form->{media} eq 'email');
$form->isblank("${inv}date",
($form->{employee}) = split /--/, $form->{employee};
# create the form variables
- if ($form->{formname} eq 'order_request') {
- order_request_details();
- } elsif ($form->{formname} eq 'return_material_slip') {
- rms_details();
- } elsif ($form->{formname} eq 'release_material_slip') {
- rlms_details();
- } elsif ($form->{type} =~ /_delivery_order$/) {
+ if ($form->{type} =~ /_delivery_order$/) {
DO->order_details();
} elsif ($order) {
OE->order_details(\%myconfig, \%$form);
grep({ /^qty_\d+$/
} keys(%{$form})));
+ my ($cvar_date_fields, $cvar_number_fields) = CVar->get_field_format_list('module' => 'CT', 'prefix' => 'vc_');
+
+ if (scalar @{ $cvar_date_fields }) {
+ format_dates($output_dateformat, $output_longdates, @{ $cvar_date_fields });
+ }
+
+ while (my ($precision, $field_list) = each %{ $cvar_number_fields }) {
+ reformat_numbers($output_numberformat, $precision, @{ $field_list });
+ }
+
$form->{IN} = "$form->{formname}$form->{language}${printer_code}.html";
if ($form->{format} eq 'postscript') {
$form->{postscript} = 1;
sub customer_details {
$lxdebug->enter_sub();
+
IS->customer_details(\%myconfig, \%$form, @_);
+
$lxdebug->leave_sub();
}
sub post_as_new {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
$form->{postasnew} = 1;
map { delete $form->{$_} } qw(printed emailed queued);
sub ship_to {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
if ($form->{second_run}) {
$form->{print_and_post} = 0;
sub new_license {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
my $row = shift;
sub relink_accounts {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
$form->{"taxaccounts"} =~ s/\s*$//;
$form->{"taxaccounts"} =~ s/^\s*//;
sub set_duedate {
$lxdebug->enter_sub();
- $auth->assert('part_service_assembly_edit | vendor_invoice_edit | sales_order_edit | invoice_edit |' .
- 'request_quotation_edit | sales_quotation_edit | purchase_order_edit');
+ _check_io_auth();
$form->get_duedate(\%myconfig);
- my $q = new CGI;
- $result = "$form->{duedate}";
- print $q->header();
- print $result;
- $lxdebug->leave_sub();
+ print $cgi->header() . $form->{duedate};
+ $lxdebug->leave_sub();
}