Projekt

Allgemein

Profil

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

use strict;

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

require SL::DB::Helper::Attr;
SL::DB::Helper::Attr::make(__PACKAGE__,
discount => '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 ]}, discount: @{[ $_[0]->discount ]}, description: @{[ $_[0]->description ]}"
}

sub init_priority {
3
}

1;

__END__

=encoding utf-8

=head1 NAME

SL::PriceSource::Discount - container to pass calculated discounts around

=head1 SYNOPSIS

# in PriceSource::Base implementation
$price = SL::PriceSource::Discount->new(
discount => 10,
spec => 'summersale2014', # something you can easily parse later
description => t8('10% discount during summer sale 2014'),
price_source => $self,
)

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

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

# invalid discount
SL::PriceSource::Discount->new(
discount => $original_discount,
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 discounts that are generated by L<SL::PriceSource::Base>
implementations.

=head1 CONSTRUCTOR FIELDS

=over 4

=item C<discount>

The discount in percent. A discount of 0 will be ignored. If passed as
part of C<available_prices> it will be filtered out. If returned as
C<best_discount> or C<discount_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 discount for a given
record_item.

=item C<description>

A localized short description of the origins of this discount.

=item C<price_source>

A ref to the creating algorithm.

=item C<priority>

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

=item C<missing>

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

If discount 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
discount are no longer valid, and that the discount should be changed.

If discount 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
(5-5/11)