X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FPriceSource.pm;h=e7a5906dd2f968b750b6ac9aae7c39e1fc792cd2;hb=54746051d506e6e6c76c77b85d381cae4bf86b89;hp=470182cc959e7921d84225dfd1ffbc75986a09ba;hpb=418f0e7084b02c1c057e4f10b858b6bffc25e354;p=kivitendo-erp.git diff --git a/SL/PriceSource.pm b/SL/PriceSource.pm index 470182cc9..e7a5906dd 100644 --- a/SL/PriceSource.pm +++ b/SL/PriceSource.pm @@ -6,7 +6,7 @@ use Rose::Object::MakeMethods::Generic ( scalar => [ qw(record_item record) ], ); -use List::UtilsBy qw(min_by); +use List::UtilsBy qw(min_by max_by); use SL::PriceSource::ALL; use SL::PriceSource::Price; use SL::Locale::String; @@ -14,9 +14,9 @@ use SL::Locale::String; sub all_price_sources { my ($self) = @_; - return map { + map { $_->new(record_item => $self->record_item, record => $self->record) - } SL::PriceSource::ALL->all_price_sources + } SL::PriceSource::ALL->all_enabled_price_sources } sub price_from_source { @@ -26,7 +26,7 @@ sub price_from_source { my $class = SL::PriceSource::ALL->price_source_class_by_name($source_name); return $class - ? $class->new(record_item => $self->record_item)->price_from_source($source, $spec) + ? $class->new(record_item => $self->record_item, record => $self->record)->price_from_source($source, $spec) : empty_price(); } @@ -34,8 +34,16 @@ sub available_prices { map { $_->available_prices } $_[0]->all_price_sources; } +sub available_discounts { + map { $_->available_discounts } $_[0]->all_price_sources; +} + sub best_price { - min_by { $_->price } map { $_->best_price } $_[0]->all_price_sources; + min_by { $_->price } grep { $_->price > 0 } grep { $_ } map { $_->best_price } $_[0]->all_price_sources; +} + +sub best_discount { + max_by { $_->discount } grep { $_->discount } grep { $_ } map { $_->best_discount } $_[0]->all_price_sources; } sub empty_price { @@ -59,7 +67,7 @@ SL::PriceSource - mixin for price_sources in record items PriceSource is an interface that allows generic algorithms to be plugged together to calculate available prices for a position in a record. -Each algorithm can access details of the record to realize dependancies on +Each algorithm can access details of the record to realize dependencies on part, customer, vendor, date, quantity etc, which was previously not possible. =head1 BACKGROUND AND PHILOSOPY @@ -111,7 +119,7 @@ trying to be smart. The second and third one ensure that later on the calculation can be repeated so that invalid prices can be caught (because for example the special offer is no longer valid), and so that sales personnel have information about rising or falling prices. The fourth point ensures that -insular calculation processes can be developed independant of the core code. +insular calculation processes can be developed independent of the core code. =head1 INTERFACE METHODS