File: [local] / RT / Invoicing / test.pl (download)
Revision 1.6, Sun Aug 2 01:05:31 2020 UTC (3 years, 11 months ago) by afresh1
Branch: MAIN
CVS Tags: HEAD Changes since 1.5: +25 -6 lines
Improve example test script
|
#!/usr/bin/perl
# $AFresh1: test.pl,v 1.6 2020/08/02 01:05:31 afresh1 Exp $
use strict;
use warnings;
use Template;
use DateTime;
use Cwd qw< abs_path >;
my %invoice = (
id => 1234,
invdate => DateTime->new( year => 2011, month => 3, day => 1 ),
start => DateTime->new( year => 2011, month => 1, day => 1 ),
end => DateTime->new( year => 2011, month => 3, day => 19 ),
logo => abs_path( 'logo.pdf' ),
info => [
'Visit me online at http://example.com',
'Create a new ticket rt@example.com',
],
from => 'Example Company
22115 Central Way
Suite C
Anytown, America 11111
(800) 555-1212
\texttt{<company@example.com>}',
to => 'John Doe
123 W Main St
Anytown, America 11111',
projects => [
{
title => 'Weekly Retainer',
fees => [
{
contents => '2011-03-06 through 2011-03-12',
count => 1,
rate => 300,
},
{
contents => '2011-03-13 through 2011-03-19',
count => 1,
rate => 300,
},
],
},
{
id => 60,
title => '60: A Special Project',
detail => 'Requestors jdoe@example.net',
fees => [
{
contents => '2011-01-01: Talk a lot (727)',
detail => 'This is detail about 727',
count => 0.33,
rate => 75,
},
{
contents => '2011-01-15: Write Stuff (730)',
detail => 'This is detail about 730',
count => 1.5,
rate => 100,
},
{
contents => 'Rounding FAIL',
detail => 'Should be $8.30',
count => .083,
rate => 100,
},
],
},
{
id => 65,
title => '65: More work!',
detail => 'Requestors jdoe@example.net',
fees => [
{
contents => '2011-01-06: Define Project (751)',
count => 0.33,
rate => 75,
},
{
contents => '2011-01-11: Code it up! (823)',
count => 5,
rate => 100,
},
{
contents => '2011-01-12: Redefine Project (903)',
count => 0.25,
rate => 75,
},
{
contents => '2011-01-13: Change everything: 933',
count => 3,
rate => 125,
},
],
},
{
id => 85,
title => '85: Replace stuff',
detail => 'Requestors maintenance@example.net',
fees => [
{
contents => '2011-01-13: Go unplug, replace, replug (834)',
count => 2,
rate => 125,
},
],
expenses => [
{
contents => '2x unbroken thingys',
amount => 25,
}
],
},
{
id => 90,
title => '90: Make a two page invoice',
fees => [
{
contents => '2011-01-13: Add some stuff (834)',
count => 2,
rate => 125,
},
],
},
],
discount => {
contents => 'Discount',
amount => '8.498',
},
);
foreach my $project (@{ $invoice{projects} || [] }) {
foreach my $fee (@{ $project->{fees} || [] }) {
$invoice{total} += $fee->{count} * $fee->{rate};
}
foreach my $expense (@{ $project->{expenses} || [] }) {
$invoice{total} += $expense->{amount};
}
}
$invoice{total} -= $invoice{discount}{amount}
if $invoice{discount};
my $tt = Template->new;
$tt->process( 'invoice.tex.tt', \%invoice, 'invoice.pdf' ) || die $tt->error . "\n";