Projekt

Allgemein

Profil

Herunterladen (3,33 KB) Statistiken
| Zweig: | Markierung: | Revision:
eebe8e90 Sven Schöling
package SL::PriceSource::Price;

use strict;

use parent 'SL::DB::Object';
use Rose::Object::MakeMethods::Generic (
418f0e70 Sven Schöling
scalar => [ qw(price description spec price_source invalid missing) ],
9f666261 Sven Schöling
'scalar --get_set_init' => [ qw(priority) ],
eebe8e90 Sven Schöling
);

89b26688 Sven Schöling
require SL::DB::Helper::Attr;
df1b03d5 Sven Schöling
SL::DB::Helper::Attr::make(__PACKAGE__,
price => 'numeric(15,5)',
);

0409db7c Sven Schöling
sub source {
$_[0]->price_source
89b26688 Sven Schöling
? $_[0]->price_source->name . '/' . $_[0]->spec
0409db7c Sven Schöling
: '';
}

eebe8e90 Sven Schöling
sub full_description {
my ($self) = @_;

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

cf63992e Sven Schöling
sub source_description {
my ($self) = @_;

$self->price_source
? $self->price_source->description
89b26688 Sven Schöling
: $self->description
cf63992e Sven Schöling
}

df1b03d5 Sven Schöling
sub to_str {
89b26688 Sven Schöling
"source: @{[ $_[0]->source ]}, price: @{[ $_[0]->price ]}, description: @{[ $_[0]->description ]}"
df1b03d5 Sven Schöling
}

9f666261 Sven Schöling
sub init_priority {
3
}

eebe8e90 Sven Schöling
1;
418f0e70 Sven Schöling
__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,
89b26688 Sven Schöling
spec => '3', # something you can easily parse later
description => t8('Fix price 10.3 for customer 3'),
418f0e70 Sven Schöling
price_source => $self,
)

89b26688 Sven Schöling
# special empty price in SL::PriceSource, for internal use.
418f0e70 Sven Schöling
SL::PriceSource::Price->new(
description => t8('None (PriceSource)'),
);

89b26688 Sven Schöling
# price can't be restored
418f0e70 Sven Schöling
SL::PriceSource::Price->new(
89b26688 Sven Schöling
missing => t8('Um, sorry, cannot find that one'),
418f0e70 Sven Schöling
price_source => $self,
);

89b26688 Sven Schöling
# invalid price
418f0e70 Sven Schöling
SL::PriceSource::Price->new(
89b26688 Sven Schöling
price => $original_price,
418f0e70 Sven Schöling
spec => $original_spec,
89b26688 Sven Schöling
description => $original_description,
invalid => t8('Offer expired #1 weeks ago', $dt->delta_weeks),
418f0e70 Sven Schöling
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
89b26688 Sven Schöling
C<best_price> or C<price_from_source> it will trigger a warning.
418f0e70 Sven Schöling
=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.

9f666261 Sven Schöling
=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).

418f0e70 Sven Schöling
=item C<missing>

OPTIONAL. Both indicator and localized message that the price with this spec
could not be reproduced and should be changed.

89b26688 Sven Schöling
If price is missing, you do not need to supply anything except C<source>.

418f0e70 Sven Schöling
=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.

89b26688 Sven Schöling
If price is missing, you do not need to supply anything except C<source>.

418f0e70 Sven Schöling
=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