summaryrefslogtreecommitdiff
path: root/sql-ledger/SL/OP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'sql-ledger/SL/OP.pm')
-rw-r--r--sql-ledger/SL/OP.pm118
1 files changed, 118 insertions, 0 deletions
diff --git a/sql-ledger/SL/OP.pm b/sql-ledger/SL/OP.pm
new file mode 100644
index 000000000..184566c14
--- /dev/null
+++ b/sql-ledger/SL/OP.pm
@@ -0,0 +1,118 @@
+#=====================================================================
+# SQL-Ledger Accounting
+# Copyright (C) 2003
+#
+# 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.
+#======================================================================
+#
+# Overpayment function
+# used in AR, AP, IS, IR, OE, CP
+#
+#======================================================================
+
+package OP;
+
+sub overpayment {
+ my ($self, $myconfig, $form, $dbh, $amount, $ml) = @_;
+
+ my $fxamount = $form->round_amount($amount * $form->{exchangerate}, 2);
+ my ($paymentaccno) = split /--/, $form->{account};
+
+ my $vc_id = "$form->{vc}_id";
+
+ my $uid = time;
+ $uid .= $form->{login};
+
+ # add AR/AP header transaction with a payment
+ $query = qq|INSERT INTO $form->{arap} (invnumber, employee_id)
+ VALUES ('$uid', (SELECT id FROM employee
+ WHERE login = '$form->{login}'))|;
+ $dbh->do($query) || $form->dberror($query);
+
+ $query = qq|SELECT id FROM $form->{arap}
+ WHERE invnumber = '$uid'|;
+ $sth = $dbh->prepare($query);
+ $sth->execute || $form->dberror($query);
+
+ ($uid) = $sth->fetchrow_array;
+ $sth->finish;
+
+ my $invnumber = $form->{invnumber};
+ if (! $invnumber) {
+ $invnumber = $form->update_defaults($myconfig, ($form->{arap} eq 'ar') ? "sinumber" : "vinumber", $dbh);
+ }
+
+ $query = qq|UPDATE $form->{arap} set
+ invnumber = |.$dbh->quote($invnumber).qq|,
+ $vc_id = $form->{"$form->{vc}_id"},
+ transdate = '$form->{datepaid}',
+ datepaid = '$form->{datepaid}',
+ duedate = '$form->{datepaid}',
+ netamount = 0,
+ amount = 0,
+ paid = $fxamount,
+ curr = '$form->{currency}',
+ department_id = $form->{department_id}
+ WHERE id = $uid|;
+ $dbh->do($query) || $form->dberror($query);
+
+ # add AR/AP
+ ($accno) = split /--/, $form->{$form->{ARAP}};
+
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount)
+ VALUES ($uid, (SELECT id FROM chart
+ WHERE accno = '$accno'),
+ '$form->{datepaid}', $fxamount * $ml)|;
+ $dbh->do($query) || $form->dberror($query);
+
+ # add payment
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate,
+ amount, source, memo)
+ VALUES ($uid, (SELECT id FROM chart
+ WHERE accno = '$paymentaccno'),
+ '$form->{datepaid}', $amount * $ml * -1, |
+ .$dbh->quote($form->{source}).qq|, |
+ .$dbh->quote($form->{memo}).qq|)|;
+ $dbh->do($query) || $form->dberror($query);
+
+ # add exchangerate difference
+ if ($fxamount != $amount) {
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate,
+ amount, cleared, fx_transaction)
+ VALUES ($uid, (SELECT id FROM chart
+ WHERE accno = '$paymentaccno'),
+ '$form->{datepaid}', ($fxamount - $amount) * $ml * -1,
+ '1', '1')|;
+ $dbh->do($query) || $form->dberror($query);
+ }
+
+ my %audittrail = ( tablename => $form->{arap},
+ reference => $invnumber,
+ formname => ($form->{arap} eq 'ar') ? 'deposit' : 'pre-payment',
+ action => 'posted',
+ id => $uid );
+
+ $form->audittrail($dbh, "", \%audittrail);
+
+}
+
+
+1;
+