X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/73f7989fcf23410ebd879d5150f6a13913ca2b90..53593baa211863fbf66540cf1bcc36c8fb37257f:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 89d2af016..faf2ffaac 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -24,6 +24,7 @@ use SL::DB::Part; use SL::DB::PartClassification; use SL::DB::PartsGroup; use SL::DB::Printer; +use SL::DB::Note; use SL::DB::Language; use SL::DB::RecordLink; use SL::DB::RequirementSpec; @@ -290,6 +291,12 @@ sub action_print { $self->js_reset_order_and_item_ids_after_save; + my $redirect_url = $self->url_for( + action => 'edit', + type => $self->type, + id => $self->order->id, + ); + my $format = $::form->{print_options}->{format}; my $media = $::form->{print_options}->{media}; my $formname = $::form->{print_options}->{formname}; @@ -299,12 +306,14 @@ sub action_print { # only PDF, OpenDocument & HTML for now if (none { $format eq $_ } qw(pdf opendocument opendocument_pdf html)) { - return $self->js->flash('error', t8('Format \'#1\' is not supported yet/anymore.', $format))->render; + flash_later('error', t8('Format \'#1\' is not supported yet/anymore.', $format)); + return $self->js->redirect_to($redirect_url)->render; } # only screen or printer by now if (none { $media eq $_ } qw(screen printer)) { - return $self->js->flash('error', t8('Media \'#1\' is not supported yet/anymore.', $media))->render; + flash_later('error', t8('Media \'#1\' is not supported yet/anymore.', $media)); + return $self->js->redirect_to($redirect_url)->render; } # create a form for generate_attachment_filename @@ -324,12 +333,13 @@ sub action_print { printer_id => $printer_id, groupitems => $groupitems }); if (scalar @errors) { - return $self->js->flash('error', t8('Generating the document failed: #1', $errors[0]))->render; + flash_later('error', t8('Generating the document failed: #1', $errors[0])); + return $self->js->redirect_to($redirect_url)->render; } if ($media eq 'screen') { # screen/download - $self->js->flash('info', t8('The document has been created.')); + flash_later('info', t8('The document has been created.')); $self->send_file( \$doc, type => SL::MIME->mime_type_from_ext($doc_filename), @@ -345,20 +355,19 @@ sub action_print { content => $doc, ); - $self->js->flash('info', t8('The document has been printed.')); + flash_later('info', t8('The document has been printed.')); } my @warnings = $self->store_doc_to_webdav_and_filemanagement($doc, $doc_filename, $formname); if (scalar @warnings) { - $self->js->flash('warning', $_) for @warnings; + flash_later('warning', $_) for @warnings; } $self->save_history('PRINTED'); - $self->js - ->run('kivi.ActionBar.setEnabled', '#save_and_email_action') - ->render; + $self->js->redirect_to($redirect_url)->render; } + sub action_preview_pdf { my ($self) = @_; @@ -370,6 +379,12 @@ sub action_preview_pdf { $self->js_reset_order_and_item_ids_after_save; + my $redirect_url = $self->url_for( + action => 'edit', + type => $self->type, + id => $self->order->id, + ); + my $format = 'pdf'; my $media = 'screen'; my $formname = $self->type; @@ -391,17 +406,23 @@ sub action_preview_pdf { language => $self->order->language, }); if (scalar @errors) { - return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render; + flash_later('error', t8('Conversion to PDF failed: #1', $errors[0])); + return $self->js->redirect_to($redirect_url)->render; } + $self->save_history('PREVIEWED'); - $self->js->flash('info', t8('The PDF has been previewed')); + + flash_later('info', t8('The PDF has been previewed')); + # screen/download $self->send_file( \$pdf, type => SL::MIME->mime_type_from_ext($pdf_filename), name => $pdf_filename, - js_no_render => 0, + js_no_render => 1, ); + + $self->js->redirect_to($redirect_url)->render; } # open the email dialog @@ -415,6 +436,8 @@ sub action_save_and_show_email_dialog { return $self->js->render(); } + $self->js_reset_order_and_item_ids_after_save; + my $cv_method = $self->cv; if (!$self->order->$cv_method) { @@ -1239,6 +1262,58 @@ sub action_update_row_from_master_data { $self->js->render(); } +sub action_save_phone_note { + my ($self) = @_; + + if (!$::form->{phone_note}->{subject} || !$::form->{phone_note}->{body}) { + return $self->js->flash('error', t8('Phone note needs a subject and a body.'))->render; + } + + my $phone_note; + if ($::form->{phone_note}->{id}) { + $phone_note = first { $_->id == $::form->{phone_note}->{id} } @{$self->order->phone_notes}; + return $self->js->flash('error', t8('Phone note not found for this order.'))->render if !$phone_note; + } + + $phone_note = SL::DB::Note->new() if !$phone_note; + my $is_new = !$phone_note->id; + + $phone_note->assign_attributes(%{ $::form->{phone_note} }, + trans_id => $self->order->id, + trans_module => 'oe', + employee => SL::DB::Manager::Employee->current); + + $phone_note->save; + $self->order(SL::DB::Order->new(id => $self->order->id)->load); + + my $tab_as_html = $self->p->render('order/tabs/phone_notes', SELF => $self); + + return $self->js + ->replaceWith('#phone-notes', $tab_as_html) + ->html('#num_phone_notes', (scalar @{$self->order->phone_notes}) ? ' (' . scalar @{$self->order->phone_notes} . ')' : '') + ->flash('info', $is_new ? t8('Phone note has been created.') : t8('Phone note has been updated.')) + ->render; +} + +sub action_delete_phone_note { + my ($self) = @_; + + my $phone_note = first { $_->id == $::form->{phone_note}->{id} } @{$self->order->phone_notes}; + + return $self->js->flash('error', t8('Phone note not found for this order.'))->render if !$phone_note; + + $phone_note->delete; + $self->order(SL::DB::Order->new(id => $self->order->id)->load); + + my $tab_as_html = $self->p->render('order/tabs/phone_notes', SELF => $self); + + return $self->js + ->replaceWith('#phone-notes', $tab_as_html) + ->html('#num_phone_notes', (scalar @{$self->order->phone_notes}) ? ' (' . scalar @{$self->order->phone_notes} . ')' : '') + ->flash('info', t8('Phone note has been deleted.')) + ->render; +} + sub js_load_second_row { my ($self, $item, $item_id, $do_parse) = @_; @@ -1802,6 +1877,29 @@ sub save { my $errors = []; my $db = $self->order->db; + # check for new or updated phone note + if ($::form->{phone_note}->{subject} || $::form->{phone_note}->{body}) { + if (!$::form->{phone_note}->{subject} || !$::form->{phone_note}->{body}) { + return [t8('Phone note needs a subject and a body.')]; + } + + my $phone_note; + if ($::form->{phone_note}->{id}) { + $phone_note = first { $_->id == $::form->{phone_note}->{id} } @{$self->order->phone_notes}; + return [t8('Phone note not found for this order.')] if !$phone_note; + } + + $phone_note = SL::DB::Note->new() if !$phone_note; + my $is_new = !$phone_note->id; + + $phone_note->assign_attributes(%{ $::form->{phone_note} }, + trans_id => $self->order->id, + trans_module => 'oe', + employee => SL::DB::Manager::Employee->current); + + $self->order->add_phone_notes($phone_note) if $is_new; + } + $db->with_transaction(sub { # delete custom shipto if it is to be deleted or if it is empty if ($self->order->custom_shipto && ($self->is_custom_shipto_to_delete || $self->order->custom_shipto->is_empty)) { @@ -2026,6 +2124,8 @@ sub pre_render { $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted}; + $self->{template_args}->{num_phone_notes} = scalar @{ $self->order->phone_notes || [] }; + $::request->{layout}->use_javascript("${_}.js") for qw(kivi.Validator kivi.SalesPurchase kivi.Order kivi.File ckeditor/ckeditor ckeditor/adapters/jquery edit_periodic_invoices_config calculate_qty follow_up show_history); $self->setup_edit_action_bar;