: empty_price();
}
+sub discount_from_source {
+ my ($self, $source) = @_;
+ my ($source_name, $spec) = split m{/}, $source, 2;
+
+ my $class = SL::PriceSource::ALL->price_source_class_by_name($source_name);
+
+ return $class
+ ? $class->new(record_item => $self->record_item, record => $self->record)->discount_from_source($source, $spec)
+ : empty_discount();
+}
+
sub available_prices {
map { $_->available_prices } $_[0]->all_price_sources;
}
);
}
+sub empty_discount {
+ SL::PriceSource::Discount->new(
+ description => t8('None (PriceSource Discount)'),
+ );
+}
+
1;
__END__
Attempts to retrieve a formerly calculated price with the same conditions
+=item C<discount_from_source>
+
+Attempts to retrieve a formerly calculated discount with the same conditions
+
=item C<available_prices>
Returns all available prices.
+=item C<available_discounts>
+
+Returns all available discounts.
+
=item C<best_price>
Attempts to get the best available price. returns L<empty_price> if no price is found.
+=item C<best_discount>
+
+Attempts to get the best available discount. returns L<empty_discount> if no discount is found.
+
=item C<empty_price>
A special empty price, that does not change the previously entered price, and
opens the price field to manual changes.
+=item C<empty_discount>
+
+A special empty discount, that does not change the previously entered discount, and
+opens the discount field to manual changes.
+
=back
=head1 SEE ALSO
L<SL::PriceSource::Base>,
L<SL::PriceSource::Price>,
+L<SL::PriceSource::Discount>,
L<SL::PriceSource::ALL>
-=head1 BUGS
+=head1 BUGS AND CAVEATS
+
+=over 4
-None yet. :)
+=item *
+
+The current simple model of price sources providing a simple value in simple
+cases doesn't work well in situations where prices are modified by other
+properties. The same problem also causes headaches when trying to use price
+sources to compute positions in assemblies.
+
+The solution should be to split price sources in simple ones, which do not
+manage their interactions with record_items, but can be used in contexts
+without record_items, and complex ones which do, but have to be fed a dummy
+record_item. For the former there should be a wrapper that handles interactions
+with units, price_factors etc..
+
+=item *
+
+Currently it is only possible to provide additional prices, but not to restrict
+prices. Potential scenarios include credit limit customers which do not receive
+benefits from sales, or general ALLOW, DENY order calculation.
+
+=back
=head1 AUTHOR