X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/0956f2d427fe43c70fca245bc55ce85423b76ce8..d2ed673eafba1bbfeeca578dc19cc630523ba0cf:/SL/DB/Order.pm diff --git a/SL/DB/Order.pm b/SL/DB/Order.pm index dac89d30e..8d7088f49 100644 --- a/SL/DB/Order.pm +++ b/SL/DB/Order.pm @@ -49,7 +49,7 @@ __PACKAGE__->meta->add_relationship( }, ); -SL::DB::Helper::Attr::make(__PACKAGE__, exchangerate => 'numeric'); +SL::DB::Helper::Attr::make(__PACKAGE__, daily_exchangerate => 'numeric'); __PACKAGE__->meta->initialize; @@ -120,15 +120,15 @@ sub is_sales { return !!shift->customer_id; } -sub exchangerate { +sub daily_exchangerate { my ($self, $val) = @_; return 1 if $self->currency_id == $::instance_conf->get_currency_id; - # unable to determine if sales or purchase - return undef if !$self->has_customervendor; - - my $rate = $self->is_sales ? 'buy' : 'sell'; + my $rate = (any { $self->is_type($_) } qw(sales_quotation sales_order)) ? 'buy' + : (any { $self->is_type($_) } qw(request_quotation purchase_order)) ? 'sell' + : undef; + return if !$rate; if (defined $val) { croak t8('exchange rate has to be positive') if $val <= 0; @@ -277,7 +277,7 @@ sub new_from { } my %args = ( map({ ( $_ => $source->$_ ) } qw(amount cp_id currency_id cusordnumber customer_id delivery_customer_id delivery_term_id delivery_vendor_id - department_id employee_id globalproject_id intnotes marge_percent marge_total language_id netamount notes + department_id employee_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id transaction_description vendor_id )), @@ -392,7 +392,7 @@ sub new_from_multi { } foreach my $attr (qw(cp_id currency_id employee_id salesman_id department_id delivery_customer_id delivery_vendor_id shipto_id - globalproject_id)) { + globalproject_id exchangerate)) { $attributes{$attr} = undef if any { ($sources->[0]->$attr||0) != ($_->$attr||0) } @$sources; } @@ -495,6 +495,30 @@ Returns one of the following string types: Returns true if the order is of the given type. +=head2 C + +Gets or sets the exchangerate object's value. This is the value from the +table C depending on the order's currency, the transdate and +if it is a sales or purchase order. + +The order object (respectively the table C) has an own column +C which can be get or set with the accessor C. + +The idea is to drop the legacy table C in the future and to +give all relevant tables it's own C column. + +So, this method is here if you need to access the "legacy" exchangerate via +an order object. + +=over 4 + +=item C<$val> + +(optional) If given, the exchangerate in the "legacy" table is set to this +value, depending on currency, transdate and sales or purchase. + +=back + =head2 C Creates a new delivery order with C<$self> as the basis by calling