1 # #=====================================================================
 
   4 # Based on SQL-Ledger Version 2.1.9
 
   5 # Web http://www.lx-office.org
 
   7 #=====================================================================
 
   8 # SQL-Ledger, Accounting
 
   9 # Copyright (c) 1998-2003
 
  11 #  Author: Dieter Simader
 
  12 #   Email: dsimader@sql-ledger.org
 
  13 #     Web: http://www.sql-ledger.org
 
  16 # This program is free software; you can redistribute it and/or modify
 
  17 # it under the terms of the GNU General Public License as published by
 
  18 # the Free Software Foundation; either version 2 of the License, or
 
  19 # (at your option) any later version.
 
  21 # This program is distributed in the hope that it will be useful,
 
  22 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  24 # GNU General Public License for more details.
 
  25 # You should have received a copy of the GNU General Public License
 
  26 # along with this program; if not, write to the Free Software
 
  27 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
  28 #======================================================================
 
  32 #======================================================================
 
  40 require "bin/mozilla/io.pl";
 
  41 require "bin/mozilla/arap.pl";
 
  48 # $locale->text('Edit the purchase_order');
 
  49 # $locale->text('Edit the sales_order');
 
  50 # $locale->text('Edit the request_quotation');
 
  51 # $locale->text('Edit the sales_quotation');
 
  53 # $locale->text('Workflow purchase_order');
 
  54 # $locale->text('Workflow sales_order');
 
  55 # $locale->text('Workflow request_quotation');
 
  56 # $locale->text('Workflow sales_quotation');
 
  59   $lxdebug->enter_sub();
 
  63   if ($form->{type} eq 'purchase_order') {
 
  64     $form->{title}   = $action eq "edit" ?
 
  65       $locale->text('Edit Purchase Order') :
 
  66       $locale->text('Add Purchase Order');
 
  67     $form->{heading} = $locale->text('Purchase Order');
 
  68     $form->{vc}      = 'vendor';
 
  70   if ($form->{type} eq 'sales_order') {
 
  71     $form->{title}   = $action eq "edit" ?
 
  72       $locale->text('Edit Sales Order') :
 
  73       $locale->text('Add Sales Order');
 
  74     $form->{heading} = $locale->text('Sales Order');
 
  75     $form->{vc}      = 'customer';
 
  77   if ($form->{type} eq 'request_quotation') {
 
  78     $form->{title}   = $action eq "edit" ?
 
  79       $locale->text('Edit Request for Quotation') :
 
  80       $locale->text('Add Request for Quotation');
 
  81     $form->{heading} = $locale->text('Request for Quotation');
 
  82     $form->{vc}      = 'vendor';
 
  84   if ($form->{type} eq 'sales_quotation') {
 
  85     $form->{title}   = $action eq "edit" ?
 
  86       $locale->text('Edit Quotation') :
 
  87       $locale->text('Add Quotation');
 
  88     $form->{heading} = $locale->text('Quotation');
 
  89     $form->{vc}      = 'customer';
 
  92   $lxdebug->leave_sub();
 
  96   $lxdebug->enter_sub();
 
 101     "$form->{script}?action=add&type=$form->{type}&vc=$form->{vc}&login=$form->{login}&password=$form->{password}"
 
 102     unless $form->{callback};
 
 108   $lxdebug->leave_sub();
 
 112   $lxdebug->enter_sub();
 
 113   # show history button
 
 114   $form->{javascript} = qq|<script type="text/javascript" src="js/show_history.js"></script>|;
 
 115   #/show hhistory button
 
 117   $form->{simple_save} = 0;
 
 119   set_headings("edit");
 
 121   # editing without stuff to edit? try adding it first
 
 122   if ($form->{rowcount}) {
 
 123     map { $id++ if $form->{"multi_id_$_"} } (1 .. $form->{rowcount});
 
 127       undef $form->{rowcount};
 
 129       $lxdebug->leave_sub();
 
 132   } elsif (!$form->{id}) {
 
 134     $lxdebug->leave_sub();
 
 138   if ($form->{print_and_save}) {
 
 139     $form->{action}   = "print";
 
 140     $form->{resubmit} = 1;
 
 141     $language_id = $form->{language_id};
 
 142     $printer_id = $form->{printer_id};
 
 145   set_headings("edit");
 
 149   if ($form->{print_and_save}) {
 
 150     $form->{language_id} = $language_id;
 
 151     $form->{printer_id} = $printer_id;
 
 155   $lxdebug->leave_sub();
 
 159   $lxdebug->enter_sub();
 
 160   # get customer/vendor
 
 161   $form->all_vc(\%myconfig, $form->{vc},
 
 162                 ($form->{vc} eq 'customer') ? "AR" : "AP");
 
 164   # retrieve order/quotation
 
 165   $form->{webdav}   = $webdav;
 
 166   $form->{jsscript} = 1;
 
 168   my $editing = $form->{id};
 
 170   OE->retrieve(\%myconfig, \%$form);
 
 172   if ($form->{payment_id}) {
 
 173     $payment_id = $form->{payment_id};
 
 175   if ($form->{language_id}) {
 
 176     $language_id = $form->{language_id};
 
 178   if ($form->{taxzone_id}) {
 
 179     $taxzone_id = $form->{taxzone_id};
 
 182   $salesman_id = $form->{salesman_id} if ($editing);
 
 185   # if multiple rowcounts (== collective order) then check if the
 
 186   # there were more than one customer (in that case OE::retrieve removes
 
 187   # the content from the field)
 
 188   if (   $form->{rowcount}
 
 189       && $form->{type} eq 'sales_order'
 
 190       && defined $form->{customer}
 
 191       && $form->{customer} eq '') {
 
 193     #    $main::lxdebug->message(0, "Detected Edit order with concurrent customers");
 
 196                    'Collective Orders only work for orders from one customer!')
 
 200   $taxincluded = $form->{taxincluded};
 
 201   $form->{shipto} = 1 if $form->{id};
 
 203   if ($form->{"all_$form->{vc}"}) {
 
 204     unless ($form->{"$form->{vc}_id"}) {
 
 205       $form->{"$form->{vc}_id"} = $form->{"all_$form->{vc}"}->[0]->{id};
 
 209   $cp_id    = $form->{cp_id};
 
 210   $intnotes = $form->{intnotes};
 
 212   # get customer / vendor
 
 213   if ($form->{type} =~ /(purchase_order|request_quotation)/) {
 
 214     IR->get_vendor(\%myconfig, \%$form);
 
 216     #quote all_vendor Bug 133
 
 217     foreach $ref (@{ $form->{all_vendor} }) {
 
 218       $ref->{name} = $form->quote($ref->{name});
 
 222   if ($form->{type} =~ /sales_(order|quotation)/) {
 
 223     IS->get_customer(\%myconfig, \%$form);
 
 225     #quote all_vendor Bug 133
 
 226     foreach $ref (@{ $form->{all_customer} }) {
 
 227       $ref->{name} = $form->quote($ref->{name});
 
 231   $form->{cp_id} = $cp_id;
 
 234     $form->{payment_id} = $payment_id;
 
 237     $form->{language_id} = $language_id;
 
 240     $form->{taxzone_id} = $taxzone_id;
 
 242   $form->{intnotes} = $intnotes if $intnotes;
 
 243   ($form->{ $form->{vc} }) = split /--/, $form->{ $form->{vc} };
 
 244   $form->{"old$form->{vc}"} =
 
 245     qq|$form->{$form->{vc}}--$form->{"$form->{vc}_id"}|;
 
 247   # build the popup menus
 
 248   if (@{ $form->{"all_$form->{vc}"} }) {
 
 249     $form->{ $form->{vc} } =
 
 250       qq|$form->{$form->{vc}}--$form->{"$form->{vc}_id"}|;
 
 251     map { $form->{"select$form->{vc}"} .=
 
 252 "<option>$_->{name}--$_->{id}</option>\n" }
 
 253       (@{ $form->{"all_$form->{vc}"} });
 
 256   $form->{taxincluded} = $taxincluded if ($form->{id});
 
 259   if (@{ $form->{all_departments} }) {
 
 260     $form->{selectdepartment} = "<option>\n";
 
 261     $form->{department}       = "$form->{department}--$form->{department_id}";
 
 264       $form->{selectdepartment} .=
 
 265         "<option>$_->{description}--$_->{id}</option>\n"
 
 266     } (@{ $form->{all_departments} });
 
 269   $form->{employee} = "$form->{employee}--$form->{employee_id}";
 
 272   $form->{forex} = $form->{exchangerate};
 
 274   $form->{salesman_id} = $salesman_id if ($editing);
 
 276   $lxdebug->leave_sub();
 
 280   $lxdebug->enter_sub();
 
 281   $form->{formname} = $form->{type} unless $form->{formname};
 
 284   foreach $ref (@{ $form->{form_details} }) {
 
 285     $form->{rowcount} = ++$i;
 
 287     map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref};
 
 289   for my $i (1 .. $form->{rowcount}) {
 
 291       $form->{"discount_$i"} =
 
 292         $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100);
 
 294       $form->{"discount_$i"} =
 
 295         $form->format_amount(\%myconfig, $form->{"discount_$i"});
 
 297     ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
 
 299     $decimalplaces = ($dec > 2) ? $dec : 2;
 
 301     # copy reqdate from deliverydate for invoice -> order conversion
 
 302     $form->{"reqdate_$i"} = $form->{"deliverydate_$i"}
 
 303       unless $form->{"reqdate_$i"};
 
 305     $form->{"sellprice_$i"} =
 
 306       $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
 
 309     (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/);
 
 310     $dec_qty = length $dec_qty;
 
 312       $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
 
 314     map { $form->{"${_}_$i"} =~ s/\"/"/g }
 
 315       qw(partnumber description unit);
 
 318   $lxdebug->leave_sub();
 
 322   $lxdebug->enter_sub();
 
 324   my $checkedclosed = $form->{"closed"} ? "checked" : "";
 
 325   my $checkeddelivered = $form->{"delivered"} ? "checked" : "";
 
 327   map { $form->{$_} =~ s/\"/"/g }
 
 328     qw(ordnumber quonumber shippingpoint shipvia notes intnotes shiptoname
 
 329        shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact
 
 330        shiptophone shiptofax shiptodepartment_1 shiptodepartment_2);
 
 332   # use JavaScript Calendar or not
 
 333   $form->{jsscript} = 1;
 
 337      <td><input name=transdate id=transdate size=11 title="$myconfig{dateformat}" value="$form->{transdate}" onBlur=\"check_right_date_format(this)\">
 
 338       <input type=button name=transdate id="trigger1" value=|
 
 339     . $locale->text('button') . qq|></td>
 
 342      <td width="13"><input name=reqdate id=reqdate size=11 title="$myconfig{dateformat}" value="$form->{reqdate}" onBlur=\"check_right_date_format(this)\">
 
 343       <input type=button name=reqdate name=reqdate id="trigger2" value=|
 
 344     . $locale->text('button') . qq|></td>
 
 349     Form->write_trigger(\%myconfig, "2", "transdate", "BL", "trigger1",
 
 350                         "reqdate", "BL", "trigger2");
 
 354   if (($form->{"type"} eq "sales_order") ||
 
 355       ($form->{"type"} eq "purchase_order")) {
 
 357           <input name="delivered" id="delivered" type="checkbox" class="checkbox" value="1" $checkeddelivered>
 
 358           <label for="delivered">| . $locale->text('Delivered') . qq|</label>|);
 
 363           <input name="closed" id="closed" type="checkbox" class="checkbox" value="1" $checkedclosed>
 
 364           <label for="closed">| . $locale->text('Closed') . qq|</label>|);
 
 370         <td colspan=| . (2 * scalar(@tmp)) . qq| align=center>| . join("\n", @tmp) . qq|
 
 376   # set option selected
 
 377   foreach $item ($form->{vc}, currency, department, employee, ($form->{vc} eq "customer" ? customer : vendor)) {
 
 378     $form->{"select$item"} =~ s/ selected//;
 
 379     $form->{"select$item"} =~
 
 380       s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
 
 383   #quote select[customer|vendor] Bug 133
 
 384   $form->{"select$form->{vc}"} = $form->quote($form->{"select$form->{vc}"});
 
 386   #substitute \n and \r to \s (bug 543)
 
 387   $form->{"select$form->{vc}"} =~ s/[\n\r]/ /g;
 
 389   my @old_project_ids = ($form->{"globalproject_id"});
 
 390   map({ push(@old_project_ids, $form->{"project_id_$_"})
 
 391           if ($form->{"project_id_$_"}); } (1..$form->{"rowcount"}));
 
 393   my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
 
 394   $form->get_lists("contacts" => "ALL_CONTACTS",
 
 395                    "shipto" => "ALL_SHIPTO",
 
 396                    "projects" => { "key" => "ALL_PROJECTS",
 
 398                                    "old_id" => \@old_project_ids },
 
 399                    "employees" => "ALL_SALESMEN",
 
 400                    "taxzones" => "ALL_TAXZONES",
 
 401                    "payments" => "ALL_PAYMENTS",
 
 402                    "currencies" => "ALL_CURRENCIES",
 
 403                    $vc => "ALL_" . uc($vc));
 
 406   my @values = (undef);
 
 407   foreach my $item (@{ $form->{"ALL_CONTACTS"} }) {
 
 408     push(@values, $item->{"cp_id"});
 
 409     $labels{$item->{"cp_id"}} = $item->{"cp_name"} .
 
 410       ($item->{"cp_abteilung"} ? " ($item->{cp_abteilung})" : "");
 
 414   if (scalar @values > 1) {
 
 417       <th align="right">| . $locale->text('Contact Person') . qq|</th>
 
 419       NTI($cgi->popup_menu('-name' => 'cp_id', '-values' => \@values, '-style' => 'width: 250px',
 
 420                            '-labels' => \%labels, '-default' => $form->{"cp_id"}))
 
 429   foreach my $item (@{ $form->{($form->{vc} eq "customer" ? "ALL_CUSTOMERS" : "ALL_VENDORS")}}) {
 
 430     push(@values, $item->{name}.qq|--|.$item->{"id"});
 
 431     $labels{$item->{"id"}} = $item->{name}.qq|--|.$item->{"id"};
 
 435       <input type="hidden" name="$form->{vc}_id" value="| . H($form->{"$form->{vc}_id"}) . qq|">
 
 436       <input type="hidden" name="old$form->{vc}" value="| . H($form->{"old$form->{vc}"}) . qq|">
 
 437       <th align="right">| . $locale->text(ucfirst($form->{vc})) . qq|</th>
 
 439         (($myconfig{vclimit} <=  scalar(@values)) 
 
 440               ? qq|<input type="text" value="| . H($form->{"old$form->{vc}"}) . qq|" name="$form->{vc}">| 
 
 441               : (NTI($cgi->popup_menu('-name' => "$form->{vc}", '-default' => $form->{"old$form->{vc}"}, 
 
 442                              '-onChange' => 'document.getElementById(\'update_button\').click();',
 
 443                              '-values' => \@values, '-labels' => \%labels, '-style' => 'width: 250px')))) . qq|
 
 444         <input type="button" value="?" onclick="show_vc_details('$form->{vc}')">
 
 445       </td><input type=hidden name="select$form->{vc}" value="| .
 
 446     Q($form->{"select$form->{vc}"}) . qq|">|;
 
 450   foreach my $item (@{ $form->{"ALL_PAYMENTS"} }) {
 
 451     push(@values, $item->{"id"});
 
 452     $labels{$item->{"id"}} = $item->{"description"};
 
 456     <th align="right">| . $locale->text('Payment Terms') . qq|</th>
 
 458     NTI($cgi->popup_menu('-name' => 'payment_id', '-values' => \@values, '-style' => 'width: 250px',
 
 459                          '-labels' => \%labels, '-default' => $form->{payment_id}))
 
 464   foreach my $item (@{ $form->{"ALL_SHIPTO"} }) {
 
 465     push(@values, $item->{"shipto_id"});
 
 466     $labels{$item->{"shipto_id"}} = join "; ", grep { $_ } map { $item->{"shipto${_}" } } qw(name department_1 street city);
 
 470   if (scalar @values > 1) {
 
 473       <th align="right">| . $locale->text('Shipping Address') . qq|</th>
 
 475       NTI($cgi->popup_menu('-name' => 'shipto_id', '-values' => \@values, '-style' => 'width: 250px',
 
 476                            '-labels' => \%labels, '-default' => $form->{"shipto_id"}))
 
 482   foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
 
 483     push(@values, $item->{"id"});
 
 484     $labels{$item->{"id"}} = $item->{"projectnumber"};
 
 486   my $globalprojectnumber =
 
 487     NTI($cgi->popup_menu('-name' => 'globalproject_id', '-values' => \@values,
 
 488                          '-labels' => \%labels,
 
 489                          '-default' => $form->{"globalproject_id"}));
 
 492   if ($form->{type} =~ /^sales_/) {
 
 495     foreach my $item (@{ $form->{ALL_SALESMEN} }) {
 
 496       push(@values, $item->{id});
 
 497       $labels{$item->{id}} = $item->{name} ne "" ? $item->{name} : $item->{login};
 
 502           <th align="right">| . $locale->text('Salesman') . qq|</th>
 
 504       NTI($cgi->popup_menu('-name' => 'salesman_id', '-default' => $form->{salesman_id},
 
 505                            '-values' => \@values, '-labels' => \%labels))
 
 512   foreach my $item (@{ $form->{"ALL_SALESMEN"} }) {
 
 513     push(@values, $item->{"id"});
 
 514     $labels{$item->{"id"}} = $item->{"name"};
 
 519       <th align="right">| . $locale->text('Employee') . qq|</th>
 
 521         NTI($cgi->popup_menu('-name' => 'employee', '-default' => $form->{"employee"},
 
 522                              '-values' => \@values, '-labels' => \%labels)) . qq|
 
 528   foreach my $item (@{ $form->{"ALL_TAXZONES"} }) {
 
 529     push(@values, $item->{"id"});
 
 530     $labels{$item->{"id"}} = $item->{"description"};
 
 535       <th align="right">| . $locale->text('Steuersatz') . qq|</th>
 
 537         NTI($cgi->popup_menu('-name' => 'taxzone_id', '-default' => $form->{"taxzone_id"},
 
 538                              '-values' => \@values, '-labels' => \%labels, '-style' => 'width: 250px')) . qq|
 
 545   foreach my $item (@{ $form->{"ALL_CURRENCIES"} }) {
 
 546     push(@values, $item);
 
 547     $labels{$item} = $item;
 
 550   $form->{currency} = $form->{defaultcurrency} unless $form->{currency};
 
 552   if (scalar @values) {
 
 555       <th align="right">| . $locale->text('Currency') . qq|</th>
 
 557         NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"},
 
 558                              '-values' => \@values, '-labels' => \%labels)) . qq|
 
 563   $form->{exchangerate} =
 
 564     $form->format_amount(\%myconfig, $form->{exchangerate});
 
 566   if (($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update}) {
 
 572   $form->{creditlimit} =
 
 573     $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
 
 574   $form->{creditremaining} =
 
 575     $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0");
 
 578 <input type=hidden name=forex value=$form->{forex}>
 
 581   if ($form->{currency} ne $form->{defaultcurrency}) {
 
 582     if ($form->{forex}) {
 
 585         . $locale->text('Exchangerate')
 
 586         . qq|</th><td>$form->{exchangerate}</td>
 
 587       <input type=hidden name=exchangerate value=$form->{exchangerate}>
 
 592         . $locale->text('Exchangerate')
 
 593         . qq|</th><td><input name=exchangerate size=10 value=$form->{exchangerate}></td>|;
 
 597   if ($form->{business}) {
 
 600           <th align="right">| . ($form->{vc} eq "customer" ? $locale->text('Customer type') : $locale->text('Vendor type')) . qq|</th>
 
 601           <td>$form->{business}; | . $locale->text('Trade Discount') . qq| |
 
 602       . $form->format_amount(\%myconfig, $form->{tradediscount} * 100)
 
 608   if ($form->{max_dunning_level}) {
 
 611         <th align="right">| . $locale->text('Max. Dunning Level') . qq|:</th>
 
 613           <b>$form->{max_dunning_level}</b>;
 
 614           | . $locale->text('Dunning Amount') . qq|: <b>|
 
 615         . $form->format_amount(\%myconfig, $form->{dunning_amount},2)
 
 622   if ($form->{type} !~ /_quotation$/) {
 
 625                 <th width=70% align=right nowrap>| . $locale->text('Order Number') . qq|</th>
 
 626                 <td><input name=ordnumber size=11 value="$form->{ordnumber}"></td>
 
 629                 <th width=70% align=right nowrap>|
 
 630       . $locale->text('Quotation Number') . qq|</th>
 
 631                 <td><input name=quonumber size=11 value="$form->{quonumber}"></td>
 
 634                 <th width=70% align=right nowrap>|
 
 635       . $locale->text('Customer Order Number') . qq|</th>
 
 636                 <td><input name=cusordnumber size=11 value="$form->{cusordnumber}"></td>
 
 639                 <th align=right nowrap>| . $locale->text('Order Date') . qq|</th>
 
 644                 <th align=right nowrap=true>| . $locale->text('Required by') . qq|</th>
 
 649     $n = ($form->{creditremaining} =~ /-/) ? "0" : "1";
 
 651     $creditremaining = qq|
 
 654           <td align="right">| . $locale->text('Credit Limit') . qq|</td>
 
 655           <td>$form->{creditlimit}; | . $locale->text('Remaining') . qq| <span class="plus$n">$form->{creditremaining}</span></td>
 
 661       ($form->{type} eq 'sales_quotation')
 
 662       ? $locale->text('Valid until')
 
 663       : $locale->text('Required by');
 
 664     if ($form->{type} eq 'sales_quotation') {
 
 667                 <th width=70% align=right nowrap>|
 
 668         . $locale->text('Quotation Number') . qq|</th>
 
 669                 <td><input name=quonumber size=11 value="$form->{quonumber}"></td>
 
 670                 <input type=hidden name=ordnumber value="$form->{ordnumber}">
 
 676                 <th width=70% align=right nowrap>| . $locale->text('RFQ Number') . qq|</th>
 
 677                 <td><input name=quonumber size=11 value="$form->{quonumber}"></td>
 
 678                 <input type=hidden name=ordnumber value="$form->{ordnumber}">
 
 686                 <th align=right nowrap>| . $locale->text('Quotation Date') . qq|</th>
 
 690                 <th align=right nowrap=true>$reqlabel</th>
 
 694     $creditremaining = qq| <tr>
 
 702                 <th align="right" nowrap>| . $locale->text('Department') . qq|</th>
 
 703                 <td colspan=3><select name=department style="width: 250px">$form->{selectdepartment}</select>
 
 704                 <input type=hidden name=selectdepartment value="$form->{selectdepartment}">
 
 706               </tr> | if $form->{selectdepartment};
 
 708   if ($form->{type} eq 'sales_order') {
 
 709     if ($form->{selectemployee}) {
 
 711     <input type=hidden name=customer_klass value=$form->{customer_klass}>
 
 717     <input type=hidden name=customer_klass value=$form->{customer_klass}>
 
 721   if ($form->{resubmit} && ($form->{format} eq "html")) {
 
 723       qq|window.open('about:blank','Beleg'); document.oe.target = 'Beleg';document.oe.submit()|;
 
 724   } elsif ($form->{resubmit}) {
 
 725     $onload = qq|document.oe.submit()|;
 
 730   $credittext = $locale->text('Credit Limit exceeded!!!');
 
 731   if ($creditwarning) {
 
 732     $onload = qq|alert('$credittext')|;
 
 735   $onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
 
 736   $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
 
 738   $form->{"javascript"} .= qq|<script type="text/javascript" src="js/show_form_details.js"></script>|;
 
 739   # show history button js
 
 740   $form->{javascript} .= qq|<script type="text/javascript" src="js/show_history.js"></script>|;
 
 741   #/show history button js
 
 742   $form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
 
 747 <body onLoad="$onload">
 
 749 <form method=post name=oe action=$form->{script}>
 
 751  <script type="text/javascript" src="js/common.js"></script>
 
 752  <script type="text/javascript" src="js/delivery_customer_selection.js"></script>
 
 753  <script type="text/javascript" src="js/vendor_selection.js"></script>
 
 754  <script type="text/javascript" src="js/calculate_qty.js"></script>
 
 757   $form->hide_form(qw(id action type vc formname media format proforma queued printed emailed
 
 758                       title discount creditlimit creditremaining tradediscount business
 
 759                       max_dunning_level dunning_amount));
 
 765     <th class=listtop>$form->{title}</th>
 
 787                 <th align=right>| . $locale->text('Shipping Point') . qq|</th>
 
 788                 <td colspan=3><input name=shippingpoint size=35 value="$form->{shippingpoint}"></td>
 
 791                 <th align=right>| . $locale->text('Ship via') . qq|</th>
 
 792                 <td colspan=3><input name=shipvia size=35 value="$form->{shipvia}"></td>
 
 795                 <th align="right">| . $locale->text('Transaction description') . qq|</th>
 
 796                 <td colspan="3"><input name="transaction_description" size="35" value="| . H($form->{transaction_description}) . qq|"></td>
 
 803 #                         <button type="button" onclick="delivery_customer_selection_window('delivery_customer_string','delivery_customer_id')">| . $locale->text('Choose Customer') . qq|</button>
 
 805 #                       <td colspan=2><input type=hidden name=delivery_customer_id value="$form->{delivery_customer_id}">
 
 806 #                       <input size=45 id=delivery_customer_string name=delivery_customer_string value="$form->{delivery_customer_string}"></td>
 
 810 #                         <button type="button" onclick="vendor_selection_window('delivery_vendor_string','delivery_vendor_id')">| . $locale->text('Choose Vendor') . qq|</button>
 
 812 #                       <td colspan=2><input type=hidden name=delivery_vendor_id value="$form->{delivery_vendor_id}">
 
 813 #                       <input size=45 id=vendor_string name=delivery_vendor_string value="$form->{delivery_vendor_string}"></td>
 
 827           <th width="70%" align="right" nowrap>| . $locale->text('Project Number') . qq|</th>
 
 828           <td>$globalprojectnumber</td>
 
 839 <!-- shipto are in hidden variables -->
 
 841 <input type=hidden name=shiptoname value="$form->{shiptoname}">
 
 842 <input type=hidden name=shiptostreet value="$form->{shiptostreet}">
 
 843 <input type=hidden name=shiptozipcode value="$form->{shiptozipcode}">
 
 844 <input type=hidden name=shiptocity value="$form->{shiptocity}">
 
 845 <input type=hidden name=shiptocountry value="$form->{shiptocountry}">
 
 846 <input type=hidden name=shiptocontact value="$form->{shiptocontact}">
 
 847 <input type=hidden name=shiptophone value="$form->{shiptophone}">
 
 848 <input type=hidden name=shiptofax value="$form->{shiptofax}">
 
 849 <input type=hidden name=shiptodepartment_1 value="$form->{shiptodepartment_1}">
 
 850 <input type=hidden name=shiptodepartment_2 value="$form->{shiptodepartment_2}">
 
 851 <input type=hidden name=shiptoemail value="$form->{shiptoemail}">
 
 853 <!-- email variables -->
 
 854 <input type=hidden name=message value="$form->{message}">
 
 855 <input type=hidden name=email value="$form->{email}">
 
 856 <input type=hidden name=subject value="$form->{subject}">
 
 857 <input type=hidden name=cc value="$form->{cc}">
 
 858 <input type=hidden name=bcc value="$form->{bcc}">
 
 860 <input type=hidden name=taxpart value="$form->{taxpart}">
 
 861 <input type=hidden name=taxservice value="$form->{taxservice}">
 
 863 <input type=hidden name=taxaccounts value="$form->{taxaccounts}">
 
 866   foreach $item (split / /, $form->{taxaccounts}) {
 
 868 <input type=hidden name="${item}_rate" value=$form->{"${item}_rate"}>
 
 869 <input type=hidden name="${item}_description" value="$form->{"${item}_description"}">
 
 872   $lxdebug->leave_sub();
 
 876   $lxdebug->enter_sub();
 
 878   $form->{invtotal} = $form->{invsubtotal};
 
 880   if (($rows = $form->numtextrows($form->{notes}, 25, 8)) < 2) {
 
 883   if (($introws = $form->numtextrows($form->{intnotes}, 35, 8)) < 2) {
 
 886   $rows = ($rows > $introws) ? $rows : $introws;
 
 888     qq|<textarea name=notes rows=$rows cols=25 wrap=soft>$form->{notes}</textarea>|;
 
 890     qq|<textarea name=intnotes rows=$rows cols=35 wrap=soft>$form->{intnotes}</textarea>|;
 
 892   $form->{taxincluded} = ($form->{taxincluded}) ? "checked" : "";
 
 895   if ($form->{taxaccounts}) {
 
 897               <input name=taxincluded class=checkbox type=checkbox value=1 $form->{taxincluded}> <b>|
 
 898       . $locale->text('Tax Included') . qq|</b><br><br>
 
 902   if (!$form->{taxincluded}) {
 
 904     foreach $item (split / /, $form->{taxaccounts}) {
 
 905       if ($form->{"${item}_base"}) {
 
 906         $form->{invtotal} += $form->{"${item}_total"} =
 
 908                              $form->{"${item}_base"} * $form->{"${item}_rate"},
 
 910         $form->{"${item}_total"} =
 
 911           $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2);
 
 915                 <th align=right>$form->{"${item}_description"} |
 
 916                                     . $form->{"${item}_rate"} * 100 .qq|%</th>
 
 917                 <td align=right>$form->{"${item}_total"}</td>
 
 923     $form->{invsubtotal} =
 
 924       $form->format_amount(\%myconfig, $form->{invsubtotal}, 2, 0);
 
 928                 <th align=right>| . $locale->text('Subtotal') . qq|</th>
 
 929                 <td align=right>$form->{invsubtotal}</td>
 
 935   if ($form->{taxincluded}) {
 
 936     foreach $item (split / /, $form->{taxaccounts}) {
 
 937       if ($form->{"${item}_base"}) {
 
 938         $form->{"${item}_total"} =
 
 940                            ($form->{"${item}_base"} * $form->{"${item}_rate"} /
 
 941                               (1 + $form->{"${item}_rate"})
 
 944         $form->{"${item}_netto"} =
 
 946                           ($form->{"${item}_base"} - $form->{"${item}_total"}),
 
 948         $form->{"${item}_total"} =
 
 949           $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2);
 
 950         $form->{"${item}_netto"} =
 
 951           $form->format_amount(\%myconfig, $form->{"${item}_netto"}, 2);
 
 955                 <th align=right>Enthaltene $form->{"${item}_description"} |
 
 956                                     . $form->{"${item}_rate"} * 100 .qq|%</th>
 
 957                 <td align=right>$form->{"${item}_total"}</td>
 
 960                 <th align=right>Nettobetrag</th>
 
 961                 <td align=right>$form->{"${item}_netto"}</td>
 
 969   $form->{oldinvtotal} = $form->{invtotal};
 
 971     $form->format_amount(\%myconfig, $form->{invtotal}, 2, 0);
 
 981                 <th align=left>| . $locale->text('Notes') . qq|</th>
 
 982                 <th align=left>| . $locale->text('Internal Notes') . qq|</th>
 
 993           <td align=right width=100%>
 
 999                 <th align=right>| . $locale->text('Total') . qq|</th>
 
1000                 <td align=right>$form->{invtotal}</td>
 
1008 <input type=hidden name=oldinvtotal value=$form->{oldinvtotal}>
 
1009 <input type=hidden name=oldtotalpaid value=$totalpaid>
 
1011     <td><hr size=3 noshade></td>
 
1019     <th class=listtop align=left>Dokumente im Webdav-Repository</th>
 
1022       <td align=left width=30%><b>Dateiname</b></td>
 
1023       <td align=left width=70%><b>Webdavlink</b></td>
 
1025     foreach $file (keys %{ $form->{WEBDAV} }) {
 
1028         <td align=left>$file</td>
 
1029         <td align=left><a href="$form->{WEBDAV}{$file}">$form->{WEBDAV}{$file}</a></td>
 
1037     <td><hr size=3 noshade></td>
 
1055 | . $locale->text("Edit the $form->{type}") . qq|<br>
 
1056 <input class=submit type=submit name=action id=update_button value="|
 
1057     . $locale->text('Update') . qq|">
 
1058 <input class=submit type=submit name=action value="|
 
1059     . $locale->text('Ship to') . qq|">
 
1060 <input class=submit type=submit name=action value="|
 
1061     . $locale->text('Print') . qq|">
 
1062 <input class=submit type=submit name=action value="|
 
1063     . $locale->text('E-mail') . qq|">
 
1064 <input class=submit type=submit name=action value="|
 
1065     . $locale->text('Save') . qq|">
 
1066 <input class=submit type=submit name=action value="|
 
1067     . $locale->text('Save and Close') . qq|">
 
1070   if (($form->{id})) {
 
1072         <input type="button" class="submit" onclick="set_history_window(|
 
1074         . qq|);" name="history" id="history" value="|
 
1075         . $locale->text('history')
 
1078 <br>| . $locale->text("Workflow $form->{type}") . qq|<br>
 
1079 <input class=submit type=submit name=action value="|
 
1080       . $locale->text('Save as new') . qq|">
 
1081 <input class=submit type=submit name=action value="|
 
1082       . $locale->text('Delete') . qq|">|;
 
1083     if (($form->{type} =~ /sales_quotation$/)) {
 
1085 <input class=submit type=submit name=action value="|
 
1086         . $locale->text('Sales Order') . qq|">|;
 
1088     if ($form->{type} =~ /request_quotation$/) {
 
1090 <input class=submit type=submit name=action value="|
 
1091         . $locale->text('Purchase Order') . qq|">|;
 
1095 <input class=submit type=submit name=action value="|
 
1096       . $locale->text('Invoice') . qq|">
 
1100     if ($form->{type} =~ /sales_order$/) {
 
1102 <br>$form->{heading} als neue Vorlage verwenden für<br>
 
1103 <input class=submit type=submit name=action value="|
 
1104         . $locale->text('Purchase Order') . qq|">
 
1105 <input class=submit type=submit name=action value="|
 
1106         . $locale->text('Quotation') . qq|">
 
1109     } elsif ($form->{type} =~ /purchase_order$/) {
 
1111 <br>$form->{heading} als neue Vorlage verwenden für<br>
 
1112 <input class=submit type=submit name=action value="|
 
1113         . $locale->text('Sales Order') . qq|">
 
1114 <input class=submit type=submit name=action value="|
 
1115         . $locale->text('Request for Quotation') . qq|">
 
1120 <br>$form->{heading} als neue Vorlage verwenden für<br>
 
1121 <input class=submit type=submit name=action value="|
 
1122         . $locale->text('Order') . qq|">
 
1125   } elsif ($form->{type} =~ /sales_order$/ && $form->{rowcount} && !$form->{proforma}) {
 
1127 <br>Workflow  $form->{heading}<br>
 
1128 <input class=submit type=submit name=action value="|
 
1129       . $locale->text('Save as new') . qq|">
 
1130 <input class=submit type=submit name=action value="|
 
1131       . $locale->text('Invoice') . qq|">
 
1135   $form->hide_form("saved_xyznumber");
 
1139 <input type=hidden name=rowcount value=$form->{rowcount}>
 
1141 <input name=callback type=hidden value="$form->{callback}">
 
1143 <input type=hidden name=login value=$form->{login}>
 
1144 <input type=hidden name=password value=$form->{password}>
 
1151   $lxdebug->leave_sub();
 
1155   $lxdebug->enter_sub();
 
1157   set_headings($form->{"id"} ? "edit" : "add");
 
1159   map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
 
1160     qw(exchangerate creditlimit creditremaining);
 
1161   $form->{update} = 1;
 
1163   if($form->{payment_id}) { 
 
1164     $payment_id = $form->{payment_id};
 
1167   &check_name($form->{vc});
 
1169   if($form->{payment_id} eq "") { 
 
1170     $form->{payment_id} = $payment_id;
 
1174   $buysell              = 'sell' if ($form->{vc} eq 'vendor');
 
1175   $form->{exchangerate} = $exchangerate
 
1179                     $form->check_exchangerate(
 
1180                     \%myconfig, $form->{currency}, $form->{transdate}, $buysell
 
1184   $i = $form->{rowcount};
 
1186   $exchangerate = ($form->{exchangerate}) ? $form->{exchangerate} : 1;
 
1188   if (   ($form->{"partnumber_$i"} eq "")
 
1189       && ($form->{"description_$i"} eq "")
 
1190       && ($form->{"partsgroup_$i"}  eq "")) {
 
1192     $form->{creditremaining} += ($form->{oldinvtotal} - $form->{oldtotalpaid});
 
1197     if (   $form->{type} eq 'purchase_order'
 
1198         || $form->{type} eq 'request_quotation') {
 
1199       IR->retrieve_item(\%myconfig, \%$form);
 
1201     if ($form->{type} eq 'sales_order' || $form->{type} eq 'sales_quotation') {
 
1202       IS->retrieve_item(\%myconfig, \%$form);
 
1205     my $rows = scalar @{ $form->{item_list} };
 
1207     $form->{"discount_$i"} =
 
1208       $form->format_amount(\%myconfig, $form->{discount} * 100);
 
1211       $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"});
 
1220         $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"});
 
1221         if ($form->{"not_discountable_$i"}) {
 
1222           $form->{"discount_$i"} = 0;
 
1224         map { $form->{item_list}[$i]{$_} =~ s/\"/"/g }
 
1225           qw(partnumber description unit);
 
1226         map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} }
 
1227           keys %{ $form->{item_list}[0] };
 
1228         if ($form->{"part_payment_id_$i"} ne "") {
 
1229           $form->{payment_id} = $form->{"part_payment_id_$i"};
 
1232         $s = ($sellprice) ? $sellprice : $form->{"sellprice_$i"};
 
1234         ($dec) = ($s =~ /\.(\d+)/);
 
1236         $decimalplaces = ($dec > 2) ? $dec : 2;
 
1239           $form->{"sellprice_$i"} = $sellprice;
 
1242           $form->{"sellprice_$i"} *= (1 - $form->{tradediscount});
 
1244           # if there is an exchange rate adjust sellprice
 
1245           $form->{"sellprice_$i"} /= $exchangerate;
 
1249           $form->{"sellprice_$i"} * $form->{"qty_$i"} *
 
1250           (1 - $form->{"discount_$i"} / 100);
 
1251         map { $form->{"${_}_base"} = 0 } (split / /, $form->{taxaccounts});
 
1252         map { $form->{"${_}_base"} += $amount }
 
1253           (split / /, $form->{"taxaccounts_$i"});
 
1254         map { $amount += ($form->{"${_}_base"} * $form->{"${_}_rate"}) }
 
1255           split / /, $form->{taxaccounts}
 
1256           if !$form->{taxincluded};
 
1258         $form->{creditremaining} -= $amount;
 
1260         $form->{"sellprice_$i"} =
 
1261           $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
 
1264           $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
 
1266         # get pricegroups for parts
 
1267         IS->get_pricegroups_for_parts(\%myconfig, \%$form);
 
1269         # build up html code for prices_$i
 
1270         &set_pricegroup($i);
 
1277       # ok, so this is a new part
 
1278       # ask if it is a part or service item
 
1280       if (   $form->{"partsgroup_$i"}
 
1281           && ($form->{"partsnumber_$i"} eq "")
 
1282           && ($form->{"description_$i"} eq "")) {
 
1283         $form->{rowcount}--;
 
1284         $form->{"discount_$i"} = "";
 
1288         $form->{"id_$i"}   = 0;
 
1289         $form->{"unit_$i"} = $locale->text('ea');
 
1297   $lxdebug->leave_sub();
 
1301   $lxdebug->enter_sub();
 
1303   if ($form->{type} eq 'purchase_order') {
 
1304     $form->{title} = $locale->text('Purchase Orders');
 
1305     $form->{vc}    = 'vendor';
 
1306     $ordlabel      = $locale->text('Order Number');
 
1307     $ordnumber     = 'ordnumber';
 
1308     $employee      = $locale->text('Employee');
 
1311   if ($form->{type} eq 'request_quotation') {
 
1312     $form->{title} = $locale->text('Request for Quotations');
 
1313     $form->{vc}    = 'vendor';
 
1314     $ordlabel      = $locale->text('RFQ Number');
 
1315     $ordnumber     = 'quonumber';
 
1316     $employee      = $locale->text('Employee');
 
1319   if ($form->{type} eq 'sales_order') {
 
1320     $form->{title} = $locale->text('Sales Orders');
 
1321     $form->{vc}    = 'customer';
 
1322     $ordlabel      = $locale->text('Order Number');
 
1323     $ordnumber     = 'ordnumber';
 
1324     $employee      = $locale->text('Employee');
 
1327   if ($form->{type} eq 'sales_quotation') {
 
1328     $form->{title} = $locale->text('Quotations');
 
1329     $form->{vc}    = 'customer';
 
1330     $ordlabel      = $locale->text('Quotation Number');
 
1331     $ordnumber     = 'quonumber';
 
1332     $employee      = $locale->text('Employee');
 
1335   # setup vendor / customer selection
 
1336   $form->all_vc(\%myconfig, $form->{vc},
 
1337                 ($form->{vc} eq 'customer') ? "AR" : "AP");
 
1340   if (@{ $form->{all_departments} }) {
 
1341     $form->{selectdepartment} = "<option>\n";
 
1344       $form->{selectdepartment} .=
 
1345         "<option>$_->{description}--$_->{id}</option>\n"
 
1346     } (@{ $form->{all_departments} });
 
1351           <th align=right nowrap>| . $locale->text('Department') . qq|</th>
 
1352           <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
 
1354 | if $form->{selectdepartment};
 
1357   if (($form->{"type"} eq "sales_order") ||
 
1358       ($form->{"type"} eq "purchase_order")) {
 
1361           <td><input name="notdelivered" id="notdelivered" class="checkbox" type="checkbox" value="1" checked>
 
1362             <label for="notdelivered">|. $locale->text('Not delivered') . qq|</label></td>
 
1363           <td><input name="delivered" id="delivered" class="checkbox" type="checkbox" value="1" checked>
 
1364             <label for="delivered">| . $locale->text('Delivered') . qq|</label></td>
 
1369   # use JavaScript Calendar or not
 
1370   $form->{jsscript} = 1;
 
1374      <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
 
1375      <input type=button name=transdatefrom id="trigger3" value=|
 
1376     . $locale->text('button') . qq|></td>
 
1379      <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
 
1380      <input type=button name=transdateto name=transdateto id="trigger4" value=|
 
1381     . $locale->text('button') . qq|></td>
 
1386     Form->write_trigger(\%myconfig, "2", "transdatefrom", "BR", "trigger3",
 
1387                         "transdateto", "BL", "trigger4");
 
1389   my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
 
1391   $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
 
1393                    $vc => "ALL_" . uc($vc));
 
1397   foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
 
1398     push(@values, $item->{"id"});
 
1399     $labels{$item->{"id"}} = $item->{"projectnumber"};
 
1402     NTI($cgi->popup_menu('-name' => 'project_id', '-values' => \@values,
 
1403                          '-labels' => \%labels));
 
1408   foreach my $item (@{ $form->{($form->{vc} eq "customer" ? "ALL_CUSTOMERS" : "ALL_VENDORS")}}) {
 
1409     push(@values, $item->{name}.qq|--|.$item->{"id"});
 
1410     $labels{$item->{"id"}} = $item->{name}.qq|--|.$item->{"id"};
 
1413   my $vc_label = $form->{vc} eq "customer" ? $locale->text('Customer') : $locale->text('Vendor');
 
1415     $myconfig{vclimit} <=  scalar(@values)
 
1416     ? qq|<input type="text" value="| . H($form->{"old$form->{vc}"}) . qq|" name="$form->{vc}">|
 
1417     : NTI($cgi->popup_menu('-name' => "$form->{vc}",
 
1418                            '-default' => $form->{"old$form->{vc}"},
 
1419                            '-onChange' => 'document.getElementById(\'update_button\').click();',
 
1420                            '-values' => \@values,
 
1421                            '-labels' => \%labels));
 
1428 <form method=post action=$form->{script}>
 
1432     <th class=listtop>$form->{title}</th>
 
1434   <tr height="5"></tr>
 
1439           <th align=right>$vc_label</th>
 
1440           <td colspan=3>$vc</td>
 
1444           <th align=right>$ordlabel</th>
 
1445           <td colspan=3><input name="$ordnumber" size=20></td>
 
1448           <th align="right">| . $locale->text('Transaction description') . qq|</th>
 
1449           <td colspan="3"><input name="transaction_description" size=20></td>
 
1452           <th align="right">| . $locale->text("Project Number") . qq|</th>
 
1453           <td colspan="3">$projectnumber</td>
 
1456           <th align=right>| . $locale->text('From') . qq|</th>
 
1458           <th align=right>| . $locale->text('Bis') . qq|</th>
 
1461         <input type=hidden name=sort value=transdate>
 
1463           <th align=right>| . $locale->text('Include in Report') . qq|</th>
 
1467           <td><input type="checkbox" name="open" value="1" id="open" checked>
 
1468             <label for="open">| . $locale->text("Open") . qq|</td>
 
1469           <td><input type="checkbox" name="closed" value="1" id="closed">
 
1470             <label for="closed">| . $locale->text("Closed") . qq|</td>
 
1474                 <td><input name="l_id" class=checkbox type=checkbox value=Y>
 
1475                 | . $locale->text('ID') . qq|</td>
 
1476                 <td><input name="l_$ordnumber" class=checkbox type=checkbox value=Y checked> $ordlabel</td>
 
1477                 <td><input name="l_transdate" class=checkbox type=checkbox value=Y checked> |
 
1478     . $locale->text('Date') . qq|</td>
 
1479                 <td><input name="l_reqdate" class=checkbox type=checkbox value=Y checked> |
 
1480     . $locale->text('Required by') . qq|</td>
 
1483                 <td><input name="l_name" class=checkbox type=checkbox value=Y checked> ucfirst($form->{vc})</td>
 
1484                 <td><input name="l_employee" class=checkbox type=checkbox value=Y checked> $employee</td>
 
1485                 <td><input name="l_shipvia" class=checkbox type=checkbox value=Y> |
 
1486     . $locale->text('Ship via') . qq|</td>
 
1487                 <td><input name="l_employee" class=checkbox type=checkbox value=Y checked> $employee</td>
 
1490                 <td><input name="l_netamount" class=checkbox type=checkbox value=Y> |
 
1491     . $locale->text('Amount') . qq|</td>
 
1492                 <td><input name="l_tax" class=checkbox type=checkbox value=Y> |
 
1493     . $locale->text('Tax') . qq|</td>
 
1494                 <td><input name="l_amount" class=checkbox type=checkbox value=Y checked> |
 
1495     . $locale->text('Total') . qq|</td>
 
1498           <td><input name="l_globalprojectnumber" class=checkbox type=checkbox value=Y> |
 
1499           . $locale->text('Project Number') . qq|</td>
 
1500           <td><input name="l_transaction_description" class=checkbox type=checkbox value=Y> |
 
1501           . $locale->text('Transaction description') . qq|</td>
 
1504                 <td><input name="l_subtotal" class=checkbox type=checkbox value=Y> |
 
1505     . $locale->text('Subtotal') . qq|</td>
 
1513   <tr><td colspan=4><hr size=3 noshade></td></tr>
 
1519 <input type=hidden name=nextsub value=orders>
 
1520 <input type=hidden name=login value=$form->{login}>
 
1521 <input type=hidden name=password value=$form->{password}>
 
1522 <input type=hidden name=vc value=$form->{vc}>
 
1523 <input type=hidden name=type value=$form->{type}>
 
1525 <input class=submit type=submit name=action value="|
 
1526     . $locale->text('Continue') . qq|">
 
1533   $lxdebug->leave_sub();
 
1537   $lxdebug->enter_sub();
 
1539   $ordnumber = ($form->{type} =~ /_order$/) ? "ordnumber" : "quonumber";
 
1543     qw(type vc login password transdatefrom transdateto
 
1544        open closed notdelivered delivered department
 
1545        transaction_description);
 
1546   push @fields, $form->{vc};
 
1547   $href = "$form->{script}?action=orders&"
 
1548     . join("&", map { "${_}=" . E($form->{$_}) } @fields)
 
1549     . "&${ordnumber}=" . E($form->{$ordnumber});
 
1552   # split vendor / customer
 
1553   ($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) =
 
1554     split(/--/, $form->{ $form->{vc} });
 
1556   OE->transactions(\%myconfig, \%$form);
 
1559     "transdate",               "reqdate",
 
1561     "name",                    "netamount",
 
1564     "shipvia",                 "globalprojectnumber",
 
1565     "transaction_description", "open",
 
1566     "closed",                  "delivered"
 
1569   $form->{l_open} = $form->{l_closed} = "Y"
 
1570     if ($form->{open} && $form->{closed});
 
1572   $form->{"l_delivered"} = "Y"
 
1573     if ($form->{"delivered"} && $form->{"notdelivered"});
 
1575   foreach $item (@columns) {
 
1576     if ($form->{"l_$item"} eq "Y") {
 
1577       push @column_index, $item;
 
1579       # add column to href and callback
 
1580       $callback .= "&l_$item=Y";
 
1581       $href     .= "&l_$item=Y";
 
1585   # only show checkboxes if gotten here via sales_order form.
 
1586   if ($form->{type} =~ /sales_order/) {
 
1587     unshift @column_index, "ids";
 
1590   if ($form->{l_subtotal} eq 'Y') {
 
1591     $callback .= "&l_subtotal=Y";
 
1592     $href     .= "&l_subtotal=Y";
 
1595   if ($form->{vc} eq 'vendor') {
 
1596     if ($form->{type} eq 'purchase_order') {
 
1597       $form->{title} = $locale->text('Purchase Orders');
 
1599       $form->{title} = $locale->text('Request for Quotations');
 
1601     $name     = $locale->text('Vendor');
 
1602     $employee = $locale->text('Employee');
 
1604   if ($form->{vc} eq 'customer') {
 
1605     if ($form->{type} eq 'sales_order') {
 
1606       $form->{title} = $locale->text('Sales Orders');
 
1608       $form->{title} = $locale->text('Quotations');
 
1610     $employee = $locale->text('Employee');
 
1611     $name = $locale->text('Customer');
 
1614   $column_header{id} =
 
1615       qq|<th><a class=listheading href=$href&sort=id>|
 
1616     . $locale->text('ID')
 
1618   $column_header{transdate} =
 
1619       qq|<th><a class=listheading href=$href&sort=transdate>|
 
1620     . $locale->text('Date')
 
1622   $column_header{reqdate} =
 
1623       qq|<th><a class=listheading href=$href&sort=reqdate>|
 
1624     . $locale->text('Required by')
 
1626   $column_header{ordnumber} =
 
1627       qq|<th><a class=listheading href=$href&sort=ordnumber>|
 
1628     . $locale->text('Order')
 
1630   $column_header{quonumber} =
 
1631       qq|<th><a class=listheading href=$href&sort=quonumber>|
 
1632     . ($form->{"type"} eq "request_quotation" ?
 
1633        $locale->text('RFQ') :
 
1634        $locale->text('Quotation'))
 
1636   $column_header{name} =
 
1637     qq|<th><a class=listheading href=$href&sort=name>$name</a></th>|;
 
1638   $column_header{netamount} =
 
1639     qq|<th class=listheading>| . $locale->text('Amount') . qq|</th>|;
 
1640   $column_header{tax} =
 
1641     qq|<th class=listheading>| . $locale->text('Tax') . qq|</th>|;
 
1642   $column_header{amount} =
 
1643     qq|<th class=listheading>| . $locale->text('Total') . qq|</th>|;
 
1644   $column_header{curr} =
 
1645     qq|<th class=listheading>| . $locale->text('Curr') . qq|</th>|;
 
1646   $column_header{shipvia} =
 
1647       qq|<th><a class=listheading href=$href&sort=shipvia>|
 
1648     . $locale->text('Ship via')
 
1650   $column_header{globalprojectnumber} =
 
1651     qq|<th class="listheading">| . $locale->text('Project Number') . qq|</th>|;
 
1652   $column_header{open} =
 
1653     qq|<th class=listheading>| . $locale->text('O') . qq|</th>|;
 
1654   $column_header{closed} =
 
1655     qq|<th class=listheading>| . $locale->text('C') . qq|</th>|;
 
1656   $column_header{"delivered"} =
 
1657     qq|<th class="listheading">| . $locale->text("Delivered") . qq|</th>|;
 
1659   $column_header{employee} =
 
1660     qq|<th><a class=listheading href=$href&sort=employee>$employee</a></th>|;
 
1661   $column_header{transaction_description} =
 
1662     qq|<th><a class=listheading href="$href&sort=transaction_description">|
 
1663     . $locale->text("Transaction description") . qq|</a></th>|;
 
1665   $column_header{ids} = qq|<th></th>|;
 
1667   if ($form->{ $form->{vc} }) {
 
1668     $option = $locale->text(ucfirst $form->{vc});
 
1669     $option .= " : $form->{$form->{vc}}";
 
1671   if ($form->{department}) {
 
1672     $option .= "\n<br>" if ($option);
 
1673     ($department) = split /--/, $form->{department};
 
1674     $option .= $locale->text('Department') . " : $department";
 
1676   if ($form->{transdatefrom}) {
 
1678       . $locale->text('From') . " "
 
1679       . $locale->date(\%myconfig, $form->{transdatefrom}, 1);
 
1681   if ($form->{transdateto}) {
 
1683       . $locale->text('Bis') . " "
 
1684       . $locale->date(\%myconfig, $form->{transdateto}, 1);
 
1686   if ($form->{open}) {
 
1687     $option .= "\n<br>" if ($option);
 
1688     $option .= $locale->text('Open');
 
1690   if ($form->{closed}) {
 
1691     $option .= "\n<br>" if ($option);
 
1692     $option .= $locale->text('Closed');
 
1700 <form method="post" action="oe.pl">
 
1703     <th class=listtop>$form->{title}</th>
 
1705   <tr height="5"></tr>
 
1712         <tr class=listheading>|;
 
1714   map { print "\n$column_header{$_}" } @column_index;
 
1720   # add sort and escape callback
 
1721   $callback_escaped = $form->escape($callback . "&sort=$form->{sort}");
 
1723   if (@{ $form->{OE} }) {
 
1724     $sameitem = $form->{OE}->[0]->{ $form->{sort} };
 
1729   foreach $oe (@{ $form->{OE} }) {
 
1730     $form->{rowcount} = ++$j;
 
1732     if ($form->{l_subtotal} eq 'Y') {
 
1733       if ($sameitem ne $oe->{ $form->{sort} }) {
 
1735         $sameitem = $oe->{ $form->{sort} };
 
1739     map { $oe->{$_} *= $oe->{exchangerate} } (qw(netamount amount));
 
1741     $column_data{netamount} =
 
1743       . $form->format_amount(\%myconfig, $oe->{netamount}, 2, " ")
 
1745     $column_data{tax} = "<td align=right>"
 
1746       . $form->format_amount(\%myconfig, $oe->{amount} - $oe->{netamount},
 
1749     $column_data{amount} =
 
1751       . $form->format_amount(\%myconfig, $oe->{amount}, 2, " ") . "</td>";
 
1753     $totalnetamount += $oe->{netamount};
 
1754     $totalamount    += $oe->{amount};
 
1756     $subtotalnetamount += $oe->{netamount};
 
1757     $subtotalamount    += $oe->{amount};
 
1760       qq|<td><input name="multi_id_$j" class=checkbox type=checkbox><input type="hidden" name="trans_id_$j" value="$oe->{id}"></td>|;
 
1761     $column_data{id}        = "<td>$oe->{id}</td>";
 
1762     $column_data{transdate} = "<td>$oe->{transdate} </td>";
 
1763     $column_data{reqdate}   = "<td>$oe->{reqdate} </td>";
 
1765     $column_data{$ordnumber} =
 
1766       "<td><a href=oe.pl?action=$action&type=$form->{type}&id=$oe->{id}&vc=$form->{vc}&login=$form->{login}&password=$form->{password}&callback=$callback_escaped>$oe->{$ordnumber}</a></td>";
 
1767     $column_data{name} = "<td>$oe->{name}</td>";
 
1769     $column_data{employee} = "<td>$oe->{employee} </td>";
 
1770     $column_data{shipvia}  = "<td>$oe->{shipvia} </td>";
 
1771     $column_data{globalprojectnumber}  = "<td>" . H($oe->{globalprojectnumber}) . "</td>";
 
1773     if ($oe->{closed}) {
 
1774       $column_data{closed} = "<td align=center>X</td>";
 
1775       $column_data{open}   = "<td> </td>";
 
1777       $column_data{closed} = "<td> </td>";
 
1778       $column_data{open}   = "<td align=center>X</td>";
 
1780     $column_data{"delivered"} = "<td>" .
 
1781       ($oe->{"delivered"} ? $locale->text("Yes") : $locale->text("No")) .
 
1783     $column_data{transaction_description} = "<td>" . H($oe->{transaction_description}) . "</td>";
 
1788         <tr class=listrow$i>";
 
1790     map { print "\n$column_data{$_}" } @column_index;
 
1798   if ($form->{l_subtotal} eq 'Y') {
 
1804         <tr class=listtotal>|;
 
1806   map { $column_data{$_} = "<td> </td>" } @column_index;
 
1808   $column_data{netamount} =
 
1809     "<th class=listtotal align=right>"
 
1810     . $form->format_amount(\%myconfig, $totalnetamount, 2, " ") . "</th>";
 
1811   $column_data{tax} = "<th class=listtotal align=right>"
 
1812     . $form->format_amount(\%myconfig, $totalamount - $totalnetamount,
 
1815   $column_data{amount} =
 
1816     "<th class=listtotal align=right>"
 
1817     . $form->format_amount(\%myconfig, $totalamount, 2, " ") . "</th>";
 
1819   map { print "\n$column_data{$_}" } @column_index;
 
1827     <td><hr size=3 noshade></td>
 
1831   # multiple invoice edit button only if gotten there via sales_order form.
 
1833   if ($form->{type} =~ /sales_order/) {
 
1835   <input class"submit" type="submit" name="action" value="|
 
1836       . $locale->text('Continue') . qq|">
 
1837   <input type="hidden" name="nextsub" value="edit">
 
1838   <input type="hidden" name="type" value="$form->{type}">
 
1839   <input type="hidden" name="vc" value="$form->{vc}">
 
1840   <input type="hidden" name="login" value="$form->{login}">
 
1841   <input type="hidden" name="password" value="$form->{password}">
 
1842   <input type="hidden" name="callback" value="$callback">
 
1843   <input type="hidden" name="rowcount" value="$form->{rowcount}">|;
 
1850 <form method=post action=$form->{script}>
 
1852 <input name=callback type=hidden value="$form->{callback}">
 
1854 <input type=hidden name=type value=$form->{type}>
 
1855 <input type=hidden name=vc value=$form->{vc}>
 
1857 <input type=hidden name=login value=$form->{login}>
 
1858 <input type=hidden name=password value=$form->{password}>
 
1866   $lxdebug->leave_sub();
 
1870   $lxdebug->enter_sub();
 
1872   map { $column_data{$_} = "<td> </td>" } @column_index;
 
1874   $column_data{netamount} =
 
1875       "<th class=listsubtotal align=right>"
 
1876     . $form->format_amount(\%myconfig, $subtotalnetamount, 2, " ")
 
1878   $column_data{tax} = "<td class=listsubtotal align=right>"
 
1879     . $form->format_amount(\%myconfig, $subtotalamount - $subtotalnetamount,
 
1882   $column_data{amount} =
 
1883     "<th class=listsubtotal align=right>"
 
1884     . $form->format_amount(\%myconfig, $subtotalamount, 2, " ") . "</th>";
 
1886   $subtotalnetamount = 0;
 
1887   $subtotalamount    = 0;
 
1890         <tr class=listsubtotal>
 
1893   map { print "\n$column_data{$_}" } @column_index;
 
1899   $lxdebug->leave_sub();
 
1902 sub save_and_close {
 
1903   $lxdebug->enter_sub();
 
1905   if ($form->{type} =~ /_order$/) {
 
1906     $form->isblank("transdate", $locale->text('Order Date missing!'));
 
1908     $form->isblank("transdate", $locale->text('Quotation Date missing!'));
 
1911   my $idx = $form->{type} =~ /_quotation$/ ? "quonumber" : "ordnumber";
 
1912   $form->{$idx} =~ s/^\s*//g;
 
1913   $form->{$idx} =~ s/\s*$//g;
 
1915   $msg = ucfirst $form->{vc};
 
1916   $form->isblank($form->{vc}, $locale->text($msg . " missing!"));
 
1918   # $locale->text('Customer missing!');
 
1919   # $locale->text('Vendor missing!');
 
1921   $form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
 
1922     if ($form->{currency} ne $form->{defaultcurrency});
 
1926   if($form->{payment_id}) { 
 
1927     $payment_id = $form->{payment_id};
 
1930   # if the name changed get new values
 
1931   if (&check_name($form->{vc})) {
 
1932     if($form->{payment_id} eq "") { 
 
1933       $form->{payment_id} = $payment_id;
 
1939   $form->{id} = 0 if $form->{saveasnew};
 
1941   # this is for the internal notes section for the [email] Subject
 
1942   if ($form->{type} =~ /_order$/) {
 
1943     if ($form->{type} eq 'sales_order') {
 
1944       $form->{label} = $locale->text('Sales Order');
 
1946       $numberfld = "sonumber";
 
1947       $ordnumber = "ordnumber";
 
1949       $form->{label} = $locale->text('Purchase Order');
 
1951       $numberfld = "ponumber";
 
1952       $ordnumber = "ordnumber";
 
1955     $err = $locale->text('Cannot save order!');
 
1958     if ($form->{type} eq 'sales_quotation') {
 
1959       $form->{label} = $locale->text('Quotation');
 
1961       $numberfld = "sqnumber";
 
1962       $ordnumber = "quonumber";
 
1964       $form->{label} = $locale->text('Request for Quotation');
 
1966       $numberfld = "rfqnumber";
 
1967       $ordnumber = "quonumber";
 
1970     $err = $locale->text('Cannot save quotation!');
 
1974   # get new number in sequence if no number is given or if saveasnew was requested
 
1975   if (!$form->{$ordnumber} || $form->{saveasnew}) {
 
1976     $form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld);
 
1981   $form->error($err) if (!OE->save(\%myconfig, \%$form));
 
1983   # saving the history
 
1984   if(!exists $form->{addition}) {
 
1985     $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
 
1986         $form->{addition} = "SAVED";
 
1987         $form->save_history($form->dbconnect(\%myconfig));
 
1989   # /saving the history
 
1991   $form->redirect($form->{label} . " $form->{$ordnumber} " .
 
1992                   $locale->text('saved!'));
 
1994   $lxdebug->leave_sub();
 
1998   $lxdebug->enter_sub();
 
2000   if ($form->{type} =~ /_order$/) {
 
2001     $form->isblank("transdate", $locale->text('Order Date missing!'));
 
2003     $form->isblank("transdate", $locale->text('Quotation Date missing!'));
 
2006   my $idx = $form->{type} =~ /_quotation$/ ? "quonumber" : "ordnumber";
 
2007   $form->{$idx} =~ s/^\s*//g;
 
2008   $form->{$idx} =~ s/\s*$//g;
 
2010   $msg = ucfirst $form->{vc};
 
2011   $form->isblank($form->{vc}, $locale->text($msg . " missing!"));
 
2013   # $locale->text('Customer missing!');
 
2014   # $locale->text('Vendor missing!');
 
2016   $form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
 
2017     if ($form->{currency} ne $form->{defaultcurrency});
 
2021   if($form->{payment_id}) { 
 
2022     $payment_id = $form->{payment_id};
 
2025   # if the name changed get new values
 
2026   if (&check_name($form->{vc})) {
 
2027     if($form->{payment_id} eq "") { 
 
2028       $form->{payment_id} = $payment_id;
 
2034   $form->{id} = 0 if $form->{saveasnew};
 
2036   # this is for the internal notes section for the [email] Subject
 
2037   if ($form->{type} =~ /_order$/) {
 
2038     if ($form->{type} eq 'sales_order') {
 
2039       $form->{label} = $locale->text('Sales Order');
 
2041       $numberfld = "sonumber";
 
2042       $ordnumber = "ordnumber";
 
2044       $form->{label} = $locale->text('Purchase Order');
 
2046       $numberfld = "ponumber";
 
2047       $ordnumber = "ordnumber";
 
2050     $err = $locale->text('Cannot save order!');
 
2053     if ($form->{type} eq 'sales_quotation') {
 
2054       $form->{label} = $locale->text('Quotation');
 
2056       $numberfld = "sqnumber";
 
2057       $ordnumber = "quonumber";
 
2059       $form->{label} = $locale->text('Request for Quotation');
 
2061       $numberfld = "rfqnumber";
 
2062       $ordnumber = "quonumber";
 
2065     $err = $locale->text('Cannot save quotation!');
 
2069   $form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld)
 
2070     unless $form->{$ordnumber};
 
2074   OE->save(\%myconfig, \%$form);
 
2076   # saving the history
 
2077   if(!exists $form->{addition}) {
 
2078     $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
 
2079         $form->{addition} = "SAVED";
 
2080         $form->save_history($form->dbconnect(\%myconfig));
 
2082   # /saving the history 
 
2084   $form->{simple_save} = 1;
 
2085   if(!$form->{print_and_save}) {
 
2086     set_headings("edit");
 
2090   $lxdebug->leave_sub();
 
2094   $lxdebug->enter_sub();
 
2098   if ($form->{type} =~ /_order$/) {
 
2099     $msg       = $locale->text('Are you sure you want to delete Order Number');
 
2100     $ordnumber = 'ordnumber';
 
2102     $msg = $locale->text('Are you sure you want to delete Quotation Number');
 
2103     $ordnumber = 'quonumber';
 
2109 <form method=post action=$form->{script}>
 
2112   # delete action variable
 
2113   map { delete $form->{$_} } qw(action header);
 
2115   foreach $key (keys %$form) {
 
2116     $form->{$key} =~ s/\"/"/g;
 
2117     print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
 
2121 <h2 class=confirm>| . $locale->text('Confirm!') . qq|</h2>
 
2123 <h4>$msg $form->{$ordnumber}</h4>
 
2125 <input name=action class=submit type=submit value="|
 
2126     . $locale->text('Yes') . qq|">
 
2133   $lxdebug->leave_sub();
 
2137   $lxdebug->enter_sub();
 
2139   if ($form->{type} =~ /_order$/) {
 
2140     $msg = $locale->text('Order deleted!');
 
2141     $err = $locale->text('Cannot delete order!');
 
2143     $msg = $locale->text('Quotation deleted!');
 
2144     $err = $locale->text('Cannot delete quotation!');
 
2146   if (OE->delete(\%myconfig, \%$form, $spool)){
 
2147     $form->redirect($msg);
 
2148     # saving the history
 
2149     if(!exists $form->{addition}) {
 
2150       $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
 
2151           $form->{addition} = "DELETED";
 
2152           $form->save_history($form->dbconnect(\%myconfig));
 
2154     # /saving the history 
 
2158   $lxdebug->leave_sub();
 
2162   $lxdebug->enter_sub();
 
2164   if ($form->{type} =~ /_order$/) {
 
2166     # these checks only apply if the items don't bring their own ordnumbers/transdates.
 
2167     # The if clause ensures that by searching for empty ordnumber_#/transdate_# fields.
 
2168     $form->isblank("ordnumber", $locale->text('Order Number missing!'))
 
2169       if (+{ map { $form->{"ordnumber_$_"}, 1 } (1 .. $form->{rowcount} - 1) }->{''});
 
2170     $form->isblank("transdate", $locale->text('Order Date missing!'))
 
2171       if (+{ map { $form->{"transdate_$_"}, 1 } (1 .. $form->{rowcount} - 1) }->{''});
 
2173     # also copy deliverydate from the order
 
2174     $form->{deliverydate} = $form->{reqdate} if $form->{reqdate};
 
2175     $form->{orddate} = $form->{transdate};
 
2177     $form->isblank("quonumber", $locale->text('Quotation Number missing!'));
 
2178     $form->isblank("transdate", $locale->text('Quotation Date missing!'));
 
2179     $form->{ordnumber} = "";
 
2180     $form->{quodate} = $form->{transdate};
 
2183   if($form->{payment_id}) { 
 
2184     $payment_id = $form->{payment_id};
 
2187   # if the name changed get new values
 
2188   if (&check_name($form->{vc})) {
 
2189     if($form->{payment_id} eq "") { 
 
2190       $form->{payment_id} = $payment_id;
 
2196   $form->{cp_id} *= 1;
 
2198   for $i (1 .. $form->{rowcount}) {
 
2199     map({ $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig,
 
2200                                                      $form->{"${_}_${i}"})
 
2201             if ($form->{"${_}_${i}"}) }
 
2202         qw(ship qty sellprice listprice basefactor));
 
2205   if (   $form->{type} =~ /_order/
 
2206       && $form->{currency} ne $form->{defaultcurrency}) {
 
2208     # check if we need a new exchangerate
 
2209     $buysell = ($form->{type} eq 'sales_order') ? "buy" : "sell";
 
2211     $orddate      = $form->current_date(\%myconfig);
 
2213       $form->check_exchangerate(\%myconfig, $form->{currency}, $orddate,
 
2216     if (!$exchangerate) {
 
2217       &backorder_exchangerate($orddate, $buysell);
 
2222   # close orders/quotations
 
2223   $form->{closed} = 1;
 
2225   # save order if one ordnumber has been given
 
2226   # if not it's most likely a collective order, which can't be saved back
 
2227   # so they just have to be closed
 
2228   if (($form->{ordnumber} ne '') || ($form->{quonumber} ne '')) {
 
2229     OE->close_order(\%myconfig, \%$form);
 
2231     OE->close_orders(\%myconfig, \%$form);
 
2234   $form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig);
 
2236     $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
 
2239   $form->{closed} = 0;
 
2240   $form->{rowcount}--;
 
2241   $form->{shipto} = 1;
 
2243   if ($form->{type} =~ /_order$/) {
 
2244     $form->{exchangerate} = $exchangerate;
 
2248   if (   $form->{type} eq 'purchase_order'
 
2249       || $form->{type} eq 'request_quotation') {
 
2250     $form->{title}  = $locale->text('Add Vendor Invoice');
 
2251     $form->{script} = 'ir.pl';
 
2255   if ($form->{type} eq 'sales_order' || $form->{type} eq 'sales_quotation') {
 
2256     $form->{title}  = $locale->text('Add Sales Invoice');
 
2257     $form->{script} = 'is.pl';
 
2262   # bo creates the id, reset it
 
2263   map { delete $form->{$_} }
 
2264     qw(id subject message cc bcc printed emailed queued);
 
2265   $form->{ $form->{vc} } =~ s/--.*//g;
 
2266   $form->{type} = "invoice";
 
2269   $locale = new Locale "$myconfig{countrycode}", "$script";
 
2271   require "bin/mozilla/$form->{script}";
 
2273   map { $form->{"select$_"} = "" } ($form->{vc}, currency);
 
2275   map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
 
2276     qw(creditlimit creditremaining);
 
2278   $currency = $form->{currency};
 
2281   $form->{currency}     = $currency;
 
2282   $form->{exchangerate} = "";
 
2283   $form->{forex}        = "";
 
2284   $form->{exchangerate} = $exchangerate
 
2288                       $form->check_exchangerate(
 
2289                       \%myconfig, $form->{currency}, $form->{invdate}, $buysell
 
2292   $form->{creditremaining} -= ($form->{oldinvtotal} - $form->{ordtotal});
 
2297   for $i (1 .. $form->{rowcount}) {
 
2298     $form->{"discount_$i"} =
 
2299       $form->format_amount(\%myconfig, $form->{"discount_$i"});
 
2301     ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
 
2303     $decimalplaces = ($dec > 2) ? $dec : 2;
 
2305     # copy delivery date from reqdate for order -> invoice conversion
 
2306     $form->{"deliverydate_$i"} = $form->{"reqdate_$i"}
 
2307       unless $form->{"deliverydate_$i"};
 
2309     $form->{"sellprice_$i"} =
 
2310       $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
 
2313     (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/);
 
2314     $dec_qty = length $dec_qty;
 
2316       $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
 
2318     map { $form->{"${_}_$i"} =~ s/\"/"/g }
 
2319       qw(partnumber description unit);
 
2325   $lxdebug->leave_sub();
 
2328 sub backorder_exchangerate {
 
2329   $lxdebug->enter_sub();
 
2330   my ($orddate, $buysell) = @_;
 
2337 <form method=post action=$form->{script}>
 
2340   # delete action variable
 
2341   map { delete $form->{$_} } qw(action header exchangerate);
 
2343   foreach $key (keys %$form) {
 
2344     $form->{$key} =~ s/\"/"/g;
 
2345     print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
 
2348   $form->{title} = $locale->text('Add Exchangerate');
 
2352 <input type=hidden name=login value=$form->{login}>
 
2353 <input type=hidden name=password value=$form->{password}>
 
2355 <input type=hidden name=exchangeratedate value=$orddate>
 
2356 <input type=hidden name=buysell value=$buysell>
 
2359   <tr><th class=listtop>$form->{title}</th></tr>
 
2360   <tr height="5"></tr>
 
2365           <th align=right>| . $locale->text('Currency') . qq|</th>
 
2366           <td>$form->{currency}</td>
 
2369           <th align=right>| . $locale->text('Date') . qq|</th>
 
2373           <th align=right>| . $locale->text('Exchangerate') . qq|</th>
 
2374           <td><input name=exchangerate size=11></td>
 
2384 <input type=hidden name=nextsub value=save_exchangerate>
 
2386 <input name=action class=submit type=submit value="|
 
2387     . $locale->text('Continue') . qq|">
 
2395   $lxdebug->leave_sub();
 
2398 sub save_exchangerate {
 
2399   $lxdebug->enter_sub();
 
2401   $form->isblank("exchangerate", $locale->text('Exchangerate missing!'));
 
2402   $form->{exchangerate} =
 
2403     $form->parse_amount(\%myconfig, $form->{exchangerate});
 
2404   $form->save_exchangerate(\%myconfig, $form->{currency},
 
2405                            $form->{exchangeratedate},
 
2406                            $form->{exchangerate}, $form->{buysell});
 
2410   $lxdebug->leave_sub();
 
2413 sub create_backorder {
 
2414   $lxdebug->enter_sub();
 
2416   $form->{shipped} = 1;
 
2418   # figure out if we need to create a backorder
 
2419   # items aren't saved if qty != 0
 
2421   for $i (1 .. $form->{rowcount}) {
 
2422     $totalqty  += $qty  = $form->{"qty_$i"};
 
2423     $totalship += $ship = $form->{"ship_$i"};
 
2425     $form->{"qty_$i"} = $qty - $ship;
 
2428   if ($totalship == 0) {
 
2429     map { $form->{"ship_$_"} = $form->{"qty_$_"} } (1 .. $form->{rowcount});
 
2430     $form->{ordtotal} = 0;
 
2431     $form->{shipped}  = 0;
 
2435   if ($totalqty == $totalship) {
 
2436     map { $form->{"qty_$_"} = $form->{"ship_$_"} } (1 .. $form->{rowcount});
 
2437     $form->{ordtotal} = 0;
 
2442     qw(partnumber description qty ship unit sellprice discount id inventory_accno bin income_accno expense_accno listprice assembly taxaccounts partsgroup)
 
2445   for $i (1 .. $form->{rowcount}) {
 
2447       $form->{"${_}_$i"} =
 
2448         $form->format_amount(\%myconfig, $form->{"${_}_$i"})
 
2449     } qw(sellprice discount);
 
2454   OE->save(\%myconfig, \%$form);
 
2456   # rebuild rows for invoice
 
2460   for $i (1 .. $form->{rowcount}) {
 
2461     $form->{"qty_$i"} = $form->{"ship_$i"};
 
2463     if ($form->{"qty_$i"}) {
 
2466       map { $a[$j]->{$_} = $form->{"${_}_$i"} } @flds;
 
2471   $form->redo_rows(\@flds, \@a, $count, $form->{rowcount});
 
2472   $form->{rowcount} = $count;
 
2474   $lxdebug->leave_sub();
 
2478   $lxdebug->enter_sub();
 
2480   $form->{saveasnew} = 1;
 
2481   $form->{closed}    = 0;
 
2482   map { delete $form->{$_} } qw(printed emailed queued);
 
2484   # Let Lx-Office assign a new order number if the user hasn't changed the
 
2485   # previous one. If it has been changed manually then use it as-is.
 
2486   my $idx = $form->{type} =~ /_quotation$/ ? "quonumber" : "ordnumber";
 
2487   $form->{$idx} =~ s/^\s*//g;
 
2488   $form->{$idx} =~ s/\s*$//g;
 
2489   if ($form->{saved_xyznumber} &&
 
2490       ($form->{saved_xyznumber} eq $form->{$idx})) {
 
2491     delete($form->{$idx});
 
2496   $lxdebug->leave_sub();
 
2499 sub purchase_order {
 
2500   $lxdebug->enter_sub();
 
2502   if (   $form->{type} eq 'sales_quotation'
 
2503       || $form->{type} eq 'request_quotation') {
 
2504     OE->close_order(\%myconfig, \%$form);
 
2507   if ($form->{type} =~ /^sales_/) {
 
2508     delete($form->{ordnumber});
 
2511   $form->{cp_id} *= 1;
 
2513   $form->{title} = $locale->text('Add Purchase Order');
 
2514   $form->{vc}    = "vendor";
 
2515   $form->{type}  = "purchase_order";
 
2519   $lxdebug->leave_sub();
 
2523   $lxdebug->enter_sub();
 
2525   if (   $form->{type} eq 'sales_quotation'
 
2526       || $form->{type} eq 'request_quotation') {
 
2527     OE->close_order(\%myconfig, $form);
 
2530   if ($form->{type} eq "purchase_order") {
 
2531     delete($form->{ordnumber});
 
2534   $form->{cp_id} *= 1;
 
2536   $form->{title} = $locale->text('Add Sales Order');
 
2537   $form->{vc}    = "customer";
 
2538   $form->{type}  = "sales_order";
 
2542   $lxdebug->leave_sub();
 
2546   $lxdebug->enter_sub();
 
2548   $form->{transdate} = $form->current_date(\%myconfig);
 
2549   delete $form->{duedate};
 
2551   $form->{closed} = 0;
 
2554   map { delete $form->{$_} }
 
2555     qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal);
 
2557   for $i (1 .. $form->{rowcount}) {
 
2558     map({ $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig,
 
2559                                                      $form->{"${_}_${i}"})
 
2560             if ($form->{"${_}_${i}"}) }
 
2561         qw(ship qty sellprice listprice basefactor));
 
2569   for $i (1 .. $form->{rowcount} - 1) {
 
2570     map { $form->{"${_}_$i"} =~ s/\"/"/g }
 
2571       qw(partnumber description unit);
 
2574   map { $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, 0, "0") }
 
2575     qw(creditlimit creditremaining);
 
2579   $lxdebug->leave_sub();
 
2583   $lxdebug->enter_sub();
 
2585   $form->{print_and_save} = 1;
 
2590     my $saved_form = save_form();
 
2595     map({ $saved_vars{$_} = $form->{$_}; } qw(id ordnumber quonumber));
 
2596     restore_form($saved_form);
 
2597     map({ $form->{$_} = $saved_vars{$_}; } qw(id ordnumber quonumber));
 
2602   $lxdebug->leave_sub();