$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();
}
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];
$self->_js_load_second_row($item, $item_id, 0);
}
+ $self->js->run('kivi.Order.init_row_handlers') if $self->order->is_sales; # for lastcosts change-callback
+
$self->js->render();
}
->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->lastcost($item->part->lastcost) if $is_new;
+ $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->lastcost($item->part->lastcost) if $is_new && !defined $attr->{lastcost_as_number};
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;
+ $new_attr{lastcost} = $part->lastcost;
# 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
$self->{all_projects} = SL::DB::Manager::Project->get_all(where => [ or => [ id => $self->order->globalproject_id,
active => 1 ] ],
sort_by => 'projectnumber');
- $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all_sorted();
+ $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all_sorted(where => [ or => [ id => $self->order->payment_id,
+ obsolete => 0 ] ]);
+
$self->{all_delivery_terms} = SL::DB::Manager::DeliveryTerm->get_all_sorted();
$self->{current_employee_id} = SL::DB::Manager::Employee->current->id;
my @all_objects = $webdav->get_all_objects;
@{ $self->{template_args}->{WEBDAV} } = map { { name => $_->filename,
type => t8('File'),
- link => File::Spec->catdir($webdav_path, $_->filename),
+ link => File::Spec->catfile($_->full_filedescriptor),
} } @all_objects;
}
=item * periodic invoices
-=item * more details on second row (marge, ...)
-
=item * language / part translations
=item * access rights
=item *
-No indication that double click expands second row, no exand all button
-
-=item *
-
-Implementation of second row with a tbody for every item is not supported by
-our css.
-
-=item *
-
-As a consequence row striping does not currently work
+No indication that <shift>-up/down expands/collapses second row.
=item *