#===================================================================== # LedgerSMB Small Medium Business Accounting # http://www.ledgersmb.org/ # # Copyright (C) 2006 # This work contains copyrighted information from a number of sources all used # with permission. # # This file contains source code included with or based on SQL-Ledger which # is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed # under the GNU General Public License version 2 or, at your option, any later # version. For a full list including contact information of contributors, # maintainers, and copyright holders, see the CONTRIBUTORS file. # # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork): # Copyright (c) 2001 # # Author: DWS Systems Inc. # Web: http://www.sql-ledger.org # # Contributors: Reed White <alta@alta-research.com> # # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #====================================================================== # # customer/vendor module # #====================================================================== use LedgerSMB::CT; 1; # end of main sub add { $form->{title} = "Add"; # $locale->text('Add Customer') # $locale->text('Add Vendor') $form->{callback} = "$form->{script}?action=add&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}" unless $form->{callback}; CT->create_links(\%myconfig, \%$form); &form_header; &form_footer; } sub history { # $locale->text('Customer History') # $locale->text('Vendor History') $history = 1; $label = ucfirst $form->{db}; $label .= " History"; if ($form->{db} eq 'customer') { $invlabel = $locale->text('Sales Invoices'); $ordlabel = $locale->text('Sales Orders'); $quolabel = $locale->text('Quotations'); } else { $invlabel = $locale->text('Vendor Invoices'); $ordlabel = $locale->text('Purchase Orders'); $quolabel = $locale->text('Request for Quotations'); } $form->{title} = $locale->text($label); $form->{nextsub} = "list_history"; $transactions = qq| <tr> <td></td> <td> <table> <tr> <td> <table> <tr> <td><input name=type type=radio class=radio value=invoice checked> $invlabel</td> </tr> <tr> <td><input name=type type=radio class=radio value=order> $ordlabel</td> </tr> <tr> <td><input name="type" type=radio class=radio value=quotation> $quolabel</td> </tr> </table> </td> <td> <table> <tr> <th>|.$locale->text('From').qq|</th> <td><input name=transdatefrom size=11 title="$myconfig{dateformat}"></td> <th>|.$locale->text('To').qq|</th> <td><input name=transdateto size=11 title="$myconfig{dateformat}"></td> </tr> <tr> <td></td> <td colspan=3> <input name="open" type=checkbox class=checkbox value=Y checked> |.$locale->text('Open').qq| <input name="closed" type=checkbox class=checkbox value=Y checked> |.$locale->text('Closed').qq| </td> </tr> </table> </td> </tr> </table> </td> </tr> |; $include = qq| <tr> <th align=right nowrap>|.$locale->text('Include in Report').qq|</th> <td> <table> <tr> <td><input name=history type=radio class=radio value=summary checked> |.$locale->text('Summary').qq|</td> <td><input name=history type=radio class=radio value=detail> |.$locale->text('Detail').qq| </td> </tr> <tr> <td> <input name="l_partnumber" type=checkbox class=checkbox value=Y checked> |.$locale->text('Part Number').qq| </td> <td> <input name="l_description" type=checkbox class=checkbox value=Y checked> |.$locale->text('Description').qq| </td> <td> <input name="l_sellprice" type=checkbox class=checkbox value=Y checked> |.$locale->text('Sell Price').qq| </td> <td> <input name="l_curr" type=checkbox class=checkbox value=Y> |.$locale->text('Currency').qq| </td> </tr> <tr> <td> <input name="l_qty" type=checkbox class=checkbox value=Y> |.$locale->text('Qty').qq| </td> <td> <input name="l_unit" type=checkbox class=checkbox value=Y> |.$locale->text('Unit').qq| </td> <td> <input name="l_discount" type=checkbox class=checkbox value=Y> |.$locale->text('Discount').qq| </td> <tr> </tr> <td> <input name="l_deliverydate" type=checkbox class=checkbox value=Y> |.$locale->text('Delivery Date').qq| </td> <td> <input name="l_projectnumber" type=checkbox class=checkbox value=Y> |.$locale->text('Project Number').qq| </td> <td> <input name="l_serialnumber" type=checkbox class=checkbox value=Y> |.$locale->text('Serial Number').qq| </td> </tr> </table> </td> </tr> |; &search_name; if ($form->{lynx}) { require "bin/menu.pl"; &menubar; } print qq| </body> </html> |; } sub transactions { if ($form->{db} eq 'customer') { $translabel = $locale->text('AR Transactions'); $invlabel = $locale->text('Sales Invoices'); $ordlabel = $locale->text('Sales Orders'); $quolabel = $locale->text('Quotations'); } else { $translabel = $locale->text('AP Transactions'); $invlabel = $locale->text('Vendor Invoices'); $ordlabel = $locale->text('Purchase Orders'); $quolabel = $locale->text('Request for Quotations'); } $transactions = qq| <tr> <td></td> <td> <table> <tr> <td> <table> <tr> <td><input name="l_transnumber" type=checkbox class=checkbox value=Y> $translabel</td> </tr> <tr> <td><input name="l_invnumber" type=checkbox class=checkbox value=Y> $invlabel</td> </tr> <tr> <td><input name="l_ordnumber" type=checkbox class=checkbox value=Y> $ordlabel</td> </tr> <tr> <td><input name="l_quonumber" type=checkbox class=checkbox value=Y> $quolabel</td> </tr> </table> </td> <td> <table> <tr> <th>|.$locale->text('From').qq|</th> <td><input name=transdatefrom size=11 title="$myconfig{dateformat}"></td> <th>|.$locale->text('To').qq|</th> <td><input name=transdateto size=11 title="$myconfig{dateformat}"></td> </tr> <tr> <td></td> <td colspan=3> <input name="open" type=checkbox class=checkbox value=Y checked> |.$locale->text('Open').qq| <input name="closed" type=checkbox class=checkbox value=Y checked> |.$locale->text('Closed').qq| </td> </tr> <tr> <td></td> <td colspan=3> <input name="l_amount" type=checkbox class=checkbox value=Y checked> |.$locale->text('Amount').qq| <input name="l_tax" type=checkbox class=checkbox value=Y checked> |.$locale->text('Tax').qq| <input name="l_total" type=checkbox class=checkbox value=Y checked> |.$locale->text('Total').qq| <input name="l_subtotal" type=checkbox class=checkbox value=Y> |.$locale->text('Subtotal').qq| </td> </tr> </table> </td> </tr> </table> </td> </tr> |; } sub include_in_report { $label = ucfirst $form->{db}; @a = (); push @a, qq|<input name="l_ndx" type=checkbox class=checkbox value=Y> |.$locale->text('No.'); push @a, qq|<input name="l_id" type=checkbox class=checkbox value=Y> |.$locale->text('ID'); push @a, qq|<input name="l_$form->{db}number" type=checkbox class=checkbox value=Y> |.$locale->text($label . ' Number'); push @a, qq|<input name="l_name" type=checkbox class=checkbox value=Y $form->{l_name}> |.$locale->text('Company Name'); push @a, qq|<input name="l_contact" type=checkbox class=checkbox value=Y $form->{l_contact}> |.$locale->text('Contact'); push @a, qq|<input name="l_email" type=checkbox class=checkbox value=Y $form->{l_email}> |.$locale->text('E-mail'); push @a, qq|<input name="l_address" type=checkbox class=checkbox value=Y> |.$locale->text('Address'); push @a, qq|<input name="l_city" type=checkbox class=checkbox value=Y> |.$locale->text('City'); push @a, qq|<input name="l_state" type=checkbox class=checkbox value=Y> |.$locale->text('State/Province'); push @a, qq|<input name="l_zipcode" type=checkbox class=checkbox value=Y> |.$locale->text('Zip/Postal Code'); push @a, qq|<input name="l_country" type=checkbox class=checkbox value=Y> |.$locale->text('Country'); push @a, qq|<input name="l_phone" type=checkbox class=checkbox value=Y $form->{l_phone}> |.$locale->text('Phone'); push @a, qq|<input name="l_fax" type=checkbox class=checkbox value=Y> |.$locale->text('Fax'); push @a, qq|<input name="l_cc" type=checkbox class=checkbox value=Y> |.$locale->text('Cc'); if ($myconfig{role} =~ /(admin|manager)/) { push @a, qq|<input name="l_bcc" type=checkbox class=checkbox value=Y> |.$locale->text('Bcc'); } push @a, qq|<input name="l_notes" type=checkbox class=checkbox value=Y> |.$locale->text('Notes'); push @a, qq|<input name="l_discount" type=checkbox class=checkbox value=Y> |.$locale->text('Discount'); push @a, qq|<input name="l_taxaccount" type=checkbox class=checkbox value=Y> |.$locale->text('Tax Account'); push @a, qq|<input name="l_taxnumber" type=checkbox class=checkbox value=Y> |.$locale->text('Tax Number'); if ($form->{db} eq 'customer') { push @a, qq|<input name="l_employee" type=checkbox class=checkbox value=Y> |.$locale->text('Salesperson'); push @a, qq|<input name="l_manager" type=checkbox class=checkbox value=Y> |.$locale->text('Manager'); push @a, qq|<input name="l_pricegroup" type=checkbox class=checkbox value=Y> |.$locale->text('Pricegroup'); } else { push @a, qq|<input name="l_employee" type=checkbox class=checkbox value=Y> |.$locale->text('Employee'); push @a, qq|<input name="l_manager" type=checkbox class=checkbox value=Y> |.$locale->text('Manager'); push @a, qq|<input name="l_gifi_accno" type=checkbox class=checkbox value=Y> |.$locale->text('GIFI'); } push @a, qq|<input name="l_sic_code" type=checkbox class=checkbox value=Y> |.$locale->text('SIC'); push @a, qq|<input name="l_iban" type=checkbox class=checkbox value=Y> |.$locale->text('IBAN'); push @a, qq|<input name="l_bic" type=checkbox class=checkbox value=Y> |.$locale->text('BIC'); push @a, qq|<input name="l_business" type=checkbox class=checkbox value=Y> |.$locale->text('Type of Business'); push @a, qq|<input name="l_terms" type=checkbox class=checkbox value=Y> |.$locale->text('Terms'); push @a, qq|<input name="l_language" type=checkbox class=checkbox value=Y> |.$locale->text('Language'); push @a, qq|<input name="l_startdate" type=checkbox class=checkbox value=Y> |.$locale->text('Startdate'); push @a, qq|<input name="l_enddate" type=checkbox class=checkbox value=Y> |.$locale->text('Enddate'); $include = qq| <tr> <th align=right nowrap>|.$locale->text('Include in Report').qq|</th> <td> <table> |; while (@a) { $include .= qq|<tr>\n|; for (1 .. 5) { $include .= qq|<td nowrap>|. shift @a; $include .= qq|</td>\n|; } $include .= qq|</tr>\n|; } $include .= qq| </table> </td> </tr> |; } sub search { # $locale->text('Customers') # $locale->text('Vendors') $form->{title} = $locale->text('Search') unless $form->{title}; for (qw(name contact phone email)) { $form->{"l_$_"} = 'checked' } $form->{nextsub} = "list_names"; $orphan = qq| <tr> <td></td> <td><input name=status class=radio type=radio value=all checked> |.$locale->text('All').qq| <input name=status class=radio type=radio value=active> |.$locale->text('Active').qq| <input name=status class=radio type=radio value=inactive> |.$locale->text('Inactive').qq| <input name=status class=radio type=radio value=orphaned> |.$locale->text('Orphaned').qq|</td> </tr> |; &transactions; &include_in_report; &search_name; if ($form->{lynx}) { require "bin/menu.pl"; &menubar; } print qq| </body> </html> |; } sub search_name { $label = ucfirst $form->{db}; if ($form->{db} eq 'customer') { $employee = qq| <th align=right nowrap>|.$locale->text('Salesperson').qq|</th> <td><input name=employee size=32></td> |; } if ($form->{db} eq 'vendor') { $employee = qq| <th align=right nowrap>|.$locale->text('Employee').qq|</th> <td><input name=employee size=32></td> |; } $form->header; print qq| <body> <form method=post action=$form->{script}> <input type=hidden name=db value=$form->{db}> <table width=100%> <tr> <th class=listtop>$form->{title}</th> </tr> <tr height="5"></tr> <tr valign=top> <td> <table> <tr valign=top> <td> <table> <tr> <th align=right nowrap>|.$locale->text('Company Name').qq|</th> <td><input name=name size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Contact').qq|</th> <td><input name=contact size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('E-mail').qq|</th> <td><input name=email size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Phone').qq|</th> <td><input name=phone size=20></td> </tr> <tr> $employee </tr> <tr> <th align=right nowrap>|.$locale->text('Notes').qq|</th> <td colspan=3><textarea name=notes rows=3 cols=32></textarea></td> </tr> </table> </td> <td> <table> <tr> <th align=right nowrap>|.$locale->text($label . ' Number').qq|</th> <td><input name=$form->{db}number size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Address').qq|</th> <td><input name=address size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('City').qq|</th> <td><input name=city size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('State/Province').qq|</th> <td><input name=state size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Zip/Postal Code').qq|</th> <td><input name=zipcode size=10></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Country').qq|</th> <td><input name=country size=32></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Startdate').qq|</th> <td>|.$locale->text('From').qq| <input name=startdatefrom size=11 title="$myconfig{dateformat}"> |.$locale->text('To').qq| <input name=startdateto size=11 title="$myconfig{dateformat}"></td> </tr> </table> </td> </tr> </table> </td> </tr> <tr> <td> <table> $orphan $transactions $include </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> <input type="hidden" name="nextsub" value="$form->{nextsub}"> <input type="hidden" name="path" value="$form->{path}"> <input type="hidden" name="login" value="$form->{login}"> <input type="hidden" name="sessionid" value="$form->{sessionid}"> <br> <button type="submit" class="submit" name="action" value="continue">|.$locale->text('Continue').qq|</button> </form> |; } sub list_names { CT->search(\%myconfig, \%$form); $href = "$form->{script}?action=list_names&direction=$form->{direction}&oldsort=$form->{oldsort}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}&l_subtotal=$form->{l_subtotal}"; $form->sort_order(); $callback = "$form->{script}?action=list_names&direction=$form->{direction}&oldsort=$form->{oldsort}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}&l_subtotal=$form->{l_subtotal}"; @columns = $form->sort_columns(id, name, "$form->{db}number", address, city, state, zipcode, country, contact, phone, fax, email, cc, bcc, employee, manager, notes, discount, terms, taxaccount, taxnumber, gifi_accno, sic_code, business, pricegroup, language, iban, bic, startdate, enddate, invnumber, invamount, invtax, invtotal, ordnumber, ordamount, ordtax, ordtotal, quonumber, quoamount, quotax, quototal); unshift @columns, "ndx"; $form->{l_invnumber} = "Y" if $form->{l_transnumber}; foreach $item (qw(inv ord quo)) { if ($form->{"l_${item}number"}) { for (qw(amount tax total)) { $form->{"l_$item$_"} = $form->{"l_$_"} } $removeemployee = 1; $openclosed = 1; } } $form->{open} = $form->{closed} = "" if !$openclosed; foreach $item (@columns) { if ($form->{"l_$item"} eq "Y") { push @column_index, $item; # add column to href and callback $callback .= "&l_$item=Y"; $href .= "&l_$item=Y"; } } foreach $item (qw(amount tax total transnumber)) { if ($form->{"l_$item"} eq "Y") { $callback .= "&l_$item=Y"; $href .= "&l_$item=Y"; } } if ($form->{status} eq 'all') { $option = $locale->text('All'); } if ($form->{status} eq 'orphaned') { $option = $locale->text('Orphaned'); } if ($form->{status} eq 'active') { $option = $locale->text('Active'); } if ($form->{status} eq 'inactive') { $option = $locale->text('Inactive'); } if ($form->{name}) { $callback .= "&name=".$form->escape($form->{name},1); $href .= "&name=".$form->escape($form->{name}); $option .= "\n<br>".$locale->text('Name')." : $form->{name}"; } if ($form->{address}) { $callback .= "&address=".$form->escape($form->{address},1); $href .= "&address=".$form->escape($form->{address}); $option .= "\n<br>".$locale->text('Address')." : $form->{address}"; } if ($form->{city}) { $callback .= "&city=".$form->escape($form->{city},1); $href .= "&city=".$form->escape($form->{city}); $option .= "\n<br>".$locale->text('City')." : $form->{city}"; } if ($form->{state}) { $callback .= "&state=".$form->escape($form->{state},1); $href .= "&state=".$form->escape($form->{state}); $option .= "\n<br>".$locale->text('State')." : $form->{state}"; } if ($form->{zipcode}) { $callback .= "&zipcode=".$form->escape($form->{zipcode},1); $href .= "&zipcode=".$form->escape($form->{zipcode}); $option .= "\n<br>".$locale->text('Zip/Postal Code')." : $form->{zipcode}"; } if ($form->{country}) { $callback .= "&country=".$form->escape($form->{country},1); $href .= "&country=".$form->escape($form->{country}); $option .= "\n<br>".$locale->text('Country')." : $form->{country}"; } if ($form->{contact}) { $callback .= "&contact=".$form->escape($form->{contact},1); $href .= "&contact=".$form->escape($form->{contact}); $option .= "\n<br>".$locale->text('Contact')." : $form->{contact}"; } if ($form->{employee}) { $callback .= "&employee=".$form->escape($form->{employee},1); $href .= "&employee=".$form->escape($form->{employee}); $option .= "\n<br>"; if ($form->{db} eq 'customer') { $option .= $locale->text('Salesperson'); } if ($form->{db} eq 'vendor') { $option .= $locale->text('Employee'); } $option .= " : $form->{employee}"; } $fromdate = ""; $todate = ""; if ($form->{startdatefrom}) { $callback .= "&startdatefrom=$form->{startdatefrom}"; $href .= "&startdatefrom=$form->{startdatefrom}"; $fromdate = $locale->date(\%myconfig, $form->{startdatefrom}, 1); } if ($form->{startdateto}) { $callback .= "&startdateto=$form->{startdateto}"; $href .= "&startdateto=$form->{startdateto}"; $todate = $locale->date(\%myconfig, $form->{startdateto}, 1); } if ($fromdate || $todate) { $option .= "\n<br>".$locale->text('Startdate')." $fromdate - $todate"; } if ($form->{notes}) { $callback .= "¬es=".$form->escape($form->{notes},1); $href .= "¬es=".$form->escape($form->{notes}); $option .= "\n<br>".$locale->text('Notes')." : $form->{notes}"; } if ($form->{"$form->{db}number"}) { $callback .= qq|&$form->{db}number=|.$form->escape($form->{"$form->{db}number"},1); $href .= "&$form->{db}number=".$form->escape($form->{"$form->{db}number"}); $option .= "\n<br>".$locale->text('Number').qq| : $form->{"$form->{db}number"}|; } if ($form->{phone}) { $callback .= "&phone=".$form->escape($form->{phone},1); $href .= "&phone=".$form->escape($form->{phone}); $option .= "\n<br>".$locale->text('Phone')." : $form->{phone}"; } if ($form->{email}) { $callback .= "&email=".$form->escape($form->{email},1); $href .= "&email=".$form->escape($form->{email}); $option .= "\n<br>".$locale->text('E-mail')." : $form->{email}"; } if ($form->{transdatefrom}) { $callback .= "&transdatefrom=$form->{transdatefrom}"; $href .= "&transdatefrom=$form->{transdatefrom}"; $option .= "\n<br>" if ($option); $option .= $locale->text('From')." ".$locale->date(\%myconfig, $form->{transdatefrom}, 1); } if ($form->{transdateto}) { $callback .= "&transdateto=$form->{transdateto}"; $href .= "&transdateto=$form->{transdateto}"; if ($form->{transdatefrom}) { $option .= " "; } else { $option .= "\n<br>" if ($option); } $option .= $locale->text('To')." ".$locale->date(\%myconfig, $form->{transdateto}, 1); } if ($form->{open}) { $callback .= "&open=$form->{open}"; $href .= "&open=$form->{open}"; $option .= "\n<br>" if ($option); $option .= $locale->text('Open'); } if ($form->{closed}) { $callback .= "&closed=$form->{closed}"; $href .= "&closed=$form->{closed}"; $option .= "\n<br>" if ($option); $option .= $locale->text('Closed'); } $form->{callback} = "$callback&sort=$form->{sort}"; $callback = $form->escape($form->{callback}); $column_header{ndx} = qq|<th class=listheading> </th>|; $column_header{id} = qq|<th class=listheading>|.$locale->text('ID').qq|</th>|; $column_header{"$form->{db}number"} = qq|<th><a class=listheading href=$href&sort=$form->{db}number>|.$locale->text('Number').qq|</a></th>|; $column_header{name} = qq|<th><a class=listheading href=$href&sort=name>|.$locale->text('Name').qq|</a></th>|; $column_header{address} = qq|<th class=listheading>|.$locale->text('Address').qq|</th>|; $column_header{city} = qq|<th><a class=listheading href=$href&sort=city>|.$locale->text('City').qq|</a></th>|; $column_header{state} = qq|<th><a class=listheading href=$href&sort=state>|.$locale->text('State/Province').qq|</a></th>|; $column_header{zipcode} = qq|<th><a class=listheading href=$href&sort=zipcode>|.$locale->text('Zip/Postal Code').qq|</a></th>|; $column_header{country} = qq|<th><a class=listheading href=$href&sort=country>|.$locale->text('Country').qq|</a></th>|; $column_header{contact} = qq|<th><a class=listheading href=$href&sort=contact>|.$locale->text('Contact').qq|</a></th>|; $column_header{phone} = qq|<th><a class=listheading href=$href&sort=phone>|.$locale->text('Phone').qq|</a></th>|; $column_header{fax} = qq|<th><a class=listheading href=$href&sort=fax>|.$locale->text('Fax').qq|</a></th>|; $column_header{email} = qq|<th><a class=listheading href=$href&sort=email>|.$locale->text('E-mail').qq|</a></th>|; $column_header{cc} = qq|<th><a class=listheading href=$href&sort=cc>|.$locale->text('Cc').qq|</a></th>|; $column_header{bcc} = qq|<th><a class=listheading href=$href&sort=cc>|.$locale->text('Bcc').qq|</a></th>|; $column_header{notes} = qq|<th><a class=listheading href=$href&sort=notes>|.$locale->text('Notes').qq|</a></th>|; $column_header{discount} = qq|<th class=listheading>%</th>|; $column_header{terms} = qq|<th class=listheading>|.$locale->text('Terms').qq|</th>|; $column_header{taxnumber} = qq|<th><a class=listheading href=$href&sort=taxnumber>|.$locale->text('Tax Number').qq|</a></th>|; $column_header{taxaccount} = qq|<th class=listheading>|.$locale->text('Tax Account').qq|</th>|; $column_header{gifi_accno} = qq|<th><a class=listheading href=$href&sort=gifi_accno>|.$locale->text('GIFI').qq|</a></th>|; $column_header{sic_code} = qq|<th><a class=listheading href=$href&sort=sic_code>|.$locale->text('SIC').qq|</a></th>|; $column_header{business} = qq|<th><a class=listheading href=$href&sort=business>|.$locale->text('Type of Business').qq|</a></th>|; $column_header{iban} = qq|<th class=listheading>|.$locale->text('IBAN').qq|</th>|; $column_header{bic} = qq|<th class=listheading>|.$locale->text('BIC').qq|</th>|; $column_header{startdate} = qq|<th><a class=listheading href=$href&sort=startdate>|.$locale->text('Startdate').qq|</a></th>|; $column_header{enddate} = qq|<th><a class=listheading href=$href&sort=enddate>|.$locale->text('Enddate').qq|</a></th>|; $column_header{invnumber} = qq|<th><a class=listheading href=$href&sort=invnumber>|.$locale->text('Invoice').qq|</a></th>|; $column_header{ordnumber} = qq|<th><a class=listheading href=$href&sort=ordnumber>|.$locale->text('Order').qq|</a></th>|; $column_header{quonumber} = qq|<th><a class=listheading href=$href&sort=quonumber>|.$locale->text('Quotation').qq|</a></th>|; if ($form->{db} eq 'customer') { $column_header{employee} = qq|<th><a class=listheading href=$href&sort=employee>|.$locale->text('Salesperson').qq|</a></th>|; } else { $column_header{employee} = qq|<th><a class=listheading href=$href&sort=employee>|.$locale->text('Employee').qq|</a></th>|; } $column_header{manager} = qq|<th><a class=listheading href=$href&sort=manager>|.$locale->text('Manager').qq|</a></th>|; $column_header{pricegroup} = qq|<th><a class=listheading href=$href&sort=pricegroup>|.$locale->text('Pricegroup').qq|</a></th>|; $column_header{language} = qq|<th><a class=listheading href=$href&sort=language>|.$locale->text('Language').qq|</a></th>|; $amount = $locale->text('Amount'); $tax = $locale->text('Tax'); $total = $locale->text('Total'); $column_header{invamount} = qq|<th class=listheading>$amount</th>|; $column_header{ordamount} = qq|<th class=listheading>$amount</th>|; $column_header{quoamount} = qq|<th class=listheading>$amount</th>|; $column_header{invtax} = qq|<th class=listheading>$tax</th>|; $column_header{ordtax} = qq|<th class=listheading>$tax</th>|; $column_header{quotax} = qq|<th class=listheading>$tax</th>|; $column_header{invtotal} = qq|<th class=listheading>$total</th>|; $column_header{ordtotal} = qq|<th class=listheading>$total</th>|; $column_header{quototal} = qq|<th class=listheading>$total</th>|; if ($form->{status}) { $label = ucfirst $form->{db}."s"; $form->{title} = $locale->text($label); } else { $label = ucfirst $form->{db}; $form->{title} = $locale->text($label ." Transactions"); } $form->header; print qq| <body> <table width=100%> <tr> <th class=listtop>$form->{title}</th> </tr> <tr height="5"></tr> <tr> <td>$option</td> </tr> <tr> <td> <table width=100%> <tr class=listheading> |; for (@column_index) { print "$column_header{$_}\n" } print qq| </tr> |; $ordertype = ($form->{db} eq 'customer') ? 'sales_order' : 'purchase_order'; $quotationtype = ($form->{db} eq 'customer') ? 'sales_quotation' : 'request_quotation'; $subtotal = 0; $i = 0; foreach $ref (@{ $form->{CT} }) { if ($ref->{$form->{sort}} ne $sameitem && $form->{l_subtotal}) { # print subtotal if ($subtotal) { for (@column_index) { $column_data{$_} = "<td> </td>" } &list_subtotal; } } if ($ref->{id} eq $sameid) { for (@column_index) { $column_data{$_} = "<td> </td>" } } else { $i++; $ref->{notes} =~ s/\r?\n/<br>/g; for (@column_index) { $column_data{$_} = "<td>$ref->{$_} </td>" } $column_data{ndx} = "<td align=right>$i</td>"; if ($ref->{$form->{sort}} eq $sameitem) { $column_data{$form->{sort}} = "<td> </td>"; } $column_data{address} = "<td>$ref->{address1} $ref->{address2} </td>"; $column_data{name} = "<td><a href=$form->{script}?action=edit&id=$ref->{id}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}&callback=$callback>$ref->{name} </td>"; $email = ""; if ($form->{sort} =~ /(email|cc)/) { if ($ref->{$form->{sort}} ne $sameitem) { $email = 1; } } else { $email = 1; } if ($email) { foreach $item (qw(email cc bcc)) { if ($ref->{$item}) { $email = $ref->{$item}; $email =~ s/</\</; $email =~ s/>/\>/; $column_data{$item} = qq|<td><a href="mailto:$ref->{$item}">$email</a></td>|; } } } } if ($ref->{formtype} eq 'invoice') { $column_data{invnumber} = "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{invnumber} </td>"; $column_data{invamount} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{netamount}, 2, " ")."</td>"; $column_data{invtax} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount} - $ref->{netamount}, 2, " ")."</td>"; $column_data{invtotal} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount}, 2, " ")."</td>"; $invamountsubtotal += $ref->{netamount}; $invtaxsubtotal += ($ref->{amount} - $ref->{netamount}); $invtotalsubtotal += $ref->{amount}; $subtotal = 1; } if ($ref->{formtype} eq 'order') { $column_data{ordnumber} = "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$ordertype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{ordnumber} </td>"; $column_data{ordamount} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{netamount}, 2, " ")."</td>"; $column_data{ordtax} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount} - $ref->{netamount}, 2, " ")."</td>"; $column_data{ordtotal} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount}, 2, " ")."</td>"; $ordamountsubtotal += $ref->{netamount}; $ordtaxsubtotal += ($ref->{amount} - $ref->{netamount}); $ordtotalsubtotal += $ref->{amount}; $subtotal = 1; } if ($ref->{formtype} eq 'quotation') { $column_data{quonumber} = "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$quotationtype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{quonumber} </td>"; $column_data{quoamount} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{netamount}, 2, " ")."</td>"; $column_data{quotax} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount} - $ref->{netamount}, 2, " ")."</td>"; $column_data{quototal} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{amount}, 2, " ")."</td>"; $quoamountsubtotal += $ref->{netamount}; $quotaxsubtotal += ($ref->{amount} - $ref->{netamount}); $quototalsubtotal += $ref->{amount}; $subtotal = 1; } if ($sameid ne "$ref->{id}") { if ($form->{l_discount}) { $column_data{discount} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{discount} * 100, "", " ")."</td>"; } if ($form->{l_terms}) { $column_data{terms} = "<td align=right>".$form->format_amount(\%myconfig, $ref->{terms}, "", " ")."</td>"; } } $j++; $j %= 2; print " <tr class=listrow$j> "; for (@column_index) { print "$column_data{$_}\n" } print qq| </tr> |; $sameitem = "$ref->{$form->{sort}}"; $sameid = $ref->{id}; } if ($form->{l_subtotal} && $subtotal) { for (@column_index) { $column_data{$_} = "<td> </td>" } &list_subtotal; } $i = 1; if ($myconfig{acs} !~ /AR--AR/) { if ($form->{db} eq 'customer') { $button{'AR--Customers--Add Customer'}{code} = qq|<button class="submit" type="submit" name="action" value="add_customer">|.$locale->text('Add Customer').qq|</button> |; $button{'AR--Customers--Add Customer'}{order} = $i++; } } if ($myconfig{acs} !~ /AP--AP/) { if ($form->{db} eq 'vendor') { $button{'AP--Vendors--Add Vendor'}{code} = qq|<button class="submit" type="submit" name="action" value="add_vendor">|.$locale->text('Add Vendor').qq|</button> |; $button{'AP--Vendors--Add Vendor'}{order} = $i++; } } foreach $item (split /;/, $myconfig{acs}) { delete $button{$item}; } print qq| </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> <br> <form method=post action=$form->{script}> |; $form->hide_form(qw(callback db path login sessionid)); if ($form->{status}) { foreach $item (sort { $a->{order} <=> $b->{order} } %button) { print $item->{code}; } } if ($form->{lynx}) { require "bin/menu.pl"; &menubar; } print qq| </form> </body> </html> |; } sub list_subtotal { $column_data{invamount} = "<td align=right>".$form->format_amount(\%myconfig, $invamountsubtotal, 2, " ")."</td>"; $column_data{invtax} = "<td align=right>".$form->format_amount(\%myconfig, $invtaxsubtotal, 2, " ")."</td>"; $column_data{invtotal} = "<td align=right>".$form->format_amount(\%myconfig, $invtotalsubtotal, 2, " ")."</td>"; $invamountsubtotal = 0; $invtaxsubtotal = 0; $invtotalsubtotal = 0; $column_data{ordamount} = "<td align=right>".$form->format_amount(\%myconfig, $ordamountsubtotal, 2, " ")."</td>"; $column_data{ordtax} = "<td align=right>".$form->format_amount(\%myconfig, $ordtaxsubtotal, 2, " ")."</td>"; $column_data{ordtotal} = "<td align=right>".$form->format_amount(\%myconfig, $ordtotalsubtotal, 2, " ")."</td>"; $ordamountsubtotal = 0; $ordtaxsubtotal = 0; $ordtotalsubtotal = 0; $column_data{quoamount} = "<td align=right>".$form->format_amount(\%myconfig, $quoamountsubtotal, 2, " ")."</td>"; $column_data{quotax} = "<td align=right>".$form->format_amount(\%myconfig, $quotaxsubtotal, 2, " ")."</td>"; $column_data{quototal} = "<td align=right>".$form->format_amount(\%myconfig, $quototalsubtotal, 2, " ")."</td>"; $quoamountsubtotal = 0; $quotaxsubtotal = 0; $quototalsubtotal = 0; print " <tr class=listsubtotal> "; for (@column_index) { print "$column_data{$_}\n" } print qq| </tr> |; } sub list_history { CT->get_history(\%myconfig, \%$form); $href = "$form->{script}?action=list_history&direction=$form->{direction}&oldsort=$form->{oldsort}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&type=$form->{type}&transdatefrom=$form->{transdatefrom}&transdateto=$form->{transdateto}&history=$form->{history}"; $form->sort_order(); $callback = "$form->{script}?action=list_history&direction=$form->{direction}&oldsort=$form->{oldsort}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&type=$form->{type}&transdatefrom=$form->{transdatefrom}&transdateto=$form->{transdateto}&history=$form->{history}"; $form->{l_fxsellprice} = $form->{l_curr}; @columns = $form->sort_columns(partnumber, description, qty, unit, sellprice, fxsellprice, curr, discount, deliverydate, projectnumber, serialnumber); if ($form->{history} eq 'summary') { @columns = $form->sort_columns(partnumber, description, qty, unit, sellprice, curr); } foreach $item (@columns) { if ($form->{"l_$item"} eq "Y") { push @column_index, $item; # add column to href and callback $callback .= "&l_$item=Y"; $href .= "&l_$item=Y"; } } if ($form->{history} eq 'detail') { $option = $locale->text('Detail'); } if ($form->{history} eq 'summary') { $option .= $locale->text('Summary'); } if ($form->{name}) { $callback .= "&name=".$form->escape($form->{name},1); $href .= "&name=".$form->escape($form->{name}); $option .= "\n<br>".$locale->text('Name')." : $form->{name}"; } if ($form->{contact}) { $callback .= "&contact=".$form->escape($form->{contact},1); $href .= "&contact=".$form->escape($form->{contact}); $option .= "\n<br>".$locale->text('Contact')." : $form->{contact}"; } if ($form->{"$form->{db}number"}) { $callback .= qq|&$form->{db}number=|.$form->escape($form->{"$form->{db}number"},1); $href .= "&$form->{db}number=".$form->escape($form->{"$form->{db}number"}); $option .= "\n<br>".$locale->text('Number').qq| : $form->{"$form->{db}number"}|; } if ($form->{email}) { $callback .= "&email=".$form->escape($form->{email},1); $href .= "&email=".$form->escape($form->{email}); $option .= "\n<br>".$locale->text('E-mail')." : $form->{email}"; } if ($form->{transdatefrom}) { $callback .= "&transdatefrom=$form->{transdatefrom}"; $href .= "&transdatefrom=$form->{transdatefrom}"; $option .= "\n<br>" if ($option); $option .= $locale->text('From')." ".$locale->date(\%myconfig, $form->{transdatefrom}, 1); } if ($form->{transdateto}) { $callback .= "&transdateto=$form->{transdateto}"; $href .= "&transdateto=$form->{transdateto}"; if ($form->{transdatefrom}) { $option .= " "; } else { $option .= "\n<br>" if ($option); } $option .= $locale->text('To')." ".$locale->date(\%myconfig, $form->{transdateto}, 1); } if ($form->{open}) { $callback .= "&open=$form->{open}"; $href .= "&open=$form->{open}"; $option .= "\n<br>" if ($option); $option .= $locale->text('Open'); } if ($form->{closed}) { $callback .= "&closed=$form->{closed}"; $href .= "&closed=$form->{closed}"; $option .= "\n<br>" if ($option); $option .= $locale->text('Closed'); } $form->{callback} = "$callback&sort=$form->{sort}"; $callback = $form->escape($form->{callback}); $column_header{partnumber} = qq|<th><a class=listheading href=$href&sort=partnumber>|.$locale->text('Part Number').qq|</a></th>|; $column_header{description} = qq|<th><a class=listheading href=$href&sort=description>|.$locale->text('Description').qq|</a></th>|; if ($form->{history} eq 'summary') { $column_header{sellprice} = qq|<th class=listheading>|.$locale->text('Total').qq|</th>|; } else { $column_header{sellprice} = qq|<th class=listheading>|.$locale->text('Sell Price').qq|</th>|; } $column_header{fxsellprice} = qq|<th> </th>|; $column_header{curr} = qq|<th class=listheading>|.$locale->text('Curr').qq|</th>|; $column_header{discount} = qq|<th class=listheading>|.$locale->text('Discount').qq|</th>|; $column_header{qty} = qq|<th class=listheading>|.$locale->text('Qty').qq|</th>|; $column_header{unit} = qq|<th class=listheading>|.$locale->text('Unit').qq|</th>|; $column_header{deliverydate} = qq|<th><a class=listheading href=$href&sort=deliverydate>|.$locale->text('Delivery Date').qq|</a></th>|; $column_header{projectnumber} = qq|<th><a class=listheading href=$href&sort=projectnumber>|.$locale->text('Project Number').qq|</a></th>|; $column_header{serialnumber} = qq|<th><a class=listheading href=$href&sort=serialnumber>|.$locale->text('Serial Number').qq|</a></th>|; # $locale->text('Customer History') # $locale->text('Vendor History') $label = ucfirst $form->{db}; $form->{title} = $locale->text($label." History"); $colspan = $#column_index + 1; $form->header; print qq| <body> <table width=100%> <tr> <th class=listtop>$form->{title}</th> </tr> <tr height="5"></tr> <tr> <td>$option</td> </tr> <tr> <td> <table width=100%> <tr class=listheading> |; for (@column_index) { print "$column_header{$_}\n" } print qq| </tr> |; $module = 'oe'; if ($form->{db} eq 'customer') { $invlabel = $locale->text('Sales Invoice'); $ordlabel = $locale->text('Sales Order'); $quolabel = $locale->text('Quotation'); $ordertype = 'sales_order'; $quotationtype = 'sales_quotation'; if ($form->{type} eq 'invoice') { $module = 'is'; } } else { $invlabel = $locale->text('Vendor Invoice'); $ordlabel = $locale->text('Purchase Order'); $quolabel = $locale->text('RFQ'); $ordertype = 'purchase_order'; $quotationtype = 'request_quotation'; if ($form->{type} eq 'invoice') { $module = 'ir'; } } $ml = ($form->{db} eq 'vendor') ? -1 : 1; foreach $ref (@{ $form->{CT} }) { if ($ref->{id} ne $sameid) { # print the header print qq| <tr class=listheading> <th colspan=$colspan><a class=listheading href=$form->{script}?action=edit&id=$ref->{ctid}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{name} $ref->{address}</a></th> </tr> |; } if ($form->{type} ne 'invoice') { $ref->{fxsellprice} = $ref->{sellprice}; $ref->{sellprice} *= $ref->{exchangerate}; } if ($form->{history} eq 'detail' and $ref->{invid} ne $sameinvid) { # print inv, ord, quo number $i++; $i %= 2; print qq| <tr class=listrow$i> |; if ($form->{type} eq 'invoice') { print qq|<th align=left colspan=$colspan><a href=${module}.pl?action=edit&id=$ref->{invid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$invlabel $ref->{invnumber} / $ref->{employee}</a></th>|; } if ($form->{type} eq 'order') { print qq|<th align=left colspan=$colspan><a href=${module}.pl?action=edit&id=$ref->{invid}&type=$ordertype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ordlabel $ref->{ordnumber} / $ref->{employee}</a></th>|; } if ($form->{type} eq 'quotation') { print qq|<th align=left colspan=$colspan><a href=${module}.pl?action=edit&id=$ref->{invid}&type=$quotationtype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$quolabel $ref->{quonumber} / $ref->{employee}</a></th>|; } print qq| </tr> |; } for (@column_index) { $column_data{$_} = "<td>$ref->{$_} </td>" } if ($form->{l_curr}) { $column_data{fxsellprice} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{fxsellprice}, 2)."</td>"; } $column_data{sellprice} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{sellprice}, 2)."</td>"; $column_data{qty} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{qty} * $ml)."</td>"; $column_data{discount} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{discount} * 100, "", " ")."</td>"; $column_data{partnumber} = qq|<td><a href=ic.pl?action=edit&id=$ref->{pid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{partnumber}</td>|; $i++; $i %= 2; print qq| <tr class=listrow$i> |; for (@column_index) { print "$column_data{$_}\n" } print qq| </tr> |; $sameid = $ref->{id}; $sameinvid = $ref->{invid}; } print qq| </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> |; if ($form->{lynx}) { require "bin/menu.pl"; &menubar; } print qq| </form> </body> </html> |; } sub edit { # $locale->text('Edit Customer') # $locale->text('Edit Vendor') CT->create_links(\%myconfig, \%$form); for (keys %$form) { $form->{$_} = $form->quote($form->{$_}) } $form->{title} = "Edit"; # format discount $form->{discount} *= 100; &form_header; &form_footer; } sub form_header { $form->{taxincluded} = ($form->{taxincluded}) ? "checked" : ""; $form->{creditlimit} = $form->format_amount(\%myconfig, $form->{creditlimit}, 0); $form->{discount} = $form->format_amount(\%myconfig, $form->{discount}, ""); $form->{terms} = $form->format_amount(\%myconfig, $form->{terms}, ""); if ($myconfig{role} =~ /(admin|manager)/) { $bcc = qq| <tr> <th align=right nowrap>|.$locale->text('Bcc').qq|</th> <td><input name=bcc size=35 value="$form->{bcc}"></td> </tr> |; } if ($form->{currencies}) { # currencies for (split /:/, $form->{currencies}) { $form->{selectcurrency} .= "<option>$_\n" } $form->{selectcurrency} =~ s/option>($form->{curr})/option selected>$1/; $currency = qq| <th>|.$locale->text('Currency').qq|</th> <td><select name=curr>$form->{selectcurrency}</select></td> |; } foreach $item (split / /, $form->{taxaccounts}) { if ($form->{tax}{$item}{taxable}) { $taxable .= qq| <input name="tax_$item" value=1 class=checkbox type=checkbox checked> <b>$form->{tax}{$item}{description}</b>|; } else { $taxable .= qq| <input name="tax_$item" value=1 class=checkbox type=checkbox> <b>$form->{tax}{$item}{description}</b>|; } } if ($taxable) { $tax = qq| <tr> <th align=right>|.$locale->text('Taxable').qq|</th> <td colspan=5> <table> <tr> <td>$taxable</td> <td><input name=taxincluded class=checkbox type=checkbox value=1 $form->{taxincluded}></td> <th align=left>|.$locale->text('Tax Included').qq|</th> </tr> </table> </td> </tr> |; } $typeofbusiness = qq| <th></th> <td></td> |; if (@{ $form->{all_business} }) { $form->{selectbusiness} = qq|<option>\n|; for (@{ $form->{all_business} }) { $form->{selectbusiness} .= qq|<option value="$_->{description}--$_->{id}">$_->{description}\n| } $form->{selectbusiness} =~ s/(<option value="\Q$form->{business}--$form->{business_id}\E")>/$1 selected>/; $typeofbusiness = qq| <th align=right>|.$locale->text('Type of Business').qq|</th> <td><select name=business>$form->{selectbusiness}</select></td> |; } $pricegroup = qq| <th></th> <td></td> |; if (@{ $form->{all_pricegroup} } && $form->{db} eq 'customer') { $form->{selectpricegroup} = qq|<option>\n|; for (@{ $form->{all_pricegroup} }) { $form->{selectpricegroup} .= qq|<option value="$_->{pricegroup}--$_->{id}">$_->{pricegroup}\n| } $form->{selectpricegroup} =~ s/(<option value="\Q$form->{pricegroup}--$form->{pricegroup_id}\E")/$1 selected/; $pricegroup = qq| <th align=right>|.$locale->text('Pricegroup').qq|</th> <td><select name=pricegroup>$form->{selectpricegroup}</select></td> |; } $lang = qq| <th></th> <td></td> |; if (@{ $form->{all_language} }) { $form->{selectlanguage} = qq|<option>\n|; for (@{ $form->{all_language} }) { $form->{selectlanguage} .= qq|<option value="$_->{description}--$_->{code}">$_->{description}\n| } $form->{selectlanguage} =~ s/(<option value="\Q$form->{language}--$form->{language_code}\E")/$1 selected/; $lang = qq| <th align=right>|.$locale->text('Language').qq|</th> <td><select name=language>$form->{selectlanguage}</select></td> |; } $employeelabel = $locale->text('Salesperson'); $form->{selectemployee} = qq|<option>\n|; for (@{ $form->{all_employee} }) { $form->{selectemployee} .= qq|<option value="$_->{name}--$_->{id}">$_->{name}\n| } $form->{selectemployee} =~ s/(<option value="\Q$form->{employee}--$form->{employee_id}\E")/$1 selected/; if ($form->{db} eq 'vendor') { $gifi = qq| <th align=right>|.$locale->text('Sub-contract GIFI').qq|</th> <td><input name=gifi_accno size=9 value="$form->{gifi_accno}"></td> |; $employeelabel = $locale->text('Employee'); } if (@{ $form->{all_employee} }) { $employee = qq| <th align=right>$employeelabel</th>|; if ($myconfig{role} ne 'user' || !$form->{id}) { $employee .= qq| <td><select name=employee>$form->{selectemployee}</select></td> |; } else { $employee .= qq| <td>$form->{employee}</td> <input type=hidden name=employee value="$form->{employee}--$form->{employee_id}">|; } } # $locale->text('Customer Number') # $locale->text('Vendor Number') $label = ucfirst $form->{db}; $form->{title} = $locale->text("$form->{title} $label"); $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 width=100%> <tr valign=top> <td width=50%> <table width=100%> <tr class=listheading> <th class=listheading colspan=2 width=50%>|.$locale->text('Billing Address').qq|</th> <tr> <th align=right nowrap>|.$locale->text($label .' Number').qq|</th> <td><input name="$form->{db}number" size=35 maxlength=32 value="$form->{"$form->{db}number"}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Company Name').qq|</th> <td><input name=name size=35 maxlength=64 value="$form->{name}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Address').qq|</th> <td><input name=address1 size=35 maxlength=32 value="$form->{address1}"></td> </tr> <tr> <th></th> <td><input name=address2 size=35 maxlength=32 value="$form->{address2}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('City').qq|</th> <td><input name=city size=35 maxlength=32 value="$form->{city}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('State/Province').qq|</th> <td><input name=state size=35 maxlength=32 value="$form->{state}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Zip/Postal Code').qq|</th> <td><input name=zipcode size=10 maxlength=10 value="$form->{zipcode}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Country').qq|</th> <td><input name=country size=35 maxlength=32 value="$form->{country}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Contact').qq|</th> <td><input name=contact size=35 maxlength=64 value="$form->{contact}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Phone').qq|</th> <td><input name=phone size=20 maxlength=20 value="$form->{phone}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Fax').qq|</th> <td><input name=fax size=20 maxlength=20 value="$form->{fax}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('E-mail').qq|</th> <td><input name=email size=35 value="$form->{email}"></td> </tr> <tr> <th align=right nowrap>|.$locale->text('Cc').qq|</th> <td><input name=cc size=35 value="$form->{cc}"></td> </tr> $bcc </table> </td> <td width=50%> <table width=100%> <tr> <th class=listheading colspan=2>|.$locale->text('Shipping Address').qq|</th> </tr> <tr> <td><input name=none size=35 value=|. ("=" x 35) .qq|></td> </tr> <tr> <td><input name=shiptoname size=35 maxlength=64 value="$form->{shiptoname}"></td> </tr> <tr> <td><input name=shiptoaddress1 size=35 maxlength=32 value="$form->{shiptoaddress1}"></td> </tr> <tr> <td><input name=shiptoaddress2 size=35 maxlength=32 value="$form->{shiptoaddress2}"></td> </tr> <tr> <td><input name=shiptocity size=35 maxlength=32 value="$form->{shiptocity}"></td> </tr> <tr> <td><input name=shiptostate size=35 maxlength=32 value="$form->{shiptostate}"></td> </tr> <tr> <td><input name=shiptozipcode size=10 maxlength=10 value="$form->{shiptozipcode}"></td> </tr> <tr> <td><input name=shiptocountry size=35 maxlength=32 value="$form->{shiptocountry}"></td> </tr> <tr> <td><input name=shiptocontact size=35 maxlength=64 value="$form->{shiptocontact}"></td> </tr> <tr> <td><input name=shiptophone size=20 maxlength=20 value="$form->{shiptophone}"></td> </tr> <tr> <td><input name=shiptofax size=20 maxlength=20 value="$form->{shiptofax}"></td> </tr> <tr> <td><input name=shiptoemail size=35 value="$form->{shiptoemail}"></td> </tr> </table> </td> </tr> </table> </td> </tr> <tr> <td> <table> $tax <tr> <th align=right>|.$locale->text('Startdate').qq|</th> <td><input name=startdate size=11 title="$myconfig{dateformat}" value=$form->{startdate}></td> <th align=right>|.$locale->text('Enddate').qq|</th> <td><input name=enddate size=11 title="$myconfig{dateformat}" value=$form->{enddate}></td> </tr> <tr> <th align=right>|.$locale->text('Credit Limit').qq|</th> <td><input name=creditlimit size=9 value="$form->{creditlimit}"></td> <th align=right>|.$locale->text('Terms').qq|</th> <td><input name=terms size=2 value="$form->{terms}"> <b>|.$locale->text('days').qq|</b></td> <th align=right>|.$locale->text('Discount').qq|</th> <td><input name=discount size=4 value="$form->{discount}"> <b>%</b></td> </tr> <tr> <th align=right>|.$locale->text('Tax Number / SSN').qq|</th> <td><input name=taxnumber size=20 value="$form->{taxnumber}"></td> $gifi <th align=right>|.$locale->text('SIC').qq|</th> <td><input name=sic_code size=6 maxlength=6 value="$form->{sic_code}"></td> </tr> <tr> $typeofbusiness <th align=right>|.$locale->text('BIC').qq|</th> <td><input name=bic size=11 maxlength=11 value="$form->{bic}"></td> <th align=right>|.$locale->text('IBAN').qq|</th> <td><input name=iban size=24 maxlength=34 value="$form->{iban}"></td> </tr> <tr> $pricegroup $lang $currency </tr> <tr valign=top> $employee <td colspan=4> <table> <tr valign=top> <th align=left nowrap>|.$locale->text('Notes').qq|</th> <td><textarea name=notes rows=3 cols=40 wrap=soft>$form->{notes}</textarea></td> </tr> </table> </td> </tr> </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> |; } sub form_footer { # type=submit $locale->text('Save') # type=submit $locale->text('Save as new') # type=submit $locale->text('AR Transaction') # type=submit $locale->text('Sales Invoice') # type=submit $locale->text('Sales Order') # type=submit $locale->text('Quotation') # type=submit $locale->text('AP Transaction') # type=submit $locale->text('Vendor Invoice') # type=submit $locale->text('Purchase Order') # type=submit $locale->text('RFQ') # type=submit $locale->text('Pricelist') # type=submit $locale->text('Delete') # type=submit $locale->text('POS') %button = ('save' => { ndx => 1, key => 'S', value => $locale->text('Save') }, 'save_as_new' => { ndx => 2, key => 'N', value => $locale->text('Save as new') }, 'ar_transaction' => { ndx => 7, key => 'A', value => $locale->text('AR Transaction') }, 'ap_transaction' => { ndx => 8, key => 'A', value => $locale->text('AP Transaction') }, 'sales_invoice' => { ndx => 9, key => 'I', value => $locale->text('Sales Invoice') }, 'pos' => { ndx => 10, key => 'C', value => $locale->text('POS') }, 'sales_order' => { ndx => 11, key => 'O', value => $locale->text('Sales Order') }, 'quotation' => { ndx => 12, key => 'Q', value => $locale->text('Quotation') }, 'vendor_invoice' => { ndx => 13, key => 'I', value => $locale->text('Vendor Invoice') }, 'purchase_order' => { ndx => 14, key => 'O', value => $locale->text('Purchase Order') }, 'rfq' => { ndx => 15, key => 'Q', value => $locale->text('RFQ') }, 'pricelist' => { ndx => 16, key => 'P', value => $locale->text('Pricelist') }, 'delete' => { ndx => 17, key => 'D', value => $locale->text('Delete') }, ); %a = (); if ($form->{db} eq 'customer') { if ($myconfig{acs} !~ /AR--Customers--Add Customer/) { $a{'save'} = 1; if ($form->{id}) { $a{'save_as_new'} = 1; if ($form->{status} eq 'orphaned') { $a{'delete'} = 1; } } } if ($myconfig{acs} !~ /AR--AR/) { if ($myconfig{acs} !~ /AR--Add Transaction/) { $a{'ar_transaction'} = 1; } if ($myconfig{acs} !~ /AR--Sales Invoice/) { $a{'sales_invoice'} = 1; } } if ($myconfig{acs} !~ /POS--POS/) { if ($myconfig{acs} !~ /POS--Sale/) { $a{'pos'} = 1; } } if ($myconfig{acs} !~ /Order Entry--Order Entry/) { if ($myconfig{acs} !~ /Order Entry--Sales Order/) { $a{'sales_order'} = 1; } } if ($myconfig{acs} !~ /Quotations--Quotations/) { if ($myconfig{acs} !~ /Quotations--Quotation/) { $a{'quotation'} = 1; } } } if ($form->{db} eq 'vendor') { if ($myconfig{acs} !~ /AP--Vendors--Add Vendor/) { $a{'save'} = 1; if ($form->{id}) { $a{'save_as_new'} = 1; if ($form->{status} eq 'orphaned') { $a{'delete'} = 1; } } } if ($myconfig{acs} !~ /AP--AP/) { if ($myconfig{acs} !~ /AP--Add Transaction/) { $a{'ap_transaction'} = 1; } if ($myconfig{acs} !~ /AP--Vendor Invoice/) { $a{'vendor_invoice'} = 1; } } if ($myconfig{acs} !~ /Order Entry--Order Entry/) { if ($myconfig{acs} !~ /Order Entry--Purchase Order/) { $a{'purchase_order'} = 1; } } if ($myconfig{acs} !~ /Quotations--Quotations/) { if ($myconfig{acs} !~ /Quotations--RFQ/) { $a{'rfq'} = 1; } } } if ($myconfig{acs} !~ /Goods & Services--Goods & Services/) { $myconfig{acs} =~ s/(Goods & Services--)Add (Service|Assembly).*;/$1--Add Part/g; if ($myconfig{acs} !~ /Goods & Services--Add Part/) { $a{'pricelist'} = 1; } } $form->hide_form(qw(id taxaccounts path login sessionid callback db)); for (keys %button) { delete $button{$_} if ! $a{$_} } for (sort { $button{$a}->{ndx} <=> $button{$b}->{ndx} } keys %button) { $form->print_button(\%button, $_) } if ($form->{lynx}) { require "bin/menu.pl"; &menubar; } print qq| </form> </body> </html> |; } sub pricelist { $form->isblank("name", $locale->text('Name missing!')); $form->{display_form} ||= "display_pricelist"; CT->pricelist(\%myconfig, \%$form); foreach $ref (@{ $form->{"all_partspricelist"} }) { $i++; for (keys %$ref) { $form->{"${_}_$i"} = $ref->{$_} } } $form->{rowcount} = $i; # currencies @curr = split /:/, $form->{currencies}; for (@curr) { $form->{selectcurrency} .= "<option>$_\n" } if (@ { $form->{all_partsgroup} }) { $form->{selectpartsgroup} = ""; foreach $ref (@ { $form->{all_partsgroup} }) { $form->{selectpartsgroup} .= qq|$ref->{partsgroup}--$ref->{id}\n|; } } for (qw(currencies all_partsgroup all_partspricelist)) { delete $form->{$_} } foreach $i (1 .. $form->{rowcount}) { if ($form->{db} eq 'customer') { $form->{"pricebreak_$i"} = $form->format_amount(\%myconfig, $form->{"pricebreak_$i"}); $form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, 2); } if ($form->{db} eq 'vendor') { $form->{"leadtime_$i"} = $form->format_amount(\%myconfig, $form->{"leadtime_$i"}); $form->{"lastcost_$i"} = $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2); } } $form->{rowcount}++; &{ "$form->{db}_pricelist" }; } sub customer_pricelist { @flds = qw(runningnumber id partnumber description sellprice unit partsgroup pricebreak curr validfrom validto); $form->{rowcount}--; # remove empty rows if ($form->{rowcount}) { foreach $i (1 .. $form->{rowcount}) { for (qw(pricebreak sellprice)) { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } ($a, $b) = split /\./, $form->{"pricebreak_$i"}; $a = length $a; $b = length $b; $whole = ($whole > $a) ? $whole : $a; $dec = ($dec > $b) ? $dec : $b; } $pad1 = '0' x $whole; $pad2 = '0' x $dec; foreach $i (1 .. $form->{rowcount}) { ($a, $b) = split /\./, $form->{"pricebreak_$i"}; $a = substr("$pad1$a", -$whole); $b = substr("$b$pad2", 0, $dec); $ndx{qq|$form->{"partnumber_$i"}_$form->{"id_$i"}_$a$b|} = $i; } $i = 1; for (sort keys %ndx) { $form->{"runningnumber_$ndx{$_}"} = $i++ } foreach $i (1 .. $form->{rowcount}) { if ($form->{"partnumber_$i"} && $form->{"sellprice_$i"}) { if ($form->{"id_$i"} eq $sameid) { $j = $i + 1; next if ($form->{"id_$j"} eq $sameid && !$form->{"pricebreak_$i"}); } push @a, {}; $j = $#a; for (@flds) { $a[$j]->{$_} = $form->{"${_}_$i"} } $count++; } $sameid = $form->{"id_$i"}; } $form->redo_rows(\@flds, \@a, $count, $form->{rowcount}); $form->{rowcount} = $count; } $form->{rowcount}++; if ($form->{display_form}) { &{ "$form->{display_form}" }; } } sub vendor_pricelist { @flds = qw(runningnumber id sku partnumber description lastcost unit partsgroup curr leadtime); $form->{rowcount}--; # remove empty rows if ($form->{rowcount}) { foreach $i (1 .. $form->{rowcount}) { for (qw(leadtime lastcost)) { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } $var = ($form->{"partnumber_$i"}) ? $form->{"sku_$i"} : qq|_$form->{"sku_$i"}|; $ndx{$var} = $i; } $i = 1; for (sort keys %ndx) { $form->{"runningnumber_$ndx{$_}"} = $i++ } foreach $i (1 .. $form->{rowcount}) { if ($form->{"sku_$i"}) { push @a, {}; $j = $#a; for (@flds) { $a[$j]->{$_} = $form->{"${_}_$i"} } $count++; } } $form->redo_rows(\@flds, \@a, $count, $form->{rowcount}); $form->{rowcount} = $count; } $form->{rowcount}++; if ($form->{display_form}) { &{ "$form->{display_form}" }; } } sub display_pricelist { &pricelist_header; delete $form->{action}; $form->hide_form; &pricelist_footer; } sub pricelist_header { $form->{title} = $form->{name}; $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> |; if ($form->{db} eq 'customer') { @column_index = qw(partnumber description); push @column_index, "partsgroup" if $form->{selectpartsgroup}; push @column_index, qw(pricebreak sellprice curr validfrom validto); $column_header{pricebreak} = qq|<th class=listheading nowrap>|.$locale->text('Break').qq|</th>|; $column_header{sellprice} = qq|<th class=listheading nowrap>|.$locale->text('Sell Price').qq|</th>|; $column_header{validfrom} = qq|<th class=listheading nowrap>|.$locale->text('From').qq|</th>|; $column_header{validto} = qq|<th class=listheading nowrap>|.$locale->text('To').qq|</th>|; } if ($form->{db} eq 'vendor') { @column_index = qw(sku partnumber description); push @column_index, "partsgroup" if $form->{selectpartsgroup}; push @column_index, qw(lastcost curr leadtime); $column_header{sku} = qq|<th class=listheading nowrap>|.$locale->text('SKU').qq|</th>|; $column_header{leadtime} = qq|<th class=listheading nowrap>|.$locale->text('Leadtime').qq|</th>|; $column_header{lastcost} = qq|<th class=listheading nowrap>|.$locale->text('Cost').qq|</th>|; } $column_header{partnumber} = qq|<th class=listheading nowrap>|.$locale->text('Number').qq|</th>|; $column_header{description} = qq|<th class=listheading nowrap width=80%>|.$locale->text('Description').qq|</th>|; $column_header{partsgroup} = qq|<th class=listheading nowrap>|.$locale->text('Group').qq|</th>|; $column_header{curr} = qq|<th class=listheading nowrap>|.$locale->text('Curr').qq|</th>|; print qq| <tr> <td> <table width=100%> <tr class=listheading> |; for (@column_index) { print "\n$column_header{$_}" } print qq| </tr> |; $sameid = ""; foreach $i (1 .. $form->{rowcount}) { $selectcurrency = $form->{selectcurrency}; $selectcurrency =~ s/option>\Q$form->{"curr_$i"}\E/option selected>$form->{"curr_$i"}/; if ($form->{selectpartsgroup}) { if ($i < $form->{rowcount}) { ($partsgroup) = split /--/, $form->{"partsgroup_$i"}; $column_data{partsgroup} = qq|<td>$partsgroup</td> <input type=hidden name="partsgroup_$i" value="|.$form->quote($form->{"partsgroup_$i"}).qq|">|; } } if ($i < $form->{rowcount}) { if ($form->{"id_$i"} eq $sameid) { for (qw(partnumber description partsgroup)) { $column_data{$_} = qq|<td> </td> <input type=hidden name="${_}_$i" value="|.$form->quote($form->{"${_}_$i"}).qq|">| } } else { $column_data{sku} = qq|<td><input name="sku_$i" value="$form->{"sku_$i"}"></td>|; $column_data{partnumber} = qq|<td><input name="partnumber_$i" value="$form->{"partnumber_$i"}"></td>|; $column_data{description} = qq|<td>$form->{"description_$i"} </td> <input type=hidden name="description_$i" value="|.$form->quote($form->{"description_$i"}).qq|">|; } $column_data{partnumber} .= qq| <input type=hidden name="id_$i" value="$form->{"id_$i"}">|; } else { if ($form->{db} eq 'customer') { $column_data{partnumber} = qq|<td><input name="partnumber_$i" value="$form->{"partnumber_$i"}"></td>|; } else { $column_data{partnumber} = qq|<td> </td>|; } $column_data{partnumber} .= qq| <input type=hidden name="id_$i" value="$form->{"id_$i"}">|; $column_data{sku} = qq|<td><input name="sku_$i" value="$form->{"sku_$i"}"></td>|; $column_data{description} = qq|<td><input name="description_$i" value="$form->{"description_$i"}"></td>|; if ($form->{selectpartsgroup}) { $selectpartsgroup = "<option>"; foreach $line (split /\n/, $form->{selectpartsgroup}) { $selectpartsgroup .= qq|\n<option value="|.$form->quote($line).qq|">| .(split /--/, $line)[0]; } $column_data{partsgroup} = qq|<td><select name="partsgroup_$i">$selectpartsgroup</select></td>|; } } if ($form->{db} eq 'customer') { $column_data{pricebreak} = qq|<td align=right><input name="pricebreak_$i" size=5 value=|.$form->format_amount(\%myconfig, $form->{"pricebreak_$i"}).qq|></td>|; $column_data{sellprice} = qq|<td align=right><input name="sellprice_$i" size=10 value=|.$form->format_amount(\%myconfig, $form->{"sellprice_$i"}, 2).qq|></td>|; $column_data{validfrom} = qq|<td><input name="validfrom_$i" size=11 value=$form->{"validfrom_$i"}></td>|; $column_data{validto} = qq|<td><input name="validto_$i" size=11 value=$form->{"validto_$i"}></td>|; } if ($form->{db} eq 'vendor') { $column_data{leadtime} = qq|<td align=right><input name="leadtime_$i" size=5 value=|.$form->format_amount(\%myconfig, $form->{"leadtime_$i"}).qq|></td>|; $column_data{lastcost} = qq|<td align=right><input name="lastcost_$i" size=10 value=|.$form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2).qq|></td>|; } $column_data{curr} = qq|<td><select name="curr_$i">$selectcurrency</select></td>|; print qq|<tr valign=top>|; for (@column_index) { print "\n$column_data{$_}" } print qq|</tr>|; $sameid = $form->{"id_$i"}; } print qq| </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> |; # delete variables foreach $i (1 .. $form->{rowcount}) { for (@column_index, "id") { delete $form->{"${_}_$i"} } } for (qw(title titlebar script none)) { delete $form->{$_} } } sub pricelist_footer { # type=submit $locale->text('Update') # type=submit $locale->text('Save Pricelist') %button = ('update' => { ndx => 1, key => 'U', value => $locale->text('Update') }, 'save_pricelist' => { ndx => 3, key => 'S', value => $locale->text('Save Pricelist') }, ); for (sort { $button{$a}->{ndx} <=> $button{$b}->{ndx} } keys %button) { $form->print_button(\%button, $_) } print qq| </form> </body> </html> |; } sub update { $i = $form->{rowcount}; $additem = 0; if ($form->{db} eq 'customer') { $additem = 1 if ! (($form->{"partnumber_$i"} eq "") && ($form->{"description_$i"} eq "") && ($form->{"partsgroup_$i"} eq "")); } if ($form->{db} eq 'vendor') { if (! (($form->{"sku_$i"} eq "") && ($form->{"description_$i"} eq "") && ($form->{"partsgroup_$i"} eq ""))) { $additem = 1; $form->{"partnumber_$i"} = $form->{"sku_$i"}; } } if ($additem) { CT->retrieve_item(\%myconfig, \%$form); $rows = scalar @{ $form->{item_list} }; if ($rows > 0) { if ($rows > 1) { &select_item; exit; } else { $sellprice = $form->{"sellprice_$i"}; $pricebreak = $form->{"pricebreak_$i"}; $lastcost = $form->{"lastcost_$i"}; for (qw(partnumber description)) { $form->{item_list}[0]{$_} = $form->quote($form->{item_list}[0]{$_}) } for (keys %{ $form->{item_list}[0] }) { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } if ($form->{db} eq 'customer') { if ($sellprice) { $form->{"sellprice_$i"} = $sellprice; } $form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, 2); $form->{"pricebreak_$i"} = $pricebreak; } else { foreach $j (1 .. $form->{rowcount} - 1) { if ($form->{"sku_$j"} eq $form->{"partnumber_$i"}) { $form->error($locale->text('Item already on pricelist!')); } } if ($lastcost) { $form->{"lastcost_$i"} = $lastcost; } $form->{"lastcost_$i"} = $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2); $form->{"sku_$i"} = $form->{"partnumber_$i"}; # delete $form->{"partnumber_$i"}; } $form->{rowcount}++; } } else { $form->error($locale->text('Item not on file!')); } } &{ "$form->{db}_pricelist" }; } sub select_item { @column_index = qw(ndx partnumber description partsgroup unit sellprice lastcost); $column_data{ndx} = qq|<th> </th>|; $column_data{partnumber} = qq|<th class=listheading>|.$locale->text('Number').qq|</th>|; $column_data{description} = qq|<th class=listheading>|.$locale->text('Description').qq|</th>|; $column_data{partsgroup} = qq|<th class=listheading>|.$locale->text('Group').qq|</th>|; $column_data{unit} = qq|<th class=listheading>|.$locale->text('Unit').qq|</th>|; $column_data{sellprice} = qq|<th class=listheading>|.$locale->text('Sell Price').qq|</th>|; $column_data{lastcost} = qq|<th class=listheading>|.$locale->text('Cost').qq|</th>|; $form->header; $title = $locale->text('Select items'); print qq| <body> <form method=post action="$form->{script}"> <table width=100%> <tr> <th class=listtop>$title</th> </tr> <tr height="5"></tr> <tr> <td>$option</td> </tr> <tr> <td> <table width=100%> <tr class=listheading>|; for (@column_index) { print "\n$column_data{$_}" } print qq| </tr> |; my $i = 0; foreach $ref (@{ $form->{item_list} }) { $i++; for (qw(partnumber description unit)) { $ref->{$_} = $form->quote($ref->{$_}) } $column_data{ndx} = qq|<td><input name="ndx_$i" class=checkbox type=checkbox value=$i></td>|; for (qw(partnumber description partsgroup unit)) { $column_data{$_} = qq|<td>$ref->{$_} </td>| } $column_data{sellprice} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{sellprice}, 2, " ").qq|</td>|; $column_data{lastcost} = qq|<td align=right>|.$form->format_amount(\%myconfig, $ref->{lastcost}, 2, " ").qq|</td>|; $j++; $j %= 2; print qq| <tr class=listrow$j>|; for (@column_index) { print "\n$column_data{$_}" } print qq| </tr> |; for (qw(partnumber description partsgroup partsgroup_id sellprice lastcost unit id)) { print qq|<input type=hidden name="new_${_}_$i" value="$ref->{$_}">\n|; } } print qq| </table> </td> </tr> <tr> <td><hr size=3 noshade></td> </tr> </table> <input name=lastndx type=hidden value=$i> |; # delete action variable for (qw(nextsub item_list)) { delete $form->{$_} } $form->{action} = "item_selected"; $form->hide_form; print qq| <input type="hidden" name="nextsub" value="item_selected"> <br> <button class="submit" type="submit" name="action" value="continue">|.$locale->text('Continue').qq|</button> </form> </body> </html> |; } sub item_selected { # add rows $i = $form->{rowcount}; %id = (); for $i (1 .. $form->{rowcount} - 1) { $id{$form->{"id_$i"}} = 1; } for $j (1 .. $form->{lastndx}) { if ($form->{"ndx_$j"}) { if ($id{$form->{"new_id_$j"}}) { next if $form->{db} eq 'vendor'; } for (qw(id partnumber description unit sellprice lastcost)) { $form->{"${_}_$i"} = $form->{"new_${_}_$j"}; } $form->{"partsgroup_$i"} = qq|$form->{"new_partsgroup_$j"}--$form->{"new_partsgroup_id_$j"}|; $form->{"sku_$i"} = $form->{"new_partnumber_$j"}; $i++; } } $form->{rowcount} = $i; # delete all the new_ variables for $i (1 .. $form->{lastndx}) { for (qw(id partnumber description unit sellprice lastcost partsgroup partsgroup_id)) { delete $form->{"new_${_}_$i"} } delete $form->{"ndx_$i"}; } for (qw(ndx lastndx nextsub)) { delete $form->{$_} } &{ "$form->{db}_pricelist" }; } sub save_pricelist { &{ "CT::save_$form->{db}" }("", \%myconfig, \%$form); $callback = $form->{callback}; $form->{callback} = "$form->{script}?action=edit"; for (qw(db id login path sessionid)) { $form->{callback} .= "&$_=$form->{$_}" } $form->{callback} .= "&callback=".$form->escape($callback,1); if (CT->save_pricelist(\%myconfig, \%$form)) { $form->redirect; } else { $form->error($locale->text('Could not save pricelist!')); } } sub add_transaction { $form->isblank("name", $locale->text("Name missing!")); &{ "CT::save_$form->{db}" }("", \%myconfig, \%$form); $form->{callback} = $form->escape($form->{callback},1); $name = $form->escape($form->{name},1); $form->{callback} = "$form->{script}?login=$form->{login}&path=$form->{path}&sessionid=$form->{sessionid}&action=add&vc=$form->{db}&$form->{db}_id=$form->{id}&$form->{db}=$name&type=$form->{type}&callback=$form->{callback}"; $form->redirect; } sub ap_transaction { $form->{script} = "ap.pl"; $form->{type} = "ap_transaction"; &add_transaction; } sub ar_transaction { $form->{script} = "ar.pl"; $form->{type} = "ar_transaction"; &add_transaction; } sub sales_invoice { $form->{script} = "is.pl"; $form->{type} = "invoice"; &add_transaction; } sub pos { $form->{script} = "ps.pl"; $form->{type} = "pos_invoice"; &add_transaction; } sub vendor_invoice { $form->{script} = "ir.pl"; $form->{type} = "invoice"; &add_transaction; } sub rfq { $form->{script} = "oe.pl"; $form->{type} = "request_quotation"; &add_transaction; } sub quotation { $form->{script} = "oe.pl"; $form->{type} = "sales_quotation"; &add_transaction; } sub sales_order { $form->{script} = "oe.pl"; $form->{type} = "sales_order"; &add_transaction; } sub purchase_order { $form->{script} = "oe.pl"; $form->{type} = "purchase_order"; &add_transaction; } sub save_as_new { delete $form->{id}; &save; } sub save { # $locale->text('Customer saved!') # $locale->text('Vendor saved!') $msg = ucfirst $form->{db}; $msg .= " saved!"; $form->isblank("name", $locale->text("Name missing!")); &{ "CT::save_$form->{db}" }("", \%myconfig, \%$form); $form->redirect($locale->text($msg)); } sub delete { # $locale->text('Customer deleted!') # $locale->text('Cannot delete customer!') # $locale->text('Vendor deleted!') # $locale->text('Cannot delete vendor!') CT->delete(\%myconfig, \%$form); $msg = ucfirst $form->{db}; $msg .= " deleted!"; $form->redirect($locale->text($msg)); } sub continue { &{ $form->{nextsub} } }; sub add_customer { &add }; sub add_vendor { &add };