/usr/local/CPAN/Business-AU-Ledger/Business/AU/Ledger/Database/Receipt.pm
package Business::AU::Ledger::Database::Receipt;
use Moose;
extends 'Business::AU::Ledger::Database::Base';
use namespace::autoclean;
our $VERSION = '0.88';
# -----------------------------------------------
sub add
{
my($self, $receipt) = @_;
eval
{
$self -> simple -> begin;
$self -> save_receipt_record('add', $receipt);
$self -> simple -> commit;
};
if ($@)
{
warn "add_receipt died: $@";
eval{$self -> simple -> rollback};
die $@;
}
$self -> log(__PACKAGE__ . '. Leaving add');
} # End of add.
# -----------------------------------------------
sub get_receipt_category_codes
{
my($self) = @_;
my $category = $self -> simple -> query('select name, id from category_codes where tx_type_id = 2') -> map;
$self -> log(__PACKAGE__ . ". Leaving get_receipt_category_codes");
return $category;
} # End of get_receipt_category_codes.
# -----------------------------------------------
sub get_receipt_gst_codes
{
my($self) = @_;
my $gst = $self -> simple -> query('select name, id from gst_codes where tx_type_id = 2') -> map;
$self -> log(__PACKAGE__ . ". Leaving get_receipt_gst_codes");
return $gst;
} # End of get_receipt_gst_codes.
# -----------------------------------------------
sub get_receipt_tx_details
{
my($self) = @_;
my $detail = $self -> simple -> query('select name, id from tx_details') -> map;
$self -> log(__PACKAGE__ . ". Leaving get_receipt_tx_details");
return $detail;
} # End of get_receipt_tx_details.
# -----------------------------------------------
sub get_receipts_via_ym
{
my($self, $year, $month) = @_;
my($timestamp) = sprintf('%4i-%02i', $year, $month);
my $receipt = $self -> simple -> query("select * from receipts where to_char(timestamp, 'YYYY-MM') = '$timestamp'") -> hashes;
$self -> log(__PACKAGE__ . ". Leaving get_receipts_via_ym");
return $receipt;
} # End of get_receipts_via_ym.
# --------------------------------------------------
sub save_receipt_record
{
my($self, $context, $receipt) = @_;
my($table_name) = 'receipts';
my(@field) = (qw/category_code gst_code month tx_detail amount bank_amount comment gst_amount reference timestamp/);
my($data) = {};
my(%id) =
(
category_code => 1,
gst_code => 1,
month => 1,
tx_detail => 1,
);
my($field_name);
for (@field)
{
if ($id{$_})
{
$field_name = "${_}_id";
}
else
{
$field_name = $_;
}
$$data{$field_name} = $$receipt{$_};
}
my($id);
my($sql);
my(@where);
if ($context eq 'add')
{
$sql = "insert into $table_name";
}
else
{
$id = $$receipt{'id'};
$sql = "update $table_name set";
@where = ('where id = ', $id);
}
$self -> simple -> iquery($sql, $data, @where);
if ($context eq 'add')
{
$self -> db -> get_last_insert_id($table_name);
$$receipt{'id'} = $$data{'id'} = $self -> db -> last_insert_id;
}
$self -> log(__PACKAGE__ . '. Leaving save_receipt_record');
} # End of save_receipt_record.
# --------------------------------------------------
__PACKAGE__ -> meta -> make_immutable;
1;