->replaceWith('#business_info_row', $self->build_business_info_row)
->val( '#order_taxzone_id', $self->order->taxzone_id)
->val( '#order_taxincluded', $self->order->taxincluded)
+ ->val( '#order_currency_id', $self->order->currency_id)
->val( '#order_payment_id', $self->order->payment_id)
->val( '#order_delivery_term_id', $self->order->delivery_term_id)
->val( '#order_intnotes', $self->order->intnotes)
->val( '#language_id', $self->order->$cv_method->language_id)
- ->focus( '#order_' . $self->cv . '_id');
+ ->focus( '#order_' . $self->cv . '_id')
+ ->run('kivi.Order.update_exchangerate');
$self->js_redisplay_amounts_and_taxes;
$self->js_redisplay_cvpartnumbers;
sub action_update_exchangerate {
my ($self) = @_;
- my $data = {};
- if ($self->order->currency_id != $::instance_conf->get_currency_id) {
- $data = {
- currency_name => $self->order->currency->name,
- exchangerate => $self->order->exchangerate_as_number,
- };
- }
+
+ my $data = {
+ is_standard => $self->order->currency_id == $::instance_conf->get_currency_id,
+ currency_name => $self->order->currency->name,
+ exchangerate => $self->order->daily_exchangerate_as_null_number,
+ };
+
$self->render(\SL::JSON::to_json($data), { type => 'json', process => 0 });
}
$price_src = $price_source->best_price
? $price_source->best_price
: $price_source->price_from_source("");
+ $price_src->price($::form->round_amount($price_src->price / $self->order->exchangerate, 5)) if $self->order->exchangerate;
$price_src->price(0) if !$price_source->best_price;
}
+
$item->sellprice($price_src->price);
$item->active_price_source($price_src);
# order here solves this problem.
my $order;
$order = SL::DB::Order->new(id => $::form->{id})->load(with => [ 'orderitems', 'orderitems.part' ]) if $::form->{id};
- $order ||= SL::DB::Order->new(orderitems => [],
- quotation => (any { $self->type eq $_ } (sales_quotation_type(), request_quotation_type())));
+ $order ||= SL::DB::Order->new(orderitems => [],
+ quotation => (any { $self->type eq $_ } (sales_quotation_type(), request_quotation_type())),
+ currency_id => $::instance_conf->get_currency_id());
my $cv_id_method = $self->cv . '_id';
if (!$::form->{id} && $::form->{$cv_id_method}) {
setup_order_from_cv($order);
}
- my $form_orderitems = delete $::form->{order}->{orderitems};
- my $form_periodic_invoices_config = delete $::form->{order}->{periodic_invoices_config};
- my $exchangerate = delete $::form->{order}->{exchangerate};
+ my $form_orderitems = delete $::form->{order}->{orderitems};
+ my $form_periodic_invoices_config = delete $::form->{order}->{periodic_invoices_config};
$order->assign_attributes(%{$::form->{order}});
$periodic_invoices_config->assign_attributes(%$periodic_invoices_config_attrs);
}
- # set exchangerate after transdate and currency_id
- $order->assign_attributes(exchangerate => $exchangerate);
-
# remove deleted items
$self->item_ids_to_delete([]);
foreach my $idx (reverse 0..$#{$order->orderitems}) {
$price_src->price($item->sellprice);
} else {
$price_src = $price_source->best_price
- ? $price_source->best_price
- : $price_source->price_from_source("");
+ ? $price_source->best_price
+ : $price_source->price_from_source("");
+ $price_src->price($::form->round_amount($price_src->price / $record->exchangerate, 5)) if $record->exchangerate;
$price_src->price(0) if !$price_source->best_price;
}
sub setup_order_from_cv {
my ($order) = @_;
- $order->$_($order->customervendor->$_) for (qw(taxzone_id payment_id delivery_term_id));
+ $order->$_($order->customervendor->$_) for (qw(taxzone_id payment_id delivery_term_id currency_id));
$order->intnotes($order->customervendor->notes);
sub recalc {
my ($self) = @_;
- $self->order->currency_id($::instance_conf->get_currency_id()) unless $self->order->currency_id;
-
my %pat = $self->order->calculate_prices_and_taxes();
$self->{taxes} = [];
=item * testing
-=item * currency
-
=item * credit limit
=item * more workflows (quotation, rfq)