Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / SL / PriceSource / Price.pm
index b753e0c..71bd1ff 100644 (file)
@@ -7,14 +7,14 @@ use Rose::Object::MakeMethods::Generic (
   scalar => [ qw(price description spec price_source invalid missing) ],
 );
 
   scalar => [ qw(price description spec price_source invalid missing) ],
 );
 
-use SL::DB::Helper::Attr;
+require SL::DB::Helper::Attr;
 SL::DB::Helper::Attr::make(__PACKAGE__,
   price => 'numeric(15,5)',
 );
 
 sub source {
   $_[0]->price_source
 SL::DB::Helper::Attr::make(__PACKAGE__,
   price => 'numeric(15,5)',
 );
 
 sub source {
   $_[0]->price_source
-  ?  $_[0]->price_source->name . '/' . $_[0]->spec
+  ? $_[0]->price_source->name . '/' . $_[0]->spec
   : '';
 }
 
   : '';
 }
 
@@ -26,8 +26,16 @@ sub full_description {
     : $self->description
 }
 
     : $self->description
 }
 
+sub source_description {
+  my ($self) = @_;
+
+  $self->price_source
+    ? $self->price_source->description
+    : $self->description
+}
+
 sub to_str {
 sub to_str {
-  "source: @{[ $_[0]->source ]}, price: @{[ $_[0]->price]}, description: @{[ $_[0]->description ]}"
+  "source: @{[ $_[0]->source ]}, price: @{[ $_[0]->price ]}, description: @{[ $_[0]->description ]}"
 }
 
 1;
 }
 
 1;
@@ -45,35 +53,31 @@ SL::PriceSource::Price - contrainer to pass calculated prices around
   # in PriceSource::Base implementation
   $price = SL::PriceSource::Price->new(
     price        => 10.3,
   # in PriceSource::Base implementation
   $price = SL::PriceSource::Price->new(
     price        => 10.3,
-    spec         => '10.3', # something you can easily parse later
-    description  => t8('Fix price 10.3'),
+    spec         => '3', # something you can easily parse later
+    description  => t8('Fix price 10.3 for customer 3'),
     price_source => $self,
   )
 
     price_source => $self,
   )
 
-  # special empty price in SL::PriceSource
+  # special empty price in SL::PriceSource, for internal use.
   SL::PriceSource::Price->new(
     description => t8('None (PriceSource)'),
   );
 
   SL::PriceSource::Price->new(
     description => t8('None (PriceSource)'),
   );
 
-  # invalid price
+  # price can't be restored
   SL::PriceSource::Price->new(
   SL::PriceSource::Price->new(
-    price        => $original_price,
-    spec         => $original_spec,
-    description  => $original_description,
-    invalid      => t8('Offer expired #1 weeks ago', $dt->delta_weeks),
+    missing      => t8('Um, sorry, cannot find that one'),
     price_source => $self,
   );
 
     price_source => $self,
   );
 
-  # missing price
+  # invalid price
   SL::PriceSource::Price->new(
   SL::PriceSource::Price->new(
-    price        => $original_price,              # will keep last entered price
+    price        => $original_price,
     spec         => $original_spec,
     spec         => $original_spec,
-    description  => '',
-    missing      => t8('Um, sorry, cannot find that one'),
+    description  => $original_description,
+    invalid      => t8('Offer expired #1 weeks ago', $dt->delta_weeks),
     price_source => $self,
   );
 
     price_source => $self,
   );
 
-
 =head1 DESCRIPTION
 
 See L<SL::PriceSource> for information about the mechanism.
 =head1 DESCRIPTION
 
 See L<SL::PriceSource> for information about the mechanism.
@@ -89,7 +93,7 @@ implementations.
 
 The price. A price of 0 is special and is considered undesirable. If passed as
 part of C<available_prices> it will be filtered out. If returned as
 
 The price. A price of 0 is special and is considered undesirable. If passed as
 part of C<available_prices> it will be filtered out. If returned as
-C<best_price> or C<price_from_source> it will be warned about.
+C<best_price> or C<price_from_source> it will trigger a warning.
 
 =item C<spec>
 
 
 =item C<spec>
 
@@ -110,11 +114,15 @@ A ref to the creating algorithm.
 OPTIONAL. Both indicator and localized message that the price with this spec
 could not be reproduced and should be changed.
 
 OPTIONAL. Both indicator and localized message that the price with this spec
 could not be reproduced and should be changed.
 
+If price is missing, you do not need to supply anything except C<source>.
+
 =item C<invalid>
 
 OPTIONAL. Both indicator and localized message that the conditions for this
 price are no longer valid, and that the price should be changed.
 
 =item C<invalid>
 
 OPTIONAL. Both indicator and localized message that the conditions for this
 price are no longer valid, and that the price should be changed.
 
+If price is missing, you do not need to supply anything except C<source>.
+
 =back
 
 =head1 SEE ALSO
 =back
 
 =head1 SEE ALSO