Revision d6419783
Von Bernd Bleßmann vor etwa 1 Jahr hinzugefügt
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
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.