- #=====================================================================
- # 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 = ?), ?, ?, ?)|;
- if (not defined $form->{approved}){
- $form->{approved} = 1;
- }
- $sth = $dbh->prepare($query);
- $sth->execute( $uid, $accno, $form->{datepaid}, $fxamount * $ml,
- $form->{approved} )
- || $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;
|