diff options
author | christopherm <christopherm@4979c152-3d1c-0410-bac9-87ea11338e46> | 2006-09-01 01:16:38 +0000 |
---|---|---|
committer | christopherm <christopherm@4979c152-3d1c-0410-bac9-87ea11338e46> | 2006-09-01 01:16:38 +0000 |
commit | ac5b087ea2d9ba7428d367aaeb288534158fee9a (patch) | |
tree | 2dbe0bdea0b653a215ba9ddfdf627cb57855050d /LedgerSMB/OP.pm |
Initial Import
git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/ledger-smb@1 4979c152-3d1c-0410-bac9-87ea11338e46
Diffstat (limited to 'LedgerSMB/OP.pm')
-rwxr-xr-x | LedgerSMB/OP.pm | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/LedgerSMB/OP.pm b/LedgerSMB/OP.pm new file mode 100755 index 00000000..65b8da31 --- /dev/null +++ b/LedgerSMB/OP.pm @@ -0,0 +1,101 @@ +#===================================================================== +# LedgerSMB +# Small Medium Business Accounting software +# +# See COPYRIGHT file for copyright information +#====================================================================== +# +# This file has NOT 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 + $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'|; + ($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 = |.$dbh->quote($invnumber).qq|, + $form->{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 = $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, source) + VALUES ($uid, (SELECT id FROM chart + WHERE accno = '$paymentaccno'), + '$form->{datepaid}', ($fxamount - $amount) * $ml * -1, + '1', '1', | + .$dbh->quote($form->{source}).qq|)|; + $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; + |