Auftrags-Controller: Menge vor Preisquellenermittlung auf 1, wenn ungesetzt
[kivitendo-erp.git] / SL / DB / PriceRuleItem.pm
index 91870c1..006556d 100644 (file)
@@ -7,7 +7,6 @@ use strict;
 
 use SL::DB::MetaSetup::PriceRuleItem;
 use SL::DB::Manager::PriceRuleItem;
-use Rose::DB::Object::Helpers qw(clone_and_reset);
 use SL::Locale::String qw(t8);
 
 __PACKAGE__->meta->initialize;
@@ -37,12 +36,15 @@ sub match_business {
 sub match_partsgroup {
   $_[0]->value_int == $_[1]{record_item}->parts->partsgroup_id;
 }
+sub match_part {
+  $_[0]->value_int == $_[1]{record_item}->parts_id;
+}
 sub match_qty {
   if ($_[0]->op eq 'eq') {
     return $_[0]->value_num == $_[1]{record_item}->qty
-  } elsif ($_[0]->op eq 'lt') {
+  } elsif ($_[0]->op eq 'le') {
     return $_[0]->value_num <  $_[1]{record_item}->qty;
-  } elsif ($_[0]->op eq 'gt') {
+  } elsif ($_[0]->op eq 'ge') {
     return $_[0]->value_num >  $_[1]{record_item}->qty;
   }
 }
@@ -55,10 +57,23 @@ sub match_reqdate {
     return $_[0]->value_date >  $_[1]{record}->reqdate;
   }
 }
+sub match_transdate {
+  if ($_[0]->op eq 'eq') {
+    return $_[0]->value_date == $_[1]{record}->transdate;
+  } elsif ($_[0]->op eq 'lt') {
+    return $_[0]->value_date <  $_[1]{record}->transdate;
+  } elsif ($_[0]->op eq 'gt') {
+    return $_[0]->value_date >  $_[1]{record}->transdate;
+  }
+}
 sub match_pricegroup {
   $_[0]->value_int == $_[1]{record_item}->customervendor->pricegroup_id;
 }
 
+sub part {
+  require SL::DB::Part;
+  SL::DB::Part->load_cached($_[0]->value_int);
+}
 sub customer {
   require SL::DB::Customer;
   SL::DB::Customer->load_cached($_[0]->value_int);
@@ -93,19 +108,38 @@ sub full_description {
     $type eq 'customer'   ? t8('Customer')         . ' ' . $self->customer->displayable_name
   : $type eq 'vendor'     ? t8('Vendor')           . ' ' . $self->vendor->displayable_name
   : $type eq 'business'   ? t8('Type of Business') . ' ' . $self->business->displayable_name
-  : $type eq 'partsgroup' ? t8('Group')            . ' ' . $self->partsgroup->displayable_name
+  : $type eq 'partsgroup' ? t8('Partsgroup')       . ' ' . $self->partsgroup->displayable_name
   : $type eq 'pricegroup' ? t8('Pricegroup')       . ' ' . $self->pricegroup->displayable_name
+  : $type eq 'part'       ? t8('Part')             . ' ' . $self->part->displayable_name
   : $type eq 'qty' ? (
-       $op eq 'eq' ? t8('Qty equals #1',    $self->value_num_as_number)
-     : $op eq 'lt' ? t8('Qty less than #1', $self->value_num_as_number)
-     : $op eq 'gt' ? t8('Qty more than #1', $self->value_num_as_number)
+       $op eq 'eq' ? t8('Qty equals #1',             $self->value_num_as_number)
+     : $op eq 'lt' ? t8('Qty less than #1',          $self->value_num_as_number)
+     : $op eq 'gt' ? t8('Qty more than #1',          $self->value_num_as_number)
+     : $op eq 'le' ? t8('Qty equal or less than #1', $self->value_num_as_number)
+     : $op eq 'ge' ? t8('Qty equal or more than #1', $self->value_num_as_number)
      : do { die "unknown op $op for type $type" } )
   : $type eq 'reqdate' ? (
        $op eq 'eq' ? t8('Reqdate is #1',        $self->value_date_as_date)
      : $op eq 'lt' ? t8('Reqdate is before #1', $self->value_date_as_date)
      : $op eq 'gt' ? t8('Reqdate is after #1',  $self->value_date_as_date)
      : do { die "unknown op $op for type $type" } )
+  : $type eq 'transdate' ? (
+       $op eq 'eq' ? t8('Transdate is #1',        $self->value_date_as_date)
+     : $op eq 'lt' ? t8('Transdate is before #1', $self->value_date_as_date)
+     : $op eq 'gt' ? t8('Transdate is after #1',  $self->value_date_as_date)
+     : do { die "unknown op $op for type $type" } )
   : do { die "unknown type $type" }
 }
 
+sub validate {
+  my ($self) = @_;
+
+  my @errors;
+  push @errors, t8('Rule for part must not be empty')     if $self->type eq 'part'     && !$self->value_int;
+  push @errors, t8('Rule for customer must not be empty') if $self->type eq 'customer' && !$self->value_int;
+  push @errors, t8('Rule for vendor must not be empty')   if $self->type eq 'vendor'   && !$self->value_int;
+
+  return @errors;
+}
+
 1;