- #=====================================================================
- # 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) 2001
- #
- # Author: DWS Systems Inc.
- # Web: http://www.sql-ledger.org
- #
- # Contributors:
- #
- #======================================================================
- #
- # This file has undergone whitespace cleanup.
- #
- #======================================================================
- #
- # 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 ($null, $department_id) = split /--/, $form->{department};
- $department_id *= 1;
- my $uid = localtime;
- $uid .= "$$";
- # add AR/AP header transaction with a payment
- my $login = $dbh->quote($form->{login});
- $query = qq|
- INSERT INTO $form->{arap} (invnumber, employee_id)
- VALUES ('$uid', (SELECT id FROM employee
- WHERE login = $login))|;
- $dbh->do($query) || $form->dberror($query);
- $query = qq|SELECT id FROM $form->{arap} WHERE invnumber = '$uid'|;
- ($uid) = $dbh->selectrow_array($query);
- my $invnumber = $form->{invnumber};
- $invnumber = $form->update_defaults(
- $myconfig,
- ($form->{arap} eq 'ar')
- ? "sinumber"
- : "vinumber",
- $dbh) unless $invnumber;
- $query = qq|
- UPDATE $form->{arap}
- set invnumber = ?,
- $form->{vc}_id = ?,
- transdate = ?,
- datepaid = ?,
- duedate = ?,
- netamount = 0,
- amount = 0,
- paid = ?,
- curr = ?,
- department_id = ?
- WHERE id = ?|;
- $sth = $dbh->prepare($query);
- $sth->execute(
- $invnumber, $form->{"$form->{vc}_id"}, $form->{datepaid},
- $form->{datepaid}, $form->{datepaid}, $fxamount,
- $form->{currency}, $department_id, $uid
- ) || $form->dberror($query);
- # add AR/AP
- ($accno) = split /--/, $form->{$form->{ARAP}};
-
- $query = qq|
- INSERT INTO acc_trans (trans_id, chart_id, transdate, amount)
- VALUES (?, (SELECT id FROM chart
- WHERE accno = ?), ?, ?)|;
- $sth = $dbh->prepare($query);
- $sth->execute($uid, $accno, $form->{datepaid}, $fxamount * $ml)
- || $form->dberror($query);
- # add payment
- $query = qq|
- INSERT INTO acc_trans (trans_id, chart_id, transdate,
- amount, source, memo)
- VALUES (?, (SELECT id FROM chart WHERE accno = ?),
- ?, ?, ?, ?)|;
- $sth = $dbh->prepare($query);
- $sth->execute(
- $uid, $paymentaccno, $form->{datepaid}, $amount * $ml * -1,
- $form->{source}, $form->{memo}
- )|| $form->dberror($query);
- # add exchangerate difference
- if ($fxamount != $amount) {
- $query = qq|
- INSERT INTO acc_trans (trans_id, chart_id, transdate,
- amount, cleared, fx_transaction, source)
- VALUES (?, (SELECT id FROM chart WHERE accno = ?),
- ?, ?, '1', '1', ?)|;
- $sth = $dbh->prepare($query);
- $sth->execute($uid, $paymentaccno, $form->{datepaid},
- ($fxamount - $amount) * $ml * -1, $form->{source}
- ) || $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;
|