git-svn-id: file:///svn-source/pmgr/branches/ledger_transactions_20090605@71 97e9348a-65ac-dc4b-aefc-98561f571b83
1117 lines
39 KiB
Perl
1117 lines
39 KiB
Perl
#perl -w
|
|
use strict;
|
|
use DBI;
|
|
use Data::Dumper;
|
|
use File::Copy;
|
|
|
|
# Internally adjust all numbers coming from the database to
|
|
# be in inches. Not necessary to go to this detail, but the
|
|
# actual units used is irrelevant, provided everything is to
|
|
# scale, and this factor ensures that any fractional units
|
|
# become whole (e.g. 7.5 "feet" becomes 90 "units")
|
|
my $internal_adjustment_factor = 12;
|
|
|
|
my $schema_file = shift || die("Must specify schema file\n");
|
|
my $slink_file = shift || die("Must specify sitelink file\n");
|
|
|
|
my $slink_file = ";Data Source=$slink_file";
|
|
my $slink_pass = ";Jet OLEDB:Database Password=2web";
|
|
my $sdsn="Provider=Microsoft.Jet.OLEDB.4.0$slink_pass$slink_file";
|
|
my $sdbh = DBI->connect("dbi:ADO:$sdsn", undef, undef, {PrintError => 1,
|
|
RaiseError => 1});
|
|
|
|
# Connect to the database.
|
|
my($hostname, $database, $user, $password) = ('localhost',
|
|
'property_manager',
|
|
'pmgr', 'pmgruser');
|
|
my $db_handle = DBI->connect("DBI:mysql:database=$database;host=$hostname",
|
|
$user, $password,
|
|
{'PrintError' => 1,
|
|
'RaiseError' => 0});
|
|
|
|
|
|
$SIG{__DIE__} = \&Die;
|
|
|
|
my ($query, $result, $nrows, $row);
|
|
my ($aicur_c_id, $aicur_ca_id, $aicur_cp_id, $aicur_ce_id) = (0, 0, 0, 0);
|
|
my ($aicur_g_id, $aicur_gp_id, $aicur_user_id) = (0, 0, 0);
|
|
my ($aicur_type_id, $aicur_size_id, $aicur_unit_id) = (0, 0, 0);
|
|
my ($aicur_site_id, $aicur_area_id) = (0, 0);
|
|
my ($aicur_lease_type_id, $aicur_lease_id) = (0, 0);
|
|
my ($aicur_charge_id, $aicur_receipt_id, $aicur_payment_id) = (0, 0, 0);
|
|
my ($aicur_tx_id) = (0);
|
|
my ($aicur_ledger_id) = (0);
|
|
my ($aicur_monetary_source_id) = (0);
|
|
|
|
open(SCHEMA, "<$schema_file") || die ("Can't open schema ($!)\n");
|
|
my $schema_query = "";
|
|
while (<SCHEMA>) {
|
|
next if /^\s*-- /;
|
|
$schema_query .= $_;
|
|
query($db_handle, $schema_query), $schema_query = ""
|
|
if /;\s*$/;
|
|
}
|
|
close(SCHEMA);
|
|
|
|
++$aicur_c_id;
|
|
$query = "INSERT INTO pmgr_contacts
|
|
(`id`, `first_name`, `middle_name`, `last_name`, `display_name`) VALUES
|
|
($aicur_c_id, 'Abijah', 'M', 'Perkins', 'Perkins, Abijah')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ca_id;
|
|
$query = "INSERT INTO pmgr_contact_addresses
|
|
(`id`, `address`, `city`, `state`, `postcode`, `country`) VALUES
|
|
($aicur_ca_id, '1324 N Liberty Lake Rd\nPMB 263', 'Liberty Lake', 'WA', '99019', 'USA')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'POST', $aicur_ca_id, 'MAIN', 'PRIMARY')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ca_id;
|
|
$query = "INSERT INTO pmgr_contact_addresses
|
|
(`id`, `address`, `city`, `state`, `postcode`, `country`) VALUES
|
|
($aicur_ca_id, '5221 W Myrtlewood Ct', 'Spokane', 'WA', '99208', 'USA')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'POST', $aicur_ca_id, 'HOME', 'ALTERNATE')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ca_id;
|
|
$query = "INSERT INTO pmgr_contact_addresses
|
|
(`id`, `address`, `city`, `state`, `postcode`, `country`) VALUES
|
|
($aicur_ca_id, 'PO Box 69', 'Granger', 'WA', '98932', 'USA')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'POST', $aicur_ca_id, 'HOME', 'ALTERNATE')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'MOBILE', '5098445573')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'MAIN', 'PRIMARY')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'MOBILE', '5098445973')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'MAIN', 'ALTERNATE')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'VIRTUAL', '5095901112')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'BUSINESS', 'WORK')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'LANDLINE', '5098541491')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'HOME', 'ALTERNATE')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'VIRTUAL', '8774488664')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'BUSINESS', 'WORK')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_cp_id;
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`) VALUES
|
|
($aicur_cp_id, 'FAX', '8662960131')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'PHONE', $aicur_cp_id, 'BUSINESS', 'WORK')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ce_id;
|
|
$query = "INSERT INTO pmgr_contact_emails
|
|
(`id`, `email`) VALUES
|
|
($aicur_ce_id, 'abijah\@PerkinsHouse.com')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'EMAIL', $aicur_ce_id, 'HOME', 'PRIMARY')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ce_id;
|
|
$query = "INSERT INTO pmgr_contact_emails
|
|
(`id`, `email`) VALUES
|
|
($aicur_ce_id, 'abijah\@PerkinsREI.com')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'EMAIL', $aicur_ce_id, 'HOME', 'WORK')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_ce_id;
|
|
$query = "INSERT INTO pmgr_contact_emails
|
|
(`id`, `email`) VALUES
|
|
($aicur_ce_id, 'abijah\@ValleyStorage.com')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($aicur_c_id, 'EMAIL', $aicur_ce_id, 'BUSINESS', 'WORK')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_g_id;
|
|
$query = "INSERT INTO pmgr_groups
|
|
(`id`, `code`, `name`)
|
|
VALUES
|
|
($aicur_g_id, 'Owner', 'Owner Group')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_gp_id;
|
|
$query = "INSERT INTO pmgr_group_permissions
|
|
(`group_id`, `name`, `access`)
|
|
VALUES
|
|
($aicur_gp_id, 'EVERYTHING', 'FORCED')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
|
|
++$aicur_user_id;
|
|
$query = "INSERT INTO pmgr_users
|
|
(`id`, `code`, `login`, `contact_id`)
|
|
VALUES
|
|
($aicur_user_id, 'AP', 'abijah', $aicur_c_id)";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
|
|
++$aicur_site_id;
|
|
$query = "INSERT INTO pmgr_sites
|
|
(`id`, `code`, `name`)
|
|
VALUES
|
|
($aicur_site_id, 'VSS', 'Valley Storage')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
$query = "INSERT INTO pmgr_site_memberships
|
|
(`site_id`, `user_id`, `group_id`)
|
|
VALUES
|
|
($aicur_site_id, $aicur_user_id, $aicur_g_id)";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_area_id;
|
|
$query = "INSERT INTO pmgr_site_areas
|
|
(`id`, `site_id`, `code`, `name`)
|
|
VALUES
|
|
($aicur_area_id, $aicur_site_id, 'Main', 'Main Facility Area')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
++$aicur_lease_type_id;
|
|
$query = "INSERT INTO pmgr_lease_types
|
|
(`id`, `code`, `name`)
|
|
VALUES
|
|
($aicur_lease_type_id, 'SL', 'Storage Lease')";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
|
|
my (%account_map, %monetary_type_map);
|
|
|
|
$query = "SELECT * FROM pmgr_accounts";
|
|
$result = query($db_handle, $query);
|
|
foreach $row (@$result) {
|
|
++$aicur_ledger_id;
|
|
$query = "INSERT INTO pmgr_ledgers
|
|
(`id`, `account_id`, `name`, `comment`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($aicur_ledger_id, $row->{'id'},
|
|
$row->{'name'} . ' Ledger', undef)
|
|
)) . ")";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
$account_map{$row->{'name'}} = {'id' => $row->{'id'},
|
|
'ledger' => $aicur_ledger_id };
|
|
}
|
|
|
|
# $query =
|
|
# "UPDATE pmgr_accounts A, pmgr_ledgers L SET A.ledger_id = L.id" .
|
|
# " WHERE A.id = L.account_id";
|
|
# query($db_handle, $query);
|
|
|
|
|
|
$query = "SELECT * FROM pmgr_monetary_types";
|
|
$result = query($db_handle, $query);
|
|
foreach $row (@$result) {
|
|
$monetary_type_map{$row->{'name'}} = {'id' => $row->{'id'}, 'name' => $row->{'name'}};
|
|
}
|
|
|
|
$account_map{'Late Fee'} = $account_map{'Late Charge'};
|
|
|
|
$monetary_type_map{1} = $monetary_type_map{'Cash'};
|
|
$monetary_type_map{2} = $monetary_type_map{'Check'};
|
|
$monetary_type_map{3} = $monetary_type_map{'Money Order'};
|
|
$monetary_type_map{4} = $monetary_type_map{'ACH'};
|
|
$monetary_type_map{12} = $monetary_type_map{'Other Non-Tillable'};
|
|
|
|
my $monetary_source_internal = undef;
|
|
|
|
my $monetary_source_cash = ++$aicur_monetary_source_id;
|
|
$query = "INSERT INTO pmgr_monetary_sources
|
|
(`id`, `monetary_type_id`, `name`, `comment`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_cash,
|
|
$monetary_type_map{'Cash'}{'id'},
|
|
'Cash Source',
|
|
'Monetary source used for any cash transaction')
|
|
)) . ")";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
my $monetary_source_closing = ++$aicur_monetary_source_id;
|
|
$query = "INSERT INTO pmgr_monetary_sources
|
|
(`id`, `monetary_type_id`, `name`, `comment`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_closing,
|
|
$monetary_type_map{'Other Non-Tillable'}{'id'},
|
|
'Closing Monies Credited',
|
|
'Credited at the closing table')
|
|
)) . ")";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
|
|
######################################################################
|
|
######################################################################
|
|
## Die
|
|
|
|
sub Die {
|
|
my @text = @_;
|
|
warn "----------------------------------------------------------\n";
|
|
warn "FATAL ERROR: @text\n";
|
|
my $count = 0;
|
|
{
|
|
my ($package, $filename, $line, $sub) = caller($count);
|
|
last unless defined $line;
|
|
warn sprintf("%02i %5i %-35s %-20s\n", $count++, $line, $sub,
|
|
$filename);
|
|
redo;
|
|
}
|
|
exit 1;
|
|
}
|
|
|
|
######################################################################
|
|
######################################################################
|
|
## query
|
|
|
|
sub query {
|
|
my ($dbh, $sql, $data, $ignore) = @_;
|
|
#print("$sql\n\n"); #return [ { 'id' => 7 } ];
|
|
#print("$sql\n\n") if $sql =~ /^\s*UPDATE/i;
|
|
#return 1 unless $sql =~ /^\s*SELECT/i;
|
|
|
|
my ($sth, $result);
|
|
if ($sql =~ /^\s*SELECT/i) {
|
|
$sth = $dbh->prepare($sql);
|
|
$sth->execute();
|
|
$result = $sth->fetchall_arrayref({});
|
|
} else {
|
|
$result = $dbh->do($sql);
|
|
}
|
|
|
|
if (!$result && !$ignore) {
|
|
print "SQL Query FAILED:\n";
|
|
print "$query\n\n";
|
|
print Dumper $data
|
|
if defined $data;
|
|
die;
|
|
}
|
|
return ($sth, $result);
|
|
}
|
|
|
|
|
|
sub sizeCode {
|
|
my ($width, $depth) = @_;
|
|
return "YARD"
|
|
if ($width == 12 && $depth == 40);
|
|
return "APARTMENT"
|
|
if ($width == 20 && $depth == 30);
|
|
return sprintf("%02dx%02d", $width, $depth);
|
|
}
|
|
|
|
sub datefmt {
|
|
my ($dt) = @_;
|
|
return undef unless $dt;
|
|
my @dt = split(/\/|\s/, $dt);
|
|
#print("$dt : " . sprintf("%04d-%02d-%02d", $dt[2], $dt[0], $dt[1]) . "\n");
|
|
return sprintf("%04d-%02d-%02d%s", $dt[2], $dt[0], $dt[1], $dt[3] ? ' '.$dt[3] : "");
|
|
}
|
|
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
##
|
|
## UNITS
|
|
##
|
|
|
|
|
|
######################################################################
|
|
## Unit Types
|
|
|
|
$query = "SELECT * FROM UnitType ORDER BY TypeID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Unit Types\n");
|
|
|
|
foreach $row (@$result) {
|
|
$query = "INSERT INTO pmgr_unit_types
|
|
(`id`, `code`, `name`)
|
|
VALUES
|
|
($row->{'TypeID'}, 'xxx', '$row->{'UnitType'}')";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Unit Sizes
|
|
|
|
$query = "SELECT * FROM UnitInfo WHERE UnitID <> 'POS\$' ORDER BY UnitID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Units\n");
|
|
|
|
my (%unit_size_map);
|
|
foreach $row (@$result) {
|
|
my $sz = sizeCode($row->{'Width'}, $row->{'Depth'});
|
|
next if defined $unit_size_map{$sz};
|
|
$unit_size_map{$sz} = { 'id' => ++$aicur_size_id };
|
|
$unit_size_map{$sz}{'rent'} = $row->{'StdRent'};
|
|
$unit_size_map{$sz}{'dep'} = $row->{'StdSecDep'};
|
|
my $szid = $unit_size_map{$sz}{'id'};
|
|
|
|
$query = "INSERT INTO pmgr_unit_sizes
|
|
(`id`, `unit_type_id`, `code`, `name`, `width`, `depth`,
|
|
`deposit`, `amount`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($szid, $row->{'Type'}, $sz, $sz,
|
|
$internal_adjustment_factor * $row->{'Width'},
|
|
$internal_adjustment_factor * $row->{'Depth'},
|
|
$row->{'StdSecDep'}, $row->{'StdRent'})
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Units
|
|
|
|
my (%unit_map);
|
|
foreach $row (@$result) {
|
|
my $sz = sizeCode($row->{'Width'}, $row->{'Depth'});
|
|
my $szid = $unit_size_map{$sz}{'id'};
|
|
$unit_map{$row->{'UnitID'}} = ++$aicur_unit_id;
|
|
my $uid = $unit_map{$row->{'UnitID'}};
|
|
|
|
$query = "INSERT INTO pmgr_units
|
|
(`id`, `unit_size_id`, `code`, `name`,
|
|
`status`,
|
|
`sort_order`, `walk_order`, `deposit`, `amount`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($uid, $szid, $row->{'UnitID'}, $row->{'UnitID'},
|
|
$row->{'Rented'} ?'OCCUPIED' :($row->{'Rentable'} ?'VACANT' :'UNAVAILABLE'),
|
|
$uid, $uid, $row->{'StdSecDep'}, $row->{'StdRent'})
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Map
|
|
|
|
my %info = ('extents' => {}, 'units' => {});
|
|
|
|
# Get the overall site limits
|
|
$query = "SELECT MIN(M.Top) AS mintop, MIN(M.Left) AS minlft,";
|
|
$query .= " MAX(M.Top + IIF(M.reverseWL, U.Width, U.Depth)) AS bot,";
|
|
$query .= " MAX(M.Left + IIF(M.reverseWL, U.Depth, U.Width)) AS rgt";
|
|
$query .= ' FROM UnitInfo U INNER JOIN mapUnitsV2 M ON M.unitID = U.UnitID';
|
|
$result = query($sdbh, $query);
|
|
|
|
# Fetch and verify the result
|
|
my $row = shift(@$result);
|
|
die("MIN query failed!") unless $row;
|
|
|
|
# Compute the actual boundaries, adjusting for a (0,0) origin
|
|
my $top_adjustment = 0 - $row->{'mintop'};
|
|
my $left_adjustment = 0 - $row->{'minlft'};
|
|
$info{'extents'}{'top'} = 0;
|
|
$info{'extents'}{'left'} = 0;
|
|
$info{'extents'}{'bottom'} = $internal_adjustment_factor * ($top_adjustment + $row->{'bot'} + 0);
|
|
$info{'extents'}{'right'} = $internal_adjustment_factor * ($left_adjustment + $row->{'rgt'} + 0);
|
|
|
|
$query =
|
|
"INSERT INTO pmgr_maps (id, name, site_area_id, width, depth) VALUES\n" .
|
|
" (1, 'Main Facility Map', $aicur_area_id," .
|
|
($info{'extents'}{'right'} - $info{'extents'}{'left'}) . ", " .
|
|
($info{'extents'}{'bottom'} - $info{'extents'}{'top'}) . ")";
|
|
query($db_handle, $query, \%info);
|
|
|
|
# Get list of units and positions
|
|
$query = "SELECT U.UnitID, U.UnitID as name,";
|
|
$query .= " ($top_adjustment + M.Top) AS pt_t,";
|
|
$query .= " ($left_adjustment + M.Left) AS pt_l,";
|
|
$query .= " IIF(M.reverseWL, U.Depth, U.Width) AS Width,";
|
|
$query .= " IIF(M.reverseWL, U.Width, U.Depth) AS Depth,";
|
|
$query .= " M.reverseWL, U.Rented, U.Rentable";
|
|
$query .= " FROM UnitInfo U INNER JOIN mapUnitsV2 M ON M.unitID = U.UnitID";
|
|
$result = query($sdbh, $query);
|
|
|
|
# Go through each one, calculating the map location
|
|
foreach $row (@$result) {
|
|
my $uid = $unit_map{$row->{'UnitID'}};
|
|
|
|
$query = # pt_bottom, pt_right,
|
|
"INSERT INTO pmgr_maps_units (map_id, unit_id,
|
|
pt_top, pt_left,
|
|
transpose) VALUES
|
|
(" . join(", ",
|
|
1, $uid,
|
|
$internal_adjustment_factor * ($row->{'pt_t'}),
|
|
$internal_adjustment_factor * ($row->{'pt_l'}),
|
|
$row->{'reverseWL'}) . ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
##
|
|
## TENANTS
|
|
##
|
|
|
|
|
|
######################################################################
|
|
## Tenants
|
|
|
|
$query = "SELECT * FROM TenantInfo WHERE FirstName <> 'POS' ORDER BY TenantID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Tenants\n");
|
|
|
|
my %stmap = ( 1=>'AK', 14=>'ID', 48=>'WA' );
|
|
my (%tenant_map);
|
|
foreach $row (@$result) {
|
|
$tenant_map{$row->{'TenantID'}} = { 'cid' => ++$aicur_c_id };
|
|
my $cid = $tenant_map{$row->{'TenantID'}}{'cid'};
|
|
$tenant_map{$row->{'TenantID'}}{'custid'} = $cid;
|
|
my $custid = $tenant_map{$row->{'TenantID'}}{'custid'};
|
|
|
|
$tenant_map{$row->{'TenantID'}}{'name'} = "$row->{'LastName'}, $row->{'FirstName'}";
|
|
|
|
$query = "INSERT INTO pmgr_contacts
|
|
(`id`, `first_name`, `middle_name`, `last_name`, `display_name`, `id_local`, `id_local_state`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($cid, $row->{'FirstName'}, $row->{'MiddleName'}, $row->{'LastName'},
|
|
"$row->{'LastName'}, $row->{'FirstName'}",
|
|
$row->{'IDNum'} || undef, $row->{'IDNum'} ? $stmap{$row->{'DLStateID'}} : undef)
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_customers
|
|
(`id`, `name`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($custid, "$row->{'LastName'}, $row->{'FirstName'}")
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_customers
|
|
(`customer_id`, `contact_id`, `type`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($custid, $cid, 'TENANT')
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
if ($row->{'City'}) {
|
|
$query = "INSERT INTO pmgr_contact_addresses
|
|
(`id`, `address`, `city`, `state`, `postcode`, `country`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(++$aicur_ca_id,
|
|
#$row->{'HomeAddress'}
|
|
$row->{'HomeAddress'} . ($row->{'HomeAddr2'} ? "\n".$row->{'HomeAddr2'} : "") || undef,
|
|
$row->{'City'}, $stmap{$row->{'StateID'}}, $row->{'Zip'} || undef, 'USA')
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($cid, 'POST', $aicur_ca_id, 'HOME', 'PRIMARY')";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
foreach ({'type' => 'LANDLINE', 'preference' => 'PRIMARY', 'phone' => $row->{'Phone'}},
|
|
{'type' => 'LANDLINE', 'preference' => 'WORK',
|
|
'phone' => $row->{'BusinessPhone'}, 'ext' => $row->{'BusinessExt'}},
|
|
{'type' => 'FAX', 'preference' => 'PRIMARY', 'phone' => $row->{'FAX'}},
|
|
{'type' => 'PAGER', 'preference' => 'PRIMARY', 'phone' => $row->{'Pager'}},
|
|
{'type' => 'MOBILE', 'preference' => 'ALTERNATE', 'phone' => $row->{'CellPhone'}})
|
|
{
|
|
if ($_->{'phone'}) {
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`, `ext`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(++$aicur_cp_id, $_->{'type'}, $_->{'phone'}, $_->{'ext'})))
|
|
. ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($cid, 'PHONE', $aicur_cp_id, 'MAIN', $_->{'preference'})))
|
|
. ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
}
|
|
|
|
if ($row->{'Email'}) {
|
|
$query = "INSERT INTO pmgr_contact_emails
|
|
(`id`, `email`) VALUES
|
|
(".++$aicur_ce_id.", '$row->{'Email'}')";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUE
|
|
($cid, 'EMAIL', $aicur_ce_id, 'MAIN', 'PRIMARY')";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
next unless $row->{'AltFirstName'} || $row->{'AltLastName'} || $row->{'AltAddress'} || $row->{'AltPhone'};
|
|
|
|
$tenant_map{$row->{'TenantID'}}{'alt'} = ++$aicur_c_id;
|
|
$cid = $tenant_map{$row->{'TenantID'}}{'alt'};
|
|
|
|
$query = "INSERT INTO pmgr_contacts
|
|
(`id`, `first_name`, `middle_name`, `last_name`, `display_name`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($cid,
|
|
$row->{'AltFirstName'} || undef,
|
|
$row->{'AltMI'} || undef,
|
|
$row->{'AltLastName'} || undef,
|
|
($row->{'AltLastName'} && $row->{'AltFirstName'}
|
|
? "$row->{'AltLastName'}, $row->{'AltFirstName'}"
|
|
: ($row->{'AltLastName'} || $row->{'AltFirstName'} || undef)))
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_customers
|
|
(`customer_id`, `contact_id`, `type`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($custid, $cid, 'ALTERNATE')
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
if ($row->{'AltCity'}) {
|
|
$query = "INSERT INTO pmgr_contact_addresses
|
|
(`id`, `address`, `city`, `state`, `postcode`, `country`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(++$aicur_ca_id,
|
|
$row->{'AltAddress'} . ($row->{'AltAddr2'} ? "\n".$row->{'AltAddr2'} : ""),
|
|
$row->{'AltCity'}, $stmap{$row->{'AltStateID'}}, $row->{'AltZip'}, 'USA')
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($cid, 'POST', $aicur_ca_id, 'MAIN', 'PRIMARY')";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
if ($row->{'AltPhone'}) {
|
|
$query = "INSERT INTO pmgr_contact_phones
|
|
(`id`, `type`, `phone`, `ext`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(++$aicur_cp_id, 'LANDLINE', $row->{'AltPhone'}, undef)
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_contacts_methods
|
|
(`contact_id`, `method`, `method_id`, `type`, `preference`) VALUES
|
|
($cid, 'PHONE', $aicur_cp_id, 'MAIN', 'PRIMARY')";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Tenant Leases
|
|
|
|
$query = "SELECT L.*, A.TenantID FROM TenantLedger L LEFT JOIN `Access` A ON A.LedgerID = L.LedgerID WHERE L.UnitID <> 'POS\$' ORDER BY L.LedgerID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Tenant Ledgers\n");
|
|
my (%ledger_map);
|
|
foreach $row (@$result) {
|
|
$ledger_map{$row->{'LedgerID'}} = { 'lid' => ++$aicur_lease_id };
|
|
my $cid = $tenant_map{$row->{'TenantID'}}{'cid'};
|
|
my $uid = $unit_map{$row->{'UnitID'}};
|
|
my $lid = $ledger_map{$row->{'LedgerID'}}{'lid'};
|
|
my $custid = $tenant_map{$row->{'TenantID'}}{'custid'};
|
|
$ledger_map{$row->{'LedgerID'}}{'custid'} = $custid;
|
|
|
|
$query = "INSERT INTO pmgr_leases
|
|
(`id`, `number`, `lease_type_id`, `unit_id`, `customer_id`,
|
|
`lease_date`, `movein_date`,
|
|
`moveout_date`, `close_date`,
|
|
`amount`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($lid, $row->{'LedgerID'}, $aicur_lease_type_id, $uid, $custid,
|
|
datefmt($row->{'DateIn'}), datefmt($row->{'DateIn'}),
|
|
datefmt($row->{'DateOut'}), datefmt($row->{'DateClosed'}),
|
|
$row->{'Rent'})
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
$query = "UPDATE pmgr_units U, pmgr_leases L
|
|
SET U.`current_lease_id` = L.id
|
|
WHERE L.unit_id = U.id AND L.close_date IS NULL";
|
|
query($db_handle, $query);
|
|
|
|
|
|
######################################################################
|
|
## Security Deposits
|
|
|
|
$query = "SELECT L.LedgerID, L.UnitID, C.ChargeAmount FROM TenantLedger L INNER JOIN Charges C ON C.LedgerID = L.LedgerID WHERE L.UnitID <> 'POS\$' AND C.ChargeDescription = 'Security Deposit' ORDER BY UnitID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Security Deposits\n");
|
|
|
|
foreach $row (@$result) {
|
|
my $uid = $unit_map{$row->{'UnitID'}};
|
|
$query = "UPDATE pmgr_leases
|
|
SET deposit = $row->{'ChargeAmount'}
|
|
WHERE `number` = '$row->{'LedgerID'}'";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
######################################################################
|
|
##
|
|
## TRANSACTIONS
|
|
##
|
|
|
|
######################################################################
|
|
## Charges
|
|
|
|
$query = "SELECT * FROM Charges ORDER BY ChargeID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Charges\n");
|
|
|
|
my %charge_map;
|
|
foreach $row (@$result) {
|
|
$charge_map{$row->{'ChargeID'}} = ++$aicur_tx_id;
|
|
my $lid = $ledger_map{$row->{'LedgerID'}}{'lid'};
|
|
my $chid = $charge_map{$row->{'ChargeID'}};
|
|
my $custid = $ledger_map{$row->{'LedgerID'}}{'custid'};
|
|
|
|
|
|
$query = "INSERT INTO pmgr_transactions
|
|
(`id`,
|
|
`stamp`, `through_date`,
|
|
`customer_id`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($chid,
|
|
datefmt($row->{'ChargeDate'}), datefmt($row->{'EndDate'}),
|
|
$custid)
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`monetary_source_id`, `transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_internal, $chid,
|
|
$account_map{'A/R'}{'ledger'},
|
|
$account_map{$row->{'ChargeDescription'}}{'ledger'},
|
|
$row->{'ChargeAmount'}, "Charge: $row->{'ChargeID'}; Ledger: $row->{'LedgerID'}")
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
next unless $row->{'TaxAmount'};
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`monetary_source_id`, `transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_internal, $chid,
|
|
$account_map{'A/R'}{'ledger'},
|
|
$account_map{'Tax'}{'ledger'},
|
|
$row->{'TaxAmount'}, undef)
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
|
|
# $query = "UPDATE pmgr_charges";
|
|
# $query .= " SET due_date = DATE_ADD(charge_date, INTERVAL IF(account_id=2,10,0) DAY)";
|
|
# query($db_handle, $query);
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Receipts
|
|
|
|
#$query = "SELECT * FROM Receipts ORDER BY ReceiptNum";
|
|
$query =
|
|
"SELECT R.ReceiptNum, C.LedgerID, R.ReceiptDate" .
|
|
" FROM Receipts R, Payments P, Charges C" .
|
|
" WHERE P.ReceiptNum = R.ReceiptNum" .
|
|
" AND C.ChargeID = P.ChargeID" .
|
|
" GROUP BY R.ReceiptNum, C.LedgerID, R.ReceiptDate" .
|
|
" ORDER BY R.ReceiptNum";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Receipts\n");
|
|
|
|
my %receipt_map;
|
|
foreach $row (@$result) {
|
|
#print Dumper $row;
|
|
my $lid = $ledger_map{$row->{'LedgerID'}}{'lid'};
|
|
my $custid = $ledger_map{$row->{'LedgerID'}}{'custid'};
|
|
|
|
if ($receipt_map{$row->{'ReceiptNum'}}) {
|
|
die unless $receipt_map{$row->{'ReceiptNum'}}{'cust'} == $custid;
|
|
push(@{$receipt_map{$row->{'ReceiptNum'}}{'lid'}}, $lid);
|
|
#print Dumper $receipt_map{$row->{'ReceiptNum'}};
|
|
next;
|
|
}
|
|
|
|
$receipt_map{$row->{'ReceiptNum'}} = { 'id' => ++$aicur_tx_id, 'cust' => $custid, 'lid' => [$lid] };
|
|
my $rid = $receipt_map{$row->{'ReceiptNum'}}{'id'};
|
|
#print Dumper $receipt_map{$row->{'ReceiptNum'}};
|
|
|
|
$query = "INSERT INTO pmgr_transactions
|
|
(`id`,
|
|
`stamp`, `through_date`,
|
|
`customer_id`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($rid,
|
|
datefmt($row->{'ReceiptDate'}), undef,
|
|
$custid)
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
|
|
|
|
# sub idkeys { [ sort( {$a <=> $b} keys(%{$_[0]})) ] }
|
|
# $Data::Dumper::Sortkeys = \&idkeys;
|
|
# print("Tenant\n"); print Dumper \%tenant_map;
|
|
# print("Ledger\n"); print Dumper \%ledger_map;
|
|
# print("Charge\n"); print Dumper \%charge_map;
|
|
# print("Receipt\n"); print Dumper \%receipt_map;
|
|
|
|
|
|
######################################################################
|
|
## Payments
|
|
|
|
$query = "SELECT * FROM Payments ORDER BY PaymentID";
|
|
$result = query($sdbh, $query);
|
|
$nrows = @$result;
|
|
print(" $nrows Payments\n");
|
|
|
|
my %payment_map;
|
|
foreach $row (@$result) {
|
|
$payment_map{$row->{'PaymentID'}} = ++$aicur_payment_id;
|
|
my $pid = $payment_map{$row->{'PaymentID'}};
|
|
my $rid = $receipt_map{$row->{'ReceiptNum'}}{'id'};
|
|
my $chid = $charge_map{$row->{'ChargeID'}};
|
|
|
|
my $monetary_source_id;
|
|
if ($row->{'PaymentDate'} =~ m%3/25/2009%) {
|
|
$monetary_source_id = $monetary_source_closing;
|
|
}
|
|
elsif ($monetary_type_map{$row->{'PaymentType'}}{'name'} eq 'Cash') {
|
|
$monetary_source_id = $monetary_source_cash;
|
|
}
|
|
else {
|
|
$monetary_source_id = ++$aicur_monetary_source_id;
|
|
$query = "INSERT INTO pmgr_monetary_sources
|
|
(`id`, `monetary_type_id`, `name`, `comment`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_id,
|
|
$monetary_type_map{$row->{'PaymentType'}}{'id'},
|
|
$row->{'RecdFrom'},
|
|
"Payment: $row->{'PaymentID'}; Type: $row->{'PaymentType'}; Check: $row->{'CheckNum'}; $row->{'Memo'}")
|
|
)) . ")";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
}
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`monetary_source_id`,
|
|
`transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_id,
|
|
$rid,
|
|
$account_map{'Cash'}{'ledger'},
|
|
$account_map{'A/R'}{'ledger'},
|
|
$row->{'PaymentAmount'},
|
|
"Receipt: $row->{'ReceiptNum'}; Payment: $row->{'PaymentID'}; Charge: $row->{'ChargeID'}")
|
|
)) . ")";
|
|
query($db_handle, $query, $row);
|
|
|
|
if ($row->{'Memo'}) {
|
|
$query =
|
|
"UPDATE pmgr_transactions SET `comment` = '$row->{'Memo'}'" .
|
|
" WHERE `id` = $rid";
|
|
query($db_handle, $query, $row);
|
|
}
|
|
}
|
|
|
|
|
|
######################################################################
|
|
## Fake Data for Testing
|
|
|
|
my %fake =
|
|
('custid' => 2,
|
|
'invoice' => [ { 'id' => 1000,
|
|
'date' => '2009-05-05',
|
|
'entry' => [ { 'id' => 2100,
|
|
'account' => 'Security Deposit',
|
|
'amount' => 10,
|
|
'tax' => 0 },
|
|
],
|
|
},
|
|
{ 'id' => 1001,
|
|
'date' => '2009-05-01',
|
|
'thru' => '2009-05-31',
|
|
'entry' => [ { 'id' => 2110,
|
|
'account' => 'Rent',
|
|
'amount' => 100,
|
|
'tax' => 5 },
|
|
],
|
|
},
|
|
{ 'id' => 1002,
|
|
'date' => '2009-05-11',
|
|
'entry' => [ { 'id' => 2120,
|
|
'account' => 'Late Fee',
|
|
'amount' => 25,
|
|
'tax' => 0 },
|
|
],
|
|
},
|
|
],
|
|
'receipt' => [ { 'id' => 2000,
|
|
'date' => '2009-05-15',
|
|
'entry' => [ { 'id' => 2200,
|
|
'type' => 1,
|
|
'amount' => 15 },
|
|
{ 'id' => 2201,
|
|
'type' => 2,
|
|
'amount' => 10 },
|
|
{ 'id' => 2202,
|
|
'type' => 3,
|
|
'amount' => 5 },
|
|
],
|
|
},
|
|
{ 'id' => 2001,
|
|
'date' => '2009-05-18',
|
|
'entry' => [ { 'id' => 2210,
|
|
'type' => 5,
|
|
'amount' => 30 },
|
|
{ 'id' => 2211,
|
|
'type' => 6,
|
|
'amount' => 20 },
|
|
],
|
|
},
|
|
{ 'id' => 2002,
|
|
'date' => '2009-05-22',
|
|
'entry' => [ { 'id' => 2220,
|
|
'type' => 1,
|
|
'amount' => 10 },
|
|
{ 'id' => 2221,
|
|
'type' => 2,
|
|
'amount' => 5 },
|
|
{ 'id' => 2222,
|
|
'type' => 7,
|
|
'amount' => 20 },
|
|
{ 'id' => 2223,
|
|
'type' => 8,
|
|
'amount' => 15 },
|
|
],
|
|
},
|
|
],
|
|
|
|
);
|
|
|
|
my $old_cash_ledger = $account_map{'Cash'}{'ledger'};
|
|
my $new_cash_ledger = ++$aicur_ledger_id;
|
|
$account_map{'Cash'}{'ledger'} = $new_cash_ledger;
|
|
$query = "INSERT INTO pmgr_ledgers
|
|
(`id`, `account_id`, `name`, `comment`) VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($new_cash_ledger, $account_map{'Cash'}{'id'},
|
|
'Fake Cash Ledger', 'Fake ledger for testing')
|
|
)) . ")";
|
|
query($db_handle, $query) || die("Unable to insert");
|
|
|
|
$query =
|
|
"SELECT
|
|
SUM(IF(LedgerEntry.debit_ledger_id = Ledger.id, LedgerEntry.amount, 0)) AS debits,
|
|
SUM(IF(LedgerEntry.credit_ledger_id = Ledger.id, LedgerEntry.amount, 0)) AS credits,
|
|
SUM(IF(Account.type IN ('ASSET', 'EXPENSE'),
|
|
IF(LedgerEntry.debit_ledger_id = Ledger.id, 1, -1),
|
|
IF(LedgerEntry.credit_ledger_id = Ledger.id, 1, -1) )
|
|
* LedgerEntry.amount) AS balance,
|
|
COUNT(`LedgerEntry`.`id`) AS entries
|
|
FROM
|
|
`pmgr_ledgers` AS `Ledger`
|
|
LEFT JOIN `pmgr_accounts` AS `Account`
|
|
ON (`Account`.`id` = `Ledger`.`account_id`)
|
|
LEFT JOIN `pmgr_ledger_entries` AS `LedgerEntry`
|
|
ON (((`LedgerEntry`.`debit_ledger_id` = Ledger.id)
|
|
OR (`LedgerEntry`.`credit_ledger_id` = Ledger.id)))
|
|
WHERE `Ledger`.`id` = $old_cash_ledger
|
|
GROUP BY `Ledger`.`id` LIMIT 1";
|
|
$result = query($db_handle, $query);
|
|
my $balance = $result->[0]{'balance'};
|
|
|
|
$query = "INSERT INTO pmgr_transactions
|
|
(`id`, `customer_id`, `stamp`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(++$aicur_tx_id, 0,
|
|
'2009-05-10')
|
|
)) . ")";
|
|
query($db_handle, $query);
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`monetary_source_id`, `transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`,
|
|
`name`,
|
|
`comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($monetary_source_internal, $aicur_tx_id,
|
|
$new_cash_ledger,
|
|
$old_cash_ledger,
|
|
$balance,
|
|
"Close Out ($old_cash_ledger -> $new_cash_ledger)",
|
|
"Carrying forward old ledger balance onto new ledger")
|
|
)) . ")";
|
|
query($db_handle, $query);
|
|
|
|
$query =
|
|
"UPDATE pmgr_ledgers SET `closed` = 1" .
|
|
" WHERE `id` = $old_cash_ledger";
|
|
query($db_handle, $query);
|
|
|
|
|
|
# my $monetary_source_cash = ++$aicur_monetary_source_id;
|
|
# $query = "INSERT INTO pmgr_monetary_sources
|
|
# (`id`, `monetary_type_id`, `name`, `comment`) VALUES (" .
|
|
# join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
# ($monetary_source_cash,
|
|
# $monetary_type_map{'Cash'}{'id'},
|
|
# 'Fake Cash Source',
|
|
# 'Fake source used for testing')
|
|
# )) . ")";
|
|
# query($db_handle, $query) || die("Unable to insert");
|
|
|
|
foreach my $ir ('invoice', 'receipt') {
|
|
foreach my $tx (@{$fake{$ir}}) {
|
|
#print Dumper ${%$tx{'date'}};
|
|
#exit;
|
|
$query = "INSERT INTO pmgr_transactions
|
|
(`id`, `stamp`, `through_date`, `customer_id`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
(@{$tx}{'id', 'date', 'thru'}, $fake{'custid'}, "Fake $ir")
|
|
)) . ")";
|
|
query($db_handle, $query, $tx);
|
|
|
|
foreach my $e (@{$tx->{'entry'}}) {
|
|
my $dr = ($ir eq 'invoice') ? $account_map{'A/R'} : $account_map{'Cash'};
|
|
my $cr = ($ir eq 'invoice') ? $account_map{$e->{'account'}} : $account_map{'A/R'};
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`id`, `monetary_source_id`,
|
|
`transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($e->{'id'}, $e->{'type'} || $monetary_source_internal,
|
|
$tx->{'id'},
|
|
$dr->{'ledger'},
|
|
$cr->{'ledger'},
|
|
$e->{'amount'}, "Fake $ir entry")
|
|
)) . ")";
|
|
query($db_handle, $query, $e);
|
|
|
|
next unless $e->{'tax'};
|
|
|
|
$query = "INSERT INTO pmgr_ledger_entries
|
|
(`id`, `monetary_source_id`,
|
|
`transaction_id`,
|
|
`debit_ledger_id`,
|
|
`credit_ledger_id`,
|
|
`amount`, `comment`)
|
|
VALUES (" .
|
|
join(", ", map({defined $_ ? "'$_'" : "NULL"}
|
|
($e->{'id'}+1, $monetary_source_internal,
|
|
$tx->{'id'},
|
|
$account_map{'A/R'}{'ledger'},
|
|
$account_map{'Tax'}{'ledger'},
|
|
$e->{'tax'}, "Fake Tax Charge")
|
|
)) . ")";
|
|
query($db_handle, $query, $e);
|
|
}
|
|
}
|
|
}
|