$self->js
->run('kivi.Order.update_sellprice', $::form->{item_id}, $item->sellprice_as_number);
- $self->_js_redisplay_linetotals;
+ $self->_js_redisplay_line_values;
$self->_js_redisplay_amounts_and_taxes;
$self->js->render();
}
$self->_recalc();
- $self->_js_redisplay_linetotals;
+ $self->_js_redisplay_line_values;
$self->_js_redisplay_amounts_and_taxes;
$self->js->render();
}
$_[0]->render(\ $longdescription, { type => 'text' });
}
-# load the second row for one or more items (cvars only for now)
+# load the second row for one or more items
#
# This action gets the html code for all items second rows by rendering a template for
# the second row and sets the html code via client js.
sub action_load_second_rows {
my ($self) = @_;
+ $self->_recalc() if $self->order->is_sales; # for margin calculation
+
foreach my $item_id (@{ $::form->{item_ids} }) {
my $idx = first_index { $_ eq $item_id } @{ $::form->{orderitem_ids} };
my $item = $self->order->items_sorted->[$idx];
->data('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', 'loaded', 1);
}
-sub _js_redisplay_linetotals {
+sub _js_redisplay_line_values {
my ($self) = @_;
- my @data = map {$::form->format_amount(\%::myconfig, $_->{linetotal}, 2, 0)} @{ $self->order->items_sorted };
+ my $is_sales = $self->order->is_sales;
+
+ # sales orders with margins
+ my @data;
+ if ($is_sales) {
+ @data = map {
+ [
+ $::form->format_amount(\%::myconfig, $_->{linetotal}, 2, 0),
+ $::form->format_amount(\%::myconfig, $_->{marge_total}, 2, 0),
+ $::form->format_amount(\%::myconfig, $_->{marge_percent}, 2, 0),
+ ]} @{ $self->order->items_sorted };
+ } else {
+ @data = map {
+ [
+ $::form->format_amount(\%::myconfig, $_->{linetotal}, 2, 0),
+ ]} @{ $self->order->items_sorted };
+ }
+
$self->js
- ->run('kivi.Order.redisplay_linetotals', \@data);
+ ->run('kivi.Order.redisplay_line_values', $is_sales, \@data);
}
sub _js_redisplay_amounts_and_taxes {
$item ||= SL::DB::OrderItem->new(custom_variables => []);
$item->assign_attributes(%$attr);
- $item->longdescription($item->part->notes) if $is_new && !defined $attr->{longdescription};
- # item fields that currently can't be set in in row but are needed:
+ $item->longdescription($item->part->notes) if $is_new && !defined $attr->{longdescription};
+ $item->project_id($record->globalproject_id) if $is_new && !defined $attr->{project_id};
+ # item fields that currently can't be set in row but are needed:
$item->lastcost($item->part->lastcost) if $is_new;
return $item;
# create a new item
#
-# This is used to add one (or more) items
+# This is used to add one item
sub _new_item {
my ($record, $attr) = @_;
$new_attr{discount} = $discount_src->discount;
$new_attr{active_price_source} = $price_src;
$new_attr{active_discount_source} = $discount_src;
-
- $new_attr{longdescription} = $part->notes if ! defined $attr->{longdescription};
+ $new_attr{longdescription} = $part->notes if ! defined $attr->{longdescription};
+ $new_attr{project_id} = $record->globalproject_id;
# add_custom_variables adds cvars to an orderitem with no cvars for saving, but
# they cannot be retrieved via custom_variables until the order/orderitem is