GenericTranslation um Vorbelegungen für E-Mail-Texte erweitert
authorJan Büren <jan@kivitendo-premium.de>
Sat, 29 Jul 2017 18:19:10 +0000 (20:19 +0200)
committerJan Büren <jan@kivitendo-premium.de>
Sat, 29 Jul 2017 18:19:10 +0000 (20:19 +0200)
Neuer Menüpunkt:
System-> Sprachen und Übersetzungen -> Vorbelegte Texte für E-Mail
Falls ein Ansprechpartner hinterlegt ist, wird entsprechend des
Geschlechts und der vorbelegten Textbaustein die Anrede zusammengesetzt.
Falls kein Ansprechpartner gewählt ist, kommt die allgemeine Grußformel.
Bis auf Gutschrift und Mahnung(en) sind alle Workflow Masken im Ein- und
Verkauf umgesetzt.

bin/mozilla/generictranslations.pl
doc/changelog
locale/de/all
menus/user/00-erp.yaml
templates/webpages/generictranslations/edit_email_strings.html [new file with mode: 0644]

index 5d94556..d3341f2 100644 (file)
@@ -5,6 +5,23 @@ use SL::Locale::String qw(t8);
 
 use strict;
 
+# convention:
+# preset_text_$formname will generate a input textarea
+# and will be preset in $form email dialog if the form name matches
+
+my %mail_strings = (
+  salutation_male                     => t8('Salutation male'),
+  salutation_female                   => t8('Salutation female'),
+  salutation_general                  => t8('Salutation general'),
+  salutation_punctuation_mark         => t8('Salutation punctuation mark'),
+  preset_text_sales_quotation         => t8('Preset email text for sales quotations'),
+  preset_text_sales_order             => t8('Preset email text for sales orders'),
+  preset_text_sales_delivery_order    => t8('Preset email text for sales delivery orders'),
+  preset_text_invoice                 => t8('Preset email text for sales invoices'),
+  preset_text_request_quotation       => t8('Preset email text for requests (rfq)'),
+  preset_text_purchase_order          => t8('Preset email text for purchase orders'),
+);
+
 sub edit_greetings {
   $main::lxdebug->enter_sub();
 
@@ -135,6 +152,61 @@ sub save_sepa_strings {
 
   $main::lxdebug->leave_sub();
 }
+sub edit_email_strings {
+  $main::lxdebug->enter_sub();
+
+  $main::auth->assert('config');
+
+  my $form     = $main::form;
+  my $locale   = $main::locale;
+
+  $form->get_lists('languages' => 'LANGUAGES');
+  unshift @{ $form->{LANGUAGES} }, { 'id' => 'default', };
+
+  my (%translations, $translation_list);
+  foreach (keys %mail_strings)  {
+    $translation_list = GenericTranslations->list(translation_type => $_);
+    %translations     = map { ( ($_->{language_id} || 'default') => $_->{translation} ) } @{ $translation_list };
+
+    foreach my $language (@{ $form->{LANGUAGES} }) {
+      $language->{$_} = $translations{$language->{id}};
+    }
+  }
+  setup_generictranslations_edit_email_strings_action_bar();
+
+  $form->{title} = $locale->text('Edit preset email strings');
+  $form->header();
+  print $form->parse_html_template('generictranslations/edit_email_strings',{ 'MAIL_STRINGS' => \%mail_strings });
+
+  $main::lxdebug->leave_sub();
+}
+
+sub save_email_strings {
+  $main::lxdebug->enter_sub();
+
+  $main::auth->assert('config');
+
+  my $form     = $main::form;
+  my $locale   = $main::locale;
+
+  $form->get_lists('languages' => 'LANGUAGES');
+
+  unshift @{ $form->{LANGUAGES} }, { };
+  foreach my $language (@{ $form->{LANGUAGES} }) {
+    foreach (keys %mail_strings)  {
+      GenericTranslations->save('translation_type' => $_,
+                                'translation_id'   => undef,
+                                'language_id'      => $language->{id},
+                                'translation'      => $form->{"translation__" . ($language->{id} || 'default') . "__" . $_},
+                               );
+    }
+  }
+  $form->{message} = $locale->text('The Mail strings have been saved.');
+
+  edit_email_strings();
+
+  $main::lxdebug->leave_sub();
+}
 
 sub setup_generictranslations_edit_greetings_action_bar {
   my %params = @_;
@@ -163,5 +235,18 @@ sub setup_generictranslations_edit_sepa_strings_action_bar {
     );
   }
 }
+sub setup_generictranslations_edit_email_strings_action_bar {
+  my %params = @_;
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      action => [
+        t8('Save'),
+        submit    => [ '#form', { action => "save_email_strings" } ],
+        accesskey => 'enter',
+      ],
+    );
+  }
+}
 
 1;
index b36292e..d10b4c8 100644 (file)
@@ -9,6 +9,7 @@ kleinere neue Features und Detailverbesserungen:
   - SEPA-XML: alle Sonderzeichen filtern
   - SEPA-Export: Export wieder rückgängig machen, falls noch Status offen
   - Stammdaten -> Berichte -> Artikel: Standardlager und Lagerplatz optional anzeigen
+  - Vorbelegte Texte inkl. Ansprechpartner für den E-Mail-Versand bei allen Workflows hinzugefügt.
 
 2017-07-17 - Release 3.5.0
 
index f742c36..4df7f50 100755 (executable)
@@ -1132,6 +1132,7 @@ $self->{texts} = {
   'Edit payment term'           => 'Zahlungsbedingungen bearbeiten',
   'Edit picture'                => 'Bild bearbeiten',
   'Edit pre-defined text'       => 'Vordefinierten Textblock bearbeiten',
+  'Edit preset email strings'   => 'Vorbelegte Texte für E-Mails editieren',
   'Edit price rule'             => 'Preisregel bearbeiten',
   'Edit pricegroup'             => 'Preisgruppe bearbeiten',
   'Edit prices and discount (if not used, textfield is ONLY set readonly)' => 'Preise und Rabatt in Formularen frei anpassen (falls deaktiviert, wird allerdings NUR das textfield auf READONLY gesetzt / kann je nach Browserversion und technischen Fähigkeiten des Anwenders noch umgangen werden)',
@@ -2200,6 +2201,13 @@ $self->{texts} = {
   'Prepare bank collection via SEPA XML' => 'Einzug via SEPA XML vorbereiten',
   'Prepare bank transfer via SEPA XML' => 'Überweisung via SEPA XML vorbereiten',
   'Prepayment'                  => 'Vorauszahlung',
+  'Preset email strings'        => 'Vorbelegte E-Mail-Texte',
+  'Preset email text for purchase orders' => 'Vorbelegter E-Mail-Text für Einkaufsaufträge',
+  'Preset email text for requests (rfq)' => 'Vorbelegter E-Mail-Text für Anfragen',
+  'Preset email text for sales delivery orders' => 'Vorbelegter E-Mail-Text für Verkaufs-Lieferscheine',
+  'Preset email text for sales invoices' => 'Vorbelegter E-Mail-Text für Rechnungen',
+  'Preset email text for sales orders' => 'Vorbelegter E-Mail-Text für Aufträge',
+  'Preset email text for sales quotations' => 'Vorbelegter E-Mail-Text für Angebote',
   'Preview'                     => 'Vorschau',
   'Preview Mode'                => 'Vorschaumodus',
   'Previous transdate text'     => 'wurde gespeichert am',
@@ -2530,10 +2538,13 @@ $self->{texts} = {
   'Sales quotation #1 has been deleted.' => 'Angebot #1 wurde gelöscht.',
   'Sales quotation #1 has been updated.' => 'Angebot #1 wurde aktualisiert.',
   'Salesman'                    => 'Verkäufer/in',
-  'Salesman (ID)'               => 'Verkäufer/in (ID)',
   'Salesman (database ID)'      => 'Verkäufer/in (Datenbank-ID)',
   'Salesman (login)'            => 'Verkäufer/in (Login)',
   'Salesperson'                 => 'Verkäufer',
+  'Salutation female'           => 'Anrede weiblich',
+  'Salutation general'          => 'Anrede anonym (personenlos)',
+  'Salutation male'             => 'Anrede männlich',
+  'Salutation punctuation mark' => 'Zeichensetzungs-Trenner nach der Anrede-Formel (Punkt, Ausrufezeichen, etc)',
   'Same Filename !'             => 'unveränderter Dateiname !',
   'Same as the quote character' => 'Wie Anf&uuml;hrungszeichen',
   'Sat. Fax'                    => 'Sat. Fax',
@@ -2901,6 +2912,7 @@ $self->{texts} = {
   'The ID #1 is not a valid database ID.' => 'Die ID #1 ist keine gültige Datenbank-ID.',
   'The LDAP server "#1:#2" is unreachable. Please check config/kivitendo.conf.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte &uuml;berpr&uuml;fen Sie die Angaben in config/kivitendo.conf.',
   'The MT940 import needs an import profile called MT940' => 'Der MT940 Import benötigt ein Importprofil mit dem Namen "MT940"',
+  'The Mail strings have been saved.' => 'Die vorbelegten E-Mail-Texte wurden gespeichert.',
   'The PDF has been created'    => 'Die PDF-Datei wurde erstellt.',
   'The PDF has been printed'    => 'Das PDF-Dokument wurde gedruckt.',
   'The SEPA export has been created.' => 'Der SEPA-Export wurde erstellt',
index c520c4b..eae8faf 100644 (file)
   module: generictranslations.pl
   params:
     action: edit_sepa_strings
+- parent: system_languages_and_translations
+  id: system_languages_and_translations_email_strings
+  name: Preset email strings
+  order: 500
+  module: generictranslations.pl
+  params:
+    action: edit_email_strings
 - parent: system
   id: system_payment_terms
   name: Payment Terms
diff --git a/templates/webpages/generictranslations/edit_email_strings.html b/templates/webpages/generictranslations/edit_email_strings.html
new file mode 100644 (file)
index 0000000..c24a8c8
--- /dev/null
@@ -0,0 +1,37 @@
+[%- USE T8 %]
+[%- USE HTML %]
+<h1>[% HTML.escape(title) %]</h1>
+[%- IF message %]
+ <p>
+ [% HTML.escape(message) %]
+ </p>
+[%- END %]
+ <form method="post" action="generictranslations.pl" id="form">
+  <table>
+   [%- FOREACH mail_string IN MAIL_STRINGS.keys.sort %]
+    <tr>
+      <th class="listheading">&nbsp;</th>
+      <th class="listheading">[% MAIL_STRINGS.$mail_string %]</th>
+     </tr>
+
+     [%- FOREACH language = LANGUAGES %]
+     <tr>
+      <td>
+       [%- IF language.id == 'default' %]
+       [% 'Default (no language selected)' | $T8 %]
+       [%- ELSE %]
+       [%- HTML.escape(language.description) %]
+       [%- END %]
+      </td>
+      <td>
+       [%- IF mail_string.search('preset') %]
+        <textarea name="translation__[% language.id %]__[% mail_string %]" rows="4" cols="60">[% HTML.escape(language.$mail_string) %]</textarea>
+       [%- ELSE %]
+        <input name="translation__[% language.id %]__[% mail_string %]" size="40" value="[% HTML.escape(language.$mail_string) %]">
+       [%- END %]
+      </td>
+     </tr>
+     [%- END %]
+   [%- END %]
+  </table>
+ </form>