Index: Delivery.pm =================================================================== --- Delivery.pm (revision 204) +++ Delivery.pm (revision 205) @@ -1,6 +1,9 @@ package webshop::Delivery; use base "Contenido::Document"; +use JSON::XS; +our $json = JSON::XS->new->utf8; + sub extra_properties { return ( @@ -12,6 +15,7 @@ }, { 'attr' => 'dtime', 'hidden' => 1 }, { 'attr' => 'price', 'type' => 'string', 'rusname' => 'Стоимость доставки (NN или NN%)', default => 0 }, + { 'attr' => 'price_modify', 'type' => 'cost_level', 'rusname' => 'Стоимость доставки с учетом стоимости заказа' }, { 'attr' => 'abstr', 'type' => 'text', 'rusname' => 'Краткое описание' }, { 'attr' => 'fields', 'type' => 'status_multi', 'rusname' => 'Поля, необходимые к заполнению', 'cases' => [ @@ -25,6 +29,30 @@ ) } +sub price_actual +{ + my $self = shift; + my $sum = shift; + my $price = $self->price; + $price = defined $price && $price =~ /^\d+$/ ? $price : 0; + + if ( $sum ) { + if ( $self->price_modify ) { + my $modify = $json->decode( $self->price_modify ); + if ( ref $modify eq 'ARRAY' && @$modify ) { + foreach my $mod ( @$modify ) { + if ( $mod->{level} <= $sum ) { + $price = $mod->{cost}; + } + } + } + } + return $price; + } else { + return $price; + } +} + sub class_name { return 'Способ доставки';