X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDO.pm;h=15f1c8d0825c1f4b3ef97c5c4a806585c7f40179;hb=b167020e55e1fed6e66654f5ae397a91b580a7be;hp=e47b5d11695dfecd3f1d0185ba0aadcb9f7f3bb4;hpb=fe6275f8eff9e0bab568cb6eba5ed70662148a88;p=kivitendo-erp.git diff --git a/SL/DO.pm b/SL/DO.pm index e47b5d116..15f1c8d08 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -39,6 +39,8 @@ use YAML; use SL::AM; use SL::Common; use SL::CVar; +use SL::DB::DeliveryOrder; +use SL::DB::Status; use SL::DBUtils; use SL::RecordLinks; use SL::IC; @@ -229,7 +231,7 @@ sub save { $query = qq|SELECT nextval('id')|; ($form->{id}) = selectrow_query($form, $dbh, $query); - $query = qq|INSERT INTO delivery_orders (id, donumber, employee_id) VALUES (?, '', ?)|; + $query = qq|INSERT INTO delivery_orders (id, donumber, employee_id, currency_id) VALUES (?, '', ?, (SELECT currency_id FROM defaults LIMIT 1))|; do_query($form, $dbh, $query, $form->{id}, conv_i($form->{employee_id})); } @@ -350,7 +352,7 @@ sub save { shippingpoint = ?, shipvia = ?, notes = ?, intnotes = ?, closed = ?, delivered = ?, department_id = ?, language_id = ?, shipto_id = ?, globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ?, transaction_description = ?, - is_sales = ?, taxzone_id = ?, taxincluded = ?, terms = ?, curr = ? + is_sales = ?, taxzone_id = ?, taxincluded = ?, terms = ?, currency_id = (SELECT id FROM currencies WHERE name = ?) WHERE id = ?|; @values = ($form->{donumber}, $form->{ordnumber}, @@ -364,7 +366,7 @@ sub save { conv_i($form->{salesman_id}), conv_i($form->{cp_id}), $form->{transaction_description}, $form->{type} =~ /^sales/ ? 't' : 'f', - conv_i($form->{taxzone_id}), $form->{taxincluded} ? 't' : 'f', conv_i($form->{terms}), substr($form->{currency}, 0, 3), + conv_i($form->{taxzone_id}), $form->{taxincluded} ? 't' : 'f', conv_i($form->{terms}), $form->{currency}, conv_i($form->{id})); do_query($form, $dbh, $query, @values); @@ -507,59 +509,16 @@ sub delete { my $form = $main::form; my $spool = $::lx_office_conf{paths}->{spool}; - # connect to database - my $dbh = $form->get_standard_dbh($myconfig); - - # delete spool files - my $query = qq|SELECT s.spoolfile FROM status s WHERE s.trans_id = ?|; - my $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id})); - - my $spoolfile; - my @spoolfiles = (); - my @values; - - while (($spoolfile) = $sth->fetchrow_array) { - push @spoolfiles, $spoolfile; - } - $sth->finish(); - - # delete-values - @values = (conv_i($form->{id})); + my $rc = SL::DB::Order->new->db->with_transaction(sub { + my @spoolfiles = grep { $_ } map { $_->spoolfile } @{ SL::DB::Manager::Status->get_all(where => [ trans_id => $form->{id} ]) }; - # delete status entries - $query = qq|DELETE FROM status - WHERE trans_id = ?|; - do_query($form, $dbh, $query, @values); + SL::DB::DeliveryOrder->new(id => $form->{id})->delete; - # delete individual entries - $query = qq|DELETE FROM delivery_order_items_stock - WHERE delivery_order_item_id IN ( - SELECT id FROM delivery_order_items - WHERE delivery_order_id = ? - )|; - do_query($form, $dbh, $query, @values); + my $spool = $::lx_office_conf{paths}->{spool}; + unlink map { "$spool/$_" } @spoolfiles if $spool; - # delete individual entries - $query = qq|DELETE FROM delivery_order_items - WHERE delivery_order_id = ?|; - do_query($form, $dbh, $query, @values); - - # delete DO record - $query = qq|DELETE FROM delivery_orders - WHERE id = ?|; - do_query($form, $dbh, $query, @values); - - $query = qq|DELETE FROM shipto - WHERE trans_id = ? AND module = 'DO'|; - do_query($form, $dbh, $query, @values); - - my $rc = $dbh->commit(); - - if ($rc) { - foreach $spoolfile (@spoolfiles) { - unlink "$spool/$spoolfile" if $spoolfile; - } - } + 1; + }); $main::lxdebug->leave_sub(); @@ -618,7 +577,7 @@ sub retrieve { d.description AS department, dord.language_id, dord.shipto_id, dord.globalproject_id, dord.delivered, dord.transaction_description, - dord.taxzone_id, dord.taxincluded, dord.terms, dord.curr AS currency + dord.taxzone_id, dord.taxincluded, dord.terms, (SELECT cu.name FROM currencies cu WHERE cu.id=dord.currency_id) AS currency FROM delivery_orders dord JOIN ${vc} cv ON (dord.${vc}_id = cv.id) LEFT JOIN employee e ON (dord.employee_id = e.id) @@ -640,9 +599,6 @@ sub retrieve { } $sth->finish(); - # remove any trailing whitespace - $form->{currency} =~ s/\s*$//; - $form->{donumber_array} =~ s/\s*$//g; $form->{saved_donumber} = $form->{donumber}; @@ -675,16 +631,13 @@ sub retrieve { delete $form->{id}; } - my %oid = ('Pg' => 'oid', - 'Oracle' => 'rowid'); - # retrieve individual items # this query looks up all information about the items # stuff different from the whole will not be overwritten, but saved with a suffix. $query = qq|SELECT doi.id AS delivery_order_items_id, p.partnumber, p.assembly, p.listprice, doi.description, doi.qty, - doi.sellprice, doi.parts_id AS id, doi.unit, doi.discount, p.bin, p.notes AS partnotes, + doi.sellprice, doi.parts_id AS id, doi.unit, doi.discount, p.notes AS partnotes, doi.reqdate, doi.project_id, doi.serialnumber, doi.lastcost, doi.ordnumber, doi.transdate, doi.cusordnumber, doi.longdescription, doi.price_factor_id, doi.price_factor, doi.marge_price_factor, doi.pricegroup_id, @@ -696,7 +649,7 @@ sub retrieve { LEFT JOIN project pr ON (doi.project_id = pr.id) LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) WHERE doi.delivery_order_id IN ($do_ids_placeholders) - ORDER BY doi.$oid{$myconfig->{dbdriver}}|; + ORDER BY doi.oid|; $form->{form_details} = selectall_hashref_query($form, $dbh, $query, @do_ids); @@ -755,9 +708,6 @@ sub order_details { my $partsgroup; my $position = 0; - my %oid = ('Pg' => 'oid', - 'Oracle' => 'rowid'); - my (@project_ids, %projectnumbers, %projectdescriptions); push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"}); @@ -872,9 +822,9 @@ sub order_details { my $sortorder = ""; if ($form->{groupitems}) { $sortorder = - qq|ORDER BY pg.partsgroup, a.$oid{$myconfig->{dbdriver}}|; + qq|ORDER BY pg.partsgroup, a.oid|; } else { - $sortorder = qq|ORDER BY a.$oid{$myconfig->{dbdriver}}|; + $sortorder = qq|ORDER BY a.oid|; } do_statement($form, $h_pg, $q_pg, conv_i($form->{"id_$i"}));