Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0f214df5

Von Waldemar Toews vor mehr als 8 Jahren hinzugefügt

  • ID 0f214df54e7f85f2bbbfc0dbd06c6add611992c5
  • Vorgänger f7c01833
  • Nachfolger dc89fd52

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 ..."

Unterschiede anzeigen:

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