# ------------------------------------------------------------------------------ # OBJECT CREATION # ------------------------------------------------------------------------------ sub _create_accessors { my %OrderObjectFields = @_; foreach my $field (keys %OrderObjectFields) { my $default = $OrderObjectFields{ $field }; my $code = ' sub '.$field.' { my $value = (scalar @_>1? $_[0]->{"'.$field.'"} = $_[1] : $_[0]->{"'.$field.'"} ); $value ="'.$default.'" unless defined $value; $value; }'; eval $code; die $@ if( $@ ); } } # ------------------------------------------------------------------------------ BEGIN { _create_accessors( 'order_no' => 0 , 'items_in_order' => '', 'supplier_list' => '', ); } # ------------------------------------------------------------------------------ # STANDARD OBJECT METHODS # ------------------------------------------------------------------------------ sub get { my( $self, $attribute ) = @_; return $self->{$attribute}; } # ------------------------------------------------------------------------------ sub set { my( $self, $attribute, $value ) = @_; $self->{$attribute} = $value; } #### sub set_stock { my( $self, $supplier, $line, $stockLevel ) = @_; my $supplierList = (); my $supplierNumber = $supplier->supplier_id; # $supplierList will be a reference to an array of references to hashes. unless( $supplierList = $self->get('supplier_list') ) { die( "Cannot set stock level when supplier list is corrupt: $supplierList" ); } foreach my $supp (@$supplierList) { next unless( $supp->{supplier_id} == $supplierNumber ); my $reference = $line->reference; # Here is the update. $supp->{$reference} = $stockLevel; } }