Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0956f2d4

Von Felix Eichler vor mehr als 4 Jahren hinzugefügt

  • ID 0956f2d427fe43c70fca245bc55ce85423b76ce8
  • Vorgänger e8a62150
  • Nachfolger 982a9422

Auftragsschnellerfassung: Korrekturen für Währung/Wechselkurs

- Feld auf disabled setzen wenn nicht gebraucht
- _as_null_number damit undef nicht zu 0 wird
- Übersetzte Fehlermeldungen

ticket #9491

(cherry picked from commit c581e4685a217bdd5b73380b1f808037a473dd9f)
(cherry pick von odyn)

Unterschiede anzeigen:

SL/Controller/Order.pm
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,
};
}
$data = {
is_standard => $self->order->currency_id == $::instance_conf->get_currency_id,
currency_name => $self->order->currency->name,
exchangerate => $self->order->exchangerate_as_null_number,
};
$self->render(\SL::JSON::to_json($data), { type => 'json', process => 0 });
}
......
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 $exchangerate_as_null_number = delete $::form->{order}->{exchangerate_as_null_number};
$order->assign_attributes(%{$::form->{order}});
......
}
# set exchangerate after transdate and currency_id
$order->assign_attributes(exchangerate => $exchangerate);
$order->assign_attributes(exchangerate_as_null_number => $exchangerate_as_null_number) if $order->currency_id;
# remove deleted items
$self->item_ids_to_delete([]);
SL/DB/Order.pm
use SL::DB::Helper::PriceTaxCalculator;
use SL::DB::Helper::PriceUpdater;
use SL::DB::Helper::TransNumberGenerator;
use SL::Locale::String qw(t8);
use SL::RecordLinks;
use Rose::DB::Object::Helpers qw(as_tree);
......
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';
if (defined $val) {
croak 'exchange rate has to be positive' if $val <= 0;
croak t8('exchange rate has to be positive') if $val <= 0;
if (!$self->exchangerate_obj) {
$self->exchangerate_obj(SL::DB::Exchangerate->new(
currency_id => $self->currency_id,
......
} elsif (!defined $self->exchangerate_obj->$rate) {
$self->exchangerate_obj->$rate($val);
} else {
croak 'exchange rate already exists, no update allowed';
croak t8('exchange rate already exists, no update allowed');
}
}
return $self->exchangerate_obj->$rate if $self->exchangerate_obj;
js/kivi.Order.js
};
ns.update_exchangerate = function(event) {
var rate_input = $('#order_exchangerate_as_number');
rate_input.attr('name', '');
var rate_input = $('#order_exchangerate_as_null_number');
rate_input.prop('disabled', true);
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/update_exchangerate' });
......
method: 'POST',
dataType: 'json',
success: function(data){
if (data.currency_name) {
if (!data.is_standard) {
$('#currency_name').text(data.currency_name);
var rate_text = $('#exchangerate_text');
if (data.exchangerate) {
......
rate_input.hide();
} else {
rate_text.text('');
rate_input.show().attr('name', rate_input.data('name')).val(0);
rate_input.prop('disabled', false);
rate_input.show().val(0);
}
$('#exchangerate_settings').show();
} else {
$('#exchangerate_settings').hide();
}
if ($('#order_currency_id').val() != $('#old_currency_id').val() || data.exchangerate != $('#old_exchangerate').val()) {
console.log(data.is_standard);
console.log(data.exchangerate);
console.log($('#old_exchangerate').val());
if ($('#order_currency_id').val() != $('#old_currency_id').val() ||
!data.is_standard && data.exchangerate != $('#old_exchangerate').val()) {
kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please update prices.'));
}
$('#old_currency_id').val($('#order_currency_id').val());
......
};
ns.exchangerate_changed = function(event) {
if (kivi.parse_amount($('#order_exchangerate_as_number').val()) != kivi.parse_amount($('#old_exchangerate').val())) {
if (kivi.parse_amount($('#order_exchangerate_as_null_number').val()) != kivi.parse_amount($('#old_exchangerate').val())) {
kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please update prices.'));
$('#old_exchangerate').val($('#order_exchangerate_as_number').val());
$('#old_exchangerate').val($('#order_exchangerate_as_null_number').val());
}
};
......
$('#order_currency_id').change(kivi.Order.update_exchangerate);
$('#order_transdate_as_date').change(kivi.Order.update_exchangerate);
$('#order_exchangerate_as_number').change(kivi.Order.exchangerate_changed);
$('#order_exchangerate_as_null_number').change(kivi.Order.exchangerate_changed);
if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.sellprice, -2)) });
locale/de/all
'error while unlinking payment #1 : ' => 'Fehler beim Zurücksetzen von Zahlung #1:',
'every third month' => 'vierteljährlich',
'every time' => 'immer',
'exchange rate already exists, no update allowed' => 'Wechselkurs existiert bereits und kann nicht geändert werden',
'exchange rate has to be positive' => 'Wechselkurs muss positiv sein',
'executed' => 'ausgeführt',
'execution as user \'#1\'' => 'Ausführung als User »#1«',
'failed' => 'fehlgeschlagen',
templates/webpages/order/tabs/basic_data.html
<td>[% L.select_tag('order.taxzone_id', SELF.all_taxzones, default=SELF.order.taxzone_id, title_key='description', style='width: 300px', class='recalc') %]</td>
</tr>
[% SET currency_id = SELF.order.currency_id || INSTANCE_CONF.get_currency_id # use default currency for new order %]
[% IF SELF.order.exchangerate %]
[% SET exchangerate = SELF.order.exchangerate_as_null_number %]
[% END %]
<tr id="currency_settings">
<th align="right">[% 'Currency' | $T8 %]</th>
<td>[% L.select_tag('order.currency_id', SELF.all_currencies, default=SELF.order.currency_id, value_key='id', title_key='name') %]</td>
<td>[% L.select_tag('order.currency_id', SELF.all_currencies, default=currency_id, value_key='id', title_key='name') %]</td>
</tr>
<tr id="exchangerate_settings" [%- IF !SELF.order.currency_id || SELF.order.currency_id==INSTANCE_CONF.get_currency_id %]style='display:none'[%- END %]>
<tr id="exchangerate_settings" [%- IF currency_id==INSTANCE_CONF.get_currency_id %]style='display:none'[%- END %]>
<th align="right">[% 'Exchangerate' | $T8 %]</th>
<td> 1 <span id="currency_name">[% SELF.order.currency.name %]</span> =
<span id="exchangerate_text">
[% IF SELF.order.exchangerate %]
[% HTML.escape(SELF.order.exchangerate_as_number) %]
[% IF exchangerate %]
[% HTML.escape(exchangerate) %]
[% END %]
</span>
[% IF !SELF.order.currency_id || SELF.order.currency_id==INSTANCE_CONF.get_currency_id || SELF.order.exchangerate %]
[% L.input_tag('', '', size="15", id='order_exchangerate_as_number', 'data-name'='order.exchangerate_as_number', style='display:none') %]
[% IF currency_id==INSTANCE_CONF.get_currency_id || SELF.order.exchangerate %]
[% L.input_tag('order.exchangerate_as_null_number', '', size="15", style='display:none', disabled=1) %]
[% ELSE %]
[% L.input_tag('order.exchangerate_as_number', 0, size="15") %]
[% L.input_tag('order.exchangerate_as_null_number', 0, size="15") %]
[% END %]
[% INSTANCE_CONF.default_currency %]
[% L.hidden_tag('old_currency_id', SELF.order.currency_id) %]
[% L.hidden_tag('old_exchangerate', SELF.order.exchangerate_as_number) %]
[% L.hidden_tag('old_currency_id', currency_id) %]
[% L.hidden_tag('old_exchangerate', exchangerate) %]
</td>
</tr>

Auch abrufbar als: Unified diff