App-GnuCash-MembershipUtils
view release on metacpan or search on metacpan
bin/gc-members-generate-invoices view on Meta::CPAN
##--------------------------------------------------------
Readonly::Scalar my $FALSE => 0;
Readonly::Scalar my $TRUE => 1;
##--------------------------------------------------------
## A list of all command line options
## For GetOptions the following parameter indicaters are used
## = Required parameter
## : Optional parameter
## s String parameter
## i Integer parameter
## f Real number (float)
## + Parameter is inremented for each occurrence on
## command line
## ! boolean parameter that also allows "no-xxx"
## If a parameter is not indicated, then a value of 1
## indicates the parameter was found on the command line
##--------------------------------------------------------
#<<< begin perltidy exclusion zone
my @CommandLineOptions = (
"config|c:s",
"debug|d+",
"due|D:s",
"file|f:s",
"format|F:s",
"help|h|?",
"man|M",
"memo|m:s",
"note|n:s",
"opened|O:s",
"outfile|o:s",
"version|v",
);
#>>> end perltidy exclusion zone
##--------------------------------------------------------
## A hash to hold all default values for command line
## options
##--------------------------------------------------------
#<<< begin perltidy exclusion zone
my %gOptions = (
"config" => "GnuCashMembershipUtils.yml",
"debug" => 0,
"due" => undef,
"file" => undef,
"format" => undef,
"help" => 0,
"man" => 0,
"memo" => undef,
"note" => undef,
"open" => undef,
"version" => 0,
);
#>>> end perltidy exclusion zone
## This is the column order required by GnuCash
Readonly::Array my @CSV_COLUMNS => qw(
id
date_opened
owner_id
billingid
notes
date
desc
action
account
quantity
price
disc_type
disc_how
discount
taxable
taxincluded
tax_table
date_posted
due_date
account_posted
memo_posted
accu_splits
);
##----------------------------------------------------------------------------
## process_commandline($allow_extra_args)
## Process all the command line options
## $allow_extra_args - If TRUE, leave any unrecognized arguments in
## @ARGV. If FALSE, consider unrecognized arguements an error.
## (DEFAULT: FALSE)
##----------------------------------------------------------------------------
sub process_commandline
{
my $allow_extra_args = shift;
## Pass through un-handled options in @ARGV
Getopt::Long::Configure("pass_through");
GetOptions(\%gOptions, @CommandLineOptions);
## See if --man was on the command line
if ($gOptions{man})
{
pod2usage(
-input => \*DATA,
-message => "\n",
-exitval => 1,
-verbose => 99,
-sections => '.*', ## ALL sections
);
}
## See if --help was on the command line
display_usage_and_exit(qq{}) if ($gOptions{help});
## See if --version was on the command line
if ($gOptions{version})
{
print(qq{"$DEFAULT_TITLE" v$VERSION\n});
exit(1);
}
## Determine the path to the script
$gOptions{ScriptPath} = abs_path($0);
$gOptions{ScriptPath} =~ s!/?[^/]*/*$!!x;
$gOptions{ScriptPath} .= "/" if ($gOptions{ScriptPath} !~ /\/$/x);
bin/gc-members-generate-invoices view on Meta::CPAN
DD/MM/YYYY
=item EUROPE
DD.MM.YYYY
=item ISO
YYYY-MM-DD
=back
DEFAULT: C<US>
=item B<--memo> I<InvoiceMemo>, B<-m> I<InvoiceMemo>
Specify the memo to be joined to the membership type and used as the description
for the item within the invoice.
=item B<--note> I<PostingNote>, B<-n> I<PostingNote>
Specify the note to be used when posting the invoice. This shows as the invoice
description when viewing the customer report in GnuCash. Defaults to "XXXX membership dues"
where XXXX is the name of the month for the B<--open> date. For example "April membership dues"
=item B<--outfile> I<OutputFilename>, B<-o> I<OutputFilename>
Specify the output filename to use when generating the CSV file.
Defaults to C<YYYY-MM-DD_gnucash_customer_invoices.csv> where I<YYYY-MM-DD>
is today's date in C<ISO> format.
=item B<--version>, B<-v>
Print version information and exit.
=item B<--help>, B<-h>, B<-?>
Display basic help.
=item B<--man>, B<-m>
Display more detailed help.
=back
=head1 GnuCash CSV Invoice Import Format
As documented on the L<GnuCash website|https://www.gnucash.org/docs/v4/C/gnucash-guide/busnss-imp-bills-invoices.html>
* id - The invoice ID. If the invoice ID is blank, GnuCash replaces it with the invoice ID
from the previous row. If the invoice ID already exists, GnuCash will add the entries
to the existing invoice (unless it is already posted).
* date_opened - Use the same date format as defined in Preferences. Defaulted to today's date
if left blank, or if the date provided is not valid.
* owner_id - Customer or vendor number. Mandatory in the first data row of an invoice. If not
provided, all rows of the same invoice will be ignored.
* billingid - Billing ID. Optional
* notes - Invoice notes. Optional.
* date - The date of the entry. Defaulted to date opened if left blank, or if the date provided
is not valid.
* desc - Description. Optional
* action - Action. Optional
* account - Account for the entry. Mandatory in each row. If not provided or invalid, all rows
of the same invoice will be ignored.
* quantity - Quantity. Defaulted to 1 if left blank.
* price - Price. Mandatory for each row. If not provided, all rows of the same invoice will be
ignored.
* disc_type - Type of discount. Optional. Only relevant for invoices, not for bills.
Use "%" or blank for percentage value, anything else for monetary value.
* disc_how - Discount how. Optional. Only relevant for invoices, not for bills. Use ">"
for discount applied after tax, "=" for discount and tax applied before tax, and
"<", blank or anything else for discount applied before tax.
* discount - Amount or percentage of discount. Optional. Only relevant for invoices, not
for bills
* taxable - Is this entry taxable? Optional. Use "Y" or "X" for yes, "N" or blank for no.
* taxincluded - Is tax included in the item price? Optional. Use "Y" or "X" for yes, "N"
or blank for no.
* tax_table - Tax table. Optional. If the tax table provided does not exist, it will be
blank in the invoice.
* date_posted - Date posted. Optional. Use the same date format as defined in Preferences.
If you provide a date posted for the first row of an invoice, GnuCash will attempt
to also post the invoice (as opposed to only saving or updating it).
* due_date - Due date. Optional. Use the same date format as defined in Preferences.
Defaulted to date posted, if left blank. Only relevant in the first row of an
invoice, if the invoice is posted.
* account_posted - Post to account, for vendor or customer posting. Only mandatory in the
first row of an invoice, if the invoice is posted.
* memo_posted - Memo. Optional. Only relevant in the first row of an invoice, if the
invoice is posted.
* accu_splits - Accumulate splits? Optional. Use "Y" or "X" for yes, "N" or blank for no.
Only relevant in the first row of an invoice, if the invoice is posted. If you use
a spreadsheet program to create the import file, it is advised not to use blank for
no, because a final column with only blanks may not be recognized as relevant data
when the spreadsheet program creates the csv file.
=cut
( run in 2.399 seconds using v1.01-cache-2.11-cpan-800906f7e73 )