Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 139baad4

Von Jan Büren vor fast 15 Jahren hinzugefügt

  • ID 139baad43c39b39535ca96ddb22982026fa3802c
  • Vorgänger 2e50c674
  • Nachfolger 48a6b365

Schönere Codeformatierungen, für meine damaligen ersten Verbrechen in LxO ...

Unterschiede anzeigen:

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