X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAM.pm;h=30b1d9301936d3337fb8301e719fc103cf8552ed;hb=bc7681a9e57ab8518804417a7d2ca214d78cd744;hp=c85c479118bf80415c5c3b2a7997d5ec77d59714;hpb=ae27679f804a02ceaf7350f86232178849697917;p=kivitendo-erp.git diff --git a/SL/AM.pm b/SL/AM.pm index c85c47911..30b1d9301 100644 --- a/SL/AM.pm +++ b/SL/AM.pm @@ -40,7 +40,12 @@ package AM; use Carp; use Data::Dumper; use Encode; +use List::MoreUtils qw(any); use SL::DBUtils; +use SL::DB::AuthUser; +use SL::DB::Default; +use SL::DB::Employee; +use SL::GenericTranslations; use strict; @@ -207,14 +212,15 @@ sub save_account { # 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); + for (qw(AR_include_in_dropdown AP_include_in_dropdown summary_account)) { + $form->{$form->{$_}} = $form->{$_} if $form->{$_}; } - for (qw(AR_include_in_dropdown AP_include_in_dropdown)) { - $form->{$form->{$_}} = $form->{$_} if $form->{$_}; + # sanity check, can't have AR with AR_... + if ($form->{AR} || $form->{AP} || $form->{IC}) { + if (any { $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->error($::locale->text('It is not allowed that a summary account occurs in a drop-down menu!')); + } } $form->{link} = ""; @@ -476,16 +482,18 @@ sub delete_account { WHERE chart_id = ?|; do_query($form, $dbh, $query, $form->{id}); - # delete chart of account record - $query = qq|DELETE FROM chart - WHERE id = ?|; - do_query($form, $dbh, $query, $form->{id}); - # delete account taxkeys $query = qq|DELETE FROM taxkeys WHERE chart_id = ?|; do_query($form, $dbh, $query, $form->{id}); + # delete chart of account record + # last step delete chart, because we have a constraint + # to taxkeys + $query = qq|DELETE FROM chart + WHERE id = ?|; + do_query($form, $dbh, $query, $form->{id}); + # commit and redirect my $rc = $dbh->commit; $dbh->disconnect; @@ -990,7 +998,7 @@ sub prepare_template_filename { $filename =~ s|.*/||; } $display_filename = $filename; - $filename = "$myconfig->{templates}/$filename"; + $filename = SL::DB::Default->get->templates . "/$filename"; } $main::lxdebug->leave_sub(); @@ -1016,7 +1024,7 @@ sub load_template { close(TEMPLATE); } - $content = Encode::decode('utf-8-strict', $content) if $::locale->is_utf8; + $content = Encode::decode('utf-8-strict', $content); $main::lxdebug->leave_sub(); @@ -1033,7 +1041,7 @@ sub save_template { my $error = ""; if (open(TEMPLATE, ">", $filename)) { - $content = Encode::encode('utf-8-strict', $content) if $::locale->is_utf8; + $content = Encode::encode('utf-8-strict', $content); $content =~ s/\r\n/\n/g; print(TEMPLATE $content); close(TEMPLATE); @@ -1046,105 +1054,24 @@ sub save_template { return $error; } -sub save_defaults { - $main::lxdebug->enter_sub(); - - my $self = shift; - my %params = @_; - - my $myconfig = \%main::myconfig; - my $form = $main::form; - - my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); - - my %accnos; - map { ($accnos{$_}) = split(m/--/, $form->{$_}) } qw(inventory_accno income_accno expense_accno fxgain_accno fxloss_accno ar_paid_accno); - - $form->{curr} =~ s/ //g; - my @currencies = grep { $_ ne '' } split m/:/, $form->{curr}; - my $currency = join ':', @currencies; - - # these defaults are database wide - - my $query = - qq|UPDATE defaults SET - inventory_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - income_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - expense_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - fxgain_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - fxloss_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - ar_paid_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), - invnumber = ?, - cnnumber = ?, - sonumber = ?, - ponumber = ?, - sqnumber = ?, - rfqnumber = ?, - customernumber = ?, - vendornumber = ?, - articlenumber = ?, - servicenumber = ?, - assemblynumber = ?, - sdonumber = ?, - pdonumber = ?, - curr = ?, - businessnumber = ?, - weightunit = ?, - language_id = ?|; - my @values = ($accnos{inventory_accno}, $accnos{income_accno}, $accnos{expense_accno}, - $accnos{fxgain_accno}, $accnos{fxloss_accno}, $accnos{ar_paid_accno}, - $form->{invnumber}, $form->{cnnumber}, - $form->{sonumber}, $form->{ponumber}, - $form->{sqnumber}, $form->{rfqnumber}, - $form->{customernumber}, $form->{vendornumber}, - $form->{articlenumber}, $form->{servicenumber}, - $form->{assemblynumber}, - $form->{sdonumber}, $form->{pdonumber}, - $currency, - $form->{businessnumber}, $form->{weightunit}, - conv_i($form->{language_id})); - do_query($form, $dbh, $query, @values); - - $dbh->commit(); - - $main::lxdebug->leave_sub(); -} - - sub save_preferences { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; - - my $dbh = $form->get_standard_dbh($myconfig); - - my ($currency, $businessnumber) = selectrow_query($form, $dbh, qq|SELECT curr, businessnumber FROM defaults|); - - # update name - my $query = qq|UPDATE employee SET name = ? WHERE login = ?|; - do_query($form, $dbh, $query, $form->{name}, $form->{login}); - - my $rc = $dbh->commit(); + my ($self, $form) = @_; - # save first currency in myconfig - $currency =~ s/:.*//; - $form->{currency} = $currency; + my $employee = SL::DB::Manager::Employee->find_by(login => $form->{login}); + $employee->update_attributes(name => $form->{name}); - $form->{businessnumber} = $businessnumber; - - $myconfig = User->new(login => $form->{login}); - - foreach my $item (keys %$form) { - $myconfig->{$item} = $form->{$item}; - } - - $myconfig->save_member; - - my $auth = $main::auth; + my $user = SL::DB::Manager::AuthUser->find_by(login => $form->{login}); + $user->update_attributes( + config_values => { + %{ $user->config_values }, + map { ($_ => $form->{$_}) } SL::DB::AuthUser::CONFIG_VARS(), + }); $main::lxdebug->leave_sub(); - return $rc; + return 1; } sub get_defaults { @@ -1167,130 +1094,6 @@ sub get_defaults { return $defaults; } -sub defaultaccounts { - $main::lxdebug->enter_sub(); - - 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}; - $form->{defaults}{AR_paid} = $form->{defaults}{ar_paid_accno_id}; - - $form->{defaults}{weightunit} ||= 'kg'; - - $sth->finish; - - $query = qq|SELECT c.id, c.accno, c.description, c.link - FROM chart c - WHERE c.link LIKE '%IC%' - ORDER BY c.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/) { - my $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 c.id, c.accno, c.description - FROM chart c - WHERE c.category = 'I' - AND c.charttype = 'A' - ORDER BY c.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 c.id, c.accno, c.description - FROM chart c - WHERE c.category = 'E' - AND c.charttype = 'A' - ORDER BY c.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 c.id, c.accno, c.description, - t.rate * 100 AS rate, t.taxnumber - FROM chart c, tax t - WHERE c.id = t.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}; - } - # Abfrage für Standard Umlaufvermögenskonto - $query = - qq|SELECT id, accno, description, link | . - qq|FROM chart | . - qq|WHERE link LIKE ? |. - qq|ORDER BY accno|; - $sth = prepare_execute_query($form, $dbh, $query, '%AR%'); - $sth->execute || $form->dberror($query);# - while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { - foreach my $item (split(/:/, $ref->{link})) { - if ($item eq "AR_paid") { - %{ $form->{IC}{AR_paid}{ $ref->{accno} } } = ( - id => $ref->{id}, - description => $ref->{description} - ); - } - } - } - - $sth->finish; - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - sub closedto { $main::lxdebug->enter_sub(); @@ -1298,11 +1101,11 @@ sub closedto { my $dbh = $form->dbconnect($myconfig); - my $query = qq|SELECT closedto, revtrans FROM defaults|; + my $query = qq|SELECT closedto, max_future_booking_interval, revtrans FROM defaults|; my $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); - ($form->{closedto}, $form->{revtrans}) = $sth->fetchrow_array; + ($form->{closedto}, $form->{max_future_booking_interval}, $form->{revtrans}) = $sth->fetchrow_array; $sth->finish; @@ -1320,16 +1123,14 @@ sub closebooks { my ($query, @values); - if ($form->{revtrans}) { - $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|; - - } elsif ($form->{closedto}) { - $query = qq|UPDATE defaults SET closedto = ?, revtrans = '0'|; - @values = (conv_date($form->{closedto})); + # is currently NEVER trueish (no more hidden revtrans in $form) + # if ($form->{revtrans}) { + # $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|; + # -> therefore you can only set this to false (which is already the default) + # and this flag is currently only checked in gl.pl. TOOD Can probably be removed - } else { - $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '0'|; - } + $query = qq|UPDATE defaults SET closedto = ?, max_future_booking_interval = ?, revtrans = '0'|; + @values = (conv_date($form->{closedto}), conv_i($form->{max_future_booking_interval})); # set close in defaults do_query($form, $dbh, $query, @values); @@ -1843,7 +1644,7 @@ sub save_tax { $chart_categories .= 'E' if $form->{expense}; $chart_categories .= 'C' if $form->{costs}; - my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, $form->{chart_id}, $form->{chart_id}, $chart_categories); + my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, conv_i($form->{chart_id}), conv_i($form->{chart_id}), $chart_categories); if ($form->{id} ne "") { $query = qq|UPDATE tax SET taxkey = ?, @@ -1853,22 +1654,32 @@ sub save_tax { taxnumber = (SELECT accno FROM chart WHERE id= ? ), chart_categories = ? WHERE id = ?|; - push(@values, $form->{id}); } else { #ok + ($form->{id}) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('id')|); $query = qq|INSERT INTO tax ( taxkey, taxdescription, rate, chart_id, taxnumber, - chart_categories + chart_categories, + id ) - VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?), ? )|; + VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?), ?, ?)|; } + push(@values, $form->{id}); do_query($form, $dbh, $query, @values); + foreach my $language_id (keys %{ $form->{translations} }) { + GenericTranslations->save('dbh' => $dbh, + 'translation_type' => 'SL::DB::Tax/taxdescription', + 'translation_id' => $form->{id}, + 'language_id' => $language_id, + 'translation' => $form->{translations}->{$language_id}); + } + $dbh->commit(); $main::lxdebug->leave_sub(); @@ -1986,11 +1797,12 @@ sub save_warehouse { $form->{description}, $form->{invalid} ? 't' : 'f', conv_i($form->{id})); if (0 < $form->{number_of_new_bins}) { + my ($num_existing_bins) = selectfirst_array_query($form, $dbh, qq|SELECT COUNT(*) FROM bin WHERE warehouse_id = ?|, $form->{id}); $query = qq|INSERT INTO bin (warehouse_id, description) VALUES (?, ?)|; $sth = prepare_query($form, $dbh, $query); foreach my $i (1..$form->{number_of_new_bins}) { - do_statement($form, $sth, $query, conv_i($form->{id}), "$form->{prefix}${i}"); + do_statement($form, $sth, $query, conv_i($form->{id}), "$form->{prefix}" . ($i + $num_existing_bins)); } $sth->finish(); @@ -2100,14 +1912,14 @@ sub get_warehouse { map { $form->{$_} = $ref->{$_} } keys %{ $ref }; - $query = qq|SELECT b.*, EXISTS - (SELECT i.warehouse_id - FROM inventory i - WHERE i.bin_id = b.id - LIMIT 1) - AS in_use - FROM bin b - WHERE b.warehouse_id = ?|; + $query = <{BINS} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}));