Revision 6dd95f0b
Von Jan Büren vor mehr als 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