$form->{amount}{IC_expense} = $form->{expense_accno};
$form->{amount}{IC_cogs} = $form->{expense_accno};
- my @pricegroups = ();
- my @pricegroups_not_used = ();
-
# get prices
- $query =
- qq|SELECT p.parts_id, p.pricegroup_id, p.price,
- (SELECT pg.pricegroup
- FROM pricegroup pg
- WHERE pg.id = p.pricegroup_id) AS pricegroup
- FROM prices p
- WHERE (parts_id = ?)
- ORDER BY pricegroup|;
- $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
-
- #for pricegroups
- my $i = 1;
- while (($form->{"klass_$i"}, $form->{"pricegroup_id_$i"},
- $form->{"price_$i"}, $form->{"pricegroup_$i"})
- = $sth->fetchrow_array()) {
- push @pricegroups, $form->{"pricegroup_id_$i"};
- $i++;
- }
-
- $sth->finish;
-
- # get pricegroups
- $query = qq|SELECT id, pricegroup FROM pricegroup|;
- $form->{PRICEGROUPS} = selectall_hashref_query($form, $dbh, $query);
-
- #find not used pricegroups
- while (my $tmp = pop(@{ $form->{PRICEGROUPS} })) {
- my $in_use = 0;
- foreach my $item (@pricegroups) {
- if ($item eq $tmp->{id}) {
- $in_use = 1;
- last;
- }
- }
- push(@pricegroups_not_used, $tmp) unless ($in_use);
- }
-
- # if not used pricegroups are avaible
- if (@pricegroups_not_used) {
+ $query = <<SQL;
+ SELECT pg.pricegroup, pg.id AS pricegroup_id, COALESCE(pr.price, 0) AS price
+ FROM pricegroup pg
+ LEFT JOIN prices pr ON (pr.pricegroup_id = pg.id) AND (pr.parts_id = ?)
+ ORDER BY lower(pg.pricegroup)
+SQL
- foreach my $name (@pricegroups_not_used) {
- $form->{"klass_$i"} = "$name->{id}";
- $form->{"pricegroup_id_$i"} = "$name->{id}";
- $form->{"pricegroup_$i"} = "$name->{pricegroup}";
- $i++;
- }
+ my $row = 1;
+ foreach $ref (selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}))) {
+ $form->{"${_}_${row}"} = $ref->{$_} for qw(pricegroup_id pricegroup price);
+ $row++;
}
-
- #correct rows
- $form->{price_rows} = $i - 1;
+ $form->{price_rows} = $row - 1;
# get makes
if ($form->{makemodel}) {
}
$trq->finish;
- # now get accno for taxes
- $query =
- qq|SELECT c.accno
- FROM chart c, partstax pt
- WHERE (pt.chart_id = c.id) AND (pt.parts_id = ?)|;
- $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
- while (my ($key) = $sth->fetchrow_array) {
- $form->{amount}{$key} = $key;
- }
-
- $sth->finish;
-
# is it an orphan
- my @referencing_tables = qw(invoice orderitems inventory rmaitems);
+ my @referencing_tables = qw(invoice orderitems inventory);
my %column_map = ( );
my $parts_id = conv_i($form->{id});
my $dbh = $form->dbconnect($myconfig);
# get pricegroups
- my $query = qq|SELECT id, pricegroup FROM pricegroup|;
+ my $query = qq|SELECT id, pricegroup FROM pricegroup ORDER BY lower(pricegroup)|;
my $pricegroups = selectall_hashref_query($form, $dbh, $query);
my $i = 1;
do_query($form, $dbh, qq|DELETE FROM assembly WHERE id = ?|, conv_i($form->{id}));
}
- # delete tax records
- do_query($form, $dbh, qq|DELETE FROM partstax WHERE parts_id = ?|, conv_i($form->{id}));
-
# delete translations
do_query($form, $dbh, qq|DELETE FROM translation WHERE parts_id = ?|, conv_i($form->{id}));
$form->{orphaned} = 1;
}
- my $partsgroup_id = 0;
+ my $partsgroup_id = undef;
if ($form->{partsgroup}) {
(my $partsgroup, $partsgroup_id) = split(/--/, $form->{partsgroup});
# delete price records
do_query($form, $dbh, qq|DELETE FROM prices WHERE parts_id = ?|, conv_i($form->{id}));
+ $query = qq|INSERT INTO prices (parts_id, pricegroup_id, price) VALUES(?, ?, ?)|;
+ $sth = prepare_query($form, $dbh, $query);
+
# insert price records only if different to sellprice
for my $i (1 .. $form->{price_rows}) {
my $price = $form->parse_amount($myconfig, $form->{"price_$i"});
- if ($price == 0) {
- $form->{"price_$i"} = $form->{sellprice};
- }
- if (
- ( $price
- || $form->{"klass_$i"}
- || $form->{"pricegroup_id_$i"})
- and $price != $form->{sellprice}
- ) {
- #$klass = $form->parse_amount($myconfig, $form->{"klass_$i"});
- $query = qq|INSERT INTO prices (parts_id, pricegroup_id, price) | .
- qq|VALUES(?, ?, ?)|;
- @values = (conv_i($form->{id}), conv_i($form->{"pricegroup_id_$i"}), $price);
- do_query($form, $dbh, $query, @values);
- }
+ next unless $price && ($price != $form->{sellprice});
+
+ @values = (conv_i($form->{id}), conv_i($form->{"pricegroup_id_$i"}), $price);
+ do_statement($form, $sth, $query, @values);
}
+ $sth->finish;
+
# insert makemodel records
my $lastupdate = '';
my $value = 0;
}
}
- # insert taxes
- foreach my $item (split(/ /, $form->{taxaccounts})) {
- if ($form->{"IC_tax_$item"}) {
- $query =
- qq|INSERT INTO partstax (parts_id, chart_id)
- VALUES (?, (SELECT id FROM chart WHERE accno = ?))|;
- @values = (conv_i($form->{id}), $item);
- do_query($form, $dbh, $query, @values);
- }
- }
-
# add assembly records
if ($form->{item} eq 'assembly') {
my %columns = ( "assembly" => "id", "parts" => "id" );
- for my $table (qw(prices partstax makemodel inventory assembly translation parts)) {
+ 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);
}
# transdate madness.
my $transdate = "";
- if ($form->{type} eq "invoice") {
- if (($form->{vc} eq "vendor") || !$form->{deliverydate}) {
+ if ($form->{type} eq "invoice" or $form->{type} eq "credit_note") {
+ # use deliverydate for sales and purchase invoice, if it exists
+ # also use deliverydate for credit notes
+ if (!$form->{deliverydate}) {
+ $transdate = $form->{invdate};
+ } else {
+ $transdate = $form->{deliverydate};
+ }
+ } elsif ($form->{script} eq 'ir.pl') {
+ # when a purchase invoice is opened from the report of purchase invoices
+ # $form->{type} isn't set, but $form->{script} is, not sure why this is or
+ # whether this distinction matters in some other scenario. Otherwise one
+ # could probably take out this elsif and add a
+ # " or $form->{script} eq 'ir.pl' "
+ # to the above if-statement
+ if (!$form->{deliverydate}) {
$transdate = $form->{invdate};
} else {
$transdate = $form->{deliverydate};
# if credit_note has a deliverydate, use this instead of invdate
# useful for credit_notes of invoices from an old period with different tax
# if there is no deliverydate then invdate is used, old default (see next elsif)
+ # Falls hier der Stichtag für Steuern anders bestimmt wird,
+ # entsprechend auch bei Taxkeys.pm anpassen
$transdate = $form->{deliverydate};
} elsif (($form->{type} eq "credit_note") || ($form->{script} eq 'ir.pl')) {
$transdate = $form->{invdate};
my $self = shift;
my %params = @_;
- my $myconfig = \%main::myconfig;
- my $form = $main::form;
+ my $myconfig = $params{myconfig} || \%main::myconfig;
+ my $form = $params{form} || $main::form;
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);