Projekt

Allgemein

Profil

Herunterladen (3,33 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::PriceSource::Price;

use strict;

use parent 'SL::DB::Object';
use Rose::Object::MakeMethods::Generic (
scalar => [ qw(price description spec price_source invalid missing) ],
'scalar --get_set_init' => [ qw(priority) ],
);

require SL::DB::Helper::Attr;
SL::DB::Helper::Attr::make(__PACKAGE__,
price => 'numeric(15,5)',
);

sub source {
$_[0]->price_source
? $_[0]->price_source->name . '/' . $_[0]->spec
: '';
}

sub full_description {
my ($self) = @_;

$self->price_source
? $self->price_source->description . ': ' . $self->description
: $self->description
}

sub source_description {
my ($self) = @_;

$self->price_source
? $self->price_source->description
: $self->description
}

sub to_str {
"source: @{[ $_[0]->source ]}, price: @{[ $_[0]->price ]}, description: @{[ $_[0]->description ]}"
}

sub init_priority {
3
}

1;

__END__

=encoding utf-8

=head1 NAME

SL::PriceSource::Price - contrainer to pass calculated prices around

=head1 SYNOPSIS

# in PriceSource::Base implementation
$price = SL::PriceSource::Price->new(
price => 10.3,
spec => '3', # something you can easily parse later
description => t8('Fix price 10.3 for customer 3'),
price_source => $self,
)

# special empty price in SL::PriceSource, for internal use.
SL::PriceSource::Price->new(
description => t8('None (PriceSource)'),
);

# price can't be restored
SL::PriceSource::Price->new(
missing => t8('Um, sorry, cannot find that one'),
price_source => $self,
);

# invalid price
SL::PriceSource::Price->new(
price => $original_price,
spec => $original_spec,
description => $original_description,
invalid => t8('Offer expired #1 weeks ago', $dt->delta_weeks),
price_source => $self,
);

=head1 DESCRIPTION

See L<SL::PriceSource> for information about the mechanism.

This is a container for prices that are generated by L<SL::PriceSource::Base>
implementations.

=head1 CONSTRUCTOR FIELDS

=over 4

=item C<price>

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 trigger a warning.

=item C<spec>

A unique string that can later be understood by the creating implementation.
Can be empty if the implementation only supports one price for a given
record_item.

=item C<description>

A localized short description of the origins of this price.

=item C<price_source>

A ref to the creating algorithm.

=item C<priority>

OPTIONAL. Prices may supply a numerical priority. Higher will trump over lower, even when
supplying higher prices. Defaults to 3 (as in middle of 1-5).

=item C<missing>

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.

If price is missing, you do not need to supply anything except C<source>.

=back

=head1 SEE ALSO

L<SL::PriceSource>,
L<SL::PriceSource::Base>,
L<SL::PriceSource::ALL>

=head1 BUGS

None yet. :)

=head1 AUTHOR

Sven Schoeling E<lt>s.schoeling@linet-services.deE<gt>

=cut
(8-8/11)