1 # This file has been auto-generated only because it didn't exist.
 
   2 # Feel free to modify it at will; it will not be overwritten automatically.
 
   4 package SL::DB::PriceRule;
 
   8 use SL::DB::MetaSetup::PriceRule;
 
   9 use SL::DB::Manager::PriceRule;
 
  10 use Rose::DB::Object::Helpers qw(clone_and_reset);
 
  11 use SL::Locale::String qw(t8);
 
  13 __PACKAGE__->meta->add_relationship(
 
  15     type         => 'one to many',
 
  16     class        => 'SL::DB::PriceRuleItem',
 
  17     column_map   => { id => 'price_rules_id' },
 
  21 __PACKAGE__->meta->initialize;
 
  23 use Rose::Object::MakeMethods::Generic (
 
  24   'scalar --get_set_init' => [ qw(price_or_discount_state) ],
 
  28   my ($self, %params) = @_;
 
  30   die 'need record'      unless $params{record};
 
  31   die 'need record_item' unless $params{record_item};
 
  34     next if $_->match(%params);
 
  43     $_[0]->type eq 'customer' ? 1
 
  44   : $_[0]->type eq 'vendor'   ? 0 : do { die 'wrong type' };
 
  47 sub price_or_discount {
 
  48   my ($self, $value) = @_;
 
  51     my $number = $self->price || $self->discount;
 
  53       $self->discount($number);
 
  55       $self->price($number);
 
  57     $self->price_or_discount_state($value);
 
  59   $self->price_or_discount_state;
 
  62 sub price_or_discount_as_number {
 
  63   my ($self, @slurp) = @_;
 
  65   $self->price_or_discount ? $self->price(undef)               : $self->discount(undef);
 
  66   $self->price_or_discount ? $self->discount_as_number(@slurp) : $self->price_as_number(@slurp);
 
  69 sub init_price_or_discount_state {
 
  70     defined $_[0]->price ? 0
 
  71   : defined $_[0]->discount ? 1 : 0
 
  78   push @errors, $::locale->text('The name must not be empty.')              if !$self->name;
 
  79   push @errors, $::locale->text('Price or discount must not be zero.')      if !$self->price && !$self->discount;
 
  80   push @errors, $::locale->text('Pirce rules must have at least one rule.') if !@{[ $self->items ]};
 
  85 sub clone_and_reset_deep {
 
  88   my $clone = $self->clone_and_reset;
 
  89   $clone->items(map { $_->clone_and_reset } $self->items);
 
  95 sub full_description {
 
  98   my $items = join ', ', map { $_->full_description } $self->items;
 
  99   my $price = $self->price_or_discount
 
 100             ? t8('Discount #1%', $self->discount_as_number)
 
 101             : t8('Price #1', $self->price_as_number);
 
 103   sprintf "%s: %s (%s)", $self->name, $price, $items;
 
 109   # is use is in this case used by record_items for their current price source
 
 110   # so, get any of those that might have it
 
 111   require SL::DB::OrderItem;
 
 112   require SL::DB::DeliveryOrderItem;
 
 113   require SL::DB::InvoiceItem;
 
 115   my $price_source_spec = 'price_rules' . '/' . $self->id;
 
 117      SL::DB::Manager::OrderItem->get_all_count(query => [ active_price_source => $price_source_spec ])
 
 118   || SL::DB::Manager::DeliveryOrderItem->get_all_count(query => [ active_price_source => $price_source_spec ])
 
 119   || SL::DB::Manager::InvoiceItem->get_all_count(query => [ active_price_source => $price_source_spec ]);