X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWH.pm;h=51c27c976ccc298fe6c93c20aee4954416ad0e13;hb=e05d94ad1109d058352354ecd8964c91ac0da1aa;hp=2c4d7591fb23277a6fdc4cea4af6951cefef3703;hpb=4ce8120837c32f1f24720467a82508432c149af6;p=kivitendo-erp.git diff --git a/SL/WH.pm b/SL/WH.pm index 2c4d7591f..51c27c976 100644 --- a/SL/WH.pm +++ b/SL/WH.pm @@ -138,24 +138,25 @@ sub transfer_assembly { my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); -# Ablauferklärung -# -# ... Standard-Check oben Ende. Hier die eigentliche SQL-Abfrage -# select parts_id,qty from assembly where id=1064; -# Erweiterung für bug 935 am 23.4.09 - Erzeugnisse können Dienstleistungen enthalten, die ja nicht 'lagerbar' sind. -# select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id=1066 and inventory_accno_id IS NOT NULL; -# Erweiterung für bug 23.4.09 -2 Erzeugnisse in Erzeugnissen können nicht ausgelagert werden, wenn assembly nicht überprüft wird ... -# select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id=1066 and parts.inventory_accno_id IS NOT NULL and parts.assembly=false; + # Ablauferklärung + # + # ... Standard-Check oben Ende. Hier die eigentliche SQL-Abfrage + # select parts_id,qty from assembly where id=1064; + # Erweiterung für bug 935 am 23.4.09 - Erzeugnisse können Dienstleistungen enthalten, die ja nicht 'lagerbar' sind. + # select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id=1066 and inventory_accno_id IS NOT NULL; + # Erweiterung für bug 23.4.09 -2 Erzeugnisse in Erzeugnissen können nicht ausgelagert werden, wenn assembly nicht überprüft wird ... + # patch von joachim eingespielt 24.4.2009: + # my $query = qq|select parts_id,qty from assembly inner join parts + # on assembly.parts_id = parts.id where assembly.id = ? and + # (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|; -# -# # my $query = qq|select parts_id,qty from assembly where id = ?|; - my $query = qq|select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id = ? and inventory_accno_id IS NOT NULL and parts.assembly = FALSE|; + my $query = qq|select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id = ? and (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|; my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); -# Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet + # Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) VALUES (?, ?, ?, ?, ?,(SELECT id FROM employee WHERE login = ?), ?, nextval('id'), (SELECT id FROM transfer_type WHERE direction = 'out' AND description = 'used'))|; @@ -172,17 +173,17 @@ sub transfer_assembly { my $max_parts = get_max_qty_parts($self, parts_id => $currentPart_ID, warehouse_id => $params{dst_warehouse_id}); #$self angeben, damit die Standardkonvention (Name, Parameter) eingehalten wird if ($partsQTY > $max_parts){ - - # Gibt es hier ein Problem mit nicht "escapten" Zeichen? - $kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY) . " Stueck der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen.
"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen + # Gibt es hier ein Problem mit nicht "escapten" Zeichen? 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird + $kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . " Einheiten der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen.
"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen + next; # die weiteren Überprüfungen sind unnötig } -# Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen -# Offen: Die Summe über alle Lagerplätze wird noch nicht gebildet -# Gelöst: Wir haben vorher schon die Abfrage durchgeführt, ob wir fertigen können. -# Noch besser gelöst: Wir laufen durch alle benötigten Waren zum Fertigen und geben eine Rückmeldung an den Benutzer was noch fehlt -# und lösen den Rest dann so wie bei xplace im Barcode-Programm -# S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich + # Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen + # Offen: Die Summe über alle Lagerplätze wird noch nicht gebildet + # Gelöst: Wir haben vorher schon die Abfrage durchgeführt, ob wir fertigen können. + # Noch besser gelöst: Wir laufen durch alle benötigten Waren zum Fertigen und geben eine Rückmeldung an den Benutzer was noch fehlt + # und lösen den Rest dann so wie bei xplace im Barcode-Programm + # S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber having SUM(qty)>0|; my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID); @@ -300,11 +301,14 @@ sub get_warehouse_journal { $filter{na} = '-' unless $filter{na}; # make order, search in $filter and $form - $form->{sort} = $filter{sort} unless $form->{sort}; - $form->{order} = ($form->{sort} = 'itime') unless $form->{sort}; - $form->{sort} = 'itime' if $form->{sort} eq "date"; - $form->{order} = $filter{order} unless $form->{order}; - $form->{sort} .= (($form->{order}) ? " DESC" : " ASC"); + my $sort_col = $form->{sort}; + my $sort_order = $form->{order}; + + $sort_col = $filter{sort} unless $sort_col; + $sort_order = ($sort_col = 'itime') unless $sort_col; + $sort_col = 'itime' if $sort_col eq 'date'; + $sort_order = $filter{order} unless $sort_order; + my $sort_spec = "${sort_col} " . ($sort_order ? " DESC" : " ASC"); my $where_clause = join(" AND ", @filter_ary) . " AND " if (@filter_ary); @@ -399,7 +403,7 @@ sub get_warehouse_journal { WHERE $where_clause i1.qty > 0 AND i1.trans_id IN ( SELECT i.trans_id FROM inventory i GROUP BY i.trans_id HAVING COUNT(i.trans_id) = 1 ) GROUP BY $group_clause - ORDER BY r_$form->{sort}|; + ORDER BY r_${sort_spec}|; my $sth = prepare_execute_query($form, $dbh, $query, @filter_vars, @filter_vars, @filter_vars); @@ -437,6 +441,7 @@ sub get_warehouse_journal { # - partsid - will return matches with this parts_id only # - description - will return only matches where the given string is a substring of the description # - chargenumber - will return only matches where the given string is a substring of the chargenumber +# - ean - will return only matches where the given string is a substring of the ean as stored in the table parts (article) # - charge_ids - must be an arrayref. will return contents with these ids only # - expires_in - will only return matches that expire within the given number of days # will also add a column named 'has_expired' containing if the match has already expired or not @@ -498,6 +503,10 @@ sub get_warehouse_report { push @filter_ary, "i.chargenumber ILIKE ?"; push @filter_vars, '%' . $filter{chargenumber} . '%'; } + if ($filter{ean}) { + push @filter_ary, "p.ean ILIKE ?"; + push @filter_vars, '%' . $filter{ean} . '%'; + } # prepare qty comparison for later filtering my ($f_qty_op, $f_qty, $f_qty_base_unit); @@ -515,12 +524,15 @@ sub get_warehouse_report { map { $form->{"l_${_}id"} = "Y" if ($form->{"l_${_}description"} || $form->{"l_${_}number"}); } qw(warehouse bin); # make order, search in $filter and $form - $form->{sort} = $filter{sort} unless $form->{sort}; - $form->{sort} = "parts_id" unless $form->{sort}; - $form->{order} = $filter{order} unless $form->{order}; - $form->{sort} =~ s/ASC|DESC//; # kill stuff left in from previous queries - my $orderby = $form->{sort}; - $form->{sort} .= (($form->{order}) ? " DESC" : " ASC"); + my $sort_col = $form->{sort}; + my $sort_order = $form->{order}; + + $sort_col = $filter{sort} unless $sort_col; + $sort_col = "parts_id" unless $sort_col; + $sort_order = $filter{order} unless $sort_order; + $sort_col =~ s/ASC|DESC//; # kill stuff left in from previous queries + my $orderby = $sort_col; + my $sort_spec = "${sort_col} " . ($sort_order ? " DESC" : " ASC"); my $where_clause = join " AND ", ("1=1", @filter_ary); @@ -533,6 +545,7 @@ sub get_warehouse_report { "bindescription" => "b.description", "binid" => "b.id", "chargenumber" => "i.chargenumber", + "ean" => "p.ean", "chargeid" => "c.id", "warehousedescription" => "w.description", "partunit" => "p.unit", @@ -564,7 +577,7 @@ sub get_warehouse_report { $joins WHERE $where_clause GROUP BY $group_clause $group_by - ORDER BY $form->{sort}|; + ORDER BY $sort_spec|; my $sth = prepare_execute_query($form, $dbh, $query, @filter_vars);