Revision 0f214df5
Von Waldemar Toews vor mehr als 8 Jahren hinzugefügt
SL/WH.pm | ||
---|---|---|
183 | 183 |
# (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|; |
184 | 184 |
|
185 | 185 |
|
186 |
my $query = qq|select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id
|
|
186 |
my $query = qq|select assembly.parts_id, assembly.qty, parts.warehouse_id from assembly inner join parts on assembly.parts_id = parts.id
|
|
187 | 187 |
where assembly.id = ? and (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|; |
188 | 188 |
|
189 | 189 |
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); |
... | ... | |
204 | 204 |
$schleife_durchlaufen=1; # Erzeugnis definiert |
205 | 205 |
my $partsQTY = $hash_ref->{qty} * $params{qty}; # benötigte teile * anzahl erzeugnisse |
206 | 206 |
my $currentPart_ID = $hash_ref->{parts_id}; |
207 |
my $currentPart_WH_ID = $hash_ref->{warehouse_id}; |
|
208 |
my $warehouse_info = $self->get_basic_warehouse_info('id' => $currentPart_WH_ID); |
|
209 |
my $warehouse_desc = $warehouse_info->{"warehouse_description"}; |
|
207 | 210 |
|
208 | 211 |
# Überprüfen, ob diese Anzahl gefertigt werden kann |
209 | 212 |
my $max_parts = $self->get_max_qty_parts(parts_id => $currentPart_ID, # $self->method() == this.method() |
210 |
warehouse_id => $params{dst_warehouse_id});
|
|
213 |
warehouse_id => $currentPart_WH_ID);
|
|
211 | 214 |
|
212 | 215 |
if ($partsQTY > $max_parts){ |
213 | 216 |
# Gibt es hier ein Problem mit nicht "escapten" Zeichen? |
214 | 217 |
# 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird |
215 | 218 |
|
216 |
$kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . |
|
217 |
" Einheiten der Ware:" . $self->get_part_description(parts_id => $currentPart_ID) . |
|
219 |
$kannNichtFertigen .= "Zum Fertigen fehlen: " . abs($partsQTY - $max_parts) . |
|
220 |
" Einheiten der Ware: " . $self->get_part_description(parts_id => $currentPart_ID) . |
|
221 |
" im Lager: " . $warehouse_desc . |
|
218 | 222 |
", um das Erzeugnis herzustellen. <br>"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen |
219 | 223 |
next; # die weiteren Überprüfungen sind unnötig, daher das nächste elemente prüfen (genaue Ausgabe, was noch fehlt) |
220 | 224 |
} |
... | ... | |
228 | 232 |
|
229 | 233 |
my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber, bestbefore FROM inventory |
230 | 234 |
WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber, bestbefore having SUM(qty)>0|; |
231 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID);
|
|
235 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $currentPart_WH_ID, $currentPart_ID);
|
|
232 | 236 |
|
233 | 237 |
# Alle Werte zu dem einzelnen Artikel, die wir später auslagern |
234 | 238 |
my $tmpPartsQTY = $partsQTY; |
... | ... | |
246 | 250 |
# wenn * -1 als berechnung in der parameter-übergabe angegeben wird. |
247 | 251 |
# Dieser Wert IST und BLEIBT positiv!! Hilfe. |
248 | 252 |
# Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt? |
249 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id},
|
|
253 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID,
|
|
250 | 254 |
$temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' . |
251 | 255 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty); |
252 | 256 |
|
... | ... | |
256 | 260 |
# auf jeden fall war der internal-server-error nach aktivierung von strict und warnings plus ein paar my-definitionen weg |
257 | 261 |
} else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören |
258 | 262 |
$tmpPartsQTY *=-1; |
259 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id},
|
|
263 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID,
|
|
260 | 264 |
$temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' . |
261 | 265 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY); |
262 | 266 |
last; # beendet die schleife (springt zum letzten element) |
... | ... | |
895 | 899 |
my $dbh = $params{dbh} || $form->get_standard_dbh(); |
896 | 900 |
|
897 | 901 |
my $query = qq| SELECT SUM(qty), bin_id, chargenumber, bestbefore FROM inventory where parts_id = ? AND warehouse_id = ? GROUP BY bin_id, chargenumber, bestbefore|; |
898 |
|
|
899 | 902 |
my $sth_QTY = prepare_execute_query($form, $dbh, $query, ,$params{parts_id}, $params{warehouse_id}); #info: aufruf an DBUtils.pm |
900 | 903 |
|
904 |
|
|
901 | 905 |
my $max_qty_parts = 0; #Initialisierung mit 0 |
902 | 906 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle Haltbarkeiten, chargen und Lagerorte (s.a. SQL-Query oben) |
903 | 907 |
$max_qty_parts += $ref->{sum}; |
Auch abrufbar als: Unified diff
BUG-Fix: Funktion "Erzeugnis fertigen" sucht Bestandteile im falschen Lager.
Bei Lager->Erzeugnis fertigen werden die Bestandteile anscheinend im "Ziellager" gesucht.
Richtig wäre die einzelnen Bestandteile aus dem jeweiligen Standardlager auszulagern.
Auch die Fehlermeldung wurde entsprechend ergänzt:
"Zum Fertigen fehlen ... im Lager ..."