X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAM.pm;h=cbbfae03f61b3735798cc46bf07a2b5738bf59df;hb=c51601f019f963dcdc875469514aa40802b5c574;hp=5764c6a3e329c118be330c49d7acc620d17d4934;hpb=5ea712a250510e49b93e8cc82b7426229bb890b6;p=kivitendo-erp.git diff --git a/SL/AM.pm b/SL/AM.pm index 5764c6a3e..cbbfae03f 100644 --- a/SL/AM.pm +++ b/SL/AM.pm @@ -45,6 +45,8 @@ use SL::DBUtils; use SL::DB::AuthUser; use SL::DB::Default; use SL::DB::Employee; +use SL::DB::Chart; +use SL::GenericTranslations; use strict; @@ -481,16 +483,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; @@ -736,236 +740,6 @@ sub delete_language { $main::lxdebug->leave_sub(); } - -sub buchungsgruppe { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|SELECT id, description, - inventory_accno_id, - (SELECT accno FROM chart WHERE id = inventory_accno_id) AS inventory_accno, - income_accno_id_0, - (SELECT accno FROM chart WHERE id = income_accno_id_0) AS income_accno_0, - expense_accno_id_0, - (SELECT accno FROM chart WHERE id = expense_accno_id_0) AS expense_accno_0, - income_accno_id_1, - (SELECT accno FROM chart WHERE id = income_accno_id_1) AS income_accno_1, - expense_accno_id_1, - (SELECT accno FROM chart WHERE id = expense_accno_id_1) AS expense_accno_1, - income_accno_id_2, - (SELECT accno FROM chart WHERE id = income_accno_id_2) AS income_accno_2, - expense_accno_id_2, - (select accno FROM chart WHERE id = expense_accno_id_2) AS expense_accno_2, - income_accno_id_3, - (SELECT accno FROM chart WHERE id = income_accno_id_3) AS income_accno_3, - expense_accno_id_3, - (SELECT accno FROM chart WHERE id = expense_accno_id_3) AS expense_accno_3 - FROM buchungsgruppen - ORDER BY sortkey|; - - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - $form->{ALL} = []; - while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { - push @{ $form->{ALL} }, $ref; - } - - $sth->finish; - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - -sub get_buchungsgruppe { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form) = @_; - my $query; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - if ($form->{id}) { - $query = - qq|SELECT description, inventory_accno_id, - (SELECT accno FROM chart WHERE id = inventory_accno_id) AS inventory_accno, - income_accno_id_0, - (SELECT accno FROM chart WHERE id = income_accno_id_0) AS income_accno_0, - expense_accno_id_0, - (SELECT accno FROM chart WHERE id = expense_accno_id_0) AS expense_accno_0, - income_accno_id_1, - (SELECT accno FROM chart WHERE id = income_accno_id_1) AS income_accno_1, - expense_accno_id_1, - (SELECT accno FROM chart WHERE id = expense_accno_id_1) AS expense_accno_1, - income_accno_id_2, - (SELECT accno FROM chart WHERE id = income_accno_id_2) AS income_accno_2, - expense_accno_id_2, - (select accno FROM chart WHERE id = expense_accno_id_2) AS expense_accno_2, - income_accno_id_3, - (SELECT accno FROM chart WHERE id = income_accno_id_3) AS income_accno_3, - expense_accno_id_3, - (SELECT accno FROM chart WHERE id = expense_accno_id_3) AS expense_accno_3 - FROM buchungsgruppen - WHERE id = ?|; - my $sth = $dbh->prepare($query); - $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})"); - - my $ref = $sth->fetchrow_hashref("NAME_lc"); - - map { $form->{$_} = $ref->{$_} } keys %$ref; - - $sth->finish; - - $query = - qq|SELECT count(id) = 0 AS orphaned - FROM parts - WHERE buchungsgruppen_id = ?|; - ($form->{orphaned}) = selectrow_query($form, $dbh, $query, $form->{id}); - } - - $query = "SELECT inventory_accno_id, income_accno_id, expense_accno_id ". - "FROM defaults"; - ($form->{"std_inventory_accno_id"}, $form->{"std_income_accno_id"}, - $form->{"std_expense_accno_id"}) = selectrow_query($form, $dbh, $query); - - my $module = "IC"; - $query = qq|SELECT c.accno, c.description, c.link, c.id, - d.inventory_accno_id, d.income_accno_id, d.expense_accno_id - FROM chart c, defaults d - WHERE c.link LIKE '%$module%' - ORDER BY c.accno|; - - - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { - foreach my $key (split(/:/, $ref->{link})) { - if (!$form->{"std_inventory_accno_id"} && ($key eq "IC")) { - $form->{"std_inventory_accno_id"} = $ref->{"id"}; - } - if ($key =~ /$module/) { - if ( ($ref->{id} eq $ref->{inventory_accno_id}) - || ($ref->{id} eq $ref->{income_accno_id}) - || ($ref->{id} eq $ref->{expense_accno_id})) { - push @{ $form->{"${module}_links"}{$key} }, - { accno => $ref->{accno}, - description => $ref->{description}, - selected => "selected", - id => $ref->{id} }; - } else { - push @{ $form->{"${module}_links"}{$key} }, - { accno => $ref->{accno}, - description => $ref->{description}, - selected => "", - id => $ref->{id} }; - } - } - } - } - $sth->finish; - - - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - -sub save_buchungsgruppe { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my @values = ($form->{description}, $form->{inventory_accno_id}, - $form->{income_accno_id_0}, $form->{expense_accno_id_0}, - $form->{income_accno_id_1}, $form->{expense_accno_id_1}, - $form->{income_accno_id_2}, $form->{expense_accno_id_2}, - $form->{income_accno_id_3}, $form->{expense_accno_id_3}); - - my $query; - - # id is the old record - if ($form->{id}) { - $query = qq|UPDATE buchungsgruppen SET - description = ?, inventory_accno_id = ?, - income_accno_id_0 = ?, expense_accno_id_0 = ?, - income_accno_id_1 = ?, expense_accno_id_1 = ?, - income_accno_id_2 = ?, expense_accno_id_2 = ?, - income_accno_id_3 = ?, expense_accno_id_3 = ? - WHERE id = ?|; - push(@values, $form->{id}); - } else { - $query = qq|SELECT COALESCE(MAX(sortkey) + 1, 1) FROM buchungsgruppen|; - my ($sortkey) = $dbh->selectrow_array($query); - $form->dberror($query) if ($dbh->err); - push(@values, $sortkey); - $query = qq|INSERT INTO buchungsgruppen - (description, inventory_accno_id, - income_accno_id_0, expense_accno_id_0, - income_accno_id_1, expense_accno_id_1, - income_accno_id_2, expense_accno_id_2, - income_accno_id_3, expense_accno_id_3, - sortkey) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|; - } - do_query($form, $dbh, $query, @values); - - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - -sub delete_buchungsgruppe { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - my $query = qq|DELETE FROM buchungsgruppen WHERE id = ?|; - do_query($form, $dbh, $query, $form->{id}); - - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - -sub swap_sortkeys { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form, $table) = @_; - - # connect to database - my $dbh = $form->get_standard_dbh($myconfig); - - my $query = - qq|SELECT - (SELECT sortkey FROM $table WHERE id = ?) AS sortkey1, - (SELECT sortkey FROM $table WHERE id = ?) AS sortkey2|; - my @values = ($form->{"id1"}, $form->{"id2"}); - my @sortkeys = selectrow_query($form, $dbh, $query, @values); - - $query = qq|UPDATE $table SET sortkey = ? WHERE id = ?|; - my $sth = prepare_query($form, $dbh, $query); - - do_statement($form, $sth, $query, $sortkeys[1], $form->{"id1"}); - do_statement($form, $sth, $query, $sortkeys[0], $form->{"id2"}); - - $sth->finish(); - - $dbh->commit(); - - $main::lxdebug->leave_sub(); -} - sub prepare_template_filename { $main::lxdebug->enter_sub(); @@ -1056,12 +830,13 @@ sub save_preferences { my ($self, $form) = @_; - my $employee = SL::DB::Manager::Employee->find_by(login => $form->{login}); + my $employee = SL::DB::Manager::Employee->find_by(login => $::myconfig{login}); $employee->update_attributes(name => $form->{name}); - my $user = SL::DB::Manager::AuthUser->find_by(login => $form->{login}); + my $user = SL::DB::Manager::AuthUser->find_by(login => $::myconfig{login}); $user->update_attributes( config_values => { + %{ $user->config_values }, map { ($_ => $form->{$_}) } SL::DB::AuthUser::CONFIG_VARS(), }); @@ -1119,16 +894,14 @@ sub closebooks { my ($query, @values); - if ($form->{revtrans}) { - $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|; + # 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 - } elsif ($form->{closedto}) { $query = qq|UPDATE defaults SET closedto = ?, max_future_booking_interval = ?, revtrans = '0'|; - @values = (conv_date($form->{closedto}), conv_date($form->{max_future_booking_interval})); - - } else { - $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '0'|; - } + @values = (conv_date($form->{closedto}), conv_i($form->{max_future_booking_interval})); # set close in defaults do_query($form, $dbh, $query, @values); @@ -1409,7 +1182,7 @@ sub sum_with_unit { $main::lxdebug->leave_sub(); - return wantarray ? ($sum, $base_unit) : $sum; + return $sum; } sub add_unit { @@ -1514,7 +1287,11 @@ sub taxes { t.taxdescription, round(t.rate * 100, 2) AS rate, (SELECT accno FROM chart WHERE id = chart_id) AS taxnumber, - (SELECT description FROM chart WHERE id = chart_id) AS account_description + (SELECT description FROM chart WHERE id = chart_id) AS account_description, + (SELECT accno FROM chart WHERE id = skonto_sales_chart_id) AS skonto_chart_accno, + (SELECT description FROM chart WHERE id = skonto_sales_chart_id) AS skonto_chart_description, + (SELECT accno FROM chart WHERE id = skonto_purchase_chart_id) AS skonto_chart_purchase_accno, + (SELECT description FROM chart WHERE id = skonto_purchase_chart_id) AS skonto_chart_purchase_description FROM tax t ORDER BY taxkey, rate|; @@ -1556,6 +1333,17 @@ sub get_tax_accounts { push @{ $form->{ACCOUNTS} }, $ref; } + $form->{AR_PAID} = SL::DB::Manager::Chart->get_all(where => [ link => { like => '%AR_paid%' } ], sort_by => 'accno ASC'); + $form->{AP_PAID} = SL::DB::Manager::Chart->get_all(where => [ link => { like => '%AP_paid%' } ], sort_by => 'accno ASC'); + + $form->{skontochart_value_title_sub} = sub { + my $item = shift; + return [ + $item->{id}, + $item->{accno} .' '. $item->{description}, + ]; + }; + $sth->finish; $dbh->disconnect; @@ -1578,7 +1366,9 @@ sub get_tax { chart_id, chart_categories, (id IN (SELECT tax_id - FROM acc_trans)) AS tax_already_used + FROM acc_trans)) AS tax_already_used, + skonto_sales_chart_id, + skonto_purchase_chart_id FROM tax WHERE id = ? |; @@ -1642,32 +1432,46 @@ 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}), conv_i($form->{skonto_sales_chart_id}), conv_i($form->{skonto_purchase_chart_id}), $chart_categories); if ($form->{id} ne "") { $query = qq|UPDATE tax SET - taxkey = ?, - taxdescription = ?, - rate = ?, - chart_id = ?, - taxnumber = (SELECT accno FROM chart WHERE id= ? ), - chart_categories = ? + taxkey = ?, + taxdescription = ?, + rate = ?, + chart_id = ?, + taxnumber = (SELECT accno FROM chart WHERE id = ? ), + skonto_sales_chart_id = ?, + skonto_purchase_chart_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 + skonto_sales_chart_id, + skonto_purchase_chart_id, + 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(); @@ -1900,15 +1704,14 @@ sub get_warehouse { map { $form->{$_} = $ref->{$_} } keys %{ $ref }; - $query = qq|SELECT b.*, EXISTS - (SELECT i.warehouse_id, p.warehouse_id - FROM inventory i, parts p - WHERE i.bin_id = b.id - OR p.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}));