diff options
Diffstat (limited to 'sql-ledger/SL/AM.pm')
-rw-r--r-- | sql-ledger/SL/AM.pm | 694 |
1 files changed, 0 insertions, 694 deletions
diff --git a/sql-ledger/SL/AM.pm b/sql-ledger/SL/AM.pm deleted file mode 100644 index d691b3ce6..000000000 --- a/sql-ledger/SL/AM.pm +++ /dev/null @@ -1,694 +0,0 @@ -#===================================================================== -# SQL-Ledger Accounting -# Copyright (C) 2001 -# -# Author: Dieter Simader -# Email: dsimader@sql-ledger.org -# Web: http://www.sql-ledger.org -# -# Contributors: -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#====================================================================== -# -# Administration module -# Chart of Accounts -# template routines -# preferences -# -#====================================================================== - -package AM; - - -sub get_account { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT accno, description, charttype, gifi_accno, - category, link - FROM chart - WHERE id = $form->{id}|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my $ref = $sth->fetchrow_hashref(NAME_lc); - - foreach my $key (keys %$ref) { - $form->{"$key"} = $ref->{"$key"}; - } - - $sth->finish; - - - # get default accounts - $query = qq|SELECT inventory_accno_id, income_accno_id, expense_accno_id - FROM defaults|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - $ref = $sth->fetchrow_hashref(NAME_lc); - - map { $form->{$_} = $ref->{$_} } keys %ref; - - $sth->finish; - $dbh->disconnect; - -} - - -sub save_account { - my ($self, $myconfig, $form) = @_; - - # connect to database, turn off AutoCommit - my $dbh = $form->dbconnect_noauto($myconfig); - - # sanity check, can't have AR with AR_... - if ($form->{AR} || $form->{AP} || $form->{IC}) { - map { delete $form->{$_} } qw(AR_amount AR_tax AR_paid AP_amount AP_tax AP_paid IC_sale IC_cogs IC_taxpart IC_income IC_expense IC_taxservice); - } - - $form->{link} = ""; - foreach my $item ($form->{AR}, - $form->{AR_amount}, - $form->{AR_tax}, - $form->{AR_paid}, - $form->{AP}, - $form->{AP_amount}, - $form->{AP_tax}, - $form->{AP_paid}, - $form->{IC}, - $form->{IC_sale}, - $form->{IC_cogs}, - $form->{IC_taxpart}, - $form->{IC_income}, - $form->{IC_expense}, - $form->{IC_taxservice}, - $form->{CT_tax} - ) { - $form->{link} .= "${item}:" if ($item); - } - chop $form->{link}; - - # if we have an id then replace the old record - $form->{description} =~ s/'/''/g; - - # strip blanks from accno - map { $form->{$_} =~ s/ //g; } qw(accno gifi_accno); - - my ($query, $sth); - - if ($form->{id}) { - $query = qq|UPDATE chart SET - accno = '$form->{accno}', - description = '$form->{description}', - charttype = '$form->{charttype}', - gifi_accno = '$form->{gifi_accno}', - category = '$form->{category}', - link = '$form->{link}' - WHERE id = $form->{id}|; - } else { - $query = qq|INSERT INTO chart - (accno, description, charttype, gifi_accno, category, link) - VALUES ('$form->{accno}', '$form->{description}', - '$form->{charttype}', '$form->{gifi_accno}', - '$form->{category}', '$form->{link}')|; - } - $dbh->do($query) || $form->dberror($query); - - - if ($form->{IC_taxpart} || $form->{IC_taxservice} || $form->{CT_tax}) { - - my $chart_id = $form->{id}; - - unless ($form->{id}) { - # get id from chart - $query = qq|SELECT id - FROM chart - WHERE accno = '$form->{accno}'|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($chart_id) = $sth->fetchrow_array; - $sth->finish; - } - - # add account if it doesn't exist in tax - $query = qq|SELECT chart_id - FROM tax - WHERE chart_id = $chart_id|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($tax_id) = $sth->fetchrow_array; - $sth->finish; - - # add tax if it doesn't exist - unless ($tax_id) { - $query = qq|INSERT INTO tax (chart_id, rate) - VALUES ($chart_id, 0)|; - $dbh->do($query) || $form->dberror($query); - } - } else { - # remove tax - if ($form->{id}) { - $query = qq|DELETE FROM tax - WHERE chart_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - } - } - - - # commit - my $rc = $dbh->commit; - $dbh->disconnect; - - $rc; - -} - - - -sub delete_account { - my ($self, $myconfig, $form) = @_; - - # connect to database, turn off AutoCommit - my $dbh = $form->dbconnect_noauto($myconfig); - - # delete chart of account record - $query = qq|DELETE FROM chart - WHERE id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - # set inventory_accno_id, income_accno_id, expense_accno_id to defaults - $query = qq|UPDATE parts - SET inventory_accno_id = - (SELECT inventory_accno_id FROM defaults) - WHERE inventory_accno_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - $query = qq|UPDATE parts - SET income_accno_id = - (SELECT income_accno_id FROM defaults) - WHERE income_accno_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - $query = qq|UPDATE parts - SET expense_accno_id = - (SELECT expense_accno_id FROM defaults) - WHERE expense_accno_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - foreach my $table (qw(partstax customertax vendortax tax)) { - $query = qq|DELETE FROM $table - WHERE chart_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - } - - # commit and redirect - my $rc = $dbh->commit; - $dbh->disconnect; - - $rc; - -} - - -sub gifi_accounts { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT accno, description - FROM gifi - ORDER BY accno|; - - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{ALL} }, $ref; - } - - $sth->finish; - $dbh->disconnect; - -} - - - -sub get_gifi { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT accno, description - FROM gifi - WHERE accno = '$form->{accno}'|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my $ref = $sth->fetchrow_hashref(NAME_lc); - - map { $form->{$_} = $ref->{$_} } keys %$ref; - - $sth->finish; - $dbh->disconnect; - -} - - -sub save_gifi { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - $form->{description} =~ s/'/''/g; - $form->{accno} =~ s/ //g; - - # id is the old account number! - if ($form->{id}) { - $query = qq|UPDATE gifi SET - accno = '$form->{accno}', - description = '$form->{description}' - WHERE accno = '$form->{id}'|; - } else { - $query = qq|INSERT INTO gifi - (accno, description) - VALUES ('$form->{accno}', '$form->{description}')|; - } - $dbh->do($query) || $form->dberror($query); - - $dbh->disconnect; - -} - - -sub delete_gifi { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - # id is the old account number! - $query = qq|DELETE FROM gifi - WHERE accno = '$form->{id}'|; - $dbh->do($query) || $form->dberror($query); - - $dbh->disconnect; - -} - - -sub load_template { - my ($self, $form) = @_; - - open(TEMPLATE, "$form->{file}") or $form->error("$form->{file} : $!"); - - while (<TEMPLATE>) { - $form->{body} .= $_; - } - - close(TEMPLATE); - -} - - -sub save_template { - my ($self, $form) = @_; - - open(TEMPLATE, ">$form->{file}") or $form->error("$form->{file} : $!"); - - # strip
- $form->{body} =~ s/\r\n/\n/g; - print TEMPLATE $form->{body}; - - close(TEMPLATE); - -} - - - -sub save_preferences { - my ($self, $myconfig, $form, $memberfile, $userspath) = @_; - - map { ($form->{$_}) = split /--/, $form->{$_} } qw(inventory_accno income_accno expense_accno fxgain_accno fxloss_accno); - - my @a; - $form->{curr} =~ s/ //g; - map { push(@a, uc pack "A3", $_) if $_ } split /:/, $form->{curr}; - $form->{curr} = join ':', @a; - - # connect to database - my $dbh = $form->dbconnect_noauto($myconfig); - - # these defaults are database wide - # user specific variables are in myconfig - # save defaults - my $query = qq|UPDATE defaults SET - inventory_accno_id = - (SELECT id FROM chart - WHERE accno = '$form->{inventory_accno}'), - income_accno_id = - (SELECT id FROM chart - WHERE accno = '$form->{income_accno}'), - expense_accno_id = - (SELECT id FROM chart - WHERE accno = '$form->{expense_accno}'), - fxgain_accno_id = - (SELECT id FROM chart - WHERE accno = '$form->{fxgain_accno}'), - fxloss_accno_id = - (SELECT id FROM chart - WHERE accno = '$form->{fxloss_accno}'), - invnumber = '$form->{invnumber}', - sonumber = '$form->{sonumber}', - ponumber = '$form->{ponumber}', - yearend = '$form->{yearend}', - curr = '$form->{curr}', - weightunit = '$form->{weightunit}', - businessnumber = '$form->{businessnumber}' - |; - $dbh->do($query) || $form->dberror($query); - - # update name - my $name = $form->{name}; - $name =~ s/'/''/g; - $query = qq|UPDATE employee - SET name = '$name' - WHERE login = '$form->{login}'|; - $dbh->do($query) || $form->dberror($query); - - foreach my $item (split / /, $form->{taxaccounts}) { - $query = qq|UPDATE tax - SET rate = |.($form->{$item} / 100).qq|, - taxnumber = '$form->{"taxnumber_$item"}' - WHERE chart_id = $item|; - $dbh->do($query) || $form->dberror($query); - } - - my $rc = $dbh->commit; - $dbh->disconnect; - - # save first currency in myconfig - $form->{currency} = substr($form->{curr},0,3); - - my $myconfig = new User "$memberfile", "$form->{login}"; - - foreach my $item (keys %$form) { - $myconfig->{$item} = $form->{$item}; - } - - $myconfig->save_member($memberfile, $userspath); - - $rc; - -} - - -sub defaultaccounts { - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - # get defaults from defaults table - my $query = qq|SELECT * FROM defaults|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - $form->{defaults} = $sth->fetchrow_hashref(NAME_lc); - $form->{defaults}{IC} = $form->{defaults}{inventory_accno_id}; - $form->{defaults}{IC_income} = $form->{defaults}{income_accno_id}; - $form->{defaults}{IC_expense} = $form->{defaults}{expense_accno_id}; - $form->{defaults}{FX_gain} = $form->{defaults}{fxgain_accno_id}; - $form->{defaults}{FX_loss} = $form->{defaults}{fxloss_accno_id}; - - - $sth->finish; - - - $query = qq|SELECT id, accno, description, link - FROM chart - WHERE link LIKE '%IC%' - ORDER BY accno|; - $sth = $dbh->prepare($query); - $sth->execute || $self->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - foreach my $key (split(/:/, $ref->{link})) { - if ($key =~ /IC/) { - $nkey = $key; - if ($key =~ /cogs/) { - $nkey = "IC_expense"; - } - if ($key =~ /sale/) { - $nkey = "IC_income"; - } - %{ $form->{IC}{$nkey}{$ref->{accno}} } = ( id => $ref->{id}, - description => $ref->{description} ); - } - } - } - $sth->finish; - - - $query = qq|SELECT id, accno, description - FROM chart - WHERE category = 'I' - AND charttype = 'A' - ORDER BY accno|; - $sth = $dbh->prepare($query); - $sth->execute || $self->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - %{ $form->{IC}{FX_gain}{$ref->{accno}} } = ( id => $ref->{id}, - description => $ref->{description} ); - } - $sth->finish; - - $query = qq|SELECT id, accno, description - FROM chart - WHERE category = 'E' - AND charttype = 'A' - ORDER BY accno|; - $sth = $dbh->prepare($query); - $sth->execute || $self->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - %{ $form->{IC}{FX_loss}{$ref->{accno}} } = ( id => $ref->{id}, - description => $ref->{description} ); - } - $sth->finish; - - - # now get the tax rates and numbers - $query = qq|SELECT chart.id, chart.accno, chart.description, - tax.rate * 100 AS rate, tax.taxnumber - FROM chart, tax - WHERE chart.id = tax.chart_id|; - - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - $form->{taxrates}{$ref->{accno}}{id} = $ref->{id}; - $form->{taxrates}{$ref->{accno}}{description} = $ref->{description}; - $form->{taxrates}{$ref->{accno}}{taxnumber} = $ref->{taxnumber} if $ref->{taxnumber}; - $form->{taxrates}{$ref->{accno}}{rate} = $ref->{rate} if $ref->{rate}; - } - - $sth->finish; - $dbh->disconnect; - -} - - -sub backup { - my ($self, $myconfig, $form, $userspath) = @_; - - my ($tmpfile, $out, $mail); - - if ($form->{media} eq 'email') { - - my $boundary = time; - $tmpfile = "$userspath/$boundary.$myconfig->{dbname}-$form->{dbversion}.sql"; - $out = $form->{OUT}; - $form->{OUT} = ">$tmpfile"; - - use SL::Mailer; - $mail = new Mailer; - - $mail->{to} = qq|"$myconfig->{name}" <$myconfig->{email}>|; - $mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|; - $mail->{subject} = "SQL-Ledger Backup / $myconfig->{dbname}-$form->{dbversion}.sql"; - @{ $mail->{attachments} } = ($tmpfile); - $mail->{version} = $form->{version}; - $mail->{fileid} = "$boundary."; - - $myconfig->{signature} =~ s/\\n/\r\n/g; - $mail->{message} = "--\n$myconfig->{signature}"; - - } - - if ($form->{OUT}) { - open(OUT, "$form->{OUT}") or $form->error("$form->{OUT} : $!"); - } else { - open(OUT, ">-") or $form->error("STDOUT : $!"); - } - - if ($form->{media} eq 'file') { - print OUT qq|Content-Type: Application/File; -Content-Disposition: filename="$myconfig->{dbname}-$form->{dbversion}.sql"\n\n|; - } - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - # get all the tables - my @tables = $dbh->tables; - - my $today = scalar localtime; - - - $myconfig->{dbhost} = 'localhost' unless $myconfig->{dbhost}; - - print OUT qq|-- SQL-Ledger Backup --- Dataset: $myconfig->{dbname} --- Version: $form->{dbversion} --- Host: $myconfig->{dbhost} --- Login: $form->{login} --- User: $myconfig->{name} --- Date: $today --- --- set options -$myconfig->{dboptions}; --- -|; - - foreach $table (@tables) { - my $query = qq|SELECT * FROM $table|; - - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - $query = qq|INSERT INTO $table (|; - map { $query .= qq|$sth->{NAME}->[$_],| } (0 .. $sth->{NUM_OF_FIELDS} - 1); - chop $query; - - $query .= qq|) VALUES|; - - print OUT qq|-- -DELETE FROM $table; -|; - while (my @arr = $sth->fetchrow_array) { - - $fields = "("; - foreach my $item (@arr) { - if (defined $item) { - $item =~ s/'/''/g; - $fields .= qq|'$item',|; - } else { - $fields .= 'NULL,'; - } - } - - chop $fields; - $fields .= ")"; - - print OUT qq|$query $fields;\n|; - } - - $sth->finish; - } - - $query = qq|SELECT last_value FROM id|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($id) = $sth->fetchrow_array; - $sth->finish; - - print OUT qq|-- -DROP SEQUENCE id; -CREATE SEQUENCE id START $id; -|; - - close(OUT); - - $dbh->disconnect; - - if ($form->{media} eq 'email') { - my $err = $mail->send($out); - $_ = $tmpfile; - unlink; - } - -} - - -sub closedto { - my ($self, $myconfig, $form) = @_; - - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT closedto, revtrans FROM defaults|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($form->{closedto}, $form->{revtrans}) = $sth->fetchrow_array; - - $sth->finish; - - $dbh->disconnect; - -} - - -sub closebooks { - my ($self, $myconfig, $form) = @_; - - my $dbh = $form->dbconnect($myconfig); - - if ($form->{revtrans}) { - - $query = qq|UPDATE defaults SET closedto = NULL, - revtrans = '1'|; - } else { - if ($form->{closedto}) { - - $query = qq|UPDATE defaults SET closedto = '$form->{closedto}', - revtrans = '0'|; - } else { - - $query = qq|UPDATE defaults SET closedto = NULL, - revtrans = '0'|; - } - } - - # set close in defaults - $dbh->do($query) || $form->dberror($query); - - $dbh->disconnect; - -} - - -1; - |