Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision d6419783

Von Bernd Bleßmann vor etwa 1 Jahr hinzugefügt

  • ID d64197838322808bad258968b7c7dd45682ff512
  • Vorgänger 6b12eb85
  • Nachfolger 6b8e3b8f

EK von Erzeugnissen und Sortimenten setzen: Artikel nicht cachen.

Wenn hier die Erzeugnisse oder Sortimenten gechached werden, dann kann
es passieren, das die Preise nicht richtig summiert werden, wenn sich in
einem Request die Preise mehrerer Bestandteile ändern (z.B. EK-Rechnung).

Dann wird der ersten Bestandteil geladen (in SL::IR) und der Preis geändert.
Hier wurden dann alle Erzeugnisse/Sortimente die dieses Bestandteil haben
gecached geladen. Dann wird die EK-Preis-Summe neu berechnet mit der Änderung
des Preises des ersten Bestandteils.
Wenn diese Rekursion durch ist, wird in SL::IR das zweite Bestandteil geladen
und der Preis wird angepasst.
In der Schleife hier werden dann wieder alle Erzeugnisse/Sortimente geladen,
die dieses zweite Bestandteil haben. Aber die sind noch im Cache. Und in der
Summier-Routine wird dann der Preis des Bestandteils (bzw. das Bestandteil)
nicht neu geladen und der alte Preis wird verwendet.

Darum hier erstmal nicht cachen.

Unterschiede anzeigen:

SL/DB/Part.pm
573 573
  my $assemblies  = SL::DB::Manager::Assembly->get_all(      where => [parts_id => $self->id ]);
574 574

  
575 575
  foreach my $assembly (@{ $assemblies }) {
576
    next unless ref $assembly eq 'SL::DB::Assembly';
577
    my $a = SL::DB::Part->load_cached($assembly->id);
576
    my $a = $assembly->assembly_part;
578 577
    $a->update_attributes(lastcost => $a->items_lastcost_sum);
579 578
    $a->set_lastcost_assemblies_and_assortiments;
580 579
  }
581 580
  foreach my $assortment (@{ $assortments }) {
582
    next unless ref $assortment eq 'SL::DB::AssortmentItem';
583
    my $a = SL::DB::Part->load_cached($assortment->assortment_id);
581
    my $a = $assortment->assortment;
584 582
    $a->update_attributes(lastcost => $a->items_lastcost_sum);
585 583
    $a->set_lastcost_assemblies_and_assortiments;
586 584
  }

Auch abrufbar als: Unified diff