summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LedgerSMB/AA.pm2
-rw-r--r--LedgerSMB/CT.pm1084
-rw-r--r--bin/aa.pl11
-rw-r--r--bin/ct.pl2219
4 files changed, 10 insertions, 3306 deletions
diff --git a/LedgerSMB/AA.pm b/LedgerSMB/AA.pm
index 82ea62a1..3a4d8965 100644
--- a/LedgerSMB/AA.pm
+++ b/LedgerSMB/AA.pm
@@ -827,7 +827,7 @@ sub transactions {
a.invoice, a.datepaid, a.terms, a.notes,
a.shipvia, a.shippingpoint, ee.name AS employee,
vce.name, vc.meta_number,
- a.entity_id, a.till, me.name AS manager, a.curr,
+ vc.entity_id, a.till, me.name AS manager, a.curr,
ex.$buysell AS exchangerate,
d.description AS department,
a.ponumber $acc_trans_flds
diff --git a/LedgerSMB/CT.pm b/LedgerSMB/CT.pm
deleted file mode 100644
index fcc0b32c..00000000
--- a/LedgerSMB/CT.pm
+++ /dev/null
@@ -1,1084 +0,0 @@
-#=====================================================================
-# LedgerSMB
-# Small Medium Business Accounting software
-# 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) 2000
-#
-# Author: DWS Systems Inc.
-# Web: http://www.sql-ledger.org
-#
-# Contributors:
-#
-#
-#======================================================================
-#
-# This file has undergone whitespace cleanup.
-#
-#======================================================================
-#
-# backend code for customers and vendors
-#
-#======================================================================
-
-package CT;
-
-sub create_links {
-
- my ( $self, $myconfig, $form ) = @_;
-
- my $dbh = $form->{dbh};
- my $query;
- my $sth;
- my $ref;
- my $arap = ( $form->{db} eq 'customer' ) ? "ar" : "ap";
- my $ARAP = uc $arap;
-
- if ( $form->{id} ) {
- $query = qq|
- SELECT ct.*, b.description AS business, s.*,
- e.name AS employee,
- g.pricegroup AS pricegroup,
- l.description AS language, ct.curr
- FROM $form->{db} ct
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN shipto s ON (ct.id = s.trans_id)
- LEFT JOIN employee e ON (ct.employee_id = e.id)
- LEFT JOIN pricegroup g ON (g.id = ct.pricegroup_id)
- LEFT JOIN language l ON (l.code = ct.language_code)
- WHERE ct.id = ?|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} ) || $form->dberror($query);
-
- $ref = $sth->fetchrow_hashref(NAME_lc);
- for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
- $sth->finish;
-
- # check if it is orphaned
- $query = qq|
- SELECT a.id
- FROM $arap a
- JOIN $form->{db} ct ON (a.$form->{db}_id = ct.id)
- WHERE ct.id = ?
-
- UNION
-
- SELECT a.id
- FROM oe a
- JOIN $form->{db} ct ON (a.$form->{db}_id = ct.id)
- WHERE ct.id = ?|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id}, $form->{id} )
- || $form->dberror($query);
-
- unless ( $sth->fetchrow_array ) {
- $form->{status} = "orphaned";
- }
-
- $sth->finish;
-
- # get taxes for customer/vendor
- $query = qq|
- SELECT c.accno
- FROM chart c
- JOIN $form->{db}tax t ON (t.chart_id = c.id)
- WHERE t.$form->{db}_id = ?|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} ) || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- $form->{tax}{ $ref->{accno} }{taxable} = 1;
- }
-
- $sth->finish;
-
- }
- else {
-
- ( $form->{employee}, $form->{employee_id} ) = $form->get_employee($dbh);
-
- $query = qq|SELECT current_date|;
- ( $form->{startdate} ) = $dbh->selectrow_array($query);
-
- }
-
- # get tax labels
- $query = qq|
- SELECT DISTINCT c.accno, c.description
- FROM chart c
- JOIN tax t ON (t.chart_id = c.id)
- WHERE c.link LIKE ?
- ORDER BY c.accno|;
-
- $sth = $dbh->prepare($query);
- $sth->execute("%${ARAP}_tax%") || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- $form->{taxaccounts} .= "$ref->{accno} ";
- $form->{tax}{ $ref->{accno} }{description} = $ref->{description};
- }
-
- $sth->finish;
- chop $form->{taxaccounts};
-
-# get business types ## needs fixing, this is bad (SELECT * ...) with order by 2. Yuck
- $query = qq|
- SELECT *
- FROM business
- ORDER BY 2|;
-
- $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_business} }, $ref;
- }
-
- $sth->finish;
-
- # employees/salespersons
- $form->all_employees( $myconfig, $dbh, undef,
- ( $form->{vc} eq 'customer' )
- ? 1
- : 0 );
-
-# get language ## needs fixing, this is bad (SELECT * ...) with order by 2. Yuck
- $query = qq|
- SELECT *
- FROM language
- ORDER BY 2|;
-
- $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_language} }, $ref;
- }
-
- $sth->finish;
-
-# get pricegroups ## needs fixing, this is bad (SELECT * ...) with order by 2. Yuck
- $query = qq|
- SELECT *
- FROM pricegroup
- ORDER BY 2|;
-
- $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_pricegroup} }, $ref;
- }
-
- $sth->finish;
-
- # get currencies
- $query = qq|
- SELECT value AS currencies
- FROM defaults
- WHERE setting_key = 'curr'|;
-
- ( $form->{currencies} ) = $dbh->selectrow_array($query);
-
- $dbh->commit;
-
-}
-
-sub _save_vc {
- ($form) = @_;
- my $dbh = $form->{dbh};
- my $updated = 0;
- if ($form->{vc} eq 'customer'){
- $form->{vc} = 'customer';
- $form->{entity_class} = 2;
- } else {
- $form->{vc} = 'vendor';
- $form->{entity_class} = 1;
- }
-
- # this should really all be replaced by an upsert.
- if ( $form->{id} ) {
- # This module is depricated, so we are just going to throw an error here
- $form->error("Updating $form->{vc} not supported. ".
- "Please wait for us to move to the new codebase.");
-
- }
- if (!$updated){
- # Creating Entity
- ($form->{entity_id}) = $dbh->selectrow_array("SELECT nextval('entity_id_seq')");
- $query = qq|INSERT INTO entity (id, name, entity_class) VALUES (?, ?,?)|;
- $sth = $dbh->prepare($query);
- $sth->execute($form->{entity_id}, $form->{name}, $form->{entity_class});
- $sth->finish;
-
- # Creating LOCATION
- ($form->{location_id}) =
- $dbh->selectrow_array("SELECT nextval('location_id_seq')");
- $query = qq|
- INSERT INTO location
- (id, line_one, line_two, city_province, mail_code,
- country_id, location_class, created)
- VALUES
- (?, ?, ?, ?, ?,
- (SELECT id FROM country
- WHERE short_name = ? OR name = ?),
- 1, current_date)
- |; # location class 1 is Billing. This is a sensible default.
- $sth = $dbh->prepare($query);
- $sth->execute($form->{location_id}, $form->{address1}, $form->{address2},
- "$form->{city}, $form->{state}", $form->{zipcode},
- $form->{country}, $form->{country}
- ) || $form->dberror($query);
-
-
- #Creating company
- # Removed entity_class_id,
- # removed primary_location_id,
- # added sic_code ~Aurynn
- $query = qq|
- INSERT INTO company
- (entity_id, legal_name, tax_id, sic_code)
- VALUES
- (?, ?, ?, ?)
- |;
- $sth = $dbh->prepare($query) || $form->dberror($query);
- $sth->execute($form->{entity_id}, # $form->{entity_class}, # removed entity_class_id ~Aurynn
- $form->{name},
- # $form->{location_id}, # removed by ~aurynn
- $form->{taxnumber},
- $form->{sic_code});
- # Creating entity_metadata record, replacing customer and vendor.
- $query = qq|
- INSERT INTO entity_credit_account
- (entity_id, entity_class, discount, taxincluded, creditlimit,
- terms, meta_number, cc, bcc, business_id,
- language_code, pricegroup_id, curr, startdate,
- enddate)
-
- VALUES (?, ?, ?, ?, ?,
- ?, ?, ?, ?,
- ?, ?, ?, ?,
- ?, ?)|;
-
- $sth = $dbh->prepare($query);
- $sth->execute(
- $form->{entity_id}, $form->{entity_class}, $form->{discount},
- $form->{taxincluded}, $form->{creditlimit},
- $form->{terms}, $form->{"$form->{db}number"}, $form->{cc},
- $form->{bcc}, $form->{business_id},
- $form->{language_code}, $form->{pricegroup_id}, $form->{curr},
- $form->{startdate} || undef, $form->{enddate} || undef,
- ) || $form->dberror($query);
-
- $query = qq|
- INSERT INTO entity_bank_account (entity_id, bic, iban)
- VALUES (?,?,?)
- |;
- $sth = $dbh->prepare($query);
- $sth->execute($form->{entity_id}, $form->{bic}, $form->{iban}) ||
- $form->dberror($query);
-
- }
-}
-
-sub save_customer {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to databaseĀµ
- my $dbh = $form->{dbh};
- my $query;
- my $sth;
- my $null;
- $form->{vc} = 'customer';
- # remove double spaces
- $form->{name} =~ s/ / /g;
-
- # remove double minus and minus at the end
- $form->{name} =~ s/--+/-/g;
- $form->{name} =~ s/-+$//;
-
- # assign value discount, terms, creditlimit
- $form->{discount} = $form->parse_amount( $myconfig, $form->{discount} );
- $form->{discount} /= 100;
- $form->{terms} *= 1;
- $form->{taxincluded} *= 1;
- $form->{creditlimit} =
- $form->parse_amount( $myconfig, $form->{creditlimit} );
- if ( !$form->{creditlimit} ) {
- $form->{creditlimit} = 0;
- }
- &_save_vc($form);
- # save taxes
- foreach $item ( split / /, $form->{taxaccounts} ) {
-
- if ( $form->{"tax_$item"} ) {
- $query = qq|
- INSERT INTO customertax (customer_id, chart_id)
- VALUES (currval('entity_credit_account_id_seq'),
- (SELECT id
- FROM chart
- WHERE accno = ?))|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $item )
- || $form->dberror($query);
- }
- }
-
- # add shipto
- $form->add_shipto( $dbh, $form->{id} );
-
- $dbh->commit;
-}
-
-sub save_vendor {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- my $query;
- my $sth;
- my $null;
-
- # remove double spaces
- $form->{name} =~ s/ / /g;
-
- # remove double minus and minus at the end
- $form->{name} =~ s/--+/-/g;
- $form->{name} =~ s/-+$//;
-
- $form->{discount} = $form->parse_amount( $myconfig, $form->{discount} );
- $form->{discount} /= 100;
- $form->{terms} *= 1;
- $form->{taxincluded} *= 1;
- $form->{creditlimit} =
- $form->parse_amount( $myconfig, $form->{creditlimit} );
- &_save_vc($form);
-
- # save taxes
- foreach $item ( split / /, $form->{taxaccounts} ) {
- if ( $form->{"tax_$item"} ) {
- $query = qq|
- INSERT INTO vendortax (vendor_id, chart_id)
- VALUES (?, (SELECT id
- FROM chart
- WHERE accno = ?))|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id}, $item )
- || $form->dberror($query);
- }
- }
-
- # add shipto
- $form->add_shipto( $dbh, $form->{id} );
-
- $dbh->commit;
-
-}
-
-sub delete {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- # delete customer/vendor
- my $query = qq|DELETE FROM $form->{db}
- WHERE id = ?|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} ) || $form->dberror($query);
-
- $dbh->commit;
-
-}
-
-sub search {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- my $where = "1 = 1";
- $form->{sort} = ( $form->{sort} ) ? $form->{sort} : "name";
- my @a = qw(name);
- my $sortorder = $form->sort_order( \@a );
-
- my $var;
- my $item;
-
- @a = ("$form->{db}number");
- push @a, qw(name contact city state zipcode country notes phone email);
-
- if ( $form->{employee} ) {
- $var = $dbh->quote($form->like(lc $form->{employee}));
- $where .= " AND lower(e.name) LIKE $var";
- }
-
- foreach $item (@a) {
-
- if ( $form->{$item} ne "" ) {
- $var = $dbh->quote($form->like( lc $form->{$item}) );
- $where .= " AND lower(ct.$item) LIKE $var";
- }
- }
-
- if ( $form->{address} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{address} ) );
- $where .=
-" AND (lower(ct.address1) ILIKE $var)";
- }
-
- if ( $form->{startdatefrom} ) {
- $where .=
- " AND ct.startdate >= " . $dbh->quote( $form->{startdatefrom} );
- }
-
- if ( $form->{startdateto} ) {
- $where .= " AND ct.startdate <= " . $dbh->quote( $form->{startdateto} );
- }
-
- if ( $form->{status} eq 'active' ) {
- $where .= " AND ct.enddate IS NULL";
- }
-
- if ( $form->{status} eq 'inactive' ) {
- $where .= " AND ct.enddate <= current_date";
- }
-
- if ( $form->{status} eq 'orphaned' ) {
- $where .= qq|
- AND ct.id NOT IN (SELECT o.$form->{db}_id
- FROM oe o, $form->{db} vc
- WHERE vc.id = o.$form->{db}_id)|;
-
- if ( $form->{db} =~ /(^customer$|^vendor$)/ ) {
- $where .= qq| AND ct.id NOT IN (SELECT a.entity_id
- FROM ar a, customer vc
- WHERE vc.entity_id = a.entity_id)|;
- }
-
-
- $form->{l_invnumber} = $form->{l_ordnumber} = $form->{l_quonumber} = "";
- }
-
- my $query = qq|
- SELECT ct.*, b.description AS business,
- e.name AS employee, g.pricegroup,
- l.description AS language, m.name AS manager
- FROM $form->{db} ct
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN employee e ON (ct.employee_id = e.id)
- LEFT JOIN employee m ON (m.id = e.managerid)
- LEFT JOIN pricegroup g ON (ct.pricegroup_id = g.id)
- LEFT JOIN language l ON (l.code = ct.language_code)
- WHERE $where|;
-
- # redo for invoices, orders and quotations
- if ( $form->{l_transnumber}
- || $form->{l_invnumber}
- || $form->{l_ordnumber}
- || $form->{l_quonumber} )
- {
-
- my ( $ar, $union, $module );
- $query = "";
- my $transwhere;
- my $openarap = "";
- my $openoe = "";
-
- if ( $form->{open} || $form->{closed} ) {
- unless ( $form->{open} && $form->{closed} ) {
- $openarap = " AND a.amount != a.paid"
- if $form->{open};
- $openarap = " AND a.amount = a.paid"
- if $form->{closed};
- $openoe = " AND o.closed = '0'"
- if $form->{open};
- $openoe = " AND o.closed = '1'"
- if $form->{closed};
- }
- }
-
- if ( $form->{l_transnumber} ) {
-
- $ar = ( $form->{db} eq 'customer' ) ? 'ar' : 'ap';
- $module = $ar;
-
- $transwhere = "";
- $transwhere .=
- " AND a.transdate >= " . $dbh->quote( $form->{transdatefrom} )
- if $form->{transdatefrom};
- $transwhere .=
- " AND a.transdate <= " . $dbh->quote( $form->{transdateto} )
- if $form->{transdateto};
-
- $query = qq|
- SELECT ct.*, b.description AS business,
- a.invnumber, a.ordnumber,
- a.quonumber,
- a.id AS invid, '$ar' AS module,
- 'invoice' AS formtype,
- (a.amount = a.paid) AS closed,
- a.amount,
- a.netamount, e.name AS employee,
- m.name AS manager
- FROM $form->{db} ct
- JOIN $ar a ON (a.$form->{db}_id = ct.id)
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN employee e ON (a.employee_id = e.id)
- LEFT JOIN employee m ON (m.id = e.managerid)
- WHERE $where
- AND a.invoice = '0'
- $transwhere
- $openarap |;
-
- $union = qq| UNION |;
-
- }
-
- if ( $form->{l_invnumber} ) {
- $ar = ( $form->{db} eq 'customer' ) ? 'ar' : 'ap';
- $module = ( $ar eq 'ar' ) ? 'is' : 'ir';
-
- $transwhere = "";
- $transwhere .=
- " AND a.transdate >= " . $dbh->quote( $form->{transdatefrom} )
- if $form->{transdatefrom};
- $transwhere .=
- " AND a.transdate <= " . $dbh->quote( $form->{transdateto} )
- if $form->{transdateto};
-
- $query .= qq|
- $union
- SELECT ct.*, b.description AS business,
- a.invnumber, a.ordnumber, a.quonumber,
- a.id AS invid,
- '$module' AS module,
- 'invoice' AS formtype,
- (a.amount = a.paid) AS closed,
- a.amount, a.netamount,
- e.name AS employee, m.name AS manager
- FROM $form->{db} ct
- JOIN $ar a ON (a.$form->{db}_id = ct.id)
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN employee e ON (a.employee_id = e.id)
- LEFT JOIN employee m ON (m.id = e.managerid)
- WHERE $where
- AND a.invoice = '1'
- $transwhere
- $openarap |;
-
- $union = qq| UNION|;
-
- }
-
- if ( $form->{l_ordnumber} ) {
-
- $transwhere = "";
- $transwhere .=
- " AND o.transdate >= " . $dbh->quote( $form->{transdatefrom} )
- if $form->{transdatefrom};
- $transwhere .=
- " AND o.transdate <= " . $dbh->quote( $form->{transdateto} )
- if $form->{transdateto};
-
- $query .= qq|
- $union
- SELECT ct.*, b.description AS business,
- ' ' AS invnumber, o.ordnumber,
- o.quonumber, o.id AS invid,
- 'oe' AS module, 'order' AS formtype,
- o.closed, o.amount, o.netamount,
- e.name AS employee, m.name AS manager
- FROM $form->{db} ct
- JOIN oe o ON (o.$form->{db}_id = ct.id)
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN employee e ON (o.employee_id = e.id)
- LEFT JOIN employee m ON (m.id = e.managerid)
- WHERE $where
- AND o.quotation = '0'
- $transwhere
- $openoe |;
-
- $union = qq| UNION|;
-
- }
-
- if ( $form->{l_quonumber} ) {
-
- $transwhere = "";
- $transwhere .=
- " AND o.transdate >= " . $dbh->quote( $form->{transdatefrom} )
- if $form->{transdatefrom};
- $transwhere .=
- " AND o.transdate <= " . $dbh->quote( $form->{transdateto} )
- if $form->{transdateto};
-
- $query .= qq|
- $union
- SELECT ct.*, b.description AS business,
- ' ' AS invnumber, o.ordnumber,
- o.quonumber, o.id AS invid,
- 'oe' AS module,
- 'quotation' AS formtype,
- o.closed, o.amount, o.netamount,
- e.name AS employee, m.name AS manager
- FROM $form->{db} ct
- JOIN oe o ON (o.$form->{db}_id = ct.id)
- LEFT JOIN business b ON (ct.business_id = b.id)
- LEFT JOIN employee e ON (o.employee_id = e.id)
- LEFT JOIN employee m ON (m.id = e.managerid)
- WHERE $where
- AND o.quotation = '1'
- $transwhere
- $openoe |;
-
- }
-
- $sortorder .= ", invid";
- }
-
- $query .= qq| ORDER BY $sortorder|;
-
- my $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- # accounts
- $query = qq|
- SELECT c.accno
- FROM chart c
- JOIN $form->{db}tax t ON (t.chart_id = c.id)
- WHERE t.$form->{db}_id = ?|;
-
- my $tth = $dbh->prepare($query);
-
- while ( my $ref = $sth->fetchrow_hashref('NAME_lc') ) {
- $form->db_parse_numeric(sth => $sth, hashref => $ref);
- $tth->execute( $ref->{id} );
-
- while ( ($item) = $tth->fetchrow_array ) {
- $ref->{taxaccount} .= "$item ";
- }
-
- $tth->finish;
- chop $ref->{taxaccount};
-
- $ref->{address} = "";
-
- for (qw(address1 address2 city state zipcode country)) {
- $ref->{address} .= "$ref->{$_} ";
- }
- push @{ $form->{CT} }, $ref;
- }
-
- $sth->finish;
- $dbh->commit;
-
-}
-
-sub get_history {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- my $query;
- my $where = "1 = 1";
- $form->{sort} = "partnumber" unless $form->{sort};
- my $sortorder = $form->{sort};
- my %ordinal = ();
- my $var;
- my $table;
-
- # setup ASC or DESC
- $form->sort_order();
-
- if ( $form->{"$form->{db}number"} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{"$form->{db}number"} ) );
- $where .= " AND lower(ct.$form->{db}number) LIKE $var";
- }
-
- if ( $form->{address} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{address} ) );
- $where .= " AND lower(ct.address1) ILIKE $var";
- }
-
- for (qw(name contact email phone notes city state zipcode country)) {
-
- if ( $form->{$_} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{$_} ) );
- $where .= " AND lower(ct.$_) LIKE $var";
- }
- }
-
- if ( $form->{employee} ne "" ) {
- $var = $dbh->quote($form->like(lc $form->{employee}));
- $where .= " AND lower(e.name) LIKE $var";
- }
-
- $transwhere .=
- " AND a.transdate >= " . $dbh->quote( $form->{transdatefrom} )
- if $form->{transdatefrom};
- $transwhere .= " AND a.transdate <= " . $dbh->quote( $form->{transdateto} )
- if $form->{transdateto};
-
- if ( $form->{open} || $form->{closed} ) {
-
- unless ( $form->{open} && $form->{closed} ) {
-
- if ( $form->{type} eq 'invoice' ) {
- $where .= " AND a.amount != a.paid"
- if $form->{open};
- $where .= " AND a.amount = a.paid"
- if $form->{closed};
- }
- else {
- $where .= " AND a.closed = '0'"
- if $form->{open};
- $where .= " AND a.closed = '1'"
- if $form->{closed};
- }
- }
- }
-
- my $invnumber = 'invnumber';
- my $deldate = 'deliverydate';
- my $buysell;
- my $sellprice = "sellprice";
-
- if ( $form->{db} eq 'customer' ) {
- $buysell = "buy";
-
- if ( $form->{type} eq 'invoice' ) {
- $where .= qq|
- AND a.invoice = '1' AND i.assemblyitem = '0'|;
- $table = 'ar';
- $sellprice = "fxsellprice";
- }
- else {
- $table = 'oe';
-
- if ( $form->{type} eq 'order' ) {
- $invnumber = 'ordnumber';
- $where .= qq| AND a.quotation = '0'|;
- }
- else {
- $invnumber = 'quonumber';
- $where .= qq| AND a.quotation = '1'|;
- }
-
- $deldate = 'reqdate';
- }
- }
-
- if ( $form->{db} eq 'vendor' ) {
-
- $buysell = "sell";
-
- if ( $form->{type} eq 'invoice' ) {
-
- $where .= qq| AND a.invoice = '1' AND i.assemblyitem = '0'|;
- $table = 'ap';
- $sellprice = "fxsellprice";
-
- }
- else {
-
- $table = 'oe';
-
- if ( $form->{type} eq 'order' ) {
- $invnumber = 'ordnumber';
- $where .= qq| AND a.quotation = '0'|;
- }
- else {
- $invnumber = 'quonumber';
- $where .= qq| AND a.quotation = '1'|;
- }
-
- $deldate = 'reqdate';
- }
- }
-
- my $invjoin = qq| JOIN invoice i ON (i.trans_id = a.id)|;
-
- if ( $form->{type} eq 'order' ) {
- $invjoin = qq| JOIN orderitems i ON (i.trans_id = a.id)|;
- }
-
- if ( $form->{type} eq 'quotation' ) {
- $invjoin = qq| JOIN orderitems i ON (i.trans_id = a.id)|;
- $where .= qq| AND a.quotation = '1'|;
- }
-
- %ordinal = (
- partnumber => 9,
- description => 12,
- "$deldate" => 16,
- serialnumber => 17,
- projectnumber => 18
- );
-
- $sortorder =
- "2 $form->{direction}, 1, 11, $ordinal{$sortorder} $form->{direction}";
-
- $query = qq|
- SELECT ct.id AS ctid, ct.name, ct.address1,
- ct.address2, ct.city, ct.state,
- p.id AS pid, p.partnumber, a.id AS invid,
- a.$invnumber, a.curr, i.description,
- i.qty, i.$sellprice AS sellprice, i.discount,
- i.$deldate, i.serialnumber, pr.projectnumber,
- e.name AS employee, ct.zipcode, ct.country, i.unit,
- (SELECT $buysell
- FROM exchangerate ex
- WHERE a.curr = ex.curr
- AND a.transdate = ex.transdate) AS exchangerate
- FROM $form->{db} ct
- JOIN $table a ON (a.$form->{db}_id = ct.id)
- $invjoin
- JOIN parts p ON (p.id = i.parts_id)
- LEFT JOIN project pr ON (pr.id = i.project_id)
- LEFT JOIN employee e ON (e.id = a.employee_id)
- WHERE $where
- ORDER BY $sortorder|;
-
- my $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- $ref->{address} = "";
- $ref->{exchangerate} ||= 1;
- for (qw(address1 address2 city state zipcode country)) {
- $ref->{address} .= "$ref->{$_} ";
- }
- $ref->{id} = $ref->{ctid};
- push @{ $form->{CT} }, $ref;
- }
-
- $sth->finish;
- $dbh->commit;
-
-}
-
-sub pricelist {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- my $query;
-
- if ( $form->{db} eq 'customer' ) {
- $query = qq|SELECT p.id, p.partnumber, p.description,
- p.sellprice, pg.partsgroup, p.partsgroup_id,
- m.pricebreak, m.sellprice,
- m.validfrom, m.validto, m.curr
- FROM partscustomer m
- JOIN parts p ON (p.id = m.parts_id)
- LEFT JOIN partsgroup pg ON (pg.id = p.partsgroup_id)
- WHERE m.customer_id = ?
- ORDER BY partnumber|;
- }
-
- if ( $form->{db} eq 'vendor' ) {
- $query = qq|SELECT p.id, p.partnumber AS sku, p.description,
- pg.partsgroup, p.partsgroup_id,
- m.partnumber, m.leadtime, m.lastcost, m.curr
- FROM partsvendor m
- JOIN parts p ON (p.id = m.parts_id)
- LEFT JOIN partsgroup pg ON (pg.id = p.partsgroup_id)
- WHERE m.vendor_id = ?
- ORDER BY p.partnumber|;
- }
-
- my $sth;
- my $ref;
-
- if ( $form->{id} ) {
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} ) || $form->dberror($query);
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_partspricelist} }, $ref;
- }
-
- $sth->finish;
- }
-
- $query = qq|SELECT value FROM defaults where setting_key = 'curr'|;
- ( $form->{currencies} ) = $dbh->selectrow_array($query);
-
- $query = qq|SELECT id, partsgroup
- FROM partsgroup
- ORDER BY partsgroup|;
-
- $sth = $dbh->prepare($query);
- $sth->execute || $self->dberror($query);
-
- $form->{all_partsgroup} = ();
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_partsgroup} }, $ref;
- }
-
- $sth->finish;
-
- $dbh->commit;
-
-}
-
-sub save_pricelist {
-
- my ( $self, $myconfig, $form ) = @_;
-
- my $dbh = $form->{dbh};
-
- my $query = qq|
- DELETE FROM parts$form->{db}
- WHERE $form->{db}_id = ?|;
-
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} ) || $form->dberror($query);
-
- foreach $i ( 1 .. $form->{rowcount} ) {
-
- if ( $form->{"id_$i"} ) {
-
- if ( $form->{db} eq 'customer' ) {
-
- for (qw(pricebreak sellprice)) {
- $form->{"${_}_$i"} =
- $form->parse_amount( $myconfig, $form->{"${_}_$i"} );
- }
-
- $query = qq|
- INSERT INTO parts$form->{db}
- (parts_id, customer_id,
- pricebreak, sellprice,
- validfrom, validto, curr)
- VALUES (?, ?, ?, ?, ?, ?, ?)|;
- @queryargs = (
- $form->{"id_$i"}, $form->{id},
- $form->{"pricebreak_$i"}, $form->{"sellprice_$i"},
- $form->{"validfrom_$i"}, $form->{"validto_$i"},
- $form->{"curr_$i"}
- );
- }
- else {
-
- for (qw(leadtime lastcost)) {
- $form->{"${_}_$i"} =
- $form->parse_amount( $myconfig, $form->{"${_}_$i"} );
- }
-
- $query = qq|
- INSERT INTO parts$form->{db}
- (parts_id, vendor_id,
- partnumber, lastcost,
- leadtime, curr)
- VALUES (?, ?, ?, ?, ?, ?)|;
- @queryargs = (
- $form->{"id_$i"}, $form->{id},
- $form->{"partnumber_$i"}, $form->{"lastcost_$i"},
- $form->{"leadtime_$i"}, $form->{"curr_$i"}
- );
-
- }
- $sth = $dbh->prepare($query);
- $sth->execute(@queryargs) || $form->dberror($query);
- }
-
- }
-
- $_ = $dbh->commit;
-
-}
-
-sub retrieve_item {
-
- my ( $self, $myconfig, $form ) = @_;
-
- # connect to database
- my $dbh = $form->{dbh};
-
- my $i = $form->{rowcount};
- my $var;
- my $null;
-
- my $where = "WHERE p.obsolete = '0'";
-
- if ( $form->{db} eq 'vendor' ) {
-
- # parts, services, labor
- $where .= " AND p.assembly = '0'";
- }
-
- if ( $form->{db} eq 'customer' ) {
-
- # parts, assemblies, services
- $where .= " AND p.income_accno_id > 0";
- }
-
- if ( $form->{"partnumber_$i"} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{"partnumber_$i"} ) );
- $where .= " AND lower(p.partnumber) LIKE $var";
- }
-
- if ( $form->{"description_$i"} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{"description_$i"} ) );
- $where .= " AND lower(p.description) LIKE $var";
- }
-
- if ( $form->{"partsgroup_$i"} ne "" ) {
- ( $null, $var ) = split /--/, $form->{"partsgroup_$i"};
- $var = $dbh->quote($var);
- $where .= qq| AND p.partsgroup_id = $var|;
- }
-
- my $query = qq|
- SELECT p.id, p.partnumber, p.description, p.sellprice,
- p.lastcost, p.unit, pg.partsgroup, p.partsgroup_id
- FROM parts p
- LEFT JOIN partsgroup pg ON (pg.id = p.partsgroup_id)
- $where
- ORDER BY partnumber|;
-
- my $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
- my $ref;
- $form->{item_list} = ();
-
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{item_list} }, $ref;
- }
-
- $sth->finish;
- $dbh->commit;
-}
-
-1;
-
diff --git a/bin/aa.pl b/bin/aa.pl
index 5709875f..75573ab6 100644
--- a/bin/aa.pl
+++ b/bin/aa.pl
@@ -1561,6 +1561,13 @@ sub transactions {
( $form->{ $form->{vc} }, $form->{"$form->{vc}_id"} ) =
split( /--/, $form->{ $form->{vc} } );
}
+ if ($form->{vc} eq 'customer'){
+ $form->{entity_class} = 2;
+ } elsif ($form->{vc} eq 'vendor'){
+ $form->{entity_class} = 1;
+ } else {
+ $form->{entity_class} = "0";
+ }
@column_index;
AA->transactions( \%myconfig, \%$form );
@@ -1969,10 +1976,10 @@ sub transactions {
for (qw(id curr)) { $column_data{$_} = "<td>$ref->{$_}</td>" }
$column_data{accno} =
-qq|<td><a href=ca.pl?path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&action=list_transactions&accounttype=standard&accno=$ref->{accno}&fromdate=$form->{transdatefrom}&todate=$form->{transdateto}&sort=transdate&l_subtotal=$form->{l_subtotal}&prevreport=$callback>$ref->{accno}</a></td>|;
+qq|<td><a href=ca.pl?path=$form->{path}&action=list_transactions&accounttype=standard&accno=$ref->{accno}&fromdate=$form->{transdatefrom}&todate=$form->{transdateto}&sort=transdate&l_subtotal=$form->{l_subtotal}&prevreport=$callback>$ref->{accno}</a></td>|;
$column_data{name} =
-qq|<td>$ref->{meta_number}</td><td><a href=ct.pl?path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&action=edit&id=$ref->{"$form->{vc}_id"}&db=$form->{vc}&callback=$callback>$ref->{name}</a></td>|;
+qq|<td>$ref->{meta_number}</td><td><a href=$form->{vc}.pl?path=$form->{path}&action=edit&entity_id=$ref->{entity_id}&meta_number=$ref->{meta_number}&db=$form->{vc}&callback=$callback>$ref->{name}</a></td>|;
if ( $ref->{id} != $sameid ) {
$j++;
diff --git a/bin/ct.pl b/bin/ct.pl
deleted file mode 100644
index 3b664096..00000000
--- a/bin/ct.pl
+++ /dev/null
@@ -1,2219 +0,0 @@
-#=====================================================================
-# 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;
-use LedgerSMB::Template;
-
-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')
-
- my %hiddens;
- my @buttons;
- $history = 1;
- $label = ucfirst $form->{db};
- $label .= " History";
-
- if ( $form->{db} eq 'customer' ) {
- $form->{invlabel} = $locale->text('Sales Invoices');
- $form->{ordlabel} = $locale->text('Sales Orders');
- $form->{quolabel} = $locale->text('Quotations');
- } else {
- $form->{invlabel} = $locale->text('Vendor Invoices');
- $form->{ordlabel} = $locale->text('Purchase Orders');
- $form->{quolabel} = $locale->text('Request for Quotations');
- }
-
- $form->{title} = $locale->text($label);
-
- $form->{nextsub} = "list_history";
-
- &search_name(\%hiddens, \@buttons);
-
-##SC: Temporary removal
-## if ( $form->{lynx} ) {
-## require "bin/menu.pl";
-## &menubar;
-## }
-
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'ct-search',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => \%hiddens,
- buttons => \@buttons,
- });
-}
-
-sub transactions {
- if ( $form->{db} eq 'customer' ) {
- $form->{translabel} = $locale->text('AR Transactions');
- $form->{invlabel} = $locale->text('Sales Invoices');
- $form->{ordlabel} = $locale->text('Sales Orders');
- $form->{quolabel} = $locale->text('Quotations');
- } else {
- $form->{translabel} = $locale->text('AP Transactions');
- $form->{invlabel} = $locale->text('Vendor Invoices');
- $form->{ordlabel} = $locale->text('Purchase Orders');
- $form->{quolabel} = $locale->text('Request for Quotations');
- }
-}
-
-sub include_in_report {
-
- $label = ucfirst $form->{db};
-
- my @fields = ();
-
- push @fields, {
- name => 'l_ndx',
- label => $locale->text('No.'),
- };
- push @fields, {
- name => 'l_id',
- label => $locale->text('ID'),
- };
- push @fields, {
- name => "l_$form->{db}number",
- label => $locale->text($label . ' Number'),
- };
- push @fields, {
- name => 'l_name',
- label => $locale->text('Company Name'),
- $form->{l_name} => $form->{l_name},
- };
- push @fields, {
- name => 'l_contact',
- label => $locale->text('Contact'),
- $form->{l_contact} => $form->{l_contact},
- };
- push @fields, {
- name => 'l_email',
- label => $locale->text('E-mail'),
- $form->{l_email} => $form->{l_email},
- };
- push @fields, {
- name => 'l_address',
- label => $locale->text('Address'),
- };
- push @fields, {
- name => 'l_city',
- label => $locale->text('City'),
- };
- push @fields, {
- name => 'l_state',
- label => $locale->text('State/Province'),
- };
- push @fields, {
- name => 'l_zipcode',
- label => $locale->text('Zip/Postal Code'),
- };
- push @fields, {
- name => 'l_country',
- label => $locale->text('Country'),
- };
- push @fields, {
- name => 'l_phone',
- label => $locale->text('Phone'),
- $form->{l_phone} => $form->{l_phone},
- };
- push @fields, {
- name => 'l_fax',
- label => $locale->text('Fax'),
- };
- push @fields, {
- name => 'l_cc',
- label => $locale->text('Cc'),
- };
-
- if ( $myconfig{role} =~ /(admin|manager)/ ) {
- push @fields, {
- name => 'l_bcc',
- label => $locale->text('Bcc'),
- };
- }
-
- push @fields, {
- name => 'l_notes',
- label => $locale->text('Notes'),
- };
- push @fields, {
- name => 'l_discount',
- label => $locale->text('Discount'),
- };
- push @fields, {
- name => 'l_taxaccount',
- label => $locale->text('Tax Account'),
- };
- push @fields, {
- name => 'l_taxnumber',
- label => $locale->text('Tax Number'),
- };
-
- if ( $form->{db} eq 'customer' ) {
- push @fields, {
- name => 'l_employee',
- label => $locale->text('Salesperson'),
- };
- push @fields, {
- name => 'l_manager',
- label => $locale->text('Manager'),
- };
- push @fields, {
- name => 'l_pricegroup',
- label => $locale->text('Pricegroup'),
- };
-
- } else {
- push @fields, {
- name => 'l_employee',
- label => $locale->text('Employee'),
- };
- push @fields, {
- name => 'l_manager',
- label => $locale->text('Manager'),
- };
- push @fields, {
- name => 'l_gifi_accno',
- label => $locale->text('GIFI'),
- };
- }
-
- push @fields, {
- name => 'l_sic_code',
- label => $locale->text('SIC'),
- };
- push @fields, {
- name => 'l_iban',
- label => $locale->text('IBAN'),
- };
- push @fields, {
- name => 'l_bic',
- label => $locale->text('BIC'),
- };
- push @fields, {
- name => 'l_business',
- label => $locale->text('Type of Business'),
- };
- push @fields, {
- name => 'l_terms',
- label => $locale->text('Terms'),
- };
- push @fields, {
- name => 'l_langauge',
- label => $locale->text('Language'),
- };
- push @fields, {
- name => 'l_startdate',
- label => $locale->text('Startdate'),
- };
- push @fields, {
- name => 'l_enddate',
- label => $locale->text('Enddate'),
- };
-
- $form->{includes} = [];
- my $i = 0;
- while (@fields) {
- push @{$form->{includes}}, [];
- for ( 1 .. 5 ) {
- push @{$form->{includes}[$i]}, shift(@fields);
- if ($form->{includes}[$i][$_ - 1]) {
- $form->{includes}[$i][$_ - 1]{type} = 'checkbox';
- $form->{includes}[$i][$_ - 1]{value} = 'Y';
- }
- }
- $i++;
- }
-}
-
-sub search {
-
- # $locale->text('Customers')
- # $locale->text('Vendors')
-
- my %hiddens;
- my @buttons;
- $form->{title} = $locale->text('Search') unless $form->{title};
-
- for (qw(name contact phone email)) { $form->{"l_$_"} = 'checked' }
-
- $form->{nextsub} = "list_names";
-
- &transactions;
- &include_in_report;
- &search_name(\%hiddens, \@buttons);
-
-##SC: Temporary removal
-## if ( $form->{lynx} ) {
-## require "bin/menu.pl";
-## &menubar;
-## }
-
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'ct-search',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => \%hiddens,
- buttons => \@buttons,
- });
-}
-
-sub search_name {
-
- my $hiddens = shift;
- my $buttons = shift;
-
- my $label = ucfirst $form->{db};
- $form->{label} = $label;
- $hiddens->{$_} = $form->{$_} foreach qw(db nextsub path login sessionid);
- push @{$buttons}, {
- name => 'action',
- value => 'continue',
- text => $locale->text('Continue'),
- };
-}
-
-sub list_names {
-
- my %hiddens;
- my @buttons;
- my @options;
-
- CT->search( \%myconfig, \%$form );
-
- my $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();
-
- my $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}";
-
- my @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 my $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;
-
- my @column_index;
- foreach my $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 my $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' ) {
- push @options, $locale->text('All');
- } elsif ( $form->{status} eq 'orphaned' ) {
- push @options, $locale->text('Orphaned');
- } elsif ( $form->{status} eq 'active' ) {
- push @options, $locale->text('Active');
- } elsif ( $form->{status} eq 'inactive' ) {
- push @options, $locale->text('Inactive');
- }
-
- if ( $form->{name} ) {
- $callback .= "&name=" . $form->escape( $form->{name}, 1 );
- $href .= "&name=" . $form->escape( $form->{name} );
- push @options, $locale->text('Name: [_1]', $form->{name});
- }
- if ( $form->{address} ) {
- $callback .= "&address=" . $form->escape( $form->{address}, 1 );
- $href .= "&address=" . $form->escape( $form->{address} );
- push @options, $locale->text('Address: [_1]', $form->{address});
- }
- if ( $form->{city} ) {
- $callback .= "&city=" . $form->escape( $form->{city}, 1 );
- $href .= "&city=" . $form->escape( $form->{city} );
- push @options, $locale->text('City: [_1]', $form->{city});
- }
- if ( $form->{state} ) {
- $callback .= "&state=" . $form->escape( $form->{state}, 1 );
- $href .= "&state=" . $form->escape( $form->{state} );
- push @options, $locale->text('State: [_1]', $form->{state});
- }
- if ( $form->{zipcode} ) {
- $callback .= "&zipcode=" . $form->escape( $form->{zipcode}, 1 );
- $href .= "&zipcode=" . $form->escape( $form->{zipcode} );
- push @options, $locale->text('Zip/Postal Code: [_1]', $form->{zipcode});
- }
- if ( $form->{country} ) {
- $callback .= "&country=" . $form->escape( $form->{country}, 1 );
- $href .= "&country=" . $form->escape( $form->{country} );
- push @options, $locale->text('Country: [_1]', $form->{country});
- }
- if ( $form->{contact} ) {
- $callback .= "&contact=" . $form->escape( $form->{contact}, 1 );
- $href .= "&contact=" . $form->escape( $form->{contact} );
- push @options, $locale->text('Contact: [_1]', $form->{contact});
- }
- if ( $form->{employee} ) {
- $callback .= "&employee=" . $form->escape( $form->{employee}, 1 );
- $href .= "&employee=" . $form->escape( $form->{employee} );
- if ( $form->{db} eq 'customer' ) {
- push @options, $locale->text('Salesperson: [_1]', $form->{employee});
- } elsif ( $form->{db} eq 'vendor' ) {
- push @options, $locale->text('Employee: [_1]', $form->{employee});
- }
- }
-
- my $fromdate = "";
- my $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 ) {
- push @options,
- $locale->text('Startdate [_1] - [_2]', $fromdate, $todate);
- }
-
- if ( $form->{notes} ) {
- $callback .= "&notes=" . $form->escape( $form->{notes}, 1 );
- $href .= "&notes=" . $form->escape( $form->{notes} );
- push @options, $locale->text('Notes: [_1]', $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"} );
- push @options,
- $locale->text('Number: [_1]', $form->{"$form->{db}number"});
- }
- if ( $form->{phone} ) {
- $callback .= "&phone=" . $form->escape( $form->{phone}, 1 );
- $href .= "&phone=" . $form->escape( $form->{phone} );
- push @options, $locale->text('Phone: [_1]', $form->{phone});
- }
- if ( $form->{email} ) {
- $callback .= "&email=" . $form->escape( $form->{email}, 1 );
- $href .= "&email=" . $form->escape( $form->{email} );
- push @options, $locale->text('E-mail: [_1]', $form->{email});
- }
- if ( $form->{transdatefrom} ) {
- $callback .= "&transdatefrom=$form->{transdatefrom}";
- $href .= "&transdatefrom=$form->{transdatefrom}";
- push @options, $locale->text('From [_1]',
- $locale->date( \%myconfig, $form->{transdatefrom}, 1 ));
- }
- if ( $form->{transdateto} ) {
- $callback .= "&transdateto=$form->{transdateto}";
- $href .= "&transdateto=$form->{transdateto}";
- if ( $form->{transdatefrom} ) {
- pop @options;
- push @options, $locale->text('From [_1] To [_2]',
- $locale->date( \%myconfig, $form->{transdatefrom}, 1 ),
- $locale->date( \%myconfig, $form->{transdateto}, 1 ));
- } else {
- push @options, $locale->text('To [_1]',
- $locale->date( \%myconfig, $form->{transdateto}, 1 ));
- }
- }
- if ( $form->{open} ) {
- $callback .= "&open=$form->{open}";
- $href .= "&open=$form->{open}";
- push @options, $locale->text('Open');
- }
- if ( $form->{closed} ) {
- $callback .= "&closed=$form->{closed}";
- $href .= "&closed=$form->{closed}";
- push @options, $locale->text('Closed');
- }
-
- $form->{callback} = "$callback&sort=$form->{sort}";
- $callback = $form->escape( $form->{callback} );
-
- my %column_header;
- $column_header{ndx} = ' ';
- $column_header{id} = $locale->text('ID');
- $column_header{"$form->{db}number"} = {
- href => "$href&sort=$form->{db}number",
- text => $locale->text('Number')
- };
- $column_header{name} = {
- href => "$href&sort=name",
- text => $locale->text('Name')
- };
- $column_header{address} = $locale->text('Address');
- $column_header{city} = {
- href => "$href&sort=city",
- text => $locale->text('City')
- };
- $column_header{state} = {
- href => "$href&sort=state",
- text => $locale->text('State/Province')
- };
- $column_header{zipcode} = {
- href => "$href&sort=zipcode",
- text => $locale->text('Zip/Postal Code')
- };
- $column_header{country} = {
- href => "$href&sort=country",
- text => $locale->text('Country')
- };
- $column_header{contact} = {
- href => "$href&sort=contact",
- text => $locale->text('Contact'),
- };
- $column_header{phone} = {
- href => "$href&sort=phone",
- text => $locale->text('Phone')
- };
- $column_header{fax} = {
- href => "$href&sort=fax",
- text => $locale->text('Fax')
- };
- $column_header{email} = {
- href => "$href&sort=email",
- text => $locale->text('E-mail')
- };
- $column_header{cc} = {
- href => "$href&sort=cc",
- text => $locale->text('Cc')
- };
- $column_header{bcc} = {
- href => "$href&sort=cc",
- text => $locale->text('Bcc')
- };
- $column_header{notes} = {
- href => "$href&sort=notes",
- text => $locale->text('Notes')
- };
- $column_header{discount} = '%';
- $column_header{terms} = $locale->text('Terms');
-
- $column_header{taxnumber} = {
- href => "$href&sort=taxnumber",
- text => $locale->text('Tax Number')
- };
- $column_header{taxaccount} = $locale->text('Tax Account');
- $column_header{gifi_accno} = {
- href => "$href&sort=gifi_accno",
- text => $locale->text('GIFI')
- };
- $column_header{sic_code} = {
- href => "$href&sort=sic_code",
- text => $locale->text('SIC')
- };
- $column_header{business} = {
- href => "$href&sort=business",
- text => $locale->text('Type of Business')
- };
- $column_header{iban} = $locale->text('IBAN');
- $column_header{bic} = $locale->text('BIC');
- $column_header{startdate} = {
- href => "$href&sort=startdate",
- text => $locale->text('Startdate')
- };
- $column_header{enddate} = {
- href => "$href&sort=enddate",
- text => $locale->text('Enddate')
- };
-
- $column_header{invnumber} = {
- href => "$href&sort=invnumber",
- text => $locale->text('Invoice')
- };
- $column_header{ordnumber} = {
- href => "$href&sort=ordnumber",
- text => $locale->text('Order')
- };
- $column_header{quonumber} = {
- href => "$href&sort=quonumber",
- text => $locale->text('Quotation')
- };
-
- if ( $form->{db} eq 'customer' ) {
- $column_header{employee} = {
- href => "$href&sort=employee",
- text => $locale->text('Salesperson')
- };
- } else {
- $column_header{employee} = {
- href => "$href&sort=employee",
- text => $locale->text('Employee')
- };
- }
- $column_header{manager} = {
- href => "$href&sort=manager",
- text => $locale->text('Manager')
- };
-
- $column_header{pricegroup} = {
- href => "$href&sort=pricegroup",
- text => $locale->text('Pricegroup')
- };
- $column_header{language} = {
- href => "$href&sort=language",
- text => $locale->text('Language')
- };
-
- $amount = $locale->text('Amount');
- $tax = $locale->text('Tax');
- $total = $locale->text('Total');
-
- $column_header{invamount} = $amount;
- $column_header{ordamount} = $amount;
- $column_header{quoamount} = $amount;
-
- $column_header{invtax} = $tax;
- $column_header{ordtax} = $tax;
- $column_header{quotax} = $tax;
-
- $column_header{invtotal} = $total;
- $column_header{ordtotal} = $total;
- $column_header{quototal} = $total;
-
- if ( $form->{status} ) {
- $label = ucfirst $form->{db} . "s";
- $form->{title} = $locale->text($label);
- } else {
- $label = ucfirst $form->{db};
- $form->{title} = $locale->text( $label . " Transactions" );
- }
-
- my $ordertype =
- ( $form->{db} eq 'customer' ) ? 'sales_order' : 'purchase_order';
- my $quotationtype =
- ( $form->{db} eq 'customer' ) ? 'sales_quotation' : 'request_quotation';
- $subtotal = 0;
-
- my $i = 0;
- my @rows;
- foreach my $ref ( @{ $form->{CT} } ) {
-
- if ( $ref->{ $form->{sort} } ne $sameitem && $form->{l_subtotal} ) {
- # append subtotal
- if ($subtotal) {
- push @rows, &list_subtotal;
- }
- }
-
- my %column_data;
- if ( $ref->{id} eq $sameid ) {
- for (@column_index) { $column_data{$_} = ' ' }
- } else {
-
- $i++;
-
- $ref->{notes} =~ s/\r?\n/<br>/g;
- for (@column_index) {
- $column_data{$_} = $ref->{$_};
- }
- $column_data{ndx} = $i;
-
- if ( $ref->{ $form->{sort} } eq $sameitem ) {
- $column_data{ $form->{sort} } = ' ';
- }
-
- $column_data{address} =
- "$ref->{address1} $ref->{address2}";
- $column_data{name} = {
- text => $ref->{name},
- 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",
- };
-
- $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};
- $column_data{$item} = {
- href => "mailto:$ref->{$item}",
- text => $email,
- };
- }
- }
- }
- }
-
- if ( $ref->{formtype} eq 'invoice' ) {
- $column_data{invnumber} = {
- href => "$ref->{module}.pl?action=edit&id=$ref->{invid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => $ref->{invnumber},
- };
-
- $column_data{invamount} =
- $form->format_amount( \%myconfig, $ref->{netamount}, 2, ' ' );
- $column_data{invtax} = $form->format_amount( \%myconfig,
- $ref->{amount} - $ref->{netamount}, 2, ' ' );
- $column_data{invtotal} =
- $form->format_amount( \%myconfig, $ref->{amount}, 2, ' ' );
-
- $invamountsubtotal += $ref->{netamount};
- $invtaxsubtotal += ( $ref->{amount} - $ref->{netamount} );
- $invtotalsubtotal += $ref->{amount};
- $subtotal = 1;
- } elsif ( $ref->{formtype} eq 'order' ) {
- $column_data{ordnumber} = {
- href => "$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$ordertype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => $ref->{ordnumber},
- };
-
- $column_data{ordamount} =
- $form->format_amount( \%myconfig, $ref->{netamount}, 2, ' ' );
- $column_data{ordtax} = $form->format_amount( \%myconfig,
- $ref->{amount} - $ref->{netamount}, 2, ' ' );
- $column_data{ordtotal} =
- $form->format_amount( \%myconfig, $ref->{amount}, 2, ' ' );
-
- $ordamountsubtotal += $ref->{netamount};
- $ordtaxsubtotal += ( $ref->{amount} - $ref->{netamount} );
- $ordtotalsubtotal += $ref->{amount};
- $subtotal = 1;
- } elsif ( $ref->{formtype} eq 'quotation' ) {
- $column_data{quonumber} = {
- href => "$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$quotationtype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => $ref->{quonumber},
- };
-
- $column_data{quoamount} =
- $form->format_amount( \%myconfig, $ref->{netamount}, 2, ' ' );
- $column_data{quotax} = $form->format_amount( \%myconfig,
- $ref->{amount} - $ref->{netamount}, 2, ' ' );
- $column_data{quototal} =
- $form->format_amount( \%myconfig, $ref->{amount}, 2, ' ' );
-
- $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} =
- $form->format_amount( \%myconfig, $ref->{discount} * 100,
- "", ' ' );
- }
- if ( $form->{l_terms} ) {
- $column_data{terms} =
- $form->format_amount( \%myconfig, $ref->{terms}, "", ' ' );
- }
- }
-
- $j++;
- $j %= 2;
- $column_data{i} = $j;
-
- $sameitem = $ref->{$form->{sort}};
- $sameid = $ref->{id};
-
- push @rows, \%column_data;
- }
-
- if ( $form->{l_subtotal} && $subtotal ) {
- push @rows, &list_subtotal;
- }
-
- $i = 1;
- if ( $myconfig{acs} !~ /AR--AR/ ) {
- if ( $form->{db} eq 'customer' ) {
- $button{'AR--Customers--Add Customer'}{code} = {
- name => 'action',
- value => 'add_customer',
- text => $locale->text('Add Customer'),
- };
- $button{'AR--Customers--Add Customer'}{order} = $i++;
- }
- }
- if ( $myconfig{acs} !~ /AP--AP/ ) {
- if ( $form->{db} eq 'vendor' ) {
- $button{'AP--Vendors--Add Vendor'}{code} = {
- name => 'action',
- value => 'add_vendor',
- text => $locale->text('Add Vendor'),
- };
- $button{'AP--Vendors--Add Vendor'}{order} = $i++;
- }
- }
-
- foreach $item ( split /;/, $myconfig{acs} ) {
- delete $button{$item};
- }
-
- $hiddens{$_} = $form->{$_} foreach qw(callback db path login sessionid);
-
- if ( $form->{status} ) {
- foreach $item ( sort { $a->{order} <=> $b->{order} } %button ) {
- push @buttons, $item->{code};
- }
- }
-
-##SC: Temporary removal
-## if ( $form->{lynx} ) {
-## require "bin/menu.pl";
-## &menubar;
-## }
-
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'form-dynatable',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => \%hiddens,
- buttons => \@buttons,
- options => \@options,
- rows => \@rows,
- columns => \@column_index,
- heading => \%column_header,
- });
-}
-
-sub list_subtotal {
-
- my %column_data;
- $column_data{invamount} =
- $form->format_amount( \%myconfig, $invamountsubtotal, 2, ' ' );
- $column_data{invtax} =
- $form->format_amount( \%myconfig, $invtaxsubtotal, 2, ' ' );
- $column_data{invtotal} =
- $form->format_amount( \%myconfig, $invtotalsubtotal, 2, ' ' );
-
- $invamountsubtotal = 0;
- $invtaxsubtotal = 0;
- $invtotalsubtotal = 0;
-
- $column_data{ordamount} =
- $form->format_amount( \%myconfig, $ordamountsubtotal, 2, ' ' );
- $column_data{ordtax} =
- $form->format_amount( \%myconfig, $ordtaxsubtotal, 2, ' ' );
- $column_data{ordtotal} =
- $form->format_amount( \%myconfig, $ordtotalsubtotal, 2, ' ' );
-
- $ordamountsubtotal = 0;
- $ordtaxsubtotal = 0;
- $ordtotalsubtotal = 0;
-
- $column_data{quoamount} =
- $form->format_amount( \%myconfig, $quoamountsubtotal, 2, ' ' );
- $column_data{quotax} =
- $form->format_amount( \%myconfig, $quotaxsubtotal, 2, ' ' );
- $column_data{quototal} =
- $form->format_amount( \%myconfig, $quototalsubtotal, 2, ' ' );
-
- $quoamountsubtotal = 0;
- $quotaxsubtotal = 0;
- $quototalsubtotal = 0;
-
- $column_data{class} = 'subtotal';
- \%column_data;
-}
-
-sub list_history {
-
- CT->get_history( \%myconfig, \%$form );
- my %hiddens;
- my @buttons;
-
- my $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();
-
- my $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};
- my @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 );
- }
-
- my @column_index;
- 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";
- }
- }
-
- my @options;
- if ( $form->{history} eq 'detail' ) {
- push @options, $locale->text('Detail');
- } elsif ( $form->{history} eq 'summary' ) {
- push @options, $locale->text('Summary');
- }
- if ( $form->{name} ) {
- $callback .= "&name=" . $form->escape( $form->{name}, 1 );
- $href .= "&name=" . $form->escape( $form->{name} );
- push @options, $locale->text('Name: [_1]', $form->{name});
- }
- if ( $form->{contact} ) {
- $callback .= "&contact=" . $form->escape( $form->{contact}, 1 );
- $href .= "&contact=" . $form->escape( $form->{contact} );
- push @options, $locale->text('Contact: [_1]', $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"} );
- push @options, $locale->text('Number: [_1]',
- $form->{"$form->{db}number"});
- }
- if ( $form->{email} ) {
- $callback .= "&email=" . $form->escape( $form->{email}, 1 );
- $href .= "&email=" . $form->escape( $form->{email} );
- push @options, $locale->text('E-mail: [_1]', $form->{email});
- }
- if ( $form->{transdatefrom} ) {
- $callback .= "&transdatefrom=$form->{transdatefrom}";
- $href .= "&transdatefrom=$form->{transdatefrom}";
- push @options, $locale->text('From [_1]',
- $locale->date( \%myconfig, $form->{transdatefrom}, 1 ));
- }
- if ( $form->{transdateto} ) {
- $callback .= "&transdateto=$form->{transdateto}";
- $href .= "&transdateto=$form->{transdateto}";
- if ( $form->{transdatefrom} ) {
- pop @options;
- push @options, $locale->text('From [_1] To [_2]',
- $locale->date( \%myconfig, $form->{transdatefrom}, 1 ),
- $locale->date( \%myconfig, $form->{transdateto}, 1 ));
- } else {
- push @options, $locale->text('To [_1]',
- $locale->date( \%myconfig, $form->{transdateto}, 1 ));
- }
- }
- if ( $form->{open} ) {
- $callback .= "&open=$form->{open}";
- $href .= "&open=$form->{open}";
- push @options, $locale->text('Open');
- }
- if ( $form->{closed} ) {
- $callback .= "&closed=$form->{closed}";
- $href .= "&closed=$form->{closed}";
- push @options, $locale->text('Closed');
- }
-
- $form->{callback} = "$callback&sort=$form->{sort}";
- $callback = $form->escape( $form->{callback} );
-
- my %column_header;
- $column_header{partnumber} = {
- href => "$href&sort=partnumber",
- text => $locale->text('Part Number')
- };
- $column_header{description} = {
- href => "$href&sort=description",
- text => $locale->text('Description')
- };
-
- if ( $form->{history} eq 'summary' ) {
- $column_header{sellprice} = $locale->text('Total');
- } else {
- $column_header{sellprice} = $locale->text('Sell Price');
- }
- $column_header{fxsellprice} = ' ';
-
- $column_header{curr} = $locale->text('Curr');
- $column_header{discount} = $locale->text('Discount');
- $column_header{qty} = $locale->text('Qty');
- $column_header{unit} = $locale->text('Unit');
- $column_header{deliverydate} = {
- href => "$href&sort=deliverydate",
- text => $locale->text('Delivery Date')
- };
- $column_header{projectnumber} = {
- href => "$href&sort=projectnumber",
- text => $locale->text('Project Number')
- };
- $column_header{serialnumber} = {
- href => "$href&sort=serialnumber",
- text => $locale->text('Serial Number')
- };
-
- # $locale->text('Customer History')
- # $locale->text('Vendor History')
-
- $label = ucfirst $form->{db};
- $form->{title} = $locale->text( $label . " History" );
-
- $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;
-
- my @rows;
- foreach my $ref ( @{ $form->{CT} } ) {
-
- if ( $ref->{id} ne $sameid ) {
- # print the header
- push @rows, {
- class => 'divider',
- text => "$ref->{name} $ref->{address}"
- href => "$form->{script}?action=edit&id=$ref->{ctid}&db=$form->{db}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- };
- }
-
- 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;
-
- if ( $form->{type} eq 'invoice' ) {
- push @rows, {
- class => 'divider',
- href => "${module}.pl?action=edit&id=$ref->{invid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => "$invlabel $ref->{invnumber} / $ref->{employee}";
- };
- } elsif ( $form->{type} eq 'order' ) {
- push @rows, {
- class => 'divider',
- href => "${module}.pl?action=edit&id=$ref->{invid}&type=$ordertype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => "$ordlabel $ref->{ordnumber} / $ref->{employee}"
- };
- } elsif ( $form->{type} eq 'quotation' ) {
- push @rows, {
- class => 'divider',
- href => "${module}.pl?action=edit&id=$ref->{invid}&type=$quotationtype&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback",
- text => "$quolabel $ref->{quonumber} / $ref->{employee}"
- };
- }
- }
-
- my %column_data;
- for (@column_index) { $column_data{$_} = $ref->{$_} }
-
- if ( $form->{l_curr} ) {
- $column_data{fxsellprice} =
- $form->format_amount( \%myconfig, $ref->{fxsellprice}, 2 );
- }
- $column_data{sellprice} =
- $form->format_amount( \%myconfig, $ref->{sellprice}, 2 );
- $column_data{qty} =
- $form->format_amount( \%myconfig, $ref->{qty} * $ml );
- $column_data{discount} =
- $form->format_amount( \%myconfig, $ref->{discount} * 100, "", ' ' );
- $column_data{partnumber} = {
- href => "ic.pl?action=edit&id=$ref->{pid}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback"
- text => $ref->{partnumber}
- };
-
- $i++;
- $i %= 2;
- $column_data{i} = $i;
-
- push @rows, \%column_data;
-
- $sameid = $ref->{id};
- $sameinvid = $ref->{invid};
-
- }
-
-##SC: Temporary removal
-## if ( $form->{lynx} ) {
-## require "bin/menu.pl";
-## &menubar;
-## }
-
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'form-dynatable',
- );
- $template->render({
- form => $form,
- options => \@options,
- rows => \@rows,
- columns => \@column_index,
- heading => \%column_header,
- });
-}
-
-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 ( $form->{currencies} ) {
- # currencies
- $form->{selectcurrency} = {
- name => 'curr',
- options => [],
- default_values => $form->{curr},
- };
- push @{$form->{selectcurrency}{options}}, {
- text => $_,
- value => $_,
- } foreach split /:/, $form->{currencies};
- }
-
- $form->{taxable} = [];
- foreach my $item ( split / /, $form->{taxaccounts} ) {
- my $temp_tax = {
- name => "tax_$item",
- value => 1,
- type => 'checkbox',
- label => $form->{tax}{$item}{description}
- };
- $temp_tax->{checked} = 'checked' if $form->{tax}{$item}{taxable};
- push @{$form->{taxable}}, $temp_tax;
- }
-
- if (ref $form->{all_business} eq 'ARRAY') {
- $form->{selectbusiness} = {
- name => 'business',
- options => [{text => '', value => ''}],
- };
- push @{$form->{selectbusiness}{options}}, {
- text => $_->{description},
- value => "$_->{description}--$_->{id}",
- } foreach @{$form->{all_business}};
- $form->{selectbusiness}{default_values} =
- "$form->{business}--$form->{business_id}";
- }
-
- if (ref $form->{all_pricegroup} eq 'ARRAY' && $form->{db} eq 'customer') {
- $form->{selectpricegroup} = {
- name => 'pricegroup',
- options => [{text => '', value => ''}],
- };
- push @{$form->{selectpricegroup}{options}}, {
- name => $_->{pricegroup},
- value => "$_->{pricegroup}--$_->{id}",
- } foreach @{$form->{all_pricegroup}};
- $form->{selectpricegroup}{default_values} =
- "$form->{pricegroup}--$form->{pricegroup_id}";
- }
-
- if ( @{ $form->{all_language} } ) {
- $form->{selectlanguage} = {
- name => 'language',
- options => [{text => '', value => ''}],
- };
- push @{$form->{selectlanguage}{options}}, {
- text => $_->{description},
- value => "$_->{description}--$_->{code}",
- } foreach @{$form->{all_language}};
- $form->{selectlangauge}{default_values} =
- "$form->{language}--$form->{language_code}";
- }
-
- $form->{selectemployee} = {
- name => 'employee',
- options => [{text => '', value => ''}],
- default_values => "$form->{employee}--$form->{employee_id}",
- };
- push @{$form->{selectemployee}{options}}, {
- text => $_->{name},
- value => "$_->{name}--$_->{id}",
- } foreach @{$form->{all_employee}};
-
- if (ref $form->{all_employee} eq 'ARRAY') {
- if ( $myconfig{role} eq 'user' && $form->{id} ) {
- $hiddens{employee} = "$form->{employee}--$form->{employee_id}";
- }
- }
-
- # $locale->text('Customer Number')
- # $locale->text('Vendor Number')
-
- $label = ucfirst $form->{db};
- $form->{label} = $label;
- $form->{title} = $locale->text("$form->{title} $label");
-}
-
-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')
-
- my %hiddens;
- my @buttons;
-
- %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') },
- );
-
- my %blist = ();
-
- if ( $form->{db} eq 'customer' ) {
- if ( $myconfig{acs} !~ /AR--Customers--Add Customer/ ) {
- $blist{'save'} = 1;
-
- if ( $form->{id} ) {
- $blist{'save_as_new'} = 1;
- if ( $form->{status} eq 'orphaned' ) {
- $blist{'delete'} = 1;
- }
- }
- }
-
- if ( $myconfig{acs} !~ /AR--AR/ ) {
- if ( $myconfig{acs} !~ /AR--Add Transaction/ ) {
- $blist{'ar_transaction'} = 1;
- }
- if ( $myconfig{acs} !~ /AR--Sales Invoice/ ) {
- $blist{'sales_invoice'} = 1;
- }
- }
- if ( $myconfig{acs} !~ /POS--POS/ ) {
- if ( $myconfig{acs} !~ /POS--Sale/ ) {
- $blist{'pos'} = 1;
- }
- }
- if ( $myconfig{acs} !~ /Order Entry--Order Entry/ ) {
- if ( $myconfig{acs} !~ /Order Entry--Sales Order/ ) {
- $blist{'sales_order'} = 1;
- }
- }
- if ( $myconfig{acs} !~ /Quotations--Quotations/ ) {
- if ( $myconfig{acs} !~ /Quotations--Quotation/ ) {
- $blist{'quotation'} = 1;
- }
- }
- }
-
- if ( $form->{db} eq 'vendor' ) {
- if ( $myconfig{acs} !~ /AP--Vendors--Add Vendor/ ) {
- $blist{'save'} = 1;
-
- if ( $form->{id} ) {
- $blist{'save_as_new'} = 1;
- if ( $form->{status} eq 'orphaned' ) {
- $blist{'delete'} = 1;
- }
- }
- }
-
- if ( $myconfig{acs} !~ /AP--AP/ ) {
- if ( $myconfig{acs} !~ /AP--Add Transaction/ ) {
- $blist{'ap_transaction'} = 1;
- }
- if ( $myconfig{acs} !~ /AP--Vendor Invoice/ ) {
- $blist{'vendor_invoice'} = 1;
- }
- }
- if ( $myconfig{acs} !~ /Order Entry--Order Entry/ ) {
- if ( $myconfig{acs} !~ /Order Entry--Purchase Order/ ) {
- $blist{'purchase_order'} = 1;
- }
- }
- if ( $myconfig{acs} !~ /Quotations--Quotations/ ) {
- if ( $myconfig{acs} !~ /Quotations--RFQ/ ) {
- $blist{'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/ ) {
- $blist{'pricelist'} = 1;
- }
- }
-
- $hiddens{$_} = $form->{$_} foreach
- qw(id taxaccounts path login sessionid callback db);
-
- for ( keys %button ) { delete $button{$_} if !$blist{$_} }
- for ( sort { $button{$a}->{ndx} <=> $button{$b}->{ndx} } keys %button ) {
- push @buttons, {
- name => 'action',
- value => $_,
- accesskey => $button{$_}{key},
- title => "$button{$name}{value} [Alt-$button{$_}{key}]",
- text => $button{$_}{value},
- };
- }
-
-##SC: Temporary removal
-## if ( $form->{lynx} ) {
-## require "bin/menu.pl";
-## &menubar;
-## }
-
- $form->{dbnumber} = "$form->{db}number";
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'ct-form',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => \%hiddens,
- buttons => \@buttons,
- options => \@options,
- });
-}
-
-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};
- $form->{selectcurrency} = [];
- for (@curr) {push @{$form->{selectcurrency}}, {text => $_, value => $_}}
-
- if (ref $form->{all_partsgroup} eq 'ARRAY') {
- $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 {
-
- my @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 {
-
- my @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 {
-
- my %hiddens;
- my $buttons = &pricelist_footer;
- delete $form->{action};
- $hiddens{$_} = $form->{$_} foreach sort keys %$form;
- &pricelist_header(\%hiddens, $buttons);
-}
-
-sub pricelist_header {
- my $hiddens = shift;
- my $buttons = shift;
-
- $form->{title} = $form->{name};
-
- my @column_index;
- my %column_header;
-
- 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} = $locale->text('Break');
- $column_header{sellprice} = $locale->text('Sell Price');
- $column_header{validfrom} = $locale->text('From');
- $column_header{validto} = $locale->text('To');
- }
-
- 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} = $locale->text('SKU');
- $column_header{leadtime} = $locale->text('Leadtime');
- $column_header{lastcost} = $locale->text('Cost');
- }
-
- $column_header{partnumber} = $locale->text('Number');
- $column_header{description} = $locale->text('Description'); #80% width
- $column_header{partsgroup} = $locale->text('Group');
- $column_header{curr} = $locale->text('Curr');
-
- $sameid = "";
- my @rows;
- foreach my $i ( 1 .. $form->{rowcount} ) {
- my %column_data;
-
- if ( $form->{selectpartsgroup} ) {
- if ( $i < $form->{rowcount} ) {
- ($partsgroup) = split /--/, $form->{"partsgroup_$i"};
- $hiddens->{"partsgroup_$i"} = $form->{"partsgroup_$i"};
- $column_data{partsgroup} = $partsgroup;
- }
- }
-
- if ( $i < $form->{rowcount} ) {
- if ( $form->{"id_$i"} eq $sameid ) {
- for (qw(partnumber description partsgroup)) {
- $hiddens->{"${_}_$i"} = $form->{"${_}_$i"};
- $column_data{$_} = ' ';
- }
- } else {
- $column_data{sku} = {input => {
- name => "sku_$i",
- value => $form->{"sku_$i"}
- }};
- $column_data{partnumber} = {input => {
- name => "partnumber_$i",
- value => $form->{"partnumber_$i"}
- }};
- $column_data{description} =$form->{"description_$i"};
- $hiddens->{"description_$i"} = $form->{"description_$i"};
- }
- $hiddens->{"id_$i"} = $form->{"id_$i"};
- } else {
- if ( $form->{db} eq 'customer' ) {
- $column_data{partnumber} = {input => {
- name => "partnumber_$i",
- value => $form->{"partnumber_$i"}
- }};
- } else {
- $column_data{partnumber} = ' ';
- }
-
- $hiddens->{"id_$i"} = $form->{"id_$i"};
-
- $column_data{sku} = {input => {
- name => "sku_$i",
- value => $form->{"sku_$i"}
- }};
- $column_data{partnumber} = {input => {
- name => "partnumber_$i",
- value => $form->{"partnumber_$i"}
- }};
-
- if ( $form->{selectpartsgroup} ) {
- @selectpartsgroup = ({text => '', value => ''});
- foreach $line ( split /\n/, $form->{selectpartsgroup} ) {
- push @selectpartsgroup, {
- text => (split /--/, $line)[0],
- value => $line,
- };
- }
- $column_data{partsgroup} = {'select' => {
- name => "partnumber_$i",
- options => \@selectpartsgroup,
- }};
- }
- }
-
- if ( $form->{db} eq 'customer' ) {
-
- $column_data{pricebreak} = {input => {
- name => "pricebreak_$i",
- size => 5,
- value => $form->format_amount(\%myconfig, $form->{"pricebreak_$i"})
- }};
- $column_data{sellprice} = {input => {
- name => "sellprice_$i",
- size => 10,
- value => $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, 2)
- }};
- $column_data{validfrom} = {input => {
- name => "validfrom_$i",
- size => 11,
- value => $form->{"validfrom_$i"},
- }};
- $column_data{validto} = {input => {
- name => "validto_$i",
- size => 11,
- value => $form->{"validto_$i"},
- }};
- }
-
- if ( $form->{db} eq 'vendor' ) {
- $column_data{leadtime} = {input => {
- name => "leadtime_$i",
- size => 5,
- value => $form->format_amount(\%myconfig, $form->{"leadtime_$i"})
- }};
- $column_data{lastcost} = {input => {
- name => "lastcost_$i",
- size => 10,
- value => $form->format_amount( \%myconfig, $form->{"lastcost_$i"}, 2 )
- }};
- }
-
- $column_data{curr} = {'select' => {
- name => "curr_$i",
- options => $form->{selectcurrency},
- default_values => $form->{"curr_$i"},
- }};
- $sameid = $form->{"id_$i"};
-
- push @rows, \%column_data;
- }
-
- # delete variables
- foreach $i ( 1 .. $form->{rowcount} ) {
- for ( @column_index, "id" ) { delete $form->{"${_}_$i"} }
- }
- for (qw(title titlebar script none)) { delete $form->{$_} }
-
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'form-dynatable',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => $hiddens,
- buttons => $buttons,
- options => \@options,
- rows => \@rows,
- columns => \@column_index,
- heading => \%column_header,
- });
-}
-
-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') },
- );
-
- my @buttons;
- for ( sort { $button{$a}->{ndx} <=> $button{$b}->{ndx} } keys %button ) {
- push @buttons, {
- name => 'action',
- value => $_,
- accesskey => $button{$_}{key},
- title => "$button{$name}{value} [Alt-$button{$_}{key}]",
- text => $button{$_}{value},
- };
- }
-
- \@buttons;
-}
-
-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 {
- my %hiddens;
-
- my @column_index =
- qw(ndx partnumber description partsgroup unit sellprice lastcost);
-
- my %column_data;
- $column_data{ndx} = ' ';
- $column_data{partnumber} = locale->text('Number');
- $column_data{description} = $locale->text('Description');
- $column_data{partsgroup} = $locale->text('Group');
- $column_data{unit} = $locale->text('Unit');
- $column_data{sellprice} = $locale->text('Sell Price');
- $column_data{lastcost} = $locale->text('Cost');
-
- $form->{title} = $locale->text('Select items');
-
- my $i = 0;
- my @rows;
- foreach $ref ( @{ $form->{item_list} } ) {
- $i++;
- my %column_data;
-
- for (qw(partnumber description unit)) {
- $ref->{$_} = $form->quote( $ref->{$_} );
- }
-
- $column_data{ndx} = {input => {
- name => "ndx_$i",
- type => 'checkbox',
- value => $i,
- }};
-
- $column_data{$_} = $ref->{$_} foreach
- qw(partnumber description partsgroup unit);
- $column_data{sellprice} =
- $form->format_amount( \%myconfig, $ref->{sellprice}, 2, ' ' );
- $column_data{lastcost} =
- $form->format_amount( \%myconfig, $ref->{lastcost}, 2, ' ' );
-
- $j++;
- $j %= 2;
- $column_data{i} = $j;
-
- push @rows, \%column_data;
-
- $hiddens{"new_${_}_$i"} = $ref->{$_} foreach
- qw(partnumber description partsgroup partsgroup_id sellprice lastcost unit id);
- }
-
- # delete action variable
- for (qw(nextsub item_list)) { delete $form->{$_} }
- $form->{action} = "item_selected";
-
- $hiddens{$_} = $form->{$_} foreach sort keys %$form;
- $hiddens{nextsub} = 'item_selected';
- $hiddens{lastndx} = $i;
-
- my @buttons = ({
- name => 'action',
- value => 'item_selected',
- text => $locale->text('Continue'),
- });
- my $template = LedgerSMB::Template->new_UI(
- user => \%myconfig,
- locale => $locale,
- template => 'form-dynatable',
- );
- $template->render({
- form => $form,
- user => \%myconfig,
- hiddens => \%hiddens,
- buttons => \@buttons,
- options => \@options,
- rows => \@rows,
- columns => \@column_index,
- heading => \%column_header,
- });
-}
-
-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 }
-