diff options
Diffstat (limited to 'sql-ledger/SL/CP.pm')
-rw-r--r-- | sql-ledger/SL/CP.pm | 308 |
1 files changed, 0 insertions, 308 deletions
diff --git a/sql-ledger/SL/CP.pm b/sql-ledger/SL/CP.pm deleted file mode 100644 index f84bd1594..000000000 --- a/sql-ledger/SL/CP.pm +++ /dev/null @@ -1,308 +0,0 @@ -#===================================================================== -# SQL-Ledger Accounting -# Copyright (C) 2002 -# -# Author: Dieter Simader -# Email: dsimader@sql-ledger.org -# Web: http://www.sql-ledger.org -# -# Contributors: -# -# 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. -#====================================================================== -# -# Check and receipt printing payment module backend routines -# Number to text conversion routines are in -# locale/{countrycode}/Num2text -# -#====================================================================== - -package CP; - - -sub new { - my ($type, $countrycode) = @_; - - $self = {}; - - if ($countrycode) { - if (-f "locale/$countrycode/Num2text") { - require "locale/$countrycode/Num2text"; - } else { - use SL::Num2text; - } - } else { - use SL::Num2text; - } - - bless $self, $type; - -} - - -sub paymentaccounts { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT accno, description - FROM chart - WHERE link LIKE '%$form->{arap}_paid%' - ORDER BY accno|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{PR} }, $ref; - } - $sth->finish; - - # get currencies and closedto - $query = qq|SELECT curr, closedto - FROM defaults|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($form->{currencies}, $form->{closedto}) = $sth->fetchrow_array; - $sth->finish; - - $dbh->disconnect; - -} - - -sub get_openvc { - my ($self, $myconfig, $form) = @_; - - my $dbh = $form->dbconnect($myconfig); - - my $arap = ($form->{vc} eq 'customer') ? 'ar' : 'ap'; - - my $query = qq|SELECT count(*) - FROM $form->{vc} ct, $arap a - WHERE a.$form->{vc}_id = ct.id - AND a.amount != a.paid|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - my ($count) = $sth->fetchrow_array; - $sth->finish; - - # build selection list - if ($count < $myconfig->{vclimit}) { - $query = qq|SELECT DISTINCT ct.id, ct.name - FROM $form->{vc} ct, $arap a - WHERE a.$form->{vc}_id = ct.id - AND a.amount != a.paid - ORDER BY name|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{"all_$form->{vc}"} }, $ref; - } - - $sth->finish; - - } - - $dbh->disconnect; - -} - - -sub get_openinvoices { - my ($self, $myconfig, $form) = @_; - - return unless $form->{"$form->{vc}_id"}; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $where = qq|WHERE $form->{vc}_id = $form->{"$form->{vc}_id"} - AND curr = '$form->{currency}' - AND NOT amount = paid|; - - if ($form->{transdatefrom}) { - $where .= " AND transdate >= '$form->{transdatefrom}'"; - } - if ($form->{transdateto}) { - $where .= " AND transdate <= '$form->{transdateto}'"; - } - - my ($arap, $buysell); - if ($form->{vc} eq 'customer') { - $arap = "ar"; - $buysell = "buy"; - } else { - $arap = "ap"; - $buysell = "sell"; - } - - my $query = qq|SELECT id, invnumber, transdate, amount, paid, curr - FROM $arap - $where - ORDER BY id|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - # if this is a foreign currency transaction get exchangerate - $ref->{exchangerate} = $form->get_exchangerate($dbh, $ref->{curr}, $ref->{transdate}, $buysell) if ($form->{currency} ne $form->{defaultcurrency}); - push @{ $form->{PR} }, $ref; - } - - $sth->finish; - $dbh->disconnect; - -} - - - -sub process_payment { - my ($self, $myconfig, $form) = @_; - - # connect to database, turn AutoCommit off - my $dbh = $form->dbconnect_noauto($myconfig); - - my ($paymentaccno) = split /--/, $form->{account}; - - # if currency ne defaultcurrency update exchangerate - if ($form->{currency} ne $form->{defaultcurrency}) { - $form->{exchangerate} = $form->parse_amount($myconfig, $form->{exchangerate}); - - if ($form->{vc} eq 'customer') { - $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, $form->{exchangerate}, 0); - } else { - $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, 0, $form->{exchangerate}); - } - } else { - $form->{exchangerate} = 1; - } - - my $query = qq|SELECT fxgain_accno_id, fxloss_accno_id - FROM defaults|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($fxgain_accno_id, $fxloss_accno_id) = $sth->fetchrow_array; - $sth->finish; - - my ($ARAP, $arap, $buysell); - - if ($form->{vc} eq 'customer') { - $ARAP = "AR"; - $arap = "ar"; - $buysell = "buy"; - } else { - $ARAP = "AP"; - $arap = "ap"; - $buysell = "sell"; - } - - # go through line by line - for my $i (1 .. $form->{rowcount}) { - - if ($form->{"paid_$i"}) { - - $form->{"paid_$i"} = $form->parse_amount($myconfig, $form->{"paid_$i"}); - - # get exchangerate for original - $query = qq|SELECT $buysell FROM exchangerate e, $arap a - WHERE e.curr = '$form->{currency}' - AND a.transdate = e.transdate - AND a.id = $form->{"id_$i"}|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($exchangerate) = $sth->fetchrow_array; - $sth->finish; - - $exchangerate = 1 unless $exchangerate; - - $query = qq|SELECT c.id FROM chart c, acc_trans a - WHERE a.chart_id = c.id - AND c.link = '$ARAP' - AND a.trans_id = $form->{"id_$i"}|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($id) = $sth->fetchrow_array; - $sth->finish; - - my $amount = $form->round_amount($form->{"paid_$i"} * $exchangerate * -1, 2); - $ml = ($ARAP eq 'AR') ? -1 : 1; - # add AR/AP - $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount) - VALUES ($form->{"id_$i"}, $id, - '$form->{datepaid}', $amount * $ml)|; - $dbh->do($query) || $form->dberror($query); - - # add payment - $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, - source) - VALUES ($form->{"id_$i"}, - (SELECT id FROM chart - WHERE accno = '$paymentaccno'), - '$form->{datepaid}', $form->{"paid_$i"} * $ml, - '$form->{source}')|; - $dbh->do($query) || $form->dberror($query); - - # add exchangerate difference if currency ne defaultcurrency - $amount = $form->round_amount($form->{"paid_$i"} * ($form->{exchangerate} - 1), 2); - - if ($amount != 0) { - # exchangerate difference - $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, - amount, cleared, fx_transaction) - VALUES ($form->{"id_$i"}, - (SELECT id FROM chart - WHERE accno = '$paymentaccno'), - '$form->{datepaid}', $amount * $ml, '0', '1')|; - $dbh->do($query) || $form->dberror($query); - - # gain/loss - - $amount = $form->round_amount($form->{"paid_$i"} * ($exchangerate - $form->{exchangerate}) * $ml, 2); - if ($amount != 0) { - my $accno_id = ($amount > 0) ? $fxgain_accno_id : $fxloss_accno_id; - $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, - amount, cleared, fx_transaction) - VALUES ($form->{"id_$i"}, $accno_id, - '$form->{datepaid}', $amount, '0', '1')|; - $dbh->do($query) || $form->dberror($query); - } - } - - $form->{"paid_$i"} = $form->round_amount($form->{"paid_$i"} * $exchangerate, 2); - - # update AR/AP transaction - $query = qq|UPDATE $arap set - paid = paid + $form->{"paid_$i"}, - datepaid = '$form->{datepaid}' - WHERE id = $form->{"id_$i"}|; - $dbh->do($query) || $form->dberror($query); - } - } - - my $rc = $dbh->commit; - $dbh->disconnect; - - $rc; - -} - - -1; - |