X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIR.pm;h=48b2fd66271441c363792f84a10d817b3ebb6c20;hb=12f8fb507f7531f2e434214eb9a8c4d7a55c75d5;hp=aa2ed316ed94c0e4842f86746f5e6144d86b3134;hpb=bc40bcabc425b99f3b79a5544684a6fe8674adfe;p=kivitendo-erp.git diff --git a/SL/IR.pm b/SL/IR.pm index aa2ed316e..48b2fd662 100644 --- a/SL/IR.pm +++ b/SL/IR.pm @@ -47,17 +47,25 @@ use SL::IO; use SL::MoreCommon; use SL::DB::Default; use SL::DB::TaxZone; +use SL::DB; use List::Util qw(min); use strict; sub post_invoice { + my ($self, $myconfig, $form, $provided_dbh, $payments_only) = @_; $main::lxdebug->enter_sub(); + my $rc = SL::DB->client->with_transaction(\&_post_invoice, $self, $myconfig, $form, $provided_dbh, $payments_only); + + $::lxdebug->leave_sub; + return $rc; +} + +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 || SL::DB->client->dbh; my $restricter = SL::HTML::Restrict->create; $form->{defaultcurrency} = $form->get_default_currency($myconfig); @@ -418,7 +426,7 @@ SQL dbh => $dbh); # link previous items with invoice items See IS.pm (no credit note -> no invoice item) - foreach (qw(delivery_order_items orderitems)) { + foreach (qw(delivery_order_items orderitems invoice)) { if (!$form->{useasnew} && $form->{"converted_from_${_}_id_$i"}) { RecordLinks->create_links('dbh' => $dbh, 'mode' => 'ids', @@ -691,12 +699,7 @@ SQL $query = qq|UPDATE ap SET paid = ? WHERE id = ?|; do_query($form, $dbh, $query, $form->{paid}, conv_i($form->{id})); $form->new_lastmtime('ap'); - if (!$provided_dbh) { - $dbh->commit(); - $dbh->disconnect(); - } - $main::lxdebug->leave_sub(); return; } @@ -716,6 +719,7 @@ SQL invoice = ?, taxzone_id = ?, notes = ?, taxincluded = ?, intnotes = ?, storno_id = ?, storno = ?, cp_id = ?, employee_id = ?, department_id = ?, delivery_term_id = ?, + currency_id = (SELECT id FROM currencies WHERE name = ?), globalproject_id = ?, direct_debit = ? WHERE id = ?|; @values = ( @@ -725,6 +729,7 @@ SQL '1', $taxzone_id, $restricter->process($form->{notes}), $form->{taxincluded} ? 't' : 'f', $form->{intnotes}, conv_i($form->{storno_id}), $form->{storno} ? 't' : 'f', conv_i($form->{cp_id}), conv_i($form->{employee_id}), conv_i($form->{department_id}), conv_i($form->{delivery_term_id}), + $form->{"currency"}, conv_i($form->{globalproject_id}), $form->{direct_debit} ? 't' : 'f', conv_i($form->{id}) @@ -758,16 +763,18 @@ SQL Common::webdav_folder($form); - # Link this record to the records it was created from. - if ($form->{convert_from_oe_ids}) { - RecordLinks->create_links('dbh' => $dbh, - 'mode' => 'ids', - 'from_table' => 'oe', - 'from_ids' => $form->{convert_from_oe_ids}, - 'to_table' => 'ap', - 'to_id' => $form->{id}, + # Link this record to the records it was created from order or invoice (storno) + foreach (qw(oe ap)) { + if ($form->{"convert_from_${_}_ids"}) { + RecordLinks->create_links('dbh' => $dbh, + 'mode' => 'ids', + 'from_table' => $_, + 'from_ids' => $form->{"convert_from_${_}_ids"}, + 'to_table' => 'ap', + 'to_id' => $form->{id}, ); - delete $form->{convert_from_oe_ids}; + delete $form->{"convert_from_${_}_ids"}; + } } my @convert_from_do_ids = map { $_ * 1 } grep { $_ } split m/\s+/, $form->{convert_from_do_ids}; @@ -816,20 +823,11 @@ SQL $datev->export; if ($datev->errors) { - $dbh->rollback; die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors; } } - my $rc = 1; - if (!$provided_dbh) { - $rc = $dbh->commit(); - $dbh->disconnect(); - } - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub reverse_invoice { @@ -839,7 +837,7 @@ sub reverse_invoice { # reverse inventory items my $query = - qq|SELECT i.parts_id, p.inventory_accno_id, p.expense_accno_id, i.qty, i.allocated, i.sellprice + qq|SELECT i.parts_id, p.part_type, i.qty, i.allocated, i.sellprice FROM invoice i, parts p WHERE (i.parts_id = p.id) AND (i.trans_id = ?)|; @@ -850,7 +848,7 @@ sub reverse_invoice { while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { $netamount += $form->round_amount($ref->{sellprice} * $ref->{qty} * -1, 2); - next unless $ref->{inventory_accno_id}; + next unless $ref->{part_type} eq 'part'; # if $ref->{allocated} > 0 than we sold that many items next if ($ref->{allocated} <= 0); @@ -915,31 +913,30 @@ sub delete_invoice { my ($self, $myconfig, $form) = @_; my $query; # connect to database - my $dbh = $form->dbconnect_noauto($myconfig); - - &reverse_invoice($dbh, $form); + my $dbh = SL::DB->client->dbh; - my @values = (conv_i($form->{id})); + SL::DB->client->with_transaction(sub{ - # delete zero entries - # wtf? use case for this? - $query = qq|DELETE FROM acc_trans WHERE amount = 0|; - do_query($form, $dbh, $query); + &reverse_invoice($dbh, $form); + my @values = (conv_i($form->{id})); - my @queries = ( - qq|DELETE FROM invoice WHERE trans_id = ?|, - qq|DELETE FROM ap WHERE id = ?|, - ); + # delete zero entries + # wtf? use case for this? + $query = qq|DELETE FROM acc_trans WHERE amount = 0|; + do_query($form, $dbh, $query); - map { do_query($form, $dbh, $_, @values) } @queries; - my $rc = $dbh->commit; - $dbh->disconnect; + my @queries = ( + qq|DELETE FROM invoice WHERE trans_id = ?|, + qq|DELETE FROM ap WHERE id = ?|, + ); - $main::lxdebug->leave_sub(); + map { do_query($form, $dbh, $_, @values) } @queries; + 1; + }) or do { die SL::DB->client->error }; - return $rc; + return 1; } sub retrieve_invoice { @@ -948,7 +945,7 @@ sub retrieve_invoice { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my ($query, $sth, $ref, $q_invdate); @@ -980,7 +977,6 @@ sub retrieve_invoice { map { $form->{$_} = $ref->{$_} } keys %$ref; if (!$form->{id}) { - $dbh->disconnect(); $main::lxdebug->leave_sub(); return; @@ -1023,7 +1019,7 @@ sub retrieve_invoice { i.id AS invoice_id, i.description, i.longdescription, i.qty, i.fxsellprice AS sellprice, i.parts_id AS id, i.unit, i.deliverydate, i.project_id, i.serialnumber, i.price_factor_id, i.price_factor, i.marge_price_factor, i.discount, i.active_price_source, i.active_discount_source, - p.partnumber, p.inventory_accno_id AS part_inventory_accno_id, pr.projectnumber, pg.partsgroup + p.partnumber, p.part_type, pr.projectnumber, pg.partsgroup FROM invoice i JOIN parts p ON (i.parts_id = p.id) @@ -1047,8 +1043,7 @@ sub retrieve_invoice { ); map { $ref->{"ic_cvar_$_->{name}"} = $_->{value} } @{ $cvars }; - map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid)) if !$ref->{"part_inventory_accno_id"}; - delete($ref->{"part_inventory_accno_id"}); + map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid)) if !$ref->{"part_type"} eq 'part'; foreach my $type (qw(inventory income expense)) { while ($ref->{"${type}_new_chart"} && ($ref->{"${type}_valid"} >=0)) { @@ -1098,8 +1093,6 @@ sub retrieve_invoice { Common::webdav_folder($form); - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1111,7 +1104,7 @@ sub get_vendor { $params = $form unless defined $params && ref $params eq "HASH"; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my $dateformat = $myconfig->{dateformat}; $dateformat .= "yy" if $myconfig->{dateformat} !~ /^y/; @@ -1211,8 +1204,6 @@ sub get_vendor { $params->{rowcount} = $i if ($i && !$params->{type}); } - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1221,13 +1212,12 @@ sub retrieve_item { my ($self, $myconfig, $form) = @_; - # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my $i = $form->{rowcount}; # don't include assemblies or obsolete parts - my $where = "NOT p.assembly = '1' AND NOT p.obsolete = '1'"; + my $where = "NOT p.part_type = 'assembly' AND NOT p.obsolete = '1'"; my @values; foreach my $table_column (qw(p.partnumber p.description pg.partsgroup)) { @@ -1285,9 +1275,9 @@ sub retrieve_item { my $query = qq|SELECT p.id, p.partnumber, p.description, p.lastcost AS sellprice, p.listprice, - p.unit, p.assembly, p.onhand, p.formel, + p.unit, p.part_type, p.onhand, p.formel, p.notes AS partnotes, p.notes AS longdescription, p.not_discountable, - p.inventory_accno_id, p.price_factor_id, + p.price_factor_id, p.ean, pfac.factor AS price_factor, @@ -1427,8 +1417,6 @@ sub retrieve_item { map { $item->{"ic_cvar_" . $_->{name} } = $_->{value} } @{ $custom_variables }; } - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1437,8 +1425,7 @@ sub vendor_details { my ($self, $myconfig, $form, @wanted_vars) = @_; - # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my @values; @@ -1463,8 +1450,8 @@ sub vendor_details { LIMIT 1|; my $ref = selectfirst_hashref_query($form, $dbh, $query, $form->{vendor_id}, @values); - # remove id and taxincluded before copy back - delete @$ref{qw(id taxincluded)}; + # remove id,notes (double of vendornotes) and taxincluded before copy back + delete @$ref{qw(id taxincluded notes)}; @wanted_vars = grep({ $_ } @wanted_vars); if (scalar(@wanted_vars) > 0) { @@ -1484,8 +1471,6 @@ sub vendor_details { 'translation_type' => 'greetings::' . ($form->{cp_gender} eq 'f' ? 'female' : 'male'), 'allow_fallback' => 1); - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1494,8 +1479,7 @@ sub item_links { my ($self, $myconfig, $form) = @_; - # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my $query = qq|SELECT accno, description, link @@ -1515,8 +1499,6 @@ sub item_links { } $sth->finish(); - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1560,12 +1542,19 @@ sub _delete_payments { } sub post_payment { + my ($self, $myconfig, $form, $locale) = @_; $main::lxdebug->enter_sub(); + my $rc = SL::DB->client->with_transaction(\&_post_payment, $self, $myconfig, $form, $locale); + + $::lxdebug->leave_sub; + return $rc; +} + +sub _post_payment { my ($self, $myconfig, $form, $locale) = @_; - # connect to database, turn off autocommit - my $dbh = $form->dbconnect_noauto($myconfig); + my $dbh = SL::DB->client->dbh; my (%payments, $old_form, $row, $item, $query, %keep_vars); @@ -1621,12 +1610,7 @@ sub post_payment { restore_form($old_form); - my $rc = $dbh->commit(); - $dbh->disconnect(); - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub get_duedate {