X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIR.pm;h=3498bf0bff1672cfb5e77a4a1ccd0dfed102c313;hb=c7b0defb2a90a8eaa28b9e58ac3c108c27375a77;hp=ae3e45b09d49f07b98580ae5fa1fd6f3ac98b107;hpb=8c1d5d7530f3a1c923ee470b7ff31616800a8574;p=kivitendo-erp.git diff --git a/SL/IR.pm b/SL/IR.pm index ae3e45b09..3498bf0bf 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 { @@ -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; @@ -1098,8 +1094,6 @@ sub retrieve_invoice { Common::webdav_folder($form); - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1111,7 +1105,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 +1205,6 @@ sub get_vendor { $params->{rowcount} = $i if ($i && !$params->{type}); } - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1221,8 +1213,7 @@ 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}; @@ -1234,7 +1225,7 @@ sub retrieve_item { my $field = (split m{\.}, $table_column)[1]; next unless $form->{"${field}_${i}"}; $where .= " AND lower(${table_column}) LIKE lower(?)"; - push @values, '%' . $form->{"${field}_${i}"} . '%'; + push @values, like($form->{"${field}_${i}"}); } my (%mm_by_id); @@ -1248,7 +1239,7 @@ sub retrieve_item { LEFT JOIN parts ON parts.id = parts_id WHERE NOT parts.obsolete AND model ILIKE ? AND (make IS NULL OR make = ?); |; - my $mm_results = selectall_hashref_query($::form, $dbh, $mm_query, '%' . $form->{"partnumber_$i"} . '%', $::form->{vendor_id}); + my $mm_results = selectall_hashref_query($::form, $dbh, $mm_query, like($form->{"partnumber_$i"}), $::form->{vendor_id}); my @mm_ids = map { $_->{parts_id} } @$mm_results; push @{$mm_by_id{ $_->{parts_id} } ||= []}, $_ for @$mm_results; @@ -1427,8 +1418,6 @@ sub retrieve_item { map { $item->{"ic_cvar_" . $_->{name} } = $_->{value} } @{ $custom_variables }; } - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1437,8 +1426,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 +1451,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 +1472,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 +1480,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 +1500,6 @@ sub item_links { } $sth->finish(); - $dbh->disconnect(); - $main::lxdebug->leave_sub(); } @@ -1560,12 +1543,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 +1611,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 {