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 )