X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIS.pm;h=8700c4831b0363a207807804058db429c57a29d7;hb=0e60202e4d9de0e0377e63fccc3a2f93e68bd24f;hp=a9a115de03b41233ed86d4048a74dbcbe3ca021a;hpb=2517d8406ff377726249e7e71c65d43f378510d4;p=kivitendo-erp.git diff --git a/SL/IS.pm b/SL/IS.pm index a9a115de0..8700c4831 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; @@ -519,17 +521,23 @@ sub invoice_details { $form->{nodiscount} = $form->format_amount($myconfig, $nodiscount, 2); $form->{yesdiscount} = $form->format_amount($myconfig, $form->{nodiscount_total} - $nodiscount, 2); - $form->{invtotal} = ($form->{taxincluded}) ? $form->{total} : $form->{total} + $tax; - $form->{total} = $form->format_amount($myconfig, $form->{invtotal} - $form->{paid}, 2); + my $grossamount = ($form->{taxincluded}) ? $form->{total} : $form->{total} + $tax; + $form->{invtotal} = $form->round_amount($grossamount, 2, 1); + $form->{rounding} = $form->round_amount( + $form->{invtotal} - $form->round_amount($grossamount, 2), + 2 + ); + $form->{rounding} = $form->format_amount($myconfig, $form->{rounding}, 2); + $form->{total} = $form->format_amount($myconfig, $form->{invtotal} - $form->{paid}, 2); $form->{invtotal} = $form->format_amount($myconfig, $form->{invtotal}, 2); $form->{paid} = $form->format_amount($myconfig, $form->{paid}, 2); - $form->set_payment_options($myconfig, $form->{invdate}); + $form->set_payment_options($myconfig, $form->{invdate}, 'sales_invoice'); + $form->{department} = SL::DB::Manager::Department->find_by(id => $form->{department_id})->description if $form->{department_id}; $form->{delivery_term} = SL::DB::Manager::DeliveryTerm->find_by(id => $form->{delivery_term_id} || undef); $form->{delivery_term}->description_long($form->{delivery_term}->translated_attribute('description_long', $form->{language_id})) if $form->{delivery_term} && $form->{language_id}; - $form->{department} = SL::DB::Manager::Department->find_by(id => $form->{department_id})->description if $form->{department_id}; $form->{username} = $myconfig->{name}; @@ -600,8 +608,8 @@ sub customer_details { $ref->{cp_gender} = $contact->cp_gender; } } - # remove id and taxincluded before copy back - delete @$ref{qw(id taxincluded)}; + # remove id,notes (double of customernotes) and taxincluded before copy back + delete @$ref{qw(id taxincluded notes)}; @wanted_vars = grep({ $_ } @wanted_vars); if (scalar(@wanted_vars) > 0) { @@ -649,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); @@ -1251,9 +1266,6 @@ SQL $form->new_lastmtime('ar'); - $dbh->commit if !$provided_dbh; - - $main::lxdebug->leave_sub(); return; } @@ -1306,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//; @@ -1389,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 { @@ -1483,7 +1492,7 @@ sub _determine_wh_and_bin { parts_id => $part->id, bin_id => $bin_id); if ($error == 1) { - push @errors, $::locale->text('Part "#1" has chargenumber or best before date set. So it cannot be transfered automaticaly.', + push @errors, $::locale->text('Part "#1" has chargenumber or best before date set. So it cannot be transfered automatically.', $part->description); } my $form_unit_obj = SL::DB::Unit->new(name => $unit)->load; @@ -1571,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); @@ -1632,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 { @@ -1645,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 = ?)|; @@ -1786,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 = ?|; @@ -1834,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}); @@ -1872,25 +1890,26 @@ sub delete_invoice { map { do_query($form, $dbh, $_, @values) } @queries; - my $rc = $dbh->commit; - - if ($rc) { - my $spool = $::lx_office_conf{paths}->{spool}; - map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; - } - - $main::lxdebug->leave_sub(); + my $spool = $::lx_office_conf{paths}->{spool}; + map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; - 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); @@ -1984,7 +2003,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 @@ -2077,11 +2096,7 @@ sub retrieve_invoice { Common::webdav_folder($form); } - my $rc = $dbh->commit; - - $main::lxdebug->leave_sub(); - - return $rc; + return 1; } sub get_customer { @@ -2106,7 +2121,7 @@ sub get_customer { c.id AS customer_id, c.name AS customer, c.discount as customer_discount, c.creditlimit, c.email, c.cc, c.bcc, c.language_id, c.payment_id, c.delivery_term_id, c.street, c.zipcode, c.city, c.country, - c.notes AS intnotes, c.klass as customer_klass, c.taxzone_id, c.salesman_id, cu.name AS curr, + c.notes AS intnotes, c.pricegroup_id as customer_pricegroup_id, c.taxzone_id, c.salesman_id, cu.name AS curr, c.taxincluded_checked, c.direct_debit, b.discount AS tradediscount, b.description AS business FROM customer c @@ -2284,7 +2299,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, @@ -2299,7 +2314,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,