X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIC.pm;h=f39c169b299411b8b1eb52cfa78778d4e91de8a3;hb=b632cee8434442efd8ae3962126c34123172daac;hp=47c5fea4155513db6963a0169a38b43c78174204;hpb=72be9c763f3b7f7df1fae4fe10011e45f9e2ad1d;p=kivitendo-erp.git diff --git a/SL/IC.pm b/SL/IC.pm index 47c5fea41..f39c169b2 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -109,83 +109,40 @@ sub get_part { $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; + $query = <{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); + 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++; } - - # if not used pricegroups are avaible - if (@pricegroups_not_used) { - - foreach my $name (@pricegroups_not_used) { - $form->{"klass_$i"} = "$name->{id}"; - $form->{"pricegroup_id_$i"} = "$name->{id}"; - $form->{"pricegroup_$i"} = "$name->{pricegroup}"; + $form->{price_rows} = $row - 1; + + # get makes + if ($form->{makemodel}) { + #hli + $query = qq|SELECT m.make, m.model,m.lastcost,m.lastcost,m.lastupdate,m.sortorder FROM makemodel m | . + qq|WHERE m.parts_id = ? order by m.sortorder asc|; + my @values = ($form->{id}); + $sth = $dbh->prepare($query); + $sth->execute(@values) || $form->dberror("$query (" . join(', ', @values) . ")"); + + my $i = 1; + + while (($form->{"make_$i"}, $form->{"model_$i"}, $form->{"old_lastcost_$i"}, + $form->{"lastcost_$i"}, $form->{"lastupdate_$i"}, $form->{"sortorder_$i"}) = $sth->fetchrow_array) + { $i++; } - } - - #correct rows - $form->{price_rows} = $i - 1; - - unless ($form->{item} eq 'service') { - - # get makes - if ($form->{makemodel}) { - #hli - $query = qq|SELECT m.make, m.model,m.lastcost,m.lastcost,m.lastupdate,m.sortorder FROM makemodel m | . - qq|WHERE m.parts_id = ? order by m.sortorder asc|; - my @values = ($form->{id}); - $sth = $dbh->prepare($query); - $sth->execute(@values) || $form->dberror("$query (" . join(', ', @values) . ")"); - - my $i = 1; - - while (($form->{"make_$i"}, $form->{"model_$i"}, $form->{"old_lastcost_$i"}, - $form->{"lastcost_$i"}, $form->{"lastupdate_$i"}, $form->{"sortorder_$i"}) = $sth->fetchrow_array) - { - $i++; - } - $sth->finish; - $form->{makemodel_rows} = $i - 1; + $sth->finish; + $form->{makemodel_rows} = $i - 1; - } } # get translations @@ -244,7 +201,7 @@ sub get_pricegroups { 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; @@ -330,10 +287,8 @@ sub save { } $sth->finish; - if ($form->{item} ne 'service') { - # delete makemodel records - do_query($form, $dbh, qq|DELETE FROM makemodel WHERE parts_id = ?|, conv_i($form->{id})); - } + # delete makemodel records + do_query($form, $dbh, qq|DELETE FROM makemodel WHERE parts_id = ?|, conv_i($form->{id})); if ($form->{item} eq 'assembly') { # delete assembly records @@ -476,26 +431,20 @@ sub save { # 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; @@ -798,7 +747,7 @@ sub all_parts { my @apoe_filters = qw(transdate); my @like_filters = (@simple_filters, @invoice_oi_filters); my @all_columns = (@simple_filters, @makemodel_filters, @apoe_filters, @project_filters, qw(serialnumber)); - my @simple_l_switches = (@all_columns, qw(listprice sellprice lastcost priceupdate weight unit bin rop image)); + my @simple_l_switches = (@all_columns, qw(notes listprice sellprice lastcost priceupdate weight unit bin rop image)); my @oe_flags = qw(bought sold onorder ordered rfq quoted); my @qsooqr_flags = qw(invnumber ordnumber quonumber trans_id name module qty); my @deliverydate_flags = qw(deliverydate); @@ -1013,7 +962,7 @@ sub all_parts { $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{apoe} = 1 if $joins_needed{project} || $joins_needed{cv} || grep { $form->{$_} || $form->{"l_$_"} } @apoe_filters; $joins_needed{invoice_oi} = 1 if $joins_needed{project} || $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters; # special case for description search. @@ -1099,7 +1048,7 @@ sub all_parts { if ($form->{searchitems} eq 'assembly' && $form->{bom}) { $query = qq|SELECT p.id, p.partnumber, p.description, a.qty AS onhand, - p.unit, p.bin, + p.unit, p.bin, p.notes, p.sellprice, p.listprice, p.lastcost, p.rop, p.weight, p.priceupdate, p.image, p.drawing, p.microfiche, @@ -1126,6 +1075,26 @@ sub all_parts { $form->{parts} = \@assemblies; } + if ($form->{l_pricegroups} ) { + my $query = <{parts} }) { + do_statement($form, $sth, $query, conv_i($part->{id})); + + while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { + $part->{"pricegroup_$ref->{pricegroup_id}"} = $ref->{price}; + } + $sth->finish; + } + }; + + $main::lxdebug->leave_sub(); return wantarray ? @{ $form->{parts} } : $form->{parts}; @@ -1550,6 +1519,11 @@ sub retrieve_accounts { } else { $transdate = $form->{deliverydate}; } + } elsif (($form->{type} eq "credit_note") and $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) + $transdate = $form->{deliverydate}; } elsif (($form->{type} eq "credit_note") || ($form->{script} eq 'ir.pl')) { $transdate = $form->{invdate}; } else {