- #=====================================================================
+#=====================================================================
# LX-Office ERP
# Copyright (C) 2004
# Based on SQL-Ledger Version 2.1.9
use SL::CVar;
use SL::DBUtils;
+use SL::TransNumber;
use strict;
my ($self, $myconfig, $form) = @_;
my @values;
# connect to database, turn off AutoCommit
- my $dbh = $form->dbconnect_noauto($myconfig);
+ my $dbh = $form->get_standard_dbh;
# save the part
# make up a unique handle and store in partnumber field
my $priceupdate = ', priceupdate = current_date';
if ($form->{id}) {
+ my $trans_number = SL::TransNumber->new(type => $form->{item}, dbh => $dbh, number => $form->{partnumber}, id => $form->{id});
+ if (!$trans_number->is_unique) {
+ $::lxdebug->leave_sub;
+ return 3;
+ }
# get old price
$query = qq|SELECT sellprice, weight FROM parts WHERE id = ?|;
$priceupdate = '' if (all { $previous_values->{$_} == $form->{$_} } qw(sellprice lastcost listprice));
} else {
- my ($count) = selectrow_query($form, $dbh, qq|SELECT COUNT(*) FROM parts WHERE partnumber = ?|, $form->{partnumber});
- if ($count) {
- $main::lxdebug->leave_sub();
+ my $trans_number = SL::TransNumber->new(type => $form->{item}, dbh => $dbh, number => $form->{partnumber}, save => 1);
+
+ if ($form->{partnumber} && !$trans_number->is_unique) {
+ $::lxdebug->leave_sub;
return 3;
}
+ $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});
+ do_query($form, $dbh, qq|INSERT INTO parts (id, partnumber, unit) VALUES (?, ?, '')|, $form->{id}, $form->{partnumber});
$form->{orphaned} = 1;
- if ($form->{partnumber} eq "" && $form->{"item"} eq "service") {
- $form->{partnumber} = $form->update_defaults($myconfig, "servicenumber");
- }
- if ($form->{partnumber} eq "" && $form->{"item"} ne "service") {
- $form->{partnumber} = $form->update_defaults($myconfig, "articlenumber");
- }
-
}
my $partsgroup_id = 0;
if (($form->{"make_$i"}) || ($form->{"model_$i"})) {
#hli
$value = $form->parse_amount($myconfig, $form->{"lastcost_$i"});
- if ($value == $form->{"old_lastcost_$i"})
+ if ($value == $form->parse_amount($myconfig, $form->{"old_lastcost_$i"}))
{
if ($form->{"lastupdate_$i"} eq "") {
$lastupdate = 'now()';
}
}
- CVar->save_custom_variables('dbh' => $dbh,
- 'module' => 'IC',
- 'trans_id' => $form->{id},
- 'variables' => $form);
+ CVar->save_custom_variables(dbh => $dbh,
+ module => 'IC',
+ trans_id => $form->{id},
+ variables => $form,
+ save_validity => 1);
# commit
my $rc = $dbh->commit;
- $dbh->disconnect;
$main::lxdebug->leave_sub();
my %columns = ( "assembly" => "id", "parts" => "id" );
- for my $table (qw(prices partstax makemodel inventory assembly license translation parts)) {
+ for my $table (qw(prices partstax 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);
}
push(@values, '%' . $form->{"${column}_$i"} . '%');
}
+ if ($form->{"id_${i}"}) {
+ $where .= qq| AND p.id = ?|;
+ push @values, $form->{"id_${i}"};
+ }
+
if ($form->{id}) {
$where .= qq| AND NOT (p.id = ?)|;
push(@values, conv_i($form->{id}));
my @makemodel_filters = qw(make model);
my @invoice_oi_filters = qw(serialnumber soldtotal);
my @apoe_filters = qw(transdate);
- my @like_filters = (@simple_filters, @makemodel_filters, @invoice_oi_filters);
+ my @like_filters = (@simple_filters, @invoice_oi_filters);
my @all_columns = (@simple_filters, @makemodel_filters, @apoe_filters, qw(serialnumber));
my @simple_l_switches = (@all_columns, qw(listprice sellprice lastcost priceupdate weight unit bin rop image));
my @oe_flags = qw(bought sold onorder ordered rfq quoted);
SELECT id, name, 'customer' AS cv FROM customer UNION
SELECT id, name, 'vendor' AS cv FROM vendor
) AS cv ON cv.id = apoe.customer_id OR cv.id = apoe.vendor_id|,
+ mv => 'LEFT JOIN vendor AS mv ON mv.id = mm.make',
);
- my @join_order = qw(partsgroup makemodel invoice_oi apoe cv pfac);
+ my @join_order = qw(partsgroup makemodel mv invoice_oi apoe cv pfac);
my %table_prefix = (
deliverydate => 'apoe.', serialnumber => 'ioi.',
}
}
+ if ($form->{"partsgroup_id"}) {
+ $form->{"l_partsgroup"} = '1'; # show the column
+ push @where_tokens, "pg.id = ?";
+ push @bind_vars, $form->{"partsgroup_id"};
+ }
+
foreach (@like_filters) {
next unless $form->{$_};
$form->{"l_$_"} = '1'; # show the column
WHERE (a_lc.id = p.id)) AS lastcost|;
$table_prefix{$q_assembly_lastcost} = ' ';
+ # special case makemodel search
+ # all_parts is based upon the assumption that every parameter is named like the column it represents
+ # unfortunately make would have to match vendor.name which is already taken for vendor.name in bsooqr mode.
+ # fortunately makemodel doesn't need to be displayed later, so adding a special clause to where_token is sufficient.
+ if ($form->{make}) {
+ push @where_tokens, 'mv.name ILIKE ?';
+ push @bind_vars, "%$form->{make}%";
+ }
+ if ($form->{model}) {
+ push @where_tokens, 'mm.model ILIKE ?';
+ push @bind_vars, "%$form->{model}%";
+ }
+
# special case: sorting by partnumber
# since partnumbers are expected to be prefixed integers, a special sorting is implemented sorting first lexically by prefix and then by suffix.
# and yes, that expression is designed to hold that array of regexes only once, so the map is kinda messy, sorry about that.
$joins_needed{partsgroup} = 1;
$joins_needed{pfac} = 1;
$joins_needed{makemodel} = 1 if grep { $form->{$_} || $form->{"l_$_"} } @makemodel_filters;
+ $joins_needed{mv} = 1 if $joins_needed{makemodel};
$joins_needed{cv} = 1 if $bsooqr;
$joins_needed{apoe} = 1 if $joins_needed{cv} || grep { $form->{$_} || $form->{"l_$_"} } @apoe_filters;
$joins_needed{invoice_oi} = 1 if $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters;
}
if ($transdate eq "") {
- $transdate = "current_date";
+ $transdate = DateTime->today_local->to_lxoffice;
} else {
$transdate = $dbh->quote($transdate);
}
}
my $placeholders = join ', ', ('?') x scalar(@part_ids);
- my $query = qq|SELECT mm.parts_id, mm.model, v.name AS make
+ my $query = qq|SELECT mm.parts_id, mm.model, mm.lastcost, v.name AS make
FROM makemodel mm
LEFT JOIN vendor v ON (mm.make = v.id)
WHERE mm.parts_id IN ($placeholders)|;