summaryrefslogtreecommitdiff
path: root/LedgerSMB
diff options
context:
space:
mode:
Diffstat (limited to 'LedgerSMB')
-rw-r--r--LedgerSMB/AM.pm632
1 files changed, 577 insertions, 55 deletions
diff --git a/LedgerSMB/AM.pm b/LedgerSMB/AM.pm
index cb710b15..0bf065ed 100644
--- a/LedgerSMB/AM.pm
+++ b/LedgerSMB/AM.pm
@@ -1,43 +1,75 @@
-#=====================================================================
-# LedgerSMB
-# Small Medium Business Accounting software
-# http://www.ledgersmb.org/
-#
-# Copyright (C) 2006
-# This work contains copyrighted information from a number of sources all used
-# with permission.
-#
-# This file contains source code included with or based on SQL-Ledger which
-# is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed
-# under the GNU General Public License version 2 or, at your option, any later
-# version. For a full list including contact information of contributors,
-# maintainers, and copyright holders, see the CONTRIBUTORS file.
-#
-# Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
-# Copyright (C) 2000
-#
-# Author: DWS Systems Inc.
-# Web: http://www.sql-ledger.org
-#
-# Contributors: Jim Rawlings <jim@your-dba.com>
-#
-#======================================================================
-#
-# This file has undergone whitespace cleanup.
-#
-#======================================================================
-#
-# Administration module
-# Chart of Accounts
-# template routines
-# preferences
-#
-#======================================================================
+
+=head1 NAME
+
+AM
+
+=head1 SYNOPSIS
+
+This module provides some administrative functions
+
+=head1 COPYRIGHT
+
+ #====================================================================
+ # LedgerSMB
+ # Small Medium Business Accounting software
+ # http://www.ledgersmb.org/
+ #
+ # Copyright (C) 2006
+ # This work contains copyrighted information from a number of sources
+ # all used with permission.
+ #
+ # This file contains source code included with or based on SQL-Ledger
+ # which is Copyright Dieter Simader and DWS Systems Inc. 2000-2005
+ # and licensed under the GNU General Public License version 2 or, at
+ # your option, any later version. For a full list including contact
+ # information of contributors, maintainers, and copyright holders,
+ # see the CONTRIBUTORS file.
+ #
+ # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
+ # Copyright (C) 2000
+ #
+ # Author: DWS Systems Inc.
+ # Web: http://www.sql-ledger.org
+ #
+ # Contributors: Jim Rawlings <jim@your-dba.com>
+ #
+ #====================================================================
+ #
+ # This file has undergone whitespace cleanup.
+ #
+ #====================================================================
+ #
+ # Administration module
+ # Chart of Accounts
+ # template routines
+ # preferences
+ #
+ #====================================================================
+
+=head1 METHODS
+
+=over
+
+=cut
package AM;
use LedgerSMB::Tax;
use LedgerSMB::Sysconfig;
+=item AM->get_account($myconfig, $form);
+
+Populates the $form attributes accno, description, charttype, gifi_accno,
+category, link, and contra with details about the account that has the id
+$form->{id}. If there are no acc_trans entries that refer to that account,
+$form->{orphaned} is made true, otherwise $form->{orphaned} is set to false.
+
+Also populates 'inventory_accno_id', 'income_accno_id', 'expense_accno_id',
+'fxgain_accno_id', and 'fxloss_accno_id' with the values from defaults.
+
+$myconfig is unused.
+
+=cut
+
sub get_account {
my ( $self, $myconfig, $form ) = @_;
@@ -96,6 +128,27 @@ sub get_account {
$dbh->commit;
}
+=item AM->save_account($myconfig, $form);
+
+Adds or updates an account in the chart of accounts. If $form->{id} is set,
+the existing account with an id of $form->{id} is updated, otherwise a new
+account is created. The values for accno, description, charttype, gifi_accno,
+category, and contra are taken directly from the $form attributes of the same
+name. The link value is generated in $form->{link} as a colon seperated list of
+non-empty values from the $form attributes 'AR', 'AR_amount', 'AR_tax',
+'AR_paid', 'AP', 'AP_amount', 'AP_tax', 'AP_paid', 'IC', 'IC_income', 'IC_sale',
+'IC_expense', 'IC_cogs', 'IC_taxpart', and 'IC_taxservice'.
+
+If the account is a tax account, indicated by any of IC_taxpart, IC_taxservice,
+AR_tax, and AP_tax being true, and there is no entry in the tax table for the
+account, a tax entry is added for the account. If none of those tax flags are
+set and this function is updating an existing account, all entries in the tax
+table for the account are deleted.
+
+$myconfig is unused.
+
+=cut
+
sub save_account {
my ( $self, $myconfig, $form ) = @_;
@@ -217,6 +270,18 @@ sub save_account {
$rc;
}
+=item AM->delete_account($myconfig, $form);
+
+Deletes the account with the id $form->{id}. Calls $form->error if there are
+any acc_trans entries that reference it. If any parts have that account for
+an inventory, income, or COGS (expense) account, switch the part to using the
+default account for that type. Also deletes all tax, partstax, customertax, and
+vendortax table entries for the account.
+
+$myconfig is unused.
+
+=cut
+
sub delete_account {
my ( $self, $myconfig, $form ) = @_;
@@ -285,6 +350,16 @@ sub delete_account {
$rc;
}
+=item AM->gifi_accounts($myconfig, $form);
+
+Populates the list referred to as $form->{ALL} with hashes of gifi numbers and
+descriptions in order of the GIFI number. The GIFI number referred to as
+'accno'.
+
+$myconfig is not used.
+
+=cut
+
sub gifi_accounts {
my ( $self, $myconfig, $form ) = @_;
@@ -309,6 +384,16 @@ sub gifi_accounts {
}
+=item AM->get_gifi($myconfig, $form);
+
+Sets $form->{description} to the description of the GIFI number $form->{accno}.
+Sets $form->{orphaned} to true if there are no entries in acc_trans that refer
+to this GIFI and to false otherwise.
+
+$myconfig is not used.
+
+=cut
+
sub get_gifi {
my ( $self, $myconfig, $form ) = @_;
@@ -350,6 +435,16 @@ sub get_gifi {
}
+=item AM->save_gifi($myconfig, $form);
+
+Adds or updates a GIFI record. If $form->{id} is set, update the gifi record
+that has that as an account number. The new values for an added or updated
+record are stored in $form->{accno} and $form->{description}.
+
+$myconfig is not used.
+
+=cut
+
sub save_gifi {
my ( $self, $myconfig, $form ) = @_;
@@ -388,6 +483,14 @@ sub save_gifi {
}
+=item AM->delete_gifi($myconfig, $form);
+
+Deletes the gifi record with the GIFI number $form->{id}.
+
+$myconfig is not used.
+
+=cut
+
sub delete_gifi {
my ( $self, $myconfig, $form ) = @_;
@@ -407,6 +510,16 @@ sub delete_gifi {
}
+=item AM->warehouses($myconfig, $form);
+
+Populates the list referred to as $form->{ALL} with hashes describing
+warehouses, ordered according to the logic of $form->sort_order. Each hash has
+an id and a description element.
+
+$myconfig is not used.
+
+=cut
+
sub warehouses {
my ( $self, $myconfig, $form ) = @_;
@@ -432,6 +545,16 @@ sub warehouses {
}
+=item AM->get_warehouse($myconfig, $form);
+
+Sets $form->{description} to the name of the warehouse $form->{id}. If no
+inventory is currently linked to the warehouse, set $form->{orphaned} to true,
+otherwise $form->{orphaned} is false.
+
+$myconfig is not used.
+
+=cut
+
sub get_warehouse {
my ( $self, $myconfig, $form ) = @_;
@@ -470,6 +593,16 @@ sub get_warehouse {
$dbh->commit;
}
+=item AM->save_warehouse($myconfig, $form);
+
+Add or update a warehouse. If $form->{id} is set, that warehouse is updated
+instead of adding a new warehouse. In both cases, the description of the
+warehouse is set to $form->{description}.
+
+$myconfig is not used.
+
+=cut
+
sub save_warehouse {
my ( $self, $myconfig, $form ) = @_;
@@ -503,6 +636,14 @@ sub save_warehouse {
}
+=item AM->delete_warehouse($myconfig, $form);
+
+Deletes the warehouse with the id $form->{id}.
+
+$myconfig is not used.
+
+=cut
+
sub delete_warehouse {
my ( $self, $myconfig, $form ) = @_;
@@ -519,6 +660,16 @@ sub delete_warehouse {
}
+=item AM->departments($myconfig, $form);
+
+Populate the list referred to as $form->{ALL} with hashes of details about
+departments. The hashes all contain the id, description, and role of the
+department and are ordered by the description.
+
+$myconfig is unused.
+
+=cut
+
sub departments {
my ( $self, $myconfig, $form ) = @_;
@@ -543,6 +694,17 @@ sub departments {
}
+=item AM->get_department($myconfig, $form);
+
+Fills $form->{description} and $form->{role} with details about the department
+with the id value of $form->{id}. If the department has not been used as part
+of a transaction referred to in dpt_trans, set $form->{orphaned} to true,
+otherwise it is set to false.
+
+$myconfig is unused.
+
+=cut
+
sub get_department {
my ( $self, $myconfig, $form ) = @_;
@@ -582,6 +744,17 @@ sub get_department {
$dbh->commit;
}
+=item AM->save_department($myconfig, $form);
+
+Add or update a department record. If $form->{id} is set, the department with
+that id is updated, otherwise a new department is added. The department role
+(either 'C' for cost centres or 'P' for profit centres) and description is
+taken from the $form attributes 'role' and 'description'.
+
+$myconfig is unused.
+
+=cut
+
sub save_department {
my ( $self, $myconfig, $form ) = @_;
@@ -614,6 +787,14 @@ sub save_department {
}
+=item AM->delete_department($myconfig, $form)
+
+Deletes the department with an id of $form->{id}.
+
+$myconfig is unused.
+
+=cut
+
sub delete_department {
my ( $self, $myconfig, $form ) = @_;
@@ -630,6 +811,18 @@ sub delete_department {
}
+=item AM->business($myconfig, $form);
+
+Populates the list referred to as $form->{ALL} with hashes containing details
+about all known types of business. Each hash contains the id, description, and
+discount for businesses of this type. The discount is represented in numeric
+form, such that a 10% discount is stored and retrieved as 0.1. The hashes are
+sorted by the business description.
+
+$myconfig is unused.
+
+=cut
+
sub business {
my ( $self, $myconfig, $form ) = @_;
@@ -655,6 +848,15 @@ sub business {
}
+=item AM->get_business($myconfig, $form);
+
+Places the description and discount for the business with an id of $form->{id}
+into $form->{description} and $form->{discount}.
+
+$myconfig is unused.
+
+=cut
+
sub get_business {
my ( $self, $myconfig, $form ) = @_;
@@ -674,6 +876,19 @@ sub get_business {
}
+=item AM->save_business($myconfig, $form);
+
+Adds or updates a type of business. If $form->{id} is set, the business type
+with a corresponding id is updated, otherwise a new type is added. The new
+description is $form->{description}. The discount taken as a percentage stored
+in $form->{discount}, which then value is divided by 100 in place and the
+multiplier is stored. As an example, if $form->{discount} is 10 when this
+function is called, it is changed to 0.1 and stored as 0.1.
+
+$myconfig is unused.
+
+=cut
+
sub save_business {
my ( $self, $myconfig, $form ) = @_;
@@ -707,6 +922,14 @@ sub save_business {
}
+=item AM->delete_business($myconfig, $form);
+
+Deletes the business type with the id $form->{id}.
+
+$myconfig is unused.
+
+=cut
+
sub delete_business {
my ( $self, $myconfig, $form ) = @_;
@@ -722,6 +945,18 @@ sub delete_business {
}
+=item AM->sic($myconfig, $form);
+
+Populate the list referred to as $form->{ALL} with hashes containing SIC (some
+well known systems of which are NAICS and ISIC) data from the sic table. code
+is the actual SIC code, description is a textual description of the code, and
+sictype is an indicator of whether or not the entry refers to a header. The
+hashes will be sorted by either the code or description.
+
+$myconfig is unused.
+
+=cut
+
sub sic {
my ( $self, $myconfig, $form ) = @_;
@@ -755,6 +990,16 @@ sub sic {
}
+=item AM->get_sic($myconfig, $form);
+
+Retrieves the sictype and description for the SIC indicated by
+$form->{code} and places the retrieved values into $form->{sictype} and
+$form->{description}.
+
+$myconfig is unused
+
+=cut
+
sub get_sic {
my ( $self, $myconfig, $form ) = @_;
@@ -778,11 +1023,21 @@ sub get_sic {
}
+=item AM->save_sic($myconfig, $form);
+
+Add or update a SIC entry. If $form->{id} is set, take it as the original code
+to identify the entry update, otherwise treat it as a new entry. $form->{code},
+$form->{description}, and $form->{sictype} contain the new values. sictype is
+a single character to flag whether or not the entry is for a header ('H').
+
+$myconfig is unused.
+
+=cut
+
sub save_sic {
my ( $self, $myconfig, $form ) = @_;
- # connect to database
my $dbh = $form->{dbh};
foreach my $item (qw(code description)) {
@@ -814,11 +1069,18 @@ sub save_sic {
}
+=item AM->delete_sic($myconfig, $form);
+
+Deletes the SIC entry with the code $form->{code}.
+
+$myconfig is unused.
+
+=cut
+
sub delete_sic {
my ( $self, $myconfig, $form ) = @_;
- # connect to database
my $dbh = $form->{dbh};
$query = qq|
@@ -830,6 +1092,20 @@ sub delete_sic {
}
+=item AM->language($myconfig, $form);
+
+Populates the list referred to as $form->{ALL} with hashes containing the code
+and description of all languages entered in the language table. The usual set
+of $form attributes affect the order in which the hashes are entered in the
+list.
+
+These language functions are unrelated to LedgerSMB::Locale, although these
+language codes are also used for non-UI templates and by LedgerSMB::PE.
+
+$myconfig is unused.
+
+=cut
+
sub language {
my ( $self, $myconfig, $form ) = @_;
@@ -864,6 +1140,15 @@ sub language {
}
+=item AM->get_language($myconfig, $form);
+
+Sets $form->{description} to the description of the language that has the code
+$form->{code}.
+
+$myconfig is unused.
+
+=cut
+
sub get_language {
my ( $self, $myconfig, $form ) = @_;
@@ -871,9 +1156,8 @@ sub get_language {
# connect to database
my $dbh = $form->{dbh};
- ## needs fixing (SELECT *...)
my $query = qq|
- SELECT *
+ SELECT code, description
FROM language
WHERE code = ?|;
@@ -889,6 +1173,16 @@ sub get_language {
}
+=item AM->save_language($myconfig, $form);
+
+Add or update a language entry. If $form->{id} is set, the language entry that
+has that as a code is updated, otherwise a new entry is added. $form->{code}
+and $form->{description} contain the new values for the entry.
+
+$myconfig is unused.
+
+=cut
+
sub save_language {
my ( $self, $myconfig, $form ) = @_;
@@ -926,6 +1220,14 @@ sub save_language {
}
+=item AM->delete_language($myconfig, $form);
+
+Deletes the language entry with the code $form->{code}.
+
+$myconfig is unused.
+
+=cut
+
sub delete_language {
my ( $self, $myconfig, $form ) = @_;
@@ -938,10 +1240,39 @@ sub delete_language {
WHERE code = | . $dbh->quote( $form->{code} );
$dbh->do($query) || $form->dberror($query);
- $dbh->{dbh};
}
+=item AM->recurring_transactions($myconfig, $form);
+
+Populates lists referred to in the form of $form->{transactions}{$type}, where
+the possible values for $type are 'ar', 'ap', 'gl', 'so', and 'po', with hashes
+containing details about recurring transactions of the $type variety. These
+hashes have the fields module (the frontend script that governs the transaction
+type), transaction (the transaction type), invoice (true if the transaction is
+an invoice), description (a field that is a customer, vendor, or in the case of
+a GL transaction, an arbitrary text field), amount (the cash value of the
+transaction), id (the id of the recurring transaction), reference (the
+reference value for the transaction), startdate (the date the recurring
+sequence started), nextdate (the date of the next occurrence of the event),
+enddate (the date the sequence ends), repeat (the number of units involved in
+the recurrence frequency), unit (the base recurrence unit), howmany (how many
+times the event occurs), payment (whether or not the event involves a payment),
+recurringemail (a colon separated list of forms to email as part of the event),
+recurringprint (a colon separated list of forms to print as part of the event),
+overdue (how many days until the next repetition of the event), vc (vendor,
+customer, or empty), exchangerate (the exchangerate involved on the day of the
+original transaction), curr (the currency of the event), and expired (if there
+will be no more recurrences).
+
+By default, these lists are sorted in order of the date of the next occurrence
+of the transaction. This order can be affected by the usual attributes used
+by $form->sort_order.
+
+$myconfig is unused.
+
+=cut
+
sub recurring_transactions {
my ( $self, $myconfig, $form ) = @_;
@@ -1130,6 +1461,30 @@ sub recurring_transactions {
}
+=item AM->recurring_details($myconfig, $form, $id);
+
+Retrieves details about the recurring transaction $id and places them into
+attributes of $form. Sets id (the transaction id passed in, $id), reference
+(a reference string for the recurring transaction), startdate (the date the
+recurrence series started on), nextdate (the date of the next occurrence of the
+event), enddate (the date of the final occurrence of the event), repeat (the
+number of units involved in a recurrence period), unit (the recurrence unit),
+howmany (the total number of recurrences in the recurrence series), payment
+(whether or not the transaction is associated with a payment), arid (true if an
+ar event), apid (true if an ap event), overdue (number of days an ar event was
+to the duedate), paid (number of days after an ar event it was paid), req (days
+until the requirement date from the transdate of an oe event), oeid (true if an
+oe event), customer_id (vendor id if sales order), vendor_id (vendor id if
+puchase order), vc ('customer' if customer_id set, 'vendor' if vendor_id set),
+invoice (true if both arid and arinvoice set or if both apid and apinvoice set),
+recurringemail (colon separated list of forms and formats to be emailed),
+message (the non-attachement message body for the emails), and recurringprint
+(colon separated list of form names, formats, and printer names).
+
+$myconfig is unused.
+
+=cut
+
sub recurring_details {
my ( $self, $myconfig, $form, $id ) = @_;
@@ -1203,6 +1558,16 @@ sub recurring_details {
}
+=item AM->update_recurring($myconfig, $form, $id)
+
+Updates nextdate for the recurring transaction $id to the next date of the
+sequence. If the new value for nextdate is after enddate, nextdate is set to
+NULL.
+
+$myconfig is unused.
+
+=cut
+
sub update_recurring {
my ( $self, $myconfig, $form, $id ) = @_;
@@ -1228,20 +1593,30 @@ sub update_recurring {
my ($last_repeat) = $dbh->selectrow_array($query);
if ($last_repeat) {
- $advance{ $myconfig->{dbdriver} } = "NULL";
+ $query = qq|
+ UPDATE recurring
+ SET nextdate = NULL
+ WHERE id = $id|;
+ } else {
+ $query = qq|
+ UPDATE recurring
+ SET nextdate = (date $nextdate + interval $interval)
+ WHERE id = $id|;
}
- $query = qq|
- UPDATE recurring
- SET nextdate = (date $nextdate + interval $interval)
- WHERE id = $id|;
-
$dbh->do($query) || $form->dberror($query);
$dbh->commit;
}
+=item AM->check_template_name($myconfig, $form);
+
+Performs some sanity checking on the filename $form->{file} and calls
+$form->error if the filename is disallowed.
+
+=cut
+
sub check_template_name {
my ( $self, $myconfig, $form ) = @_;
@@ -1271,6 +1646,12 @@ sub check_template_name {
}
}
+=item AM->load_template($myconfig, $form);
+
+Populates $form->{body} with the contents of the file $form->{file}.
+
+=cut
+
sub load_template {
my ( $self, $myconfig, $form ) = @_;
@@ -1287,6 +1668,13 @@ sub load_template {
}
+=item AM->save_template($myconfig, $form);
+
+Overwrites the file $form->{file} with the contents of $form->{body}, excluding
+carriage returns.
+
+=cut
+
sub save_template {
my ( $self, $myconfig, $form ) = @_;
@@ -1303,6 +1691,16 @@ sub save_template {
}
+=item AM->save_preferences($myconfig, $form);
+
+Saves the preferences for the current user. New values are taken from the $form
+attributes name, email, dateformat, signature, numberformat, vclimit, tel, fax,
+company, menuwidth, countrycode, address, timeout, stylesheet, printer,
+password, new_password, and old_password. Password updates occur when
+new_password and old_password differ.
+
+=cut
+
sub save_preferences {
my ( $self, $myconfig, $form ) = @_;
@@ -1362,6 +1760,19 @@ sub save_preferences {
}
+=item AM->save_defaults($myconfig, $form);
+
+Sets the values in the defaults table to values derived from $form. glnumber,
+sinumber, vinumber, sonumber, ponumber, sqnumber, rfqnumber, partnumber,
+employeenumber, customernumber, vendornumber, projectnumber, yearend, curr,
+weightunit, and businessnumber are taken directly from the $form value with
+the corresponding name. inventory_accno_id is the id of the account with the
+number specified in $form->{IC}. In a similar manner, income_accno_id and
+$form->{IC_income}, expense_accno_id and $form->{IC_expense}, fxgain_accno_id
+and $form->{FX_gain}, and fxloss_accno_id and $form->{FX_loss} are related.
+
+=cut
+
sub save_defaults {
my ( $self, $myconfig, $form ) = @_;
@@ -1425,6 +1836,24 @@ sub save_defaults {
}
+=item AM->defaultaccounts($myconfig, $form);
+
+Retrieves the numbers of default accounts and sets $form->{defaults}{$key} to
+the appropriate account numbers, where $key can be 'IC', 'IC_income', 'IC_sale',
+'IC_expense', 'IC_cogs', 'FX_gain', and 'FX_loss'.
+
+Sets the hashes refered to as $form->{accno}{IC_${type}}{$accno} to contain the
+id and description of all accounts with IC elements in their link fields. The
+possible types are all the IC_* values with IC_cogs merged into IC_expense and
+IC_sale merged with IC_income.
+
+Fills the hashes referred to as $form->{accno}{FX_(gain|loss)} with the id and
+description of all income and expense accounts, keyed on the account number.
+
+$myconfig is unused.
+
+=cut
+
sub defaultaccounts {
my ( $self, $myconfig, $form ) = @_;
@@ -1515,6 +1944,18 @@ sub defaultaccounts {
}
+=item AM->taxes($myconfig, $form);
+
+Retrieve details about all taxes in the database. $form->{taxrates} refers to a
+list containing hashes with the chart id (id), account number (accno),
+description, rate, taxnumber, validto, pass, and taxmodulename for a tax.
+$form->{taxmodule_B<id>}, where B<id> is a taxmodule_id, is set to that
+taxmodule's name.
+
+$myconfig is unused.
+
+=cut
+
sub taxes {
my ( $self, $myconfig, $form ) = @_;
@@ -1560,6 +2001,19 @@ sub taxes {
}
+=item AM->save_taxes($myconfig, $form);
+
+Deletes B<all> entries from the tax table then re-inserts all taxes whose
+accounts are part of the space separated list $form->{taxaccounts}. Each
+element of $form->{taxaccounts} is of the form 'chartid_I<i>' where chartid is
+the id of the chart entry for the tax and I<i> is a numeric index. The values
+inserted for each tax are chart_id (from taxaccounts), rate (
+form->{taxrate_I<i>} / 100), validto ($form->{validto_I<i>}), taxnumber
+($form->{taxnumber_I<i>}), pass ($form->{pass_I<i>}), and taxmodule_id
+($form->{taxmodule_id_I<i>}).
+
+=cut
+
sub save_taxes {
my ( $self, $myconfig, $form ) = @_;
@@ -1596,6 +2050,17 @@ sub save_taxes {
}
+=item AM->backup($myconfig, $form);
+
+Prepares and outputs a database backup of the current "dataset" using
+"pg_dump -Fc". The means of output is determined by $form->{media}, which can
+be either 'file' or 'email'. If email is the desired form of output, the email
+address to send the backup to and who to claim it is from is determined by
+$myconfig->{email} and $myconfig->{name}. File output sends the backup directly
+out over HTTP.
+
+=cut
+
sub backup {
my ( $self, $myconfig, $form ) = @_;
@@ -1661,6 +2126,15 @@ qx(PGPASSWORD="$myconfig->{dbpasswd}" pg_dump -U $myconfig->{dbuser} -h $myconfi
}
+=item AM->closedto($myconfig, $form);
+
+Populates $form->{closedto}, $form->{revtrans}, and $form->{audittrail} with
+their values in the defaults table.
+
+$myconfig is unused.
+
+=cut
+
sub closedto {
my ( $self, $myconfig, $form ) = @_;
@@ -1681,6 +2155,17 @@ sub closedto {
}
+=item AM->closebooks($myconfig, $form);
+
+Updates the revtrans, closedto, and audittrail entries in the defaults table
+using their corresponding $form values. If $form->{removeaudittrail} is set,
+remove all audittrail entries with a transdate prior to the date given by
+$form->{removeaudittrail}.
+
+$myconfig is unused.
+
+=cut
+
sub closebooks {
my ( $self, $myconfig, $form ) = @_;
@@ -1702,18 +2187,29 @@ sub closebooks {
$sth->execute( $val, $_ );
}
- if ( $form->{removeaudittrail} ) {
- $query = qq|
- DELETE FROM audittrail
- WHERE transdate < | . $dbh->quote( $form->{removeaudittrail} );
-
- $dbh->do($query) || $form->dberror($query);
- }
+## SC: Disabling audit trail removal
+## if ( $form->{removeaudittrail} ) {
+## $query = qq|
+## DELETE FROM audittrail
+## WHERE transdate < ?|;
+##
+## $dbh->do($query, undef, $form->{removeaudittrail}) || $form->dberror($query);
+## }
$dbh->commit;
}
+=item AM->earningsaccounts($myconfig, $form);
+
+Populates the list referred to as $form->{chart} with hashes containing the
+account number (accno) and the description of all equity accounts, ordered by
+the account number.
+
+$myconfig is unused.
+
+=cut
+
sub earningsaccounts {
my ( $self, $myconfig, $form ) = @_;
@@ -1733,7 +2229,7 @@ sub earningsaccounts {
$sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- $form->{chart} = "";
+ $form->{chart} = [];
while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
push @{ $form->{chart} }, $ref;
@@ -1743,11 +2239,28 @@ sub earningsaccounts {
$dbh->commit;
}
+=item AM->post_yearend($myconfig, $form);
+
+Posts the termination of a financial year. Makes use of the $form attributes
+login, reference, notes, description, and transdate to populate the gl table
+entry. The id of the gl transaction is placed in $form->{id}.
+
+For every accno_$i in $form, where $i is between 1 and $form->{rowcount}, an
+acc_trans entry will be added if credit_$i or debit_$i is non-zero.
+
+A new yearend entry is populated with the id and transdate of the gl
+transaction.
+
+Adds an entry to the audittrail.
+
+$myconfig is unused.
+
+=cut
+
sub post_yearend {
my ( $self, $myconfig, $form ) = @_;
- # connect to database, turn off AutoCommit
my $dbh = $form->{dbh};
my $query;
@@ -1848,6 +2361,13 @@ sub post_yearend {
}
+=item AM->get_all_defaults($form);
+
+Retrieves all settings from defaults and sets the appropriate $form values.
+Also runs AM->defaultaccounts.
+
+=cut
+
sub get_all_defaults {
my ( $self, $form ) = @_;
my $dbh = $form->{dbh};
@@ -1862,4 +2382,6 @@ sub get_all_defaults {
$dbh->commit;
}
+=back
+
1;