Revision 9df9b3fc
Von Jan Büren vor etwa 2 Jahren hinzugefügt
SL/BackgroundJob/UpdateExchangerates/Base.pm | ||
---|---|---|
package SL::BackgroundJob::UpdateExchangerates::Base;
|
||
|
||
use strict;
|
||
|
||
use parent qw(Rose::Object);
|
||
|
||
use Rose::Object::MakeMethods::Generic (
|
||
scalar => [ qw(options) ],
|
||
);
|
||
|
||
sub update_rates {
|
||
my ($self, $rates) = @_;
|
||
die 'needs to be overwritten';
|
||
}
|
||
|
||
sub translate_currency_name {
|
||
my ($self, $name) = @_;
|
||
|
||
return $name if (!$self->options->{translate});
|
||
return $self->options->{translate}->{$name} if $self->options->{translate}->{$name};
|
||
return $name;
|
||
}
|
||
|
||
|
||
1;
|
||
|
||
|
||
__END__
|
||
|
||
=encoding utf-8
|
||
|
||
=head1 NAME
|
||
|
||
SL::BackgroundJob::UpdateExchangerates::Base - Base class for background job to update exchange rates.
|
||
|
||
=head1 SYNOPSIS
|
||
|
||
# in update-worker:
|
||
use parent qw(SL::BackgroundJob::UpdateExchangerates::Base);
|
||
|
||
# implement interface
|
||
sub update_rates {
|
||
my ($self, $rates) = @_;
|
||
|
||
foreach my $rate (@$rates) {
|
||
my $from = $self->translate_currency_name($rate->{from}->name);
|
||
my $to = $self->translate_currency_name($rate->{to}->name);
|
||
if ( $from eq 'EUR' && $to eq 'USD') {
|
||
$rate->{rate} = 0.9205 if $rate->{dir} eq 'buy';
|
||
$rate->{rate} = 0.9202 if $rate->{dir} eq 'sell';
|
||
}
|
||
}
|
||
}
|
||
|
||
=head1 DESCRIPTION
|
||
|
||
This is a base class for a worker to update exchange rates.
|
||
|
||
=head1 INTERFACE
|
||
|
||
=over 4
|
||
|
||
=item C<update_rates $rates>
|
||
|
||
Your class will be instanciated and the update_rates method will be invoked.
|
||
This method can update known requeseted rates. Therefor an array of hashes with
|
||
information of the requested rates is provided. Each hash consists of the
|
||
following keys:
|
||
|
||
=over 5
|
||
|
||
=item
|
||
|
||
from: currency (instance of SL::DB::Currency) to be converted from
|
||
|
||
=item
|
||
|
||
to: currency (instance of SL::DB::Currency) to be converted to
|
||
|
||
=item
|
||
|
||
dir: 'bye' or 'sell'
|
||
|
||
=back
|
||
|
||
Your class should add a 'rate'-entry to each hash, if it can provide the rate
|
||
information. If not, it should leave the hash-entry as it is.
|
||
|
||
=back
|
||
|
||
=head1 FUNCTIONS
|
||
|
||
=over 4
|
||
|
||
=item C<translate_currency_name $name>
|
||
|
||
Returns the translated currency name, if a translation is given. This can be used to translate client specific
|
||
currency notations to the one used by the worker module. Translations are give as data to the background job:
|
||
|
||
options:
|
||
translate:
|
||
£: GBP
|
||
|
||
=back
|
||
|
||
=head1 AUTHOR
|
||
|
||
Bernd Bleßmann E<lt>bernd@kivitendo-premium.deE<gt>
|
||
|
||
=cut
|
||
|
Auch abrufbar als: Unified diff
vergessene Base-Class für UpdateExchangerates