use SL::MIME;
use SL::Util qw(trim);
use SL::YAML;
+use SL::DB::History;
use SL::DB::Order;
use SL::DB::Default;
use SL::DB::Unit;
$self->order->transdate(DateTime->now_local());
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;
+
+ if ( ($self->{type} eq 'sales_order' && $::instance_conf->get_deliverydate_on)
+ || ($self->{type} eq 'sales_quotation' && $::instance_conf->get_reqdate_on)
+ && (!$self->order->reqdate)) {
+ $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days));
+ }
$self->pre_render();
? DateTime->today_local
: $order->transdate;
- # Set new reqdate unless changed
+ # Set new reqdate unless changed if it is enabled in client config
if ($order->reqdate == $saved_order->reqdate) {
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);
+
+ if ( ($self->{type} eq 'sales_order' && !$::instance_conf->get_deliverydate_on)
+ || ($self->{type} eq 'sales_quotation' && !$::instance_conf->get_reqdate_on)) {
+ $new_attrs{reqdate} = '';
+ } else {
+ $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
+ }
} else {
$new_attrs{reqdate} = $order->reqdate;
}
$self->js->flash('info', t8('The PDF has been printed'));
}
- # copy file to webdav folder
- if ($self->order->number && $::instance_conf->get_webdav_documents) {
- my $webdav = SL::Webdav->new(
- type => $self->type,
- number => $self->order->number,
- );
- my $webdav_file = SL::Webdav::File->new(
- webdav => $webdav,
- filename => $pdf_filename,
- );
- eval {
- $webdav_file->store(data => \$pdf);
- 1;
- } or do {
- $self->js->flash('error', t8('Storing PDF to webdav folder failed: #1', $@));
- }
+ my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $pdf_filename);
+ if (scalar @warnings) {
+ $self->js->flash('warning', $_) for @warnings;
}
- if ($self->order->number && $::instance_conf->get_doc_storage) {
- eval {
- SL::File->save(object_id => $self->order->id,
- object_type => $self->type,
- mime_type => 'application/pdf',
- source => 'created',
- file_type => 'document',
- file_name => $pdf_filename,
- file_contents => $pdf);
- 1;
- } or do {
- $self->js->flash('error', t8('Storing PDF in storage backend failed: #1', $@));
- }
- }
- $self->js->render;
+
+ $self->save_history('PRINTED');
+
+ $self->js
+ ->run('kivi.ActionBar.setEnabled', '#save_and_email_action')
+ ->render;
}
# open the email dialog
return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self);
}
+ my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $::form->{attachment_filename});
+ if (scalar @warnings) {
+ flash_later('warning', $_) for @warnings;
+ }
+
my $sfile = SL::SessionFile::Random->new(mode => "w");
$sfile->fh->print($pdf);
$sfile->fh->close;
$self->order->update_attributes(intnotes => $intnotes);
+ $self->save_history('MAILED');
+
flash_later('info', t8('The email has been sent.'));
my @redirect_params = (
my $spool = $::lx_office_conf{paths}->{spool};
unlink map { "$spool/$_" } @spoolfiles if $spool;
+ $self->save_history('DELETED');
+
1;
}) || push(@{$errors}, $db->error);
}
}
}
+
+ $self->save_history('SAVED');
+
1;
}) || push(@{$errors}, $db->error);
$self->get_item_cvpartnumber($_) for @{$self->order->items_sorted};
$::request->{layout}->use_javascript("${_}.js") for qw(kivi.SalesPurchase kivi.Order kivi.File ckeditor/ckeditor ckeditor/adapters/jquery
- edit_periodic_invoices_config calculate_qty kivi.Validator follow_up);
+ edit_periodic_invoices_config calculate_qty kivi.Validator follow_up show_history);
$self->setup_edit_action_bar;
}
],
action => [
t8('Save and E-mail'),
+ id => 'save_and_email_action',
call => [ 'kivi.Order.save', 'save_and_show_email_dialog', $::instance_conf->get_order_warn_duplicate_parts ],
disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,
],
disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,
only_if => $::auth->assert('productivity', 1),
],
+ action => [
+ t8('History'),
+ call => [ 'set_history_window', $self->order->id, 'id' ],
+ disabled => !$self->order->id ? t8('This record has not been saved yet.') : undef,
+ ],
], # end of combobox "more"
);
}
$self->redirect_to(%params, id => $self->order->id);
}
+sub save_history {
+ my ($self, $addition) = @_;
+
+ my $number_type = $self->order->type =~ m{order} ? 'ordnumber' : 'quonumber';
+ my $snumbers = $number_type . '_' . $self->order->$number_type;
+
+ SL::DB::History->new(
+ trans_id => $self->order->id,
+ employee_id => SL::DB::Manager::Employee->current->id,
+ what_done => $self->order->type,
+ snumbers => $snumbers,
+ addition => $addition,
+ )->save;
+}
+
+sub store_pdf_to_webdav_and_filemanagement {
+ my($order, $content, $filename) = @_;
+
+ my @errors;
+
+ # copy file to webdav folder
+ if ($order->number && $::instance_conf->get_webdav_documents) {
+ my $webdav = SL::Webdav->new(
+ type => $order->type,
+ number => $order->number,
+ );
+ my $webdav_file = SL::Webdav::File->new(
+ webdav => $webdav,
+ filename => $filename,
+ );
+ eval {
+ $webdav_file->store(data => \$content);
+ 1;
+ } or do {
+ push @errors, t8('Storing PDF to webdav folder failed: #1', $@);
+ };
+ }
+ if ($order->id && $::instance_conf->get_doc_storage) {
+ eval {
+ SL::File->save(object_id => $order->id,
+ object_type => $order->type,
+ mime_type => 'application/pdf',
+ source => 'created',
+ file_type => 'document',
+ file_name => $filename,
+ file_contents => $content);
+ 1;
+ } or do {
+ push @errors, t8('Storing PDF in storage backend failed: #1', $@);
+ };
+ }
+
+ return @errors;
+}
+
1;
__END__
=item * display weights
-=item * history
-
=item * mtime check
=item * optional client/user behaviour