kivitendo/SL/BackgroundJob/UpdateExchangerates/Base.pm @ 31105ea5
9df9b3fc | Jan Büren | 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
|