use English qw(-no_match_vars);
use File::Spec;
use Cwd;
+use Sort::Naturally;
use Rose::Object::MakeMethods::Generic
(
my ($self) = @_;
$self->order->transdate(DateTime->now_local());
- my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1;
+ my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval :
+ $self->{type} eq 'sales_order' ? $::instance_conf->get_delivery_date_interval : 1;
$self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)) if !$self->order->reqdate;
+
$self->pre_render();
$self->render(
'order/form',
# Set new reqdate unless changed
if ($order->reqdate == $saved_order->reqdate) {
- my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1;
+ my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval :
+ $self->{type} eq 'sales_order' ? $::instance_conf->get_delivery_date_interval : 1;
$new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
} else {
$new_attrs{reqdate} = $order->reqdate;
if ($::form->{customer_id}) {
$::form->{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(where => [ cp_cv_id => $::form->{customer_id} ]);
+ $::form->{email_recipient_invoice_address} = SL::DB::Manager::Customer->find_by(id => $::form->{customer_id})->invoice_mail;
}
$self->render('oe/edit_periodic_invoices_config', { layout => 0 },
my $method = $sort_keys{$::form->{order_by}};
my @to_sort = map { { old_pos => $_->position, order_by => $method->($_) } } @{ $self->order->items_sorted };
if ($::form->{sort_dir}) {
- @to_sort = sort { $a->{order_by} cmp $b->{order_by} } @to_sort;
+ if ( $::form->{order_by} =~ m/qty|sellprice|discount/ ){
+ @to_sort = sort { $a->{order_by} <=> $b->{order_by} } @to_sort;
+ } else {
+ @to_sort = sort { $a->{order_by} cmp $b->{order_by} } @to_sort;
+ }
} else {
- @to_sort = sort { $b->{order_by} cmp $a->{order_by} } @to_sort;
+ if ( $::form->{order_by} =~ m/qty|sellprice|discount/ ){
+ @to_sort = sort { $b->{order_by} <=> $a->{order_by} } @to_sort;
+ } else {
+ @to_sort = sort { $b->{order_by} cmp $a->{order_by} } @to_sort;
+ }
}
$self->js
->run('kivi.Order.redisplay_items', \@to_sort)
my $row_as_html = $self->p->render('order/tabs/_second_row', ITEM => $item, TYPE => $self->type);
$self->js
- ->html('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', $row_as_html)
- ->data('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', 'loaded', 1);
+ ->html('#second_row_' . $item_id, $row_as_html)
+ ->data('#second_row_' . $item_id, 'loaded', 1);
}
sub js_redisplay_line_values {
# be retrieved via items until the order is saved. Adding empty items to new
# order here solves this problem.
my $order;
- $order = SL::DB::Manager::Order->find_by(id => $::form->{id}) if $::form->{id};
+ $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())));
tax => $tax });
}
- pairwise { $a->{linetotal} = $b->{linetotal} } @{$self->order->items}, @{$pat{items}};
+ pairwise { $a->{linetotal} = $b->{linetotal} } @{$self->order->items_sorted}, @{$pat{items}};
}
# get data for saving, printing, ..., that is not changed in the form
sub workflow_sales_or_purchase_order {
my ($self) = @_;
+ # always save
+ my $errors = $self->save();
+
+ if (scalar @{ $errors }) {
+ $self->js->flash('error', $_) foreach @{ $errors };
+ return $self->js->render();
+ }
+
my $destination_type = $::form->{type} eq sales_quotation_type() ? sales_order_type()
: $::form->{type} eq request_quotation_type() ? purchase_order_type()
t8('Workflow'),
],
action => [
- t8('Sales Order'),
+ t8('Save and Sales Order'),
submit => [ '#order_form', { action => "Order/sales_order" } ],
only_if => (any { $self->type eq $_ } (sales_quotation_type(), purchase_order_type())),
disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,
],
action => [
- t8('Purchase Order'),
+ t8('Save and Purchase Order'),
submit => [ '#order_form', { action => "Order/purchase_order" } ],
only_if => (any { $self->type eq $_ } (sales_order_type(), request_quotation_type())),
disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,