Revision c09536f4
Von Sven Schöling vor fast 15 Jahren hinzugefügt
SL/WH.pm | ||
---|---|---|
154 | 154 |
|
155 | 155 |
|
156 | 156 |
# my $query = qq|select parts_id,qty from assembly where id = ?|; |
157 |
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)|;
|
|
157 |
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)|;
|
|
158 | 158 |
|
159 | 159 |
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); |
160 | 160 |
|
161 | 161 |
# Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet |
162 | 162 |
my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) |
163 |
VALUES (?, ?, ?, ?, ?,(SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
164 |
(SELECT id FROM transfer_type WHERE direction = 'out' AND description = 'used'))|;
|
|
163 |
VALUES (?, ?, ?, ?, ?,(SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
164 |
(SELECT id FROM transfer_type WHERE direction = 'out' AND description = 'used'))|;
|
|
165 | 165 |
my $sthTransferPartSQL = prepare_query($form, $dbh, $transferPartSQL); |
166 | 166 |
|
167 |
my $kannNichtFertigen =""; # der return-string für die fehlermeldung inkl. welche waren zum fertigen noch fehlen
|
|
167 |
my $kannNichtFertigen =""; # der return-string für die fehlermeldung inkl. welche waren zum fertigen noch fehlen
|
|
168 | 168 |
|
169 |
while (my $hash_ref = $sth_part_qty_assembly->fetchrow_hashref()) { # Schleife für $query=select parts_id,qty from assembly
|
|
169 |
while (my $hash_ref = $sth_part_qty_assembly->fetchrow_hashref()) { # Schleife für $query=select parts_id,qty from assembly
|
|
170 | 170 |
|
171 | 171 |
my $partsQTY = $hash_ref->{qty} * $params{qty}; # benötigte teile * anzahl erzeugnisse |
172 | 172 |
my $currentPart_ID = $hash_ref->{parts_id}; |
... | ... | |
176 | 176 |
|
177 | 177 |
if ($partsQTY > $max_parts){ |
178 | 178 |
# Gibt es hier ein Problem mit nicht "escapten" Zeichen? 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird |
179 |
$kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . " Einheiten der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen. <br>"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen
|
|
180 |
next; # die weiteren Überprüfungen sind unnötig
|
|
179 |
$kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . " Einheiten der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen. <br>"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen
|
|
180 |
next; # die weiteren Überprüfungen sind unnötig
|
|
181 | 181 |
} |
182 | 182 |
|
183 | 183 |
# Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen |
... | ... | |
187 | 187 |
# und lösen den Rest dann so wie bei xplace im Barcode-Programm |
188 | 188 |
# S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich |
189 | 189 |
|
190 |
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|;
|
|
191 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID);
|
|
190 |
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|;
|
|
191 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID);
|
|
192 | 192 |
|
193 | 193 |
# Alle Werte zu dem einzelnen Artikel, die wir später auslagern |
194 | 194 |
my $tmpPartsQTY = $partsQTY; |
195 | 195 |
|
196 | 196 |
while (my $temphash_ref = $tempsth->fetchrow_hashref()) { |
197 |
my $temppart_bin_id = $temphash_ref->{bin_id}; # kann man hier den quelllagerplatz beim verbauen angeben?
|
|
198 |
my $temppart_chargenumber = $temphash_ref->{chargenumber};
|
|
199 |
my $temppart_qty = $temphash_ref->{sum};
|
|
200 |
if ($tmpPartsQTY > $temppart_qty) { # wir haben noch mehr waren zum wegbuchen. Wir buchen den kompletten Lagerplatzbestand und zählen die Hilfsvariable runter
|
|
201 |
$tmpPartsQTY = $tmpPartsQTY - $temppart_qty;
|
|
202 |
$temppart_qty = $temppart_qty * -1; # beim analyiseren des sql-trace, war dieser wert positiv, wenn * -1 als berechnung in der parameter-übergabe angegeben wird. Dieser Wert IST und BLEIBT positiv!! Hilfe. Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt?
|
|
203 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, $temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . get_part_description($self, parts_id => $params{assembly_id}), $params{login}, $temppart_qty);
|
|
204 |
|
|
205 |
# hier ist noch ein fehler am besten mit definierten erzeugnissen debuggen 02/2009 jb
|
|
206 |
# idee: ausbuch algorithmus mit rekursion lösen und an- und abschaltbar machen
|
|
207 |
# das problem könnte sein, dass strict nicht an war und sth global eine andere zuweisung bekam
|
|
208 |
# auf jeden fall war der internal-server-error nach aktivierung von strict und warnings plus ein paar my-definitionen weg
|
|
209 |
} else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören
|
|
210 |
$tmpPartsQTY *=-1;
|
|
197 |
my $temppart_bin_id = $temphash_ref->{bin_id}; # kann man hier den quelllagerplatz beim verbauen angeben?
|
|
198 |
my $temppart_chargenumber = $temphash_ref->{chargenumber};
|
|
199 |
my $temppart_qty = $temphash_ref->{sum};
|
|
200 |
if ($tmpPartsQTY > $temppart_qty) { # wir haben noch mehr waren zum wegbuchen. Wir buchen den kompletten Lagerplatzbestand und zählen die Hilfsvariable runter
|
|
201 |
$tmpPartsQTY = $tmpPartsQTY - $temppart_qty;
|
|
202 |
$temppart_qty = $temppart_qty * -1; # beim analyiseren des sql-trace, war dieser wert positiv, wenn * -1 als berechnung in der parameter-übergabe angegeben wird. Dieser Wert IST und BLEIBT positiv!! Hilfe. Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt?
|
|
203 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, $temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . get_part_description($self, parts_id => $params{assembly_id}), $params{login}, $temppart_qty);
|
|
204 |
|
|
205 |
# hier ist noch ein fehler am besten mit definierten erzeugnissen debuggen 02/2009 jb
|
|
206 |
# idee: ausbuch algorithmus mit rekursion lösen und an- und abschaltbar machen
|
|
207 |
# das problem könnte sein, dass strict nicht an war und sth global eine andere zuweisung bekam
|
|
208 |
# auf jeden fall war der internal-server-error nach aktivierung von strict und warnings plus ein paar my-definitionen weg
|
|
209 |
} else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören
|
|
210 |
$tmpPartsQTY *=-1;
|
|
211 | 211 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, $temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . get_part_description($self, parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY); |
212 |
last; # beendet die schleife (springt zum letzten element)
|
|
212 |
last; # beendet die schleife (springt zum letzten element)
|
|
213 | 213 |
} |
214 |
} # ende while SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id
|
|
214 |
} # ende while SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id
|
|
215 | 215 |
} #ende while select parts_id,qty from assembly where id = ? |
216 | 216 |
if ($kannNichtFertigen) { |
217 | 217 |
return $kannNichtFertigen; |
... | ... | |
219 | 219 |
|
220 | 220 |
# soweit alles gut. Jetzt noch die wirkliche Lagerbewegung für das Erzeugnis ausführen ... |
221 | 221 |
my $transferAssemblySQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) |
222 |
VALUES (?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
223 |
(SELECT id FROM transfer_type WHERE direction = 'in' AND description = 'stock'))|;
|
|
222 |
VALUES (?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
223 |
(SELECT id FROM transfer_type WHERE direction = 'in' AND description = 'stock'))|;
|
|
224 | 224 |
my $sthTransferAssemblySQL = prepare_query($form, $dbh, $transferAssemblySQL); |
225 | 225 |
do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, $params{dst_bin_id}, $params{chargenumber}, $params{comment}, $params{login}, $params{qty}); |
226 | 226 |
$dbh->commit(); |
227 | 227 |
|
228 | 228 |
$main::lxdebug->leave_sub(); |
229 |
return 1; # Alles erfolgreich
|
|
229 |
return 1; # Alles erfolgreich
|
|
230 | 230 |
} |
231 | 231 |
|
232 | 232 |
sub get_warehouse_journal { |
... | ... | |
489 | 489 |
# - partsid - will return matches with this parts_id only |
490 | 490 |
# - description - will return only matches where the given string is a substring of the description |
491 | 491 |
# - chargenumber - will return only matches where the given string is a substring of the chargenumber |
492 |
# - ean - will return only matches where the given string is a substring of the ean as stored in the table parts (article)
|
|
492 |
# - ean - will return only matches where the given string is a substring of the ean as stored in the table parts (article)
|
|
493 | 493 |
# - charge_ids - must be an arrayref. will return contents with these ids only |
494 | 494 |
# - expires_in - will only return matches that expire within the given number of days |
495 | 495 |
# will also add a column named 'has_expired' containing if the match has already expired or not |
... | ... | |
593 | 593 |
"bindescription" => "b.description", |
594 | 594 |
"binid" => "b.id", |
595 | 595 |
"chargenumber" => "i.chargenumber", |
596 |
"ean" => "p.ean",
|
|
596 |
"ean" => "p.ean",
|
|
597 | 597 |
"chargeid" => "c.id", |
598 | 598 |
"warehousedescription" => "w.description", |
599 | 599 |
"partunit" => "p.unit", |
... | ... | |
771 | 771 |
return map { $_->{bin_id} => $_ } @{ $result }; |
772 | 772 |
} |
773 | 773 |
# |
774 |
# Eingabe: Teilenummer, Lagernummer (warehouse)
|
|
775 |
# Ausgabe: Die maximale Anzahl der Teile in diesem Lager
|
|
774 |
# Eingabe: Teilenummer, Lagernummer (warehouse)
|
|
775 |
# Ausgabe: Die maximale Anzahl der Teile in diesem Lager
|
|
776 | 776 |
# |
777 | 777 |
sub get_max_qty_parts { |
778 | 778 |
$main::lxdebug->enter_sub(); |
... | ... | |
792 | 792 |
my $sth_QTY = prepare_execute_query($form, $dbh, $query, ,$params{parts_id}, $params{warehouse_id}); #info: aufruf an DBUtils.pm |
793 | 793 |
|
794 | 794 |
my $max_qty_parts = 0; #Initialisierung mit 0 |
795 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle chargen und Lagerorte (s.a. SQL-Query oben)
|
|
795 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle chargen und Lagerorte (s.a. SQL-Query oben)
|
|
796 | 796 |
$max_qty_parts += $ref->{sum}; |
797 | 797 |
} |
798 | 798 |
|
... | ... | |
802 | 802 |
} |
803 | 803 |
|
804 | 804 |
# |
805 |
# Eingabe: Teilenummer, Lagernummer (warehouse)
|
|
806 |
# Ausgabe: Die Beschreibung der Ware bzw. Erzeugnis
|
|
805 |
# Eingabe: Teilenummer, Lagernummer (warehouse)
|
|
806 |
# Ausgabe: Die Beschreibung der Ware bzw. Erzeugnis
|
|
807 | 807 |
# |
808 | 808 |
sub get_part_description { |
809 | 809 |
$main::lxdebug->enter_sub(); |
Auch abrufbar als: Unified diff
Keine Tabs in SL/* Modulen.
Machen das Leben nur schwer für Leute die zufällig nicht die Tabbreite eingestellt haben wie der Autor.