X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIS.pm;h=3b031bd96f33c5ca3ea225715452eb7691324097;hb=47a963f4da66588e72124424e0e5e58577894eb5;hp=53de890e70f391495806dc25ea9ecc6f1612d189;hpb=dcaee5f7c66a5934bf8cf832ca10b12bd1e1fd4b;p=kivitendo-erp.git diff --git a/SL/IS.pm b/SL/IS.pm index 53de890e7..3b031bd96 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -46,6 +46,7 @@ use SL::GenericTranslations; use SL::MoreCommon; use SL::IC; use SL::IO; +use SL::TransNumber; use Data::Dumper; use strict; @@ -515,7 +516,7 @@ sub post_invoice { my ($self, $myconfig, $form, $provided_dbh, $payments_only) = @_; # connect to database, turn off autocommit - my $dbh = $provided_dbh ? $provided_dbh : $form->dbconnect_noauto($myconfig); + my $dbh = $provided_dbh ? $provided_dbh : $form->get_standard_dbh; my ($query, $sth, $null, $project_id, @values); my $exchangerate = 0; @@ -538,6 +539,9 @@ sub post_invoice { &reverse_invoice($dbh, $form); } else { + my $trans_number = SL::TransNumber->new(type => $form->{type}, dbh => $dbh, number => $form->{invnumber}, save => 1); + $form->{invnumber} = $trans_number->create_unique unless $trans_number->is_unique; + $query = qq|SELECT nextval('glid')|; ($form->{"id"}) = selectrow_query($form, $dbh, $query); @@ -1251,7 +1255,7 @@ sub cogs { my $transdate = $form->{invdate} ? $dbh->quote($form->{invdate}) : "current_date"; my $taxzone_id = $form->{"taxzone_id"} * 1; my $query = - qq|SELECT i.id, i.trans_id, i.base_qty, i.allocated, i.sellprice, + qq|SELECT i.id, i.trans_id, i.base_qty, i.allocated, i.sellprice, i.price_factor, c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from AS inventory_valid, c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from AS income_valid, c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from AS expense_valid @@ -1277,7 +1281,7 @@ sub cogs { # total expenses and inventory # sellprice is the cost of the item - my $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / ( $basefactor || 1 ), 2); + my $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / ( ($ref->{price_factor} || 1) * ( $basefactor || 1 )), 2); if (!$main::eur) { $ref->{expense_accno} = ($form->{"expense_accno_$row"}) ? $form->{"expense_accno_$row"} : $ref->{expense_accno}; @@ -1373,6 +1377,20 @@ sub delete_invoice { my @values = (conv_i($form->{id})); + # Falls wir ein Storno haben, müssen zwei Felder in der stornierten Rechnung wieder + # zurückgesetzt werden. Vgl: + # id | storno | storno_id | paid | amount + #----+--------+-----------+---------+----------- + # 18 | f | | 0.00000 | 119.00000 + # ZU: + # 18 | t | | 119.00000 | 119.00000 + # + if($form->{storno}){ + # storno_id auslesen und korrigieren + my ($invoice_id) = selectfirst_array_query($form, $dbh, qq|SELECT storno_id FROM ar WHERE id = ?|,@values); + do_query($form, $dbh, qq|UPDATE ar SET storno = 'f', paid = 0 WHERE id = ?|, $invoice_id); + } + # delete AR record do_query($form, $dbh, qq|DELETE FROM ar WHERE id = ?|, @values); @@ -2076,14 +2094,14 @@ sub get_pricegroups_for_parts { $pkr->{price} = $form->{"sellprice_$i"}; $pkr->{selected} = ' selected'; } - } - - if ($selectedpricegroup_id or $selectedpricegroup_id == 0) { + } else { if ($selectedpricegroup_id ne $pricegroup_old) { if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) { $pkr->{selected} = ' selected'; } - } elsif (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0)) { + } elsif ( ( $form->parse_amount($myconfig, $price_new) + != $form->parse_amount($myconfig, $form->{"sellprice_$i"})) + and ($price_new ne 0)) { if ($pkr->{pricegroup_id} == 0) { $pkr->{price} = $form->{"sellprice_$i"}; $pkr->{selected} = ' selected'; @@ -2159,4 +2177,21 @@ sub is_storno { return $result; } +sub get_standard_accno_current_assets { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form) = @_; + + my $dbh = $form->dbconnect($myconfig); + + my $query = qq| SELECT accno FROM chart WHERE id = (SELECT ar_paid_accno_id FROM defaults)|; + my ($result) = selectrow_query($form, $dbh, $query); + + $dbh->disconnect(); + + $main::lxdebug->leave_sub(); + + return $result; +} + 1;