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;
push @where, ($form->{delivered} ? "" : "NOT ") . "COALESCE(dord.delivered, FALSE)";
}
+ if ($form->{serialnumber}) {
+ push @where, 'dord.id IN (SELECT doi.delivery_order_id FROM delivery_order_items doi WHERE doi.serialnumber LIKE ?)';
+ push @values, '%' . $form->{serialnumber} . '%';
+ }
+
if($form->{transdatefrom}) {
push @where, qq|dord.transdate >= ?|;
push @values, conv_date($form->{transdatefrom});
push @values, conv_date($form->{transdateto});
}
+ if($form->{reqdatefrom}) {
+ push @where, qq|dord.reqdate >= ?|;
+ push @values, conv_date($form->{reqdatefrom});
+ }
+
+ if($form->{reqdateto}) {
+ push @where, qq|dord.reqdate <= ?|;
+ push @values, conv_date($form->{reqdateto});
+ }
+
if (@where) {
$query .= " WHERE " . join(" AND ", map { "($_)" } @where);
}
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}));
-
- # delete status entries
- $query = qq|DELETE FROM status
- WHERE trans_id = ?|;
- do_query($form, $dbh, $query, @values);
-
- # 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);
-
- # delete individual entries
- $query = qq|DELETE FROM delivery_order_items
- WHERE delivery_order_id = ?|;
- do_query($form, $dbh, $query, @values);
+ 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 DO record
- $query = qq|DELETE FROM delivery_orders
- WHERE id = ?|;
- do_query($form, $dbh, $query, @values);
+ SL::DB::DeliveryOrder->new(id => $form->{id})->delete;
- $query = qq|DELETE FROM shipto
- WHERE trans_id = ? AND module = 'DO'|;
- do_query($form, $dbh, $query, @values);
+ my $spool = $::lx_office_conf{paths}->{spool};
+ unlink map { "$spool/$_" } @spoolfiles if $spool;
- my $rc = $dbh->commit();
-
- if ($rc) {
- foreach $spoolfile (@spoolfiles) {
- unlink "$spool/$spoolfile" if $spoolfile;
- }
- }
+ 1;
+ });
$main::lxdebug->leave_sub();
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,
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);
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"});
qw(runningnumber number description longdescription qty unit
partnotes serialnumber reqdate projectnumber projectdescription
si_runningnumber si_number si_description
- si_warehouse si_bin si_chargenumber si_bestbefore si_qty si_unit);
+ si_warehouse si_bin si_chargenumber si_bestbefore si_qty si_unit weight lineweight);
map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays);
$form->get_lists('price_factors' => 'ALL_PRICE_FACTORS');
my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} };
+ my $totalweight = 0;
my $sameitem = "";
foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) {
$i = $item->[0];
push @{ $form->{TEMPLATE_ARRAYS}{projectdescription} },
$projectdescriptions{$form->{"project_id_$i"}};
+ my $lineweight = $form->{"qty_$i"} * $form->{"weight_$i"};
+ $totalweight += $lineweight;
+ push @{ $form->{TEMPLATE_ARRAYS}->{weight} }, $form->format_amount($myconfig, $form->{"weight_$i"}, 3);
+ push @{ $form->{TEMPLATE_ARRAYS}->{weight_nofmt} }, $form->{"weight_$i"};
+ push @{ $form->{TEMPLATE_ARRAYS}->{lineweight} }, $form->format_amount($myconfig, $lineweight, 3);
+ push @{ $form->{TEMPLATE_ARRAYS}->{lineweight_nofmt} }, $lineweight;
+
if ($form->{"assembly_$i"}) {
$sameitem = "";
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"}));
for @{ $ic_cvar_configs };
}
+ $form->{totalweight} = $form->format_amount($myconfig, $totalweight, 3);
+ $form->{totalweight_nofmt} = $totalweight;
+ my $defaults = AM->get_defaults();
+ $form->{weightunit} = $defaults->{weightunit};
+
$h_pg->finish();
$h_bin_wh->finish();