version 1.3, 2011/12/31 02:14:48 |
version 1.7, 2012/11/28 02:24:04 |
|
|
use DateTime; |
use DateTime; |
use Carp; |
use Carp; |
|
|
use YAML::Any qw/ LoadFile DumpFile /; |
use YAML::XS qw/ LoadFile DumpFile /; |
|
$YAML::XS::QuoteNumericStrings = 0; |
use RTI::Util qw/ ymd_to_DateTime /; |
use RTI::Util qw/ ymd_to_DateTime /; |
|
|
my $file = ''; |
my $file = ''; |
|
|
$invoice->{$_} = ymd_to_DateTime( $invoice->{$_} ) |
$invoice->{$_} = ymd_to_DateTime( $invoice->{$_} ) |
for qw/ invdate start end /; |
for qw/ invdate start end /; |
} |
} |
|
foreach my $custid (keys %{ $self->{payment} || {} }) { |
|
foreach my $payment (@{ $self->{payment}->{$custid} || [] }) { |
|
$payment->{date} = ymd_to_DateTime( $payment->{date} ) |
|
if $payment->{date}; |
|
} |
|
} |
} |
} |
|
|
bless $self, $class; |
bless $self, $class; |
|
|
: $self->{_table}->{unpaid}; |
: $self->{_table}->{unpaid}; |
} |
} |
|
|
|
sub credits { |
|
my ( $self, $custid ) = @_; |
|
|
|
$self->_match_payments; |
|
return defined $custid |
|
? $self->{_table}->{credit}->{$custid} |
|
: $self->{_table}->{credit}; |
|
} |
|
|
sub save { |
sub save { |
my ($self) = @_; |
my ($self) = @_; |
|
|
|
|
logo |
logo |
projects |
projects |
expenses |
expenses |
discounts |
discount |
|
hours |
|
organization |
/; |
/; |
|
|
foreach my $k ( keys %{$invoice} ) { |
foreach my $k ( keys %{$invoice} ) { |
|
|
else { |
else { |
delete $invoice->{$k}; |
delete $invoice->{$k}; |
} |
} |
|
} |
|
} |
|
foreach my $custid (keys %{ $self->{payment} || {} }) { |
|
foreach my $payment (@{ $self->{payment}->{$custid} || [] }) { |
|
$payment->{date} = $payment->{date}->ymd |
|
if ref $payment->{date} eq 'DateTime'; |
} |
} |
} |
} |
DumpFile( $file, {%$self} ) or die "Unable to save state: $!"; |
DumpFile( $file, {%$self} ) or die "Unable to save state: $!"; |