use SL::OE;
use SL::IR;
use SL::IS;
+use SL::MoreCommon qw(ary_diff);
use SL::PE;
use SL::ReportGenerator;
use List::Util qw(max reduce sum);
}
$form->{"old$form->{vc}"} = $form->{$form->{vc}};
- $form->{"old$form->{vc}"} .= qq|--$form->{"$form->{vc}_id"}| unless ($form->{"old$form->{vc}"} =~ m/--\d+$/);
+
+ if ($form->{"old$form->{vc}"} !~ m/--\d+$/ && $form->{"$form->{vc}_id"}) {
+ $form->{"old$form->{vc}"} .= qq|--$form->{"$form->{vc}_id"}|
+ }
$lxdebug->leave_sub();
}
$credittext = $locale->text('Credit Limit exceeded!!!');
my $follow_up_vc = $form->{ $form->{vc} eq 'customer' ? 'customer' : 'vendor' };
- $follow_up_vc =~ s/--.*?//;
+ $follow_up_vc =~ s/--\d*\s*$//;
$TMPL_VAR{follow_up_trans_info} = ($form->{type} =~ /_quotation$/ ? $form->{quonumber} : $form->{ordnumber}) . " ($follow_up_vc)";
if ($form->{id}) {
$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')"
- : "focus()";
+ : "";
$onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
$onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
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
- # select discount as vendor_discount from vendor ||
+ # 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);
} else {
$sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"});
- $form->{"discount_$i"} = 0 if $form->{"not_discountable_$i"};
+ # hier werden parts (Artikeleigenschaften) aus item_list (retrieve_item aus IS.pm)
+ # (item wahrscheinlich synonym für parts) entsprechend in die form geschrieben ...
+
+ # Wäre dieses Mapping nicht besser in retrieve_items aufgehoben?
+ #(Eine Funktion bekommt Daten -> ARBEIT -> Rückgabe DATEN)
+ # Das quot sieht doch auch nach Überarbeitung aus ... (hmm retrieve_items gibt es in IS und IR)
map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } qw(partnumber description unit);
map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } keys %{ $form->{item_list}[0] };
+
+ # ... deswegen muss die prüfung, ob es sich um einen nicht rabattierfähigen artikel handelt später erfolgen (Bug 1136)
+ $form->{"discount_$i"} = 0 if $form->{"not_discountable_$i"};
$form->{payment_id} = $form->{"part_payment_id_$i"} if $form->{"part_payment_id_$i"} ne "";
$form->{"marge_price_factor_$i"} = $form->{item_list}->[0]->{price_factor};
check_oe_access();
if ($form->{type} eq 'purchase_order') {
- $form->{title} = $locale->text('Purchase Orders');
- $form->{vc} = 'vendor';
- $ordlabel = $locale->text('Order Number');
- $ordnumber = 'ordnumber';
- $employee = $locale->text('Employee');
- }
-
- if ($form->{type} eq 'request_quotation') {
- $form->{title} = $locale->text('Request for Quotations');
- $form->{vc} = 'vendor';
- $ordlabel = $locale->text('RFQ Number');
- $ordnumber = 'quonumber';
- $employee = $locale->text('Employee');
- }
-
- if ($form->{type} eq 'sales_order') {
- $form->{title} = $locale->text('Sales Orders');
- $form->{vc} = 'customer';
- $ordlabel = $locale->text('Order Number');
- $ordnumber = 'ordnumber';
- $employee = $locale->text('Employee');
- }
-
- if ($form->{type} eq 'sales_quotation') {
- $form->{title} = $locale->text('Quotations');
- $form->{vc} = 'customer';
- $ordlabel = $locale->text('Quotation Number');
- $ordnumber = 'quonumber';
- $employee = $locale->text('Employee');
- }
-
- # setup vendor / customer selection
- $form->all_vc(\%myconfig, $form->{vc},
- ($form->{vc} eq 'customer') ? "AR" : "AP");
-
- # departments
- if (@{ $form->{all_departments} }) {
- $form->{selectdepartment} = "<option>\n";
-
- map {
- $form->{selectdepartment} .=
- "<option>$_->{description}--$_->{id}</option>\n"
- } (@{ $form->{all_departments} });
- }
-
- $department = qq|
- <tr>
- <th align=right nowrap>| . $locale->text('Department') . qq|</th>
- <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
- </tr>
-| if $form->{selectdepartment};
+ $form->{vc} = 'vendor';
+ $form->{ordnrname} = 'ordnumber';
+ $form->{title} = $locale->text('Purchase Orders');
+ $form->{ordlabel} = $locale->text('Order Number');
+
+ } elsif ($form->{type} eq 'request_quotation') {
+ $form->{vc} = 'vendor';
+ $form->{ordnrname} = 'quonumber';
+ $form->{title} = $locale->text('Request for Quotations');
+ $form->{ordlabel} = $locale->text('RFQ Number');
+
+ } elsif ($form->{type} eq 'sales_order') {
+ $form->{vc} = 'customer';
+ $form->{ordnrname} = 'ordnumber';
+ $form->{title} = $locale->text('Sales Orders');
+ $form->{ordlabel} = $locale->text('Order Number');
+
+ } elsif ($form->{type} eq 'sales_quotation') {
+ $form->{vc} = 'customer';
+ $form->{ordnrname} = 'quonumber';
+ $form->{title} = $locale->text('Quotations');
+ $form->{ordlabel} = $locale->text('Quotation Number');
- my $delivered;
- if (($form->{"type"} eq "sales_order") ||
- ($form->{"type"} eq "purchase_order")) {
- $delivered = qq|
- <tr>
- <td><input name="notdelivered" id="notdelivered" class="checkbox" type="checkbox" value="1" checked>
- <label for="notdelivered">|. $locale->text('Not delivered') . qq|</label></td>
- <td><input name="delivered" id="delivered" class="checkbox" type="checkbox" value="1" checked>
- <label for="delivered">| . $locale->text('Delivered') . qq|</label></td>
- </tr>
-|;
+ } else {
+ $form->show_generic_error($locale->text('oe.pl::search called with unknown type'), back_button => 1);
}
- # use JavaScript Calendar or not
- $form->{jsscript} = 1;
- $jsscript = "";
-
- $button1 = qq|
- <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=transdatefrom id="trigger3" value=|
- . $locale->text('button') . qq|></td>
- |;
- $button2 = qq|
- <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=transdateto name=transdateto id="trigger4" value=|
- . $locale->text('button') . qq|></td>
- |;
- $button3 = qq|
- <td><input name=reqdatefrom id=reqdatefrom size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=reqdatefrom id="trigger5" value=|
- . $locale->text('button') . qq|></td>
- |;
- $button4 = qq|
- <td><input name=reqdateto id=reqdateto size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=reqdateto name=reqdateto id="trigger6" value=|
- . $locale->text('button') . qq|></td>
- |;
-
- #write Trigger
- $jsscript =
- Form->write_trigger(\%myconfig, "4", "transdatefrom", "BR", "trigger3",
- "transdateto", "BL", "trigger4",
- "reqdatefrom", "BR", "trigger5", "reqdateto", "BL", "trigger6");
-
- my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
-
- $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
- "all" => 1 },
- "employees" => "ALL_EMPLOYEES",
- "salesmen" => "ALL_SALESMEN",
- $vc => "ALL_" . uc($vc)
- );
-
- my %labels = ();
- my @values = ("");
- foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
- push(@values, $item->{"id"});
- $labels{$item->{"id"}} = $item->{"projectnumber"};
- }
- my $projectnumber =
- NTI($cgi->popup_menu('-name' => 'project_id', '-values' => \@values,
- '-labels' => \%labels));
-
- #employees
- %labels = ();
- @values = ("");
- foreach my $item (@{ $form->{"ALL_EMPLOYEES"} }) {
- push(@values, $item->{"id"});
- $labels{$item->{"id"}} = $item->{"name"} ne "" ? $item->{"name"} : $item->{"login"};
- }
-
- #salesmen
- my %labels_salesmen = ();
- my @values_salesmen = ('');
- foreach my $item (@{ $form->{"ALL_SALESMEN"} }) {
- push(@values_salesmen, $item->{"id"});
- $labels_salesmen{$item->{"id"}} = $item->{"name"} ne "" ? $item->{"name"} : $item->{"login"};
- }
-
- my $employee_block = qq|
- <tr>
- <th align="right">| . $locale->text('Employee') . qq|</th>
- <td>| . NTI($cgi->popup_menu('-name' => 'employee_id', '-values' => \@values, '-labels' => \%labels)) . qq|</td>
- </tr>
- <tr>
- <th align="right">| . $locale->text('Salesman') . qq|</th>
- <td>| .
- NTI($cgi->popup_menu('-name' => 'salesman_id',
- '-values' => \@values_salesmen,
- '-labels' => \%labels_salesmen)) . qq|
- </td>
- </tr>|;
-
- %labels = ();
- @values = ("");
-
- foreach my $item (@{ $form->{($form->{vc} eq "customer" ? "ALL_CUSTOMERS" : "ALL_VENDORS")}}) {
- push(@values, $item->{name}.qq|--|.$item->{"id"});
- $labels{$item->{name}.qq|--|.$item->{"id"}} = $item->{"name"};
- }
-
- my $vc_label = $form->{vc} eq "customer" ? $locale->text('Customer') : $locale->text('Vendor');
- $vc =
- $myconfig{vclimit} <= scalar(@values)
- ? qq|<input type="text" value="| . H(($form->{"old$form->{vc}"} =~ /^(.*)\-\-.*$/)) . qq|" name="$form->{vc}">|
- : NTI($cgi->popup_menu('-name' => "$form->{vc}",
- '-default' => $form->{"old$form->{vc}"},
- '-onChange' => 'document.getElementById(\'update_button\').click();',
- '-values' => \@values,
- '-labels' => \%labels));
- $form->header;
-
- print qq|
-<body>
-
-<form method=post action=$form->{script}>
-
-<table width=100%>
- <tr>
- <th class=listtop>$form->{title}</th>
- </tr>
- <tr height="5"></tr>
- <tr>
- <td>
- <table>
- <tr>
- <th align=right>$vc_label</th>
- <td colspan=3>$vc</td>
- </tr>
-$department
- <tr>
- <th align=right>$ordlabel</th>
- <td colspan=3><input name="$ordnumber" size=20></td>
- </tr>
-$employee_block
- <tr>
- <th align="right">| . $locale->text('Transaction description') . qq|</th>
- <td colspan="3"><input name="transaction_description" size=20></td>
- </tr>
- <tr>
- <th align="right">| . $locale->text("Project Number") . qq|</th>
- <td colspan="3">$projectnumber</td>
- </tr>
- <tr>
- <th align=right>| . $locale->text('Order Date') . " " . $locale->text('From') . qq|</th> $button1
- <th align=right>| . $locale->text('Bis') . qq|</th> $button2
- </tr>
- <input type=hidden name=sort value=transdate>
- <tr>
- <th align=right>| . $locale->text('Delivery Date') . " " . $locale->text('From') . qq|</th> $button3
- <th align=right>| . $locale->text('Bis') . qq|</th> $button4
- </tr>
- <input type=hidden name=sort value=reqdate>
- <tr>
- <th align=right>| . $locale->text('Include in Report') . qq|</th>
- <td colspan=5>
- <table>
- <tr>
- <td><input type="checkbox" name="open" value="1" id="open" checked> <label for="open">| . $locale->text("Open") . qq|</td>
- <td><input type="checkbox" name="closed" value="1" id="closed"> <label for="closed">| . $locale->text("Closed") . qq|</td>
- </tr>
- $delivered
- <tr>
- <td><input name="l_id" class=checkbox type=checkbox value=Y> | . $locale->text('ID') . qq|</td>
- <td><input name="l_$ordnumber" class=checkbox type=checkbox value=Y checked> $ordlabel</td>
- </tr>
- <tr>
- <td><input name="l_transdate" class=checkbox type=checkbox value=Y checked> | . $locale->text('Date') . qq|</td>
- <td><input name="l_reqdate" class=checkbox type=checkbox value=Y checked> | . $locale->text('Required by') . qq|</td>
- </tr>
- <tr>
- <td><input name="l_name" class=checkbox type=checkbox value=Y checked> $vc_label</td>
- <td><input name="l_employee" class=checkbox type=checkbox value=Y checked> $employee</td>
-
- <td><input name="l_shipvia" class=checkbox type=checkbox value=Y> | . $locale->text('Ship via') . qq|</td>
- </tr>
- <tr>
- <td><input name="l_netamount" class=checkbox type=checkbox value=Y> | . $locale->text('Amount') . qq|</td>
- <td><input name="l_tax" class=checkbox type=checkbox value=Y> | . $locale->text('Tax') . qq|</td>
- <td><input name="l_amount" class=checkbox type=checkbox value=Y checked> | . $locale->text('Total') . qq|</td>
- </tr>
- <tr>
- <td><input name="l_marge_total" class=checkbox type=checkbox value=Y> | . $locale->text('Ertrag') . qq|</td>
- <td><input name="l_marge_percent" class=checkbox type=checkbox value=Y> | . $locale->text('Ertrag prozentual') . qq|</td>
- </tr>
- <tr>
- <td><input name="l_globalprojectnumber" class=checkbox type=checkbox value=Y> | . $locale->text('Project Number') . qq|</td>
- <td><input name="l_transaction_description" class=checkbox type=checkbox value=Y> | . $locale->text('Transaction description') . qq|</td>
- </tr>
- <tr>
- <td><input name="l_subtotal" class=checkbox type=checkbox value=Y> | . $locale->text('Subtotal') . qq|</td>
- <td><input name="l_salesman" class="checkbox" type="checkbox" value="Y"> | . $locale->text('Salesman') . qq|</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr><td colspan=4><hr size=3 noshade></td></tr>
-</table>
-
-$jsscript
+ # setup vendor / customer data
+ $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
+ $form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 1 },
+ "employees" => "ALL_EMPLOYEES",
+ "salesmen" => "ALL_SALESMEN",
+ "departments" => "ALL_DEPARTMENTS",
+ "$form->{vc}s" => "ALL_VC");
+
+ # constants and subs for template
+ $form->{jsscript} = 1;
+ $form->{employee_labels} = sub { $_[0]->{"name"} || $_[0]->{"login"} };
+ $form->{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" };
+ $form->{salesman_labels} = $form->{employee_labels};
-<br>
-<input type=hidden name=nextsub value=orders>
-<input type=hidden name=vc value=$form->{vc}>
-<input type=hidden name=type value=$form->{type}>
+ $form->header();
-<input class=submit type=submit name=action value="|
- . $locale->text('Continue') . qq|">
-</form>
-
-</body>
-</html>
-|;
+ print $form->parse_html_template('oe/search', { %myconfig });
$lxdebug->leave_sub();
}
$ordnumber = ($form->{type} =~ /_order$/) ? "ordnumber" : "quonumber";
- ($form->{ $form->{vc} }, $form->{"${form->{vc}}_id"}) = split(/--/, $form->{ $form->{vc} });
+ ($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} });
report_generator_set_default_sort('transdate', 1);
"salesman",
"shipvia", "globalprojectnumber",
"transaction_description", "open",
- "delivered", "marge_total", "marge_percent"
+ "delivered", "marge_total", "marge_percent",
+ "country", "ustid",
);
# only show checkboxes if gotten here via sales_order form.
'open' => { 'text' => $locale->text('Open'), },
'delivered' => { 'text' => $locale->text('Delivered'), },
'marge_total' => { 'text' => $locale->text('Ertrag'), },
- 'marge_percent' => { 'text' => $locale->text('Ertrag prozentual'), }
+ 'marge_percent' => { 'text' => $locale->text('Ertrag prozentual'), },
+ 'country' => { 'text' => $locale->text('Country'), },
+ 'ustid' => { 'text' => $locale->text('USt-IdNr.'), },
);
foreach my $name (qw(id transdate reqdate quonumber ordnumber name employee salesman shipvia transaction_description)) {
$form->{simple_save} = 1;
if(!$form->{print_and_save}) {
- set_headings("edit");
- &update;
+ delete @{$form}{ary_diff([keys %{ $form }], [qw(login stylesheet id script type cursor_fokus)])};
+ edit();
exit;
}
$lxdebug->leave_sub();
check_oe_access();
$auth->assert($form->{type} eq 'purchase_order' || $form->{type} eq 'request_quotation' ? 'vendor_invoice_edit' : 'invoice_edit');
- $form->{old_employee_id} = $form->{employee_id};
$form->{old_salesman_id} = $form->{salesman_id};
+ $form->get_employee();
+
if ($form->{type} =~ /_order$/) {
require "bin/mozilla/$form->{script}";
- map { $form->{"select$_"} = "" } ($form->{vc}, currency);
+ map { $form->{"select$_"} = "" } ($form->{vc}, "currency");
$currency = $form->{currency};
&invoice_links;
check_oe_access();
$form->{saveasnew} = 1;
- $form->{closed} = 0;
- map { delete $form->{$_} } qw(printed emailed queued);
+ map { delete $form->{$_} } qw(printed emailed queued delivered closed);
# Let Lx-Office assign a new order number if the user hasn't changed the
# previous one. If it has been changed manually then use it as-is.
delete($form->{$idx});
}
+ # clear reqdate unless changed
+ if ($form->{reqdate} && $form->{id}) {
+ my $saved_order = OE->retrieve_simple(id => $form->{id});
+ if ($saved_order && $saved_order->{reqdate} eq $form->{reqdate}) {
+ delete $form->{reqdate};
+ }
+ }
+
+ # update employee
+ $form->get_employee();
+
&save;
$lxdebug->leave_sub();
$form->{vc} = "vendor";
$form->{type} = "purchase_order";
+ $form->get_employee();
+
&poso;
$lxdebug->leave_sub();
$form->{vc} = "customer";
$form->{type} = "sales_order";
+ $form->get_employee();
+
&poso;
$lxdebug->leave_sub();
ordnumber);
for $i (1 .. $form->{rowcount}) {
- map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor);
+ map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
}
my %saved_vars = map { $_ => $form->{$_} } grep { $form->{$_} } qw(currency);
&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
+ for $i (1 .. $form->{rowcount}) {
+ $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 0.01);
+ };
+
# format amounts
for $i (1 .. $form->{rowcount} - 1) {
map { $form->{"${_}_$i"} =~ s/\"/"/g } qw(partnumber description unit);
$form->{type} = 'purchase_delivery_order';
}
+ $form->get_employee();
+
require "bin/mozilla/do.pl";
+ $form->{script} = 'do.pl';
$form->{cp_id} *= 1;
$form->{convert_from_oe_ids} = $form->{id};
$form->{transdate} = $form->current_date(\%myconfig);
delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)};
for $i (1 .. $form->{rowcount}) {
- map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor);
+ map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice basefactor discount);
}
my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor);