use SL::HTML::Restrict;
use SL::TransNumber;
use SL::Util qw(trim);
+use SL::DB;
use strict;
$form->{lastmtime} = $form->{mtime};
$form->{onhand} *= 1;
+ die "part needs a part_type" unless $form->{part_type}; # TODO from part_type enum conversion
# part or service item
- $form->{item} = ($form->{inventory_accno}) ? 'part' : 'service';
- if ($form->{assembly}) {
- $form->{item} = 'assembly';
+ $form->{item} = $form->{part_type};
+ if ($form->{item} eq 'assembly') {
# retrieve assembly items
$query =
}
sub save {
+ my ($self, $myconfig, $form) = @_;
$main::lxdebug->enter_sub();
+ my $rc = SL::DB->client->with_transaction(\&_save, $self, $myconfig, $form);
+
+ $main::lxdebug->leave_sub();
+ return $rc;
+}
+
+sub _save {
my ($self, $myconfig, $form) = @_;
my @values;
- # connect to database, turn off AutoCommit
- my $dbh = $form->get_standard_dbh;
+
+ my $dbh = SL::DB->client->dbh;
my $restricter = SL::HTML::Restrict->create;
# save the part
my $makemodel = ($form->{make_1} || $form->{model_1} || ($form->{makemodel_rows} > 1)) ? 1 : 0;
- $form->{assembly} = ($form->{item} eq 'assembly') ? 1 : 0;
my ($query, $sth);
$form->{partnumber} ||= $trans_number->create_unique;
($form->{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('id')|);
- do_query($form, $dbh, qq|INSERT INTO parts (id, partnumber, unit) VALUES (?, ?, ?)|, $form->{id}, $form->{partnumber}, $form->{unit});
+ do_query($form, $dbh, qq|INSERT INTO parts (id, partnumber, unit, part_type) VALUES (?, ?, ?, ?)|, $form->{id}, $form->{partnumber}, $form->{unit}, $form->{item});
$form->{orphaned} = 1;
}
partnumber = ?,
description = ?,
makemodel = ?,
- assembly = ?,
listprice = ?,
sellprice = ?,
lastcost = ?,
has_sernumber = ?,
not_discountable = ?,
microfiche = ?,
+ part_type = ?,
partsgroup_id = ?,
price_factor_id = ?
$priceupdate
@values = ($form->{partnumber},
$form->{description},
$makemodel ? 't' : 'f',
- $form->{assembly} ? 't' : 'f',
$form->{listprice},
$form->{sellprice},
$form->{lastcost},
$form->{has_sernumber} ? 't' : 'f',
$form->{not_discountable} ? 't' : 'f',
$form->{microfiche},
+ $form->{item},
conv_i($partsgroup_id),
conv_i($form->{price_factor_id}),
conv_i($form->{id})
SQL
do_query($form, $dbh, $query, ($form->{id}) x 2);
- # commit
- my $rc = $dbh->commit;
-
- $main::lxdebug->leave_sub();
-
- return $rc;
+ return 1;
}
sub retrieve_assemblies {
FROM parts p2, assembly a
WHERE (p2.id = a.parts_id) AND (a.id = p.id)) AS inventory
FROM parts p
- WHERE NOT p.obsolete AND p.assembly $where|;
+ WHERE NOT p.obsolete AND p.part_type = 'assembly' $where|;
$form->{assembly_items} = selectall_hashref_query($form, $dbh, $query, @values);
}
sub delete {
+ my ($self, $myconfig, $form) = @_;
$main::lxdebug->enter_sub();
+ my $rc = SL::DB->client->with_transaction(\&_delete, $self, $myconfig, $form);
+
+ $main::lxdebug->leave_sub();
+ return $rc;
+}
+
+sub _delete {
my ($self, $myconfig, $form) = @_;
my @values = (conv_i($form->{id}));
- # connect to database, turn off AutoCommit
- my $dbh = $form->get_standard_dbh;
my %columns = ( "assembly" => "id", "parts" => "id" );
for my $table (qw(prices makemodel inventory assembly translation parts)) {
my $column = defined($columns{$table}) ? $columns{$table} : "parts_id";
- do_query($form, $dbh, qq|DELETE FROM $table WHERE $column = ?|, @values);
+ do_query($form, SL::DB->client->dbh, qq|DELETE FROM $table WHERE $column = ?|, @values);
}
- # commit
- my $rc = $dbh->commit;
-
- $main::lxdebug->leave_sub();
-
- return $rc;
+ return 1;
}
sub assembly_item {
$where .= qq| ORDER BY p.description|;
}
- # connect to database
- my $dbh = $form->get_standard_dbh;
-
my $query =
qq|SELECT p.id, p.partnumber, p.description, p.sellprice,
p.weight, p.onhand, p.unit, pg.partsgroup, p.lastcost,
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
LEFT JOIN price_factors pfac ON pfac.id = p.price_factor_id
WHERE $where|;
- $form->{item_list} = selectall_hashref_query($form, $dbh, $query, @values);
+ $form->{item_list} = selectall_hashref_query($form, SL::DB->client->dbh, $query, @values);
$main::lxdebug->leave_sub();
}
}
for ($form->{searchitems}) {
- push @where_tokens, 'p.inventory_accno_id > 0' if /part/;
- push @where_tokens, 'p.inventory_accno_id IS NULL' if /service/;
- push @where_tokens, 'NOT p.assembly' if /service/;
- push @where_tokens, ' p.assembly' if /assembly/;
+ push @where_tokens, "p.part_type = 'part'" if /part/;
+ push @where_tokens, "p.part_type = 'service'" if /service/;
+ push @where_tokens, "p.part_type = 'assembly'" if /assembly/;
}
for ($form->{itemstatus}) {
}
sub update_prices {
+ my ($self, $myconfig, $form) = @_;
$main::lxdebug->enter_sub();
+ my $num_updated = SL::DB->client->with_transaction(\&_update_prices, $self, $myconfig, $form);
+
+ $main::lxdebug->leave_sub();
+ return $num_updated;
+}
+
+sub _update_prices {
my ($self, $myconfig, $form) = @_;
my ($where, @where_values) = $self->_create_filter_for_priceupdate();
my $num_updated = 0;
# connect to database
- my $dbh = $form->get_standard_dbh;
+ my $dbh = SL::DB->client->dbh;
for my $column (qw(sellprice listprice)) {
next if ($form->{$column} eq "");
$sth_add->finish();
$sth_multiply->finish();
- my $rc= $dbh->commit;
-
- $main::lxdebug->leave_sub();
-
return $num_updated;
}