Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b97742c6

Von Tamino Steinert vor 7 Tagen hinzugefügt

  • ID b97742c67c1286ba5d2fe4f68d6548cf74172d2d
  • Vorgänger 1111ec6b
  • Nachfolger c131da1a

E-Mail-Versand für Auftrag, Lieferschein und Reklamation angleichen

Features/Fixes, die nun alle habe:
- Fehler sichtbar anzeigen
- Zusätzliche E-Mail-Adressen von Kunden/Lieferant auswählbar
- Nur Angestellte mit E-Mail-Adresse anzeigen
- Historyeintrag bei E-Mail-Versand
- interne Notizen nur wenn kein E-Mail-Journal aktiviert
- HTML für interne Notizen entfernen

Unterschiede anzeigen:

SL/Controller/DeliveryOrder.pm
420 420
sub action_save_and_show_email_dialog {
421 421
  my ($self) = @_;
422 422

  
423
  if ( !$self->order->delivered ) {
423
  if (!$self->order->delivered) {
424 424
    $self->save();
425
    $self->js_reset_order_and_item_ids_after_save;
425 426
  }
426 427

  
427
  my $cv_method = $self->cv;
428

  
429
  my $cv = $self->order->customervendor;
430
  if (!$cv) {
431
    return $self->js->flash('error',
428
  my $cv = $self->order->customervendor
429
    or return $self->js->flash('error',
432 430
      $self->cv eq 'customer' ?
433 431
           t8('Cannot send E-mail without customer given')
434 432
         : t8('Cannot send E-mail without vendor given')
435 433
    )->render($self);
436
  }
437

  
438
  my $email_form;
439
  $email_form->{to} =
440
       ($self->order->contact ? $self->order->contact->cp_email : undef)
441
    || ($cv->is_customer ? $cv->delivery_order_mail : undef)
442
    ||  $cv->email;
443
  $email_form->{cc}   = $cv->cc;
444
  $email_form->{bcc}  = join ', ', grep $_, $cv->bcc;
445
  # Todo: get addresses from shipto, if any
446 434

  
447 435
  my $form = Form->new;
448 436
  $form->{$self->nr_key()}  = $self->order->number;
......
457 445
  $form->{cp_id}            =
458 446
    $self->order->contact->cp_id if $self->order->contact;
459 447

  
448
  my $email_form;
449
  $email_form->{to} =
450
       ($self->order->contact ? $self->order->contact->cp_email : undef)
451
    || ($cv->is_customer ? $cv->delivery_order_mail : undef)
452
    ||  $cv->email;
453
  $email_form->{cc}  = $cv->cc;
454
  $email_form->{bcc} = join ', ', grep $_, $cv->bcc;
455
  # Todo: get addresses from shipto, if any
460 456
  $email_form->{subject}             = $form->generate_email_subject();
461 457
  $email_form->{attachment_filename} = $form->generate_attachment_filename();
462 458
  $email_form->{message}             = $form->generate_email_body();
463 459
  $email_form->{js_send_function}    = 'kivi.DeliveryOrder.send_email()';
464 460

  
465 461
  my %files = $self->get_files_for_email_dialog();
466
  $self->{all_employees} = SL::DB::Manager::Employee->get_all(
467
    query => [ deleted => 0 ]
468
  );
462

  
463
  my @employees_with_email = grep {
464
    my $user = SL::DB::Manager::AuthUser->find_by(login => $_->login);
465
    $user && !!trim($user->get_config_value('email'));
466
  } @{ SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]) };
467

  
469 468
  my $dialog_html = $self->render(
470 469
    'common/_send_email_dialog', { output => 0 },
471 470
    email_form  => $email_form,
472 471
    show_bcc    => $::auth->assert('email_bcc', 'may fail'),
473 472
    FILES       => \%files,
474 473
    is_customer => $self->type_data->properties("is_customer"),
475
    ALL_EMPLOYEES => $self->{all_employees},
474
    ALL_EMPLOYEES => \@employees_with_email,
475
    ALL_PARTNER_EMAIL_ADDRESSES => $cv->get_all_email_addresses(),
476 476
  );
477 477

  
478 478
  $self->js
479
      ->run('kivi.DeliveryOrder.show_email_dialog', $dialog_html)
480
      ->reinit_widgets
481
      ->render($self);
479
    ->run('kivi.DeliveryOrder.show_email_dialog', $dialog_html)
480
    ->reinit_widgets
481
    ->render($self);
482 482
}
483 483

  
484 484
# send email
485
#
486
# Todo: handling error messages: flash is not displayed in dialog, but in the main form
487 485
sub action_send_email {
488 486
  my ($self) = @_;
489 487

  
490 488
  if ( !$self->order->delivered ) {
491
    $self->save();
492
    $self->js_reset_order_and_item_ids_after_save;
489
    eval {
490
      $self->save();
491
      1;
492
    } or do {
493
      $self->js->run('kivi.Order.close_email_dialog');
494
      die $EVAL_ERROR;
495
    };
493 496
  }
494 497

  
498
  my @redirect_params = (
499
    action => 'edit',
500
    type   => $self->type,
501
    id     => $self->order->id,
502
  );
503

  
504
  # Set the error handler to reload the document and display errors later,
505
  # because the document is already saved and saving can have some side effects
506
  # such as generating a document number, project number or record links,
507
  # which will be up to date when the document is reloaded.
508
  # Hint: Do not use "die" here and try to catch exceptions in subroutine
509
  # calls. You should use "$::form->error" which respects the error handler.
510
  local $::form->{__ERROR_HANDLER} = sub {
511
      flash_later('error', $_[0]);
512
      $self->redirect_to(@redirect_params);
513
      $::dispatcher->end_request;
514
  };
515

  
516
  # move $::form->{email_form} to $::form
495 517
  my $email_form  = delete $::form->{email_form};
496
  my %field_names = (to => 'email');
497 518

  
519
  if ($email_form->{additional_to}) {
520
    $email_form->{to} = join ', ', grep { $_ } $email_form->{to}, @{$email_form->{additional_to}};
521
    delete $email_form->{additional_to};
522
  }
523

  
524
  my %field_names = (to => 'email');
498 525
  $::form->{ $field_names{$_} // $_ } = $email_form->{$_} for keys %{ $email_form };
499 526

  
500 527
  # for Form::cleanup which may be called in Form::send_email
......
509 536
  # Is an old file version available?
510 537
  my $attfile;
511 538
  if ($::form->{attachment_policy} eq 'old_file') {
512
    $attfile = SL::File->get_all(object_id   => $self->order->id,
513
                                 object_type => $::form->{formname},
514
                                 file_type   => 'document',
515
                                 print_variant => $::form->{formname});
539
    $attfile = SL::File->get_all(
540
      object_id   => $self->order->id,
541
      object_type => $::form->{formname},
542
      file_type   => 'document',
543
      print_variant => $::form->{formname},
544
    );
516 545
  }
517 546

  
518
  if ($::form->{attachment_policy} ne 'no_file' && !($::form->{attachment_policy} eq 'old_file' && $attfile)) {
547
  if (   $::form->{attachment_policy} ne 'no_file'
548
    && !($::form->{attachment_policy} eq 'old_file' && $attfile)) {
519 549
    my $pdf;
520 550
    my @errors = generate_pdf($self->order, \$pdf, {
521 551
        media      => $::form->{media},
......
526 556
        groupitems => $::form->{print_options}->{groupitems}},
527 557
    );
528 558
    if (scalar @errors) {
529
      return $self->js->flash('error',
530
        t8('Conversion to PDF failed: #1', $errors[0])
531
      )->render($self);
559
      $::form->error(t8('Generating the document failed: #1', $errors[0]));
532 560
    }
533 561

  
534 562
    my @warnings = store_pdf_to_webdav_and_filemanagement(
......
551 579
                                    # linked record to the mail
552 580
  $::form->send_email(\%::myconfig, 'pdf');
553 581

  
582
  $self->save_history('MAILED');
583
  flash_later('info', t8('The email has been sent.'));
584

  
554 585
  # internal notes unless no email journal
555 586
  unless ($::instance_conf->get_email_journal) {
556

  
557 587
    my $intnotes = $self->order->intnotes;
558 588
    $intnotes   .= "\n\n" if $self->order->intnotes;
559 589
    $intnotes   .= t8('[email]')                                . "\n";
......
565 595
    $intnotes   .= t8('Cc')         . ": " . $::form->{cc}      . "\n"    if $::form->{cc};
566 596
    $intnotes   .= t8('Bcc')        . ": " . $::form->{bcc}     . "\n"    if $::form->{bcc};
567 597
    $intnotes   .= t8('Subject')    . ": " . $::form->{subject} . "\n\n";
568
    $intnotes   .= t8('Message')    . ": " . $::form->{message};
598
    $intnotes   .= t8('Message')    . ": " . SL::HTML::Util->strip($::form->{message});
569 599

  
570 600
    $self->order->update_attributes(intnotes => $intnotes);
571 601
  }
572 602

  
573
  $self->save_history('MAILED');
574

  
575
  flash_later('info', t8('The email has been sent.'));
576

  
577
  my @redirect_params = (
578
    action => 'edit',
579
    type   => $self->type,
580
    id     => $self->order->id,
581
  );
582

  
583 603
  $self->redirect_to(@redirect_params);
584 604
}
585 605

  

Auch abrufbar als: Unified diff