More changes. I just can't seem to come up with a solution that works that I like. The problem now, without invoice/receipt, is that one check cannot cleanly pay for two units.
git-svn-id: file:///svn-source/pmgr/branches/single_AR_20090622@182 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -94,6 +94,32 @@ sub addRow {
|
||||
}
|
||||
|
||||
|
||||
######################################################################
|
||||
######################################################################
|
||||
## updateRow
|
||||
|
||||
sub updateRow {
|
||||
my ($table, $id, $cols) = @_;
|
||||
die unless $table;
|
||||
die unless $id;
|
||||
die unless ref($cols) eq 'HASH';
|
||||
|
||||
die "Table `$table` is unknown!"
|
||||
unless defined $newdb{'tables'}{$table};
|
||||
|
||||
die "Table `$table` : ID `$id` does not exist!"
|
||||
unless $newdb{'tables'}{$table}{'rows'}[$id];
|
||||
|
||||
# For debug purposes
|
||||
my $line = (caller())[2];
|
||||
$cols->{'--UPDATE-LINE--'} = [] unless $cols->{'--UPDATE-LINE--'};
|
||||
push(@{$cols->{'--UPDATE-LINE--'}}, "updateRow called from line: $line");
|
||||
|
||||
#$newdb{'tables'}{$table}{'rows'}[$id] = $cols;
|
||||
return $id;
|
||||
}
|
||||
|
||||
|
||||
######################################################################
|
||||
######################################################################
|
||||
## query
|
||||
@@ -985,24 +1011,25 @@ $newdb{'lookup'}{'payment'} = {};
|
||||
$query = "SELECT * FROM Payments ORDER BY PaymentID";
|
||||
foreach $row (@{query($sdbh, $query)})
|
||||
{
|
||||
my $monetary_source_id;
|
||||
my $payment_acct;
|
||||
my $debit_ledger_id;
|
||||
my $ledger_entry_id;
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}} = {};
|
||||
|
||||
if ($row->{'PaymentDate'} =~ m%3/25/2009%) {
|
||||
$monetary_source_id = $newdb{'ids'}{'monetary_source'}{'Closing'};
|
||||
$payment_acct = 'Bank';
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'monetary_source_id'}
|
||||
= $newdb{'ids'}{'monetary_source'}{'Closing'};
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'account_name'}
|
||||
= 'Bank';
|
||||
}
|
||||
else {
|
||||
$monetary_source_id = $newdb{'ids'}{'monetary_source'}{
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'monetary_source_id'}
|
||||
= $newdb{'ids'}{'monetary_source'}{
|
||||
$newdb{'lookup'}{'payment_type'}{$row->{'PaymentType'}}{'name'}
|
||||
};
|
||||
$payment_acct = $newdb{'lookup'}{'payment_type'}{$row->{'PaymentType'}}{'account_name'};
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'account_name'}
|
||||
= $newdb{'lookup'}{'payment_type'}{$row->{'PaymentType'}}{'account_name'};
|
||||
}
|
||||
|
||||
if (!$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'monetary_source_id'}) {
|
||||
if (!defined $monetary_source_id) {
|
||||
if (!defined $newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'monetary_source_id'}) {
|
||||
my $name;
|
||||
$name = $newdb{'lookup'}{'payment_type'}{$row->{'PaymentType'}}{'name'};
|
||||
if ($name eq 'Check') {
|
||||
@@ -1012,52 +1039,67 @@ foreach $row (@{query($sdbh, $query)})
|
||||
{ 'monetary_type_id' => $newdb{'lookup'}{'payment_type'}{$row->{'PaymentType'}}{'monetary_type'}{'id'},
|
||||
'name' => $name,
|
||||
'comment' => "Payment: $row->{'PaymentID'}; Type: $row->{'PaymentType'}; Check: $row->{'CheckNum'}; $row->{'Memo'}" });
|
||||
$monetary_source_id = $newdb{'tables'}{'monetary_sources'}{'autoid'};
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'monetary_source_id'}
|
||||
= $newdb{'tables'}{'monetary_sources'}{'autoid'};
|
||||
}
|
||||
|
||||
$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'monetary_source_id'}
|
||||
= $monetary_source_id;
|
||||
= $newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'monetary_source_id'};
|
||||
}
|
||||
|
||||
$debit_ledger_id = $newdb{'lookup'}{'account'}{$payment_acct}{'ledger_id'};
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'debit_ledger_id'}
|
||||
= $newdb{'lookup'}{'account'}{$newdb{'lookup'}{'payment'}{
|
||||
$row->{'PaymentID'}}{'account_name'}
|
||||
}{'ledger_id'};
|
||||
|
||||
if ($use_ir) {
|
||||
addRow('ledger_entries',
|
||||
{ 'monetary_source_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'monetary_source_id'},
|
||||
'transaction_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{'tx'},
|
||||
'debit_ledger_id' => $debit_ledger_id,
|
||||
'debit_ledger_id' => $newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'debit_ledger_id'},
|
||||
'credit_ledger_id' => $newdb{'lookup'}{'account'}{'Receipt'}{'ledger_id'},
|
||||
'customer_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'customer_id'},
|
||||
'lease_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'lease_id'},
|
||||
'amount' => $row->{'PaymentAmount'},
|
||||
'comment' => "Receipt: $row->{'ReceiptNum'}; Payment: $row->{'PaymentID'}; Charge: $row->{'ChargeID'}" });
|
||||
$ledger_entry_id = $newdb{'tables'}{'ledger_entries'}{'autoid'};
|
||||
$debit_ledger_id = $newdb{'lookup'}{'account'}{'Receipt'}{'ledger_id'};
|
||||
'comment' => "Receipt: $row->{'ReceiptNum'}; Charge: $row->{'ChargeID'}; Payment: $row->{'PaymentID'}" });
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'ledger_entry_id'}
|
||||
= $newdb{'tables'}{'ledger_entries'}{'autoid'};
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'debit_ledger_id'}
|
||||
= $newdb{'lookup'}{'account'}{'Receipt'}{'ledger_id'};
|
||||
}
|
||||
|
||||
addRow('ledger_entries',
|
||||
{ 'monetary_source_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'monetary_source_id'},
|
||||
'transaction_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{'tx'},
|
||||
'debit_ledger_id' => $debit_ledger_id,
|
||||
'credit_ledger_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'ledger_id'},
|
||||
'customer_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'customer_id'},
|
||||
'lease_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'lease_id'},
|
||||
'amount' => $row->{'PaymentAmount'},
|
||||
'comment' => "Receipt: $row->{'ReceiptNum'}; Payment: $row->{'PaymentID'}; Charge: $row->{'ChargeID'}" });
|
||||
# Sitelink splits one physical payment into multiple "payments" to match each charge
|
||||
# This is kludgy, but for our cases at least, brings those pseudo-payments back into
|
||||
# a single one. It presumes that there is only one PaymentType per receipt.
|
||||
if (!$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'ledger_entry_id'}) {
|
||||
addRow('ledger_entries',
|
||||
{ 'monetary_source_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'monetary_source_id'},
|
||||
'transaction_id' => $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{'tx'},
|
||||
'debit_ledger_id' => $newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'debit_ledger_id'},
|
||||
'credit_ledger_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'ledger_id'},
|
||||
'customer_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'customer_id'},
|
||||
#'lease_id' => $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'lease_id'},
|
||||
'amount' => 0,
|
||||
'comment' => "Receipt: $row->{'ReceiptNum'}; " });
|
||||
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}
|
||||
= { 'ledger_entry_id' => $newdb{'tables'}{'ledger_entries'}{'autoid'} };
|
||||
|
||||
if ($use_ir) {
|
||||
# Reconcile the receipt account. Since this is from the perspective
|
||||
# of the receipt, the entry crediting the A/R is the debit, and
|
||||
# the entry debiting Cash/Bank/etc is the credit.
|
||||
addRow('reconciliations',
|
||||
{ 'debit_ledger_entry_id' => $ledger_entry_id,
|
||||
'credit_ledger_entry_id' => $newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'ledger_entry_id'},
|
||||
'amount' => $row->{'PaymentAmount'},
|
||||
});
|
||||
$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'ledger_entry_id'}
|
||||
= $newdb{'tables'}{'ledger_entries'}{'autoid'};
|
||||
}
|
||||
|
||||
$newdb{'tables'}{'ledger_entries'}{'rows'}[
|
||||
$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'ledger_entry_id'}
|
||||
]{'amount'} += $row->{'PaymentAmount'};
|
||||
|
||||
$newdb{'tables'}{'ledger_entries'}{'rows'}[
|
||||
$newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'ledger_entry_id'}
|
||||
]{'comment'} .= 'P:'.$row->{'PaymentID'} . '->C:' . $row->{'ChargeID'} . '; ';
|
||||
|
||||
# OK, now that the receipt is reconciled, update
|
||||
# payment to reference the true ledger_entry_id
|
||||
$newdb{'lookup'}{'payment'}{$row->{'PaymentID'}}{'ledger_entry_id'}
|
||||
= $newdb{'lookup'}{'receipt'}{$row->{'ReceiptNum'}}{$row->{'PaymentType'}}{'ledger_entry_id'};
|
||||
|
||||
# Figure out how much of the charge can be reconciled
|
||||
my $reconcile_amount = $newdb{'lookup'}{'charge'}{$row->{'ChargeID'}}{'amount'};
|
||||
$reconcile_amount = $row->{'PaymentAmount'} if $row->{'PaymentAmount'} <= $reconcile_amount;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user