package Business::AU::Ledger::Database::Payment; use Moose; extends 'Business::AU::Ledger::Database::Base'; use namespace::autoclean; our $VERSION = '0.88'; # ----------------------------------------------- sub add { my($self, $payment) = @_; eval { $self -> simple -> begin; $self -> save_payment_record('add', $payment); $self -> simple -> commit; }; if ($@) { warn "add_payment died: $@"; eval{$self -> simple -> rollback}; die $@; } $self -> log(__PACKAGE__ . '. Leaving add'); } # End of add. # ----------------------------------------------- sub get_payment_category_codes { my($self) = @_; my $category = $self -> simple -> query('select name, id from category_codes where tx_type_id = 1') -> map; $self -> log(__PACKAGE__ . ". Leaving get_payment_category_codes"); return $category; } # End of get_payment_category_codes. # ----------------------------------------------- sub get_payment_gst_codes { my($self) = @_; my $gst = $self -> simple -> query('select name, id from gst_codes where tx_type_id = 1') -> map; $self -> log(__PACKAGE__ . ". Leaving get_payment_gst_codes"); return $gst; } # End of get_payment_gst_codes. # ----------------------------------------------- sub get_payment_payment_methods { my($self) = @_; my $payment_method = $self -> simple -> query('select name, id from payment_methods') -> map; $self -> log(__PACKAGE__ . ". Leaving get_payment_payment_methods"); return $payment_method; } # End of get_payment_payment_methods. # ----------------------------------------------- sub get_payment_tx_details { my($self) = @_; my $detail = $self -> simple -> query('select name, id from tx_details') -> map; $self -> log(__PACKAGE__ . ". Leaving get_payment_tx_details"); return $detail; } # End of get_payment_tx_details. # ----------------------------------------------- sub get_payments_via_ym { my($self, $year, $month) = @_; my($timestamp) = sprintf('%4i-%02i', $year, $month); my $payment = $self -> simple -> query("select * from payments where to_char(timestamp, 'YYYY-MM') = '$timestamp'") -> hashes; $self -> log(__PACKAGE__ . ". Leaving get_payments_via_ym: $timestamp"); return $payment; } # End of get_payments_via_ym. # -------------------------------------------------- sub save_payment_record { my($self, $context, $payment) = @_; my($table_name) = 'payments'; my(@field) = (qw/category_code gst_code month payment_method tx_detail amount comment gst_amount petty_cash_in petty_cash_out private_use_amount private_use_percent reference timestamp/); my($data) = {}; my(%id) = ( category_code => 1, gst_code => 1, month => 1, payment_method => 1, tx_detail => 1, ); my($field_name); for (@field) { if ($id{$_}) { $field_name = "${_}_id"; } else { $field_name = $_; } $$data{$field_name} = $$payment{$_}; } my($id); my($sql); my(@where); if ($context eq 'add') { $sql = "insert into $table_name"; } else { $id = $$payment{'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); $$payment{'id'} = $$data{'id'} = $self -> db -> last_insert_id; } $self -> log(__PACKAGE__ . '. Leaving save_payment_record'); } # End of save_payment_record. # -------------------------------------------------- __PACKAGE__ -> meta -> make_immutable; 1;