]> wagnertech.de Git - kivitendo-erp.git/commitdiff
SL::DB::Part: Setter für type=assembly bzgl. inventory_accno_id fixen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 16 Aug 2016 14:54:19 +0000 (16:54 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 16 Aug 2016 14:54:19 +0000 (16:54 +0200)
inventory_accno_id muss für Typ »assembly« immer auf undef stehen. Das
testet auch der Testcase. »type« hat allerdings das Falsche gemacht,
wofür im Testcase versucht wurde, ein Workaround zu implementieren,
indem »inventory_accno_id« explizit überschrieben werden.

Leider schlug der Test manchmal fehl, trotz des Workarounds: je nachdem,
ob beim Anlegen (»new_assembly«) zuerst der Parameter für »type« oder
der für »inventory_accno_id« ausgeführt wurde.  Die Reihenfolge der
Ausführung ist deswegen nicht deterministisch, weil in Perl das
Iterieren über Hashes gewollt nichtdeterministisch ist, um
Sicherheitsproblemen vorzubeugen.

Wir wandeln Funktionsparameter beim Anlegen von Rose-Objekten explizit
von Listen in Hashes (SL::DB::Object::assign_attributes); anschließend
wird über das Hash iteriert. Im konkreten Fall enthält das Hash sowohl
»type« als auch »inventory_accno_id«, und je Perls internem Seed
bzgl. der Hashiteration wurde mal die eine, mal die andere
Setter-Funktion zuerst ausgeführt.

SL/DB/Part.pm
t/part/assembly.t

index 57f0f31ab1f88c5db739e2b0716cb8c55442de67..a83e9bd75a5266a046d4182e9fa3cbcbbeb987c5 100644 (file)
@@ -70,7 +70,7 @@ sub type {
   if (@_ > 1) {
     die 'invalid type' unless $type =~ /^(?:part|service|assembly)$/;
     $self->assembly(          $type eq 'assembly' ? 1 : 0);
-    $self->inventory_accno_id($type ne 'service'  ? 1 : undef);
+    $self->inventory_accno_id($type eq 'part'     ? 1 : undef);
   }
 
   return 'assembly' if $self->assembly;
index ccef0122d0bdc38046a2a377b978d3fa11293886..d7da36ccaef3f86664707c76dbab875a4d97390f 100644 (file)
@@ -54,7 +54,6 @@ sub reset_state {
   $assembly_part = SL::DB::Part->new_assembly(partnumber         => 'as1',
                                                  description        => 'assembly',
                                                  unit               => $unit->name,
-                                                 inventory_accno_id => undef, # override
                                                 );
   $assembly_1 = SL::DB::Assembly->new(parts_id => $part1->id, qty => 3, bom => 1);
   $assembly_2 = SL::DB::Assembly->new(parts_id => $part2->id, qty => 3, bom => 1);