X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FIS.pm;h=2f0896ecb4b1101c2edffa83653616fcb7c0ae48;hb=f1c3810f3ed25965f708ec96ac806bcac1b14bb7;hp=d7ba6b563ce40ced435302b50c2e2618ac990f05;hpb=7349649bae8d80eabfd253592d59f8455f9ef6b0;p=kivitendo-erp.git diff --git a/SL/IS.pm b/SL/IS.pm index d7ba6b563..2f0896ecb 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -25,7 +25,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # Inventory invoicing module @@ -54,6 +55,7 @@ use SL::DB::Default; use SL::DB::Tax; use SL::DB::TaxZone; use SL::TransNumber; +use SL::DB; use Data::Dumper; use strict; @@ -655,12 +657,19 @@ sub customer_details { } 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->get_standard_dbh; + my $dbh = $provided_dbh || SL::DB->client->dbh; my $restricter = SL::HTML::Restrict->create; my ($query, $sth, $null, $project_id, @values); @@ -1257,9 +1266,6 @@ SQL $form->new_lastmtime('ar'); - $dbh->commit if !$provided_dbh; - - $main::lxdebug->leave_sub(); return; } @@ -1312,7 +1318,10 @@ SQL do_query($form, $dbh, qq|UPDATE ar SET paid = amount WHERE id = ?|, conv_i($form->{"id"})); } - $form->new_lastmtime('ar'); + # maybe we are in a larger transaction and the current + # object is not yet persistent in the db, therefore we + # need the current dbh to get the not yet committed mtime + $form->new_lastmtime('ar', $provided_dbh); $form->{name} = $form->{customer}; $form->{name} =~ s/--\Q$form->{customer_id}\E//; @@ -1395,17 +1404,11 @@ SQL $datev->export; if ($datev->errors) { - $dbh->rollback; die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors; } } - my $rc = 1; - $dbh->commit if !$provided_dbh; - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub transfer_out { @@ -1577,12 +1580,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->get_standard_dbh; + my $dbh = SL::DB->client->dbh; my (%payments, $old_form, $row, $item, $query, %keep_vars); @@ -1638,11 +1648,7 @@ sub post_payment { restore_form($old_form); - my $rc = $dbh->commit(); - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub process_assembly { @@ -1651,8 +1657,7 @@ sub process_assembly { my ($dbh, $myconfig, $form, $position, $id, $totalqty) = @_; my $query = - qq|SELECT a.parts_id, a.qty, p.assembly, p.partnumber, p.description, p.unit, - p.inventory_accno_id, p.income_accno_id, p.expense_accno_id + qq|SELECT a.parts_id, a.qty, p.part_type, p.partnumber, p.description, p.unit FROM assembly a JOIN parts p ON (a.parts_id = p.id) WHERE (a.id = ?)|; @@ -1792,7 +1797,7 @@ sub reverse_invoice { # reverse inventory items my $query = - qq|SELECT i.id, i.parts_id, i.qty, i.assemblyitem, p.assembly, p.inventory_accno_id + qq|SELECT i.id, i.parts_id, i.qty, i.assemblyitem, p.part_type FROM invoice i JOIN parts p ON (i.parts_id = p.id) WHERE i.trans_id = ?|; @@ -1840,12 +1845,19 @@ sub reverse_invoice { } sub delete_invoice { + my ($self, $myconfig, $form) = @_; $main::lxdebug->enter_sub(); + my $rc = SL::DB->client->with_transaction(\&_delete_invoice, $self, $myconfig, $form); + + $::lxdebug->leave_sub; + return $rc; +} + +sub _delete_invoice { my ($self, $myconfig, $form) = @_; - # connect to database - my $dbh = $form->get_standard_dbh; + my $dbh = SL::DB->client->dbh; &reverse_invoice($dbh, $form); _delete_transfers($dbh, $form, $form->{id}); @@ -1878,25 +1890,26 @@ sub delete_invoice { map { do_query($form, $dbh, $_, @values) } @queries; - my $rc = $dbh->commit; + my $spool = $::lx_office_conf{paths}->{spool}; + map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; - if ($rc) { - my $spool = $::lx_office_conf{paths}->{spool}; - map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; - } - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub retrieve_invoice { + my ($self, $myconfig, $form) = @_; $main::lxdebug->enter_sub(); + my $rc = SL::DB->client->with_transaction(\&_retrieve_invoice, $self, $myconfig, $form); + + $::lxdebug->leave_sub; + return $rc; +} + +sub _retrieve_invoice { my ($self, $myconfig, $form) = @_; - # connect to database - my $dbh = $form->get_standard_dbh; + my $dbh = SL::DB->client->dbh; my ($sth, $ref, $query); @@ -1956,8 +1969,7 @@ sub retrieve_invoice { # get shipto $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module = 'AR')|; $ref = selectfirst_hashref_query($form, $dbh, $query, $id); - delete($ref->{id}); - map { $form->{$_} = $ref->{$_} } keys %$ref; + $form->{$_} = $ref->{$_} for grep { m{^shipto(?!_id$)} } keys %$ref; # get printed, emailed $query = qq|SELECT printed, emailed, spoolfile, formname FROM status WHERE trans_id = ?|; @@ -1990,7 +2002,7 @@ sub retrieve_invoice { i.description, i.longdescription, i.qty, i.fxsellprice AS sellprice, i.discount, i.parts_id AS id, i.unit, i.deliverydate AS reqdate, i.project_id, i.serialnumber, i.pricegroup_id, i.ordnumber, i.donumber, i.transdate, i.cusordnumber, i.subtotal, i.lastcost, i.price_factor_id, i.price_factor, i.marge_price_factor, i.active_price_source, i.active_discount_source, - p.partnumber, p.assembly, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id, p.formel, p.listprice, + p.partnumber, p.part_type, p.notes AS partnotes, p.formel, p.listprice, pr.projectnumber, pg.partsgroup, prg.pricegroup FROM invoice i @@ -2083,11 +2095,7 @@ sub retrieve_invoice { Common::webdav_folder($form); } - my $rc = $dbh->commit; - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub get_customer { @@ -2290,7 +2298,7 @@ sub retrieve_item { my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice, - p.listprice, p.inventory_accno_id, p.lastcost, + p.listprice, p.part_type, p.lastcost, p.ean, p.notes, c1.accno AS inventory_accno, @@ -2305,7 +2313,7 @@ sub retrieve_item { c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from AS expense_valid, - p.unit, p.assembly, p.onhand, + p.unit, p.part_type, p.onhand, p.notes AS partnotes, p.notes AS longdescription, p.not_discountable, p.formel, p.payment_id AS part_payment_id, p.price_factor_id, p.weight,