use SL::MoreCommon qw(ary_diff);
use SL::PE;
use SL::ReportGenerator;
+use List::MoreUtils qw(any none);
use List::Util qw(max reduce sum);
use Data::Dumper;
use strict;
-my $print_post;
-my %TMPL_VAR;
+our %TMPL_VAR;
1;
my ($language_id, $printer_id);
if ($form->{print_and_save}) {
- $form->{action} = "print";
+ $form->{action} = "dispatcher";
+ $form->{action_print} = "1";
$form->{resubmit} = 1;
$language_id = $form->{language_id};
$printer_id = $form->{printer_id};
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
# retrieve order/quotation
- $form->{webdav} = $main::webdav;
+ $form->{webdav} = $::lx_office_conf{features}->{webdav};
$form->{jsscript} = 1;
my $editing = $form->{id};
$form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"};
- $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes));
+ $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id currency));
$form->{shipto} = 1 if $form->{id};
# get customer / vendor
IR->get_vendor(\%myconfig, \%$form) if $form->{type} =~ /(purchase_order|request_quotation)/;
IS->get_customer(\%myconfig, \%$form) if $form->{type} =~ /sales_(order|quotation)/;
- $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id));
+ $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id shipto_id));
+ $form->restore_vars(qw(currency)) if $form->{id};
$form->restore_vars(qw(taxincluded)) if $form->{id};
$form->restore_vars(qw(salesman_id)) if $editing;
$form->{forex} = $form->{exchangerate};
$form->{employee} = "$form->{employee}--$form->{employee_id}";
# build vendor/customer drop down comatibility... don't ask
- if (@{ $form->{"all_$form->{vc}"} }) {
+ if (@{ $form->{"all_$form->{vc}"} || [] }) {
$form->{"select$form->{vc}"} = 1;
$form->{$form->{vc}} = qq|$form->{$form->{vc}}--$form->{"$form->{vc}_id"}|;
}
$form->{"reqdate_$i"} ||= $form->{"deliverydate_$i"};
$form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * ($format_discounts ? 100 : 1));
$form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"});
+ $form->{"lastcost_$i"} = $form->format_amount(\%myconfig, $form->{"lastcost_$i"});
$form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"});
}
my $form = $main::form;
my %myconfig = %main::myconfig;
my $locale = $main::locale;
- my $cgi = $main::cgi;
+ my $cgi = $::request->{cgi};
check_oe_access();
- # Container for template variables. Unfortunately this has to be visible in form_footer too, so not my.
- our %TMPL_VAR = ();
+ # Container for template variables. Unfortunately this has to be
+ # visible in form_footer too, so package local level and not my here.
+ %TMPL_VAR = ();
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
# openclosed checkboxes
my @tmp;
push @tmp, sprintf qq|<input name="delivered" id="delivered" type="checkbox" class="checkbox" value="1" %s><label for="delivered">%s</label>|,
- $form->{"delivered"} ? "checked" : "", $locale->text('Delivered') if $form->{"type"} =~ /_order$/;
+ $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order created') if $form->{"type"} =~ /_order$/;
push @tmp, sprintf qq|<input name="closed" id="closed" type="checkbox" class="checkbox" value="1" %s><label for="closed">%s</label>|,
$form->{"closed"} ? "checked" : "", $locale->text('Closed') if $form->{id};
$TMPL_VAR{openclosed} = sprintf qq|<tr><td colspan=%d align=center>%s</td></tr>\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp;
$form->{currency} = $form->{defaultcurrency} unless $form->{currency};
$TMPL_VAR{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency};
$TMPL_VAR{currencies} = NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"},
- '-values' => \@values, '-labels' => \%labels)) if scalar @values;
+ '-values' => \@values, '-labels' => \%labels,
+ '-onchange' => "document.getElementById('update_button').click();"
+ )) if scalar @values;
push @custom_hiddens, "forex";
push @custom_hiddens, "exchangerate" if $form->{forex};
}
}
- my $onload = ($form->{resubmit} && ($form->{format} eq "html")) ? "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';document.oe.submit()"
- : ($form->{resubmit}) ? "document.oe.submit()"
- : ($creditwarning) ? "alert('$credittext')"
- : "";
+ my $onload = "";
+ if ($form->{resubmit} && ($form->{format} eq "html")) {
+ $onload = "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';";
+ $onload .= "document.do.submit();";
+ } elsif ($form->{resubmit}) {
+ # emulate click for resubmitting actions
+ $onload = "document.oe.${_}.click(); " for grep { /^action_/ } keys %$form;
+ $onload .= "document.oe.submit();";
+ } elsif ($creditwarning) {
+ $onload = "alert('$credittext')";
+ }
- $onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
- $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
$TMPL_VAR{onload} = $onload;
+ $TMPL_VAR{dateformat} = $myconfig{dateformat};
+ $TMPL_VAR{numberformat} = $myconfig{numberformat};
+
+ if ($form->{type} eq 'sales_order') {
+ if (!$form->{periodic_invoices_config}) {
+ $form->{periodic_invoices_status} = $locale->text('not configured');
+
+ } else {
+ my $config = YAML::Load($form->{periodic_invoices_config});
+ $form->{periodic_invoices_status} = $config->{active} ? $locale->text('active') : $locale->text('inactive');
+ }
+ }
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_form_details.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_history.js"></script>|;
title creditlimit creditremaining tradediscount business
max_dunning_level dunning_amount shiptoname shiptostreet shiptozipcode
shiptocity shiptocountry shiptocontact shiptophone shiptofax
- shiptodepartment_1 shiptodepartment_2 shiptoemail
+ shiptodepartment_1 shiptodepartment_2 shiptoemail shiptocp_gender
message email subject cc bcc taxpart taxservice taxaccounts cursor_fokus),
@custom_hiddens,
map { $_.'_rate', $_.'_description' } split / /, $form->{taxaccounts} ]; # deleted: discount
my $introws = max 2, $form->numtextrows($form->{intnotes}, 35, 8);
$rows = max $rows, $introws;
- $TMPL_VAR{notes} = qq|<textarea name=notes rows=$rows cols=25 wrap=soft>| . H($form->{notes}) . qq|</textarea>|;
- $TMPL_VAR{intnotes} = qq|<textarea name=intnotes rows=$introws cols=35 wrap=soft>| . H($form->{intnotes}) . qq|</textarea>|;
+ $TMPL_VAR{notes} = qq|<textarea name=notes rows="$rows" cols="25">| . H($form->{notes}) . qq|</textarea>|;
+ $TMPL_VAR{intnotes} = qq|<textarea name=intnotes rows="$introws" cols="35">| . H($form->{intnotes}) . qq|</textarea>|;
if (!$form->{taxincluded}) {
$form->{"${item}_total"} = $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2);
$TMPL_VAR{tax} .= qq|
- <tr>
- <th align=right>$form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|%</th>
- <td align=right>$form->{"${item}_total"}</td>
- </tr> |;
+ <tr>
+ <th align=right>$form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|%</th>
+ <td align=right>$form->{"${item}_total"}</td>
+ </tr> |;
}
}
$form->{"${item}_netto"} = $form->format_amount(\%myconfig, $form->{"${item}_netto"}, 2);
$TMPL_VAR{tax} .= qq|
- <tr>
- <th align=right>Enthaltene $form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|%</th>
- <td align=right>$form->{"${item}_total"}</td>
- </tr>
- <tr>
- <th align=right>Nettobetrag</th>
- <td align=right>$form->{"${item}_netto"}</td>
- </tr> |;
+ <tr>
+ <th align=right>Enthaltene $form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|%</th>
+ <td align=right>$form->{"${item}_total"}</td>
+ </tr>
+ <tr>
+ <th align=right>Nettobetrag</th>
+ <td align=right>$form->{"${item}_netto"}</td>
+ </tr> |;
}
}
}
print $form->parse_html_template("oe/form_footer", {
%TMPL_VAR,
- webdav => $main::webdav,
+ webdav => $::lx_office_conf{features}->{webdav},
print_options => print_options(inline => 1),
label_edit => $locale->text("Edit the $form->{type}"),
label_workflow => $locale->text("Workflow $form->{type}"),
+ is_sales => scalar ($form->{type} =~ /^sales_/), # these vars are exported, so that the template
+ is_order => scalar ($form->{type} =~ /_order$/), # may determine what to show
+ is_sales_quo => scalar ($form->{type} =~ /sales_quotation$/),
+ is_req_quo => scalar ($form->{type} =~ /request_quotation$/),
+ is_sales_ord => scalar ($form->{type} =~ /sales_order$/),
+ is_pur_ord => scalar ($form->{type} =~ /purchase_order$/),
});
$main::lxdebug->leave_sub();
sub update {
$main::lxdebug->enter_sub();
- my ($recursive_call) = shift;
+ my ($recursive_call) = @_;
my $form = $main::form;
my %myconfig = %main::myconfig;
check_oe_access();
-# $main::lxdebug->message(0, Dumper($form));
-
set_headings($form->{"id"} ? "edit" : "add");
map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate) unless $recursive_call;
$form->{update} = 1;
- my $payment_id = $form->{payment_id} if $form->{payment_id};
-
&check_name($form->{vc});
- $form->{payment_id} = $payment_id if $form->{payment_id} eq "";
-
my $buysell = 'buy';
$buysell = 'sell' if ($form->{vc} eq 'vendor');
$form->{forex} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{transdate}, $buysell);
&check_form;
} else {
+ my $mode;
if ($form->{type} =~ /^sales/) {
IS->retrieve_item(\%myconfig, \%$form);
+ $mode = 'IS';
} else {
IR->retrieve_item(\%myconfig, \%$form);
+ $mode = 'IR';
}
my $rows = scalar @{ $form->{item_list} };
# hier ist das problem fuer bug 817 $form->{discount} wird nicht durchgeschliffen
- # ferner fallunterscheidung fuer verkauf oder einkauf s.a. bug 736 jb 04.05.2009
+ # ferner fallunterscheidung fuer verkauf oder einkauf s.a. bug 736 jb 04.05.2009
# select discount as vendor_discount from vendor ||
# select discount as customer_discount from customer
$form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"$form->{vc}_discount"} * 100);
+ $form->{"lastcost_$i"} = $form->parse_amount(\%myconfig, $form->{"lastcost_$i"});
+
if ($rows) {
- $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"});
+ $form->{"qty_$i"} = 1 unless ($form->parse_amount(\%myconfig, $form->{"qty_$i"}));
if ($rows > 1) {
- &select_item;
- exit;
+ select_item(mode => $mode);
+ ::end_of_request();
} else {
$form->{creditremaining} -= $amount;
$form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces);
+ $form->{"lastcost_$i"} = $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, $decimalplaces);
$form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
# get pricegroups for parts
$form->header();
- print $form->parse_html_template('oe/search', { %myconfig });
+ print $form->parse_html_template('oe/search', {
+ %myconfig,
+ is_order => scalar($form->{type} =~ /_order/),
+ });
$main::lxdebug->leave_sub();
}
my $form = $main::form;
my %myconfig = %main::myconfig;
my $locale = $main::locale;
- my $cgi = $main::cgi;
+ my $cgi = $::request->{cgi};
check_oe_access();
"salesman",
"shipvia", "globalprojectnumber",
"transaction_description", "open",
- "delivered", "marge_total", "marge_percent",
- "country", "ustid",
+ "delivered", "periodic_invoices",
+ "marge_total", "marge_percent",
+ "vcnumber", "ustid",
+ "country",
);
# only show checkboxes if gotten here via sales_order form.
unshift @columns, "ids";
}
- $form->{l_open} = $form->{l_closed} = "Y" if ($form->{open} && $form->{closed});
- $form->{l_delivered} = "Y" if ($form->{delivered} && $form->{notdelivered});
+ $form->{l_open} = $form->{l_closed} = "Y" if ($form->{open} && $form->{closed});
+ $form->{l_delivered} = "Y" if ($form->{delivered} && $form->{notdelivered});
+ $form->{l_periodic_invoices} = "Y" if ($form->{periodic_invoices_active} && $form->{periodic_invoices_inactive});
my $attachment_basename;
if ($form->{vc} eq 'vendor') {
my @hidden_variables = map { "l_${_}" } @columns;
push @hidden_variables, "l_subtotal", $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered ordnumber quonumber
transaction_description transdatefrom transdateto type vc employee_id salesman_id
- reqdatefrom reqdateto);
+ reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive);
my $href = build_std_url('action=orders', grep { $form->{$_} } @hidden_variables);
my %column_defs = (
'ids' => { 'text' => '', },
'transdate' => { 'text' => $locale->text('Date'), },
- 'reqdate' => { 'text' => $locale->text('Required by'), },
+ 'reqdate' => { 'text' => $form->{type} =~ /_order/ ? $locale->text('Required by') : $locale->text('Valid until') },
'id' => { 'text' => $locale->text('ID'), },
'ordnumber' => { 'text' => $locale->text('Order'), },
'quonumber' => { 'text' => $form->{type} eq "request_quotation" ? $locale->text('RFQ') : $locale->text('Quotation'), },
'globalprojectnumber' => { 'text' => $locale->text('Project Number'), },
'transaction_description' => { 'text' => $locale->text('Transaction description'), },
'open' => { 'text' => $locale->text('Open'), },
- 'delivered' => { 'text' => $locale->text('Delivered'), },
+ 'delivered' => { 'text' => $locale->text('Delivery Order created'), },
'marge_total' => { 'text' => $locale->text('Ertrag'), },
'marge_percent' => { 'text' => $locale->text('Ertrag prozentual'), },
+ 'vcnumber' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer Number') : $locale->text('Vendor Number'), },
'country' => { 'text' => $locale->text('Country'), },
'ustid' => { 'text' => $locale->text('USt-IdNr.'), },
+ 'periodic_invoices' => { 'text' => $locale->text('Per. Inv.'), },
);
foreach my $name (qw(id transdate reqdate quonumber ordnumber name employee salesman shipvia transaction_description)) {
};
push @options, $locale->text('Open') if $form->{open};
push @options, $locale->text('Closed') if $form->{closed};
- push @options, $locale->text('Delivered') if $form->{delivered};
+ push @options, $locale->text('Delivery Order created') if $form->{delivered};
push @options, $locale->text('Not delivered') if $form->{notdelivered};
+ push @options, $locale->text('Periodic invoices active') if $form->{periodic_invoices_actibe};
$report->set_options('top_info_text' => join("\n", @options),
'raw_top_info_text' => $form->parse_html_template('oe/orders_top'),
'attachment_basename' => $attachment_basename . strftime('_%Y%m%d', localtime time),
);
$report->set_options_from_form();
+ $locale->set_numberformat_wo_thousands_separator(\%myconfig) if lc($report->{options}->{output_format}) eq 'csv';
# add sort and escape callback, this one we use for the add sub
$form->{callback} = $href .= "&sort=$form->{sort}";
foreach my $oe (@{ $form->{OE} }) {
map { $oe->{$_} *= $oe->{exchangerate} } @subtotal_columns;
- $oe->{tax} = $oe->{amount} - $oe->{netamount};
- $oe->{open} = $oe->{closed} ? $locale->text('No') : $locale->text('Yes');
- $oe->{delivered} = $oe->{delivered} ? $locale->text('Yes') : $locale->text('No');
+ $oe->{tax} = $oe->{amount} - $oe->{netamount};
+ $oe->{open} = $oe->{closed} ? $locale->text('No') : $locale->text('Yes');
+ $oe->{delivered} = $oe->{delivered} ? $locale->text('Yes') : $locale->text('No');
+ $oe->{periodic_invoices} = $oe->{periodic_invoices} ? $locale->text('On') : $locale->text('Off');
map { $subtotals{$_} += $oe->{$_};
$totals{$_} += $oe->{$_} } @subtotal_columns;
$form->{payment_id} = $payment_id;
}
&update;
- exit;
+ ::end_of_request();
}
$form->{id} = 0 if $form->{saveasnew};
# saving the history
if(!exists $form->{addition}) {
$form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
- $form->{addition} = "SAVED";
- $form->save_history($form->dbconnect(\%myconfig));
+ $form->{addition} = "SAVED";
+ $form->save_history;
}
# /saving the history
$form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
if ($form->{currency} ne $form->{defaultcurrency});
+ remove_emptied_rows();
&validate_items;
my $payment_id;
$form->{payment_id} = $payment_id;
}
&update;
- exit;
+ ::end_of_request();
}
$form->{id} = 0 if $form->{saveasnew};
# saving the history
if(!exists $form->{addition}) {
$form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
- $form->{addition} = "SAVED";
- $form->save_history($form->dbconnect(\%myconfig));
+ $form->{addition} = "SAVED";
+ $form->save_history;
}
# /saving the history
if(!$form->{print_and_save}) {
delete @{$form}{ary_diff([keys %{ $form }], [qw(login stylesheet id script type cursor_fokus)])};
edit();
- exit;
+ ::end_of_request();
}
$main::lxdebug->leave_sub();
}
sub delete {
- $main::lxdebug->enter_sub();
-
- my $form = $main::form;
- my $locale = $main::locale;
+ $::lxdebug->enter_sub;
check_oe_access();
- $form->header;
-
- my ($msg, $ordnumber);
- if ($form->{type} =~ /_order$/) {
- $msg = $locale->text('Are you sure you want to delete Order Number');
- $ordnumber = 'ordnumber';
- } else {
- $msg = $locale->text('Are you sure you want to delete Quotation Number');
- $ordnumber = 'quonumber';
- }
-
- print qq|
-<body>
-
-<form method=post action=$form->{script}>
-|;
+ $::form->header;
# delete action variable
- map { delete $form->{$_} } qw(action header);
+ delete $::form->{$_} for qw(action header);
- foreach my $key (keys %$form) {
- next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key}));
- $form->{$key} =~ s/\"/"/g;
- print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
+ my @hiddens;
+ for my $key (keys %$::form) {
+ next if $key eq 'login' || $key eq 'password' || '' ne ref $::form->{$key};
+ push @hiddens, { key => $key, value => $::form->{$key} };
}
- print qq|
-<h2 class=confirm>| . $locale->text('Confirm!') . qq|</h2>
-
-<h4>$msg $form->{$ordnumber}</h4>
-<p>
-<input type="hidden" name="yes_nextsub" value="delete_order_quotation">
-<input name=action class=submit type=submit value="|
- . $locale->text('Yes') . qq|">
-<button class=submit type=button onclick="history.back()">|
- . $locale->text('No') . qq|</button>
-</form>
+ print $::form->parse_html_template('oe/delete', {
+ hiddens => \@hiddens,
+ is_order => scalar($::form->{type} =~ /_order$/),
+ });
-</body>
-</html>
-|;
- $main::lxdebug->leave_sub();
+ $::lxdebug->leave_sub;
}
sub delete_order_quotation {
$msg = $locale->text('Quotation deleted!');
$err = $locale->text('Cannot delete quotation!');
}
- if (OE->delete(\%myconfig, \%$form, $main::spool)){
+ if (OE->delete(\%myconfig, \%$form)){
# saving the history
if(!exists $form->{addition}) {
$form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
- $form->{addition} = "DELETED";
- $form->save_history($form->dbconnect(\%myconfig));
+ $form->{addition} = "DELETED";
+ $form->save_history;
}
# /saving the history
$form->info($msg);
- exit();
+ ::end_of_request();
}
$form->error($err);
$form->{quodate} = $form->{transdate};
}
- my $payment_id = $form->{payment_id} if $form->{payment_id};
+ my $payment_id;
+ if ($form->{payment_id}) {
+ $payment_id = $form->{payment_id};
+ }
# if the name changed get new values
if (&check_name($form->{vc})) {
$form->{payment_id} = $payment_id if $form->{payment_id} eq "";
&update;
- exit;
+ ::end_of_request();
}
$form->{cp_id} *= 1;
if (!$exchangerate) {
&backorder_exchangerate($orddate, $buysell);
- exit;
+ ::end_of_request();
}
}
$form->{type} = "invoice";
# locale messages
- $locale = new Locale "$myconfig{countrycode}", "$script";
+ $main::locale = new Locale "$myconfig{countrycode}", "$script";
+ $locale = $main::locale;
require "bin/mozilla/$form->{script}";
$dec_qty = length $dec_qty;
$form->{"qty_$i"} =
$form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
-
- map { $form->{"${_}_$i"} =~ s/\"/"/g }
- qw(partnumber description unit);
-
}
+ # show pricegroup in newly loaded invoice when creating invoice from quotation/order
+ IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+ set_pricegroup($_) for 1 .. $form->{rowcount};
+
&display_form;
$main::lxdebug->leave_sub();
<td>
<table>
<tr>
- <th align=right>| . $locale->text('Currency') . qq|</th>
- <td>$form->{currency}</td>
- </tr>
- <tr>
- <th align=right>| . $locale->text('Date') . qq|</th>
- <td>$orddate</td>
- </tr>
+ <th align=right>| . $locale->text('Currency') . qq|</th>
+ <td>$form->{currency}</td>
+ </tr>
+ <tr>
+ <th align=right>| . $locale->text('Date') . qq|</th>
+ <td>$orddate</td>
+ </tr>
<tr>
- <th align=right>| . $locale->text('Exchangerate') . qq|</th>
- <td><input name=exchangerate size=11></td>
+ <th align=right>| . $locale->text('Exchangerate') . qq|</th>
+ <td><input name=exchangerate size=11></td>
</tr>
</table>
</td>
$main::lxdebug->leave_sub();
- exit 0;
+ ::end_of_request();
}
sub purchase_order {
check_oe_access();
$main::auth->assert('purchase_order_edit');
+ $form->{sales_order_to_purchase_order} = 0;
if ($form->{type} eq 'sales_order') {
+ $form->{sales_order_to_purchase_order} = 1;
check_for_direct_delivery();
}
&poso;
+ delete $form->{sales_order_to_purchase_order};
+
$main::lxdebug->leave_sub();
}
$form->{old_salesman_id} = $form->{salesman_id};
# reset
- map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal delivered
- ordnumber);
+ map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal delivered ordnumber);
+
+ # if purchase_order was generated from sales_order, use lastcost_$i as sellprice_$i
+ # also reset discounts
+ if ( $form->{sales_order_to_purchase_order} ) {
+ for my $i (1 .. $form->{rowcount}) {
+ $form->{"sellprice_${i}"} = $form->format_amount(\%myconfig,$form->{"lastcost_${i}"});
+ $form->{"discount_${i}"} = 0;
+ };
+ };
for my $i (1 .. $form->{rowcount}) {
map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
map { $form->{$_} = $saved_vars{$_} } keys %saved_vars;
- &prepare_order;
-
# prepare_order assumes that the discount is in db-notation (0.05) and not user-notation (5)
- # and therefore multiplies the values by 100 in the case of reading from db or making an order from several quotation, so we convert this back into percent-notation for the user interface by multiplying with 0.01
+ # and therefore multiplies the values by 100 in the case of reading from db or making an order
+ # from several quotation, so we convert this back into percent-notation for the user interface by multiplying with 0.01
+ # ergänzung 03.10.2010 muss vor prepare_order passieren (s.a. Svens Kommentar zu Bug 1017)
+ # das parse_amount wird oben schon ausgeführt, deswegen an dieser stelle raus (wichtig: kommawerte bei discount testen)
for my $i (1 .. $form->{rowcount}) {
- $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 0.01);
+ $form->{"discount_$i"} /=100;
};
- # format amounts
- for my $i (1 .. $form->{rowcount} - 1) {
- map { $form->{"${_}_$i"} =~ s/\"/"/g } qw(partnumber description unit);
- }
-
+ &prepare_order;
&update;
$main::lxdebug->leave_sub();
delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)};
for my $i (1 .. $form->{rowcount}) {
- map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
+ map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice lastcost basefactor discount);
}
- my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor);
+ my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor shipto_id);
order_links();
map { $form->{$_} = $old_values{$_} if ($old_values{$_}) } keys %old_values;
+ for my $i (1 .. $form->{rowcount}) {
+ (my $dummy, $form->{"pricegroup_id_$i"}) = split /--/, $form->{"sellprice_pg_$i"};
+ }
update();
$main::lxdebug->leave_sub();
$form->{print_and_save} = 1;
- $print_post = 1;
-
my $saved_form = save_form();
save();
}
$form->{"taxaccounts"} = "";
- for my $i (1 .. $form->{"rowcount"}) {
- IC->retrieve_accounts(\%myconfig, $form, $form->{"id_$i"}, $i, 1) if $form->{"id_$i"};
- }
+ IC->retrieve_accounts(\%myconfig, $form, map { $_ => $form->{"id_$_"} } 1 .. $form->{rowcount});
$form->{rowcount}++;
$form->{"project_id_$form->{rowcount}"} = $form->{globalproject_id};
$form->language_payment(\%myconfig);
- Common::webdav_folder($form) if ($main::webdav);
+ Common::webdav_folder($form);
&form_header;
return $content;
}
+sub edit_periodic_invoices_config {
+ $::lxdebug->enter_sub();
+
+ $::form->{type} = 'sales_order';
+
+ check_oe_access();
+
+ my $config;
+ $config = YAML::Load($::form->{periodic_invoices_config}) if $::form->{periodic_invoices_config};
+
+ if ('HASH' ne ref $config) {
+ $config = { periodicity => 'y',
+ start_date_as_date => $::form->{transdate},
+ extend_automatically_by => 12,
+ active => 1,
+ };
+ }
+
+ $config->{periodicity} = 'm' if none { $_ eq $config->{periodicity} } qw(m q y);
+
+ $::form->get_lists(printers => "ALL_PRINTERS",
+ charts => { key => 'ALL_CHARTS',
+ transdate => 'current_date' });
+
+ $::form->{AR} = [ grep { $_->{link} =~ m/(?:^|:)AR(?::|$)/ } @{ $::form->{ALL_CHARTS} } ];
+ $::form->{title} = $::locale->text('Edit the configuration for periodic invoices');
+
+ $::form->header();
+ print $::form->parse_html_template('oe/edit_periodic_invoices_config', $config);
+
+ $::lxdebug->leave_sub();
+}
+
+sub save_periodic_invoices_config {
+ $::lxdebug->enter_sub();
+
+ $::form->{type} = 'sales_order';
+
+ check_oe_access();
+
+ $::form->isblank('start_date_as_date', $::locale->text('The start date is missing.'));
+
+ my $config = { active => $::form->{active} ? 1 : 0,
+ terminated => $::form->{terminated} ? 1 : 0,
+ periodicity => (any { $_ eq $::form->{periodicity} } qw(m q y)) ? $::form->{periodicity} : 'm',
+ start_date_as_date => $::form->{start_date_as_date},
+ end_date_as_date => $::form->{end_date_as_date},
+ print => $::form->{print} ? 1 : 0,
+ printer_id => $::form->{print} ? $::form->{printer_id} * 1 : undef,
+ copies => $::form->{copies} * 1 ? $::form->{copies} : 1,
+ extend_automatically_by => $::form->{extend_automatically_by} * 1 || undef,
+ ar_chart_id => $::form->{ar_chart_id} * 1,
+ };
+
+ $::form->{periodic_invoices_config} = YAML::Dump($config);
+
+ $::form->{title} = $::locale->text('Edit the configuration for periodic invoices');
+ $::form->header;
+ print $::form->parse_html_template('oe/save_periodic_invoices_config', $config);
+
+ $::lxdebug->leave_sub();
+}
+
+sub dispatcher {
+ foreach my $action (qw(delete delivery_order e_mail invoice print purchase_order purchase_order quotation
+ request_for_quotation sales_order sales_order save save_and_close save_as_new ship_to update)) {
+ if ($::form->{"action_${action}"}) {
+ call_sub($action);
+ return;
+ }
+ }
+
+ $::form->error($::locale->text('No action defined.'));
+}