Revision 139baad4
Von Jan Büren vor mehr als 14 Jahren hinzugefügt
SL/WH.pm | ||
---|---|---|
144 | 144 |
# |
145 | 145 |
# ... Standard-Check oben Ende. Hier die eigentliche SQL-Abfrage |
146 | 146 |
# select parts_id,qty from assembly where id=1064; |
147 |
# Erweiterung für bug 935 am 23.4.09 - Erzeugnisse können Dienstleistungen enthalten, die ja nicht 'lagerbar' sind. |
|
148 |
# 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; |
|
149 |
# Erweiterung für bug 23.4.09 -2 Erzeugnisse in Erzeugnissen können nicht ausgelagert werden, wenn assembly nicht überprüft wird ... |
|
147 |
# Erweiterung für bug 935 am 23.4.09 - |
|
148 |
# Erzeugnisse können Dienstleistungen enthalten, die ja nicht 'lagerbar' sind. |
|
149 |
# select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id |
|
150 |
# where assembly.id=1066 and inventory_accno_id IS NOT NULL; |
|
151 |
# |
|
152 |
# Erweiterung für bug 23.4.09 -2 Erzeugnisse in Erzeugnissen können nicht ausgelagert werden, |
|
153 |
# wenn assembly nicht überprüft wird ... |
|
150 | 154 |
# patch von joachim eingespielt 24.4.2009: |
151 | 155 |
# my $query = qq|select parts_id,qty from assembly inner join parts |
152 | 156 |
# on assembly.parts_id = parts.id where assembly.id = ? and |
153 | 157 |
# (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|; |
154 | 158 |
|
155 | 159 |
|
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)|;
|
|
160 |
my $query = qq|select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id
|
|
161 |
where assembly.id = ? and (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|;
|
|
158 | 162 |
|
159 |
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id});
|
|
163 |
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); |
|
160 | 164 |
|
161 | 165 |
# Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet |
162 | 166 |
my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) |
... | ... | |
168 | 172 |
my $kannNichtFertigen ="Für dieses Erzeugnis sind keine Einzelteile definiert. |
169 | 173 |
Dementsprechend kann auch nichts hergestellt werden"; |
170 | 174 |
|
171 |
while (my $hash_ref = $sth_part_qty_assembly->fetchrow_hashref()) { # Schleife für $query=select parts_id,qty from assembly
|
|
175 |
while (my $hash_ref = $sth_part_qty_assembly->fetchrow_hashref()) { #Schleife für select parts_id,(...) from assembly
|
|
172 | 176 |
$kannNichtFertigen =""; # Wieder auf erfolgreich setzen LEER == keine Fehlermeldung |
173 | 177 |
my $partsQTY = $hash_ref->{qty} * $params{qty}; # benötigte teile * anzahl erzeugnisse |
174 | 178 |
my $currentPart_ID = $hash_ref->{parts_id}; |
175 | 179 |
|
176 | 180 |
# Überprüfen, ob diese Anzahl gefertigt werden kann |
177 |
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 |
|
181 |
my $max_parts = $self->get_max_qty_parts(parts_id => $currentPart_ID, # $self->method() == this.method() |
|
182 |
warehouse_id => $params{dst_warehouse_id}); |
|
178 | 183 |
|
179 | 184 |
if ($partsQTY > $max_parts){ |
180 |
# Gibt es hier ein Problem mit nicht "escapten" Zeichen? 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird |
|
181 |
$kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . " Einheiten der Ware:" . $self->get_part_description(parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen. <br>"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen |
|
182 |
next; # die weiteren Überprüfungen sind unnötig |
|
185 |
# Gibt es hier ein Problem mit nicht "escapten" Zeichen? |
|
186 |
# 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird |
|
187 |
|
|
188 |
$kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . |
|
189 |
" Einheiten der Ware:" . $self->get_part_description(parts_id => $currentPart_ID) . |
|
190 |
", um das Erzeugnis herzustellen. <br>"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen |
|
191 |
next; # die weiteren Überprüfungen sind unnötig, daher das nächste elemente prüfen (genaue Ausgabe, was noch fehlt) |
|
183 | 192 |
} |
184 | 193 |
|
185 | 194 |
# Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen |
... | ... | |
189 | 198 |
# und lösen den Rest dann so wie bei xplace im Barcode-Programm |
190 | 199 |
# S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich |
191 | 200 |
|
192 |
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|; |
|
201 |
my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber FROM inventory |
|
202 |
WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber having SUM(qty)>0|; |
|
193 | 203 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID); |
194 | 204 |
|
195 | 205 |
# Alle Werte zu dem einzelnen Artikel, die wir später auslagern |
... | ... | |
199 | 209 |
my $temppart_bin_id = $temphash_ref->{bin_id}; # kann man hier den quelllagerplatz beim verbauen angeben? |
200 | 210 |
my $temppart_chargenumber = $temphash_ref->{chargenumber}; |
201 | 211 |
my $temppart_qty = $temphash_ref->{sum}; |
202 |
if ($tmpPartsQTY > $temppart_qty) { # wir haben noch mehr waren zum wegbuchen. Wir buchen den kompletten Lagerplatzbestand und zählen die Hilfsvariable runter |
|
212 |
|
|
213 |
if ($tmpPartsQTY > $temppart_qty) { # wir haben noch mehr waren zum wegbuchen. |
|
214 |
# Wir buchen den kompletten Lagerplatzbestand und zählen die Hilfsvariable runter |
|
203 | 215 |
$tmpPartsQTY = $tmpPartsQTY - $temppart_qty; |
204 |
$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? |
|
205 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, $temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . $self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty); |
|
216 |
$temppart_qty = $temppart_qty * -1; # TODO beim analyiseren des sql-trace, war dieser wert positiv, |
|
217 |
# wenn * -1 als berechnung in der parameter-übergabe angegeben wird. |
|
218 |
# Dieser Wert IST und BLEIBT positiv!! Hilfe. |
|
219 |
# Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt? |
|
220 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, |
|
221 |
$temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . |
|
222 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty); |
|
206 | 223 |
|
207 | 224 |
# hier ist noch ein fehler am besten mit definierten erzeugnissen debuggen 02/2009 jb |
208 | 225 |
# idee: ausbuch algorithmus mit rekursion lösen und an- und abschaltbar machen |
... | ... | |
210 | 227 |
# auf jeden fall war der internal-server-error nach aktivierung von strict und warnings plus ein paar my-definitionen weg |
211 | 228 |
} else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören |
212 | 229 |
$tmpPartsQTY *=-1; |
213 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, $temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . $self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY); |
|
230 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, |
|
231 |
$temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . |
|
232 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY); |
|
214 | 233 |
last; # beendet die schleife (springt zum letzten element) |
215 | 234 |
} |
216 | 235 |
} # ende while SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id |
... | ... | |
220 | 239 |
} |
221 | 240 |
|
222 | 241 |
# soweit alles gut. Jetzt noch die wirkliche Lagerbewegung für das Erzeugnis ausführen ... |
223 |
my $transferAssemblySQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) |
|
242 |
my $transferAssemblySQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, |
|
243 |
comment, employee_id, qty, trans_id, trans_type_id) |
|
224 | 244 |
VALUES (?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'), |
225 | 245 |
(SELECT id FROM transfer_type WHERE direction = 'in' AND description = 'stock'))|; |
226 | 246 |
my $sthTransferAssemblySQL = prepare_query($form, $dbh, $transferAssemblySQL); |
227 |
do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, $params{dst_bin_id}, $params{chargenumber}, $params{comment}, $params{login}, $params{qty}); |
|
247 |
do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, |
|
248 |
$params{dst_bin_id}, $params{chargenumber}, $params{comment}, $params{login}, $params{qty}); |
|
228 | 249 |
$dbh->commit(); |
229 | 250 |
|
230 | 251 |
$main::lxdebug->leave_sub(); |
Auch abrufbar als: Unified diff
Schönere Codeformatierungen, für meine damaligen ersten Verbrechen in LxO ...