optionales Feature für SEPA Überweisungen
authorJan Büren <jan@kivitendo-premium.de>
Fri, 18 Nov 2016 14:36:20 +0000 (15:36 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Fri, 18 Nov 2016 14:36:20 +0000 (15:36 +0100)
Nach der Rechnungsnummer im Verwendungszweck zusätzlich Kunden- oder Lieferantennummer angeben.
Optional konfigurierbar in der Mandatenkonfiguration und übersetzbar für alle verfügbaren Sprachen.

SL/DB/MetaSetup/Default.pm
SL/SEPA.pm
bin/mozilla/generictranslations.pl
bin/mozilla/sepa.pl
doc/changelog
locale/de/all
sql/Pg-upgrade2/sepa_reference_add_vc_vc_id.sql [new file with mode: 0644]
templates/webpages/client_config/_features.html
templates/webpages/generictranslations/edit_sepa_strings.html
templates/webpages/sepa/bank_transfer_add.html

index 7759615..0ef66db 100644 (file)
@@ -110,6 +110,7 @@ __PACKAGE__->meta->columns(
   sales_purchase_order_ship_missing_column  => { type => 'boolean', default => 'false' },
   sdonumber                                 => { type => 'text' },
   sepa_creditor_id                          => { type => 'text' },
+  sepa_reference_add_vc_vc_id               => { type => 'boolean', default => 'false' },
   servicenumber                             => { type => 'text' },
   show_bestbefore                           => { type => 'boolean', default => 'false' },
   show_longdescription_select_item          => { type => 'boolean', default => 'false' },
index a9ba2f3..7724a52 100644 (file)
@@ -24,6 +24,7 @@ sub retrieve_open_invoices {
   my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
   my $arap     = $params{vc} eq 'customer' ? 'ar'       : 'ap';
   my $vc       = $params{vc} eq 'customer' ? 'customer' : 'vendor';
+  my $vc_vc_id = $params{vc} eq 'customer' ? 'c_vendor_id' : 'v_customer_id';
 
   my $mandate  = $params{vc} eq 'customer' ? " AND COALESCE(vc.mandator_id, '') <> '' AND vc.mandate_date_of_signature IS NOT NULL " : '';
 
@@ -43,6 +44,7 @@ sub retrieve_open_invoices {
          (${arap}.amount - (${arap}.amount * pt.percent_skonto)) as amount_less_skonto,
          (${arap}.amount * pt.percent_skonto) as skonto_amount,
          vc.name AS vcname, vc.language_id, ${arap}.duedate as duedate, ${arap}.direct_debit,
+         vc.${vc_vc_id} as vc_vc_id,
 
          COALESCE(vc.iban, '') <> '' AND COALESCE(vc.bic, '') <> '' ${mandate} AS vc_bank_info_ok,
 
index 7b8d4a1..d4d59d8 100644 (file)
@@ -84,10 +84,14 @@ sub edit_sepa_strings {
   my $translation_list = GenericTranslations->list(translation_type => 'sepa_remittance_info_pfx');
   my %translations     = map { ( ($_->{language_id} || 'default') => $_->{translation} ) } @{ $translation_list };
 
+  my $translation_list_vc = GenericTranslations->list(translation_type => 'sepa_remittance_vc_no_pfx');
+  my %translations_vc     =  map { ( ($_->{language_id} || 'default') => $_->{translation} ) } @{ $translation_list_vc };
+
   unshift @{ $form->{LANGUAGES} }, { 'id' => 'default', };
 
   foreach my $language (@{ $form->{LANGUAGES} }) {
-    $language->{translation} = $translations{$language->{id}};
+    $language->{translation}    = $translations{$language->{id}};
+    $language->{translation_vc} = $translations_vc{$language->{id}};
   }
 
   $form->{title} = $locale->text('Edit SEPA strings');
@@ -114,6 +118,10 @@ sub save_sepa_strings {
                               'translation_id'   => undef,
                               'language_id'      => $language->{id},
                               'translation'      => $form->{"translation__" . ($language->{id} || 'default')},);
+    GenericTranslations->save('translation_type' => 'sepa_remittance_vc_no_pfx',
+                              'translation_id'   => undef,
+                              'language_id'      => $language->{id},
+                              'translation'      => $form->{"translation__" . ($language->{id} || 'default') . "__vc" },);
   }
 
   $form->{message} = $locale->text('The SEPA strings have been saved.');
index 2e45511..0f5a242 100755 (executable)
@@ -24,6 +24,7 @@ sub bank_transfer_add {
   my $form          = $main::form;
   my $locale        = $main::locale;
   my $vc            = $form->{vc} eq 'customer' ? 'customer' : 'vendor';
+  my $vc_no         = $form->{vc} eq 'customer' ? $::locale->text('VN') : $::locale->text('CN');
 
   $form->{title}    = $vc eq 'customer' ? $::locale->text('Prepare bank collection via SEPA XML') : $locale->text('Prepare bank transfer via SEPA XML');
 
@@ -56,6 +57,13 @@ sub bank_transfer_add {
     my $prefix                    = $translations{ $invoice->{language_id} } || $translations{default} || $::locale->text('Invoice');
     $prefix                      .= ' ' unless $prefix =~ m/ $/;
     $invoice->{reference_prefix}  = $prefix;
+
+    # add c_vendor_id or v_vendor_id as a prefix if a entry exists
+    next unless $invoice->{vc_vc_id};
+
+    my $prefix_vc_number             = $translations{ $invoice->{language_id} } || $translations{default} || $vc_no;
+    $prefix_vc_number               .= ' ' unless $prefix_vc_number =~ m/ $/;
+    $invoice->{reference_prefix_vc}  = ' '  . $prefix_vc_number unless $prefix_vc_number =~ m/^ /;
   }
 
   $form->header();
index 2b77b59..90cd476 100644 (file)
@@ -6,6 +6,8 @@
 
 kleinere neue Features und Detailverbesserungen:
 
+  - SEPA Überweisungen zusätzlich Kunden- oder Lieferantennummer im Verwendungszweck vorbelegen
+
   - Verfeinerung der Rechte für Finanzbuchhaltung: Es können nun für Dialogbuchungen,
     Debitoren- und Kreditorenbuchungen extra Rechte vergeben werden
 
@@ -13,7 +15,7 @@ kleinere neue Features und Detailverbesserungen:
     Gibt eine Statistik über Lagerbewegungen, pro Monat/Quartal/Jahr.
 
   - Für UStVA Voranmeldung über Elster gibt es die Anbindung über Geierlein (Installation/Config siehe Commit)
-  
+
   - CSV-Import von Artikel hat nun für existierende Artikel folgende Optionen:
      1. Eigenschaften von existierenden Einträgen aktualisieren
      2. Eigenschaften von existierenden Artikeln aktualisieren / Nicht vorhandene überspringen
@@ -25,7 +27,7 @@ kleinere neue Features und Detailverbesserungen:
     sowie Übersetzungen z.B. als 'description_EN' oder 'description_IT'.
     Auch cvars können als 'cvars_<name>' importiert werden.
     Ebenfalls sind zusätzliche Bemerkungen an den einzelnen Importzeilen eingebaut.
+
   - In der Lager-Mandantenkonfig gibt es das Feature "Zum Fertigen Standardlager des Bestandteils verwenden".
     Statt das Ziellager des Erzeugnisses zu Verwenden, wird nun zur Prüfung der Fertigung das
     Standardlager der einzelnen Bestandteile verwendet.
index db133be..9c662f8 100755 (executable)
@@ -150,6 +150,7 @@ $self->{texts} = {
   'Add Client'                  => 'Neuer Mandant',
   'Add Credit Note'             => 'Gutschrift erfassen',
   'Add Customer'                => 'Kunde erfassen',
+  'Add Customer/Vendor Number as a reference add-on for SEPA export.' => 'Kunden- Lieferantennummer im Verwendungszweck bei SEPA-Überweisungen anhängen',
   'Add Delivery Note'           => 'Lieferschein erfassen',
   'Add Delivery Order'          => 'Lieferschein erfassen',
   'Add Dunning'                 => 'Mahnung erzeugen',
@@ -460,6 +461,7 @@ $self->{texts} = {
   'CB Transaction'              => 'SB-Buchung',
   'CB Transactions'             => 'SB-Buchungen',
   'CB/OB Transactions'          => 'SB/EB buchen',
+  'CN'                          => 'Kd-Nr.',
   'CR'                          => 'H',
   'CSS style for pictures'      => 'CSS Style für Bilder',
   'CSV export -- options'       => 'CSV-Export -- Optionen',
@@ -2300,6 +2302,7 @@ $self->{texts} = {
   'Remaining'                   => 'Rest',
   'Remaining Amount'            => 'abzurechnender Betrag',
   'Remaining Net Amount'        => 'abzurechnender Nettobetrag',
+  'Remittance information optional Vendor/Customer No postfix' => 'optionale Verwendungszweckvorbelegung Kd./Lief.-Nummer',
   'Remittance information prefix' => 'Verwendungszweckvorbelegung (Präfix)',
   'Remote Bank Code'            => 'Fremde Bankleitzahl',
   'Remote Name/Customer/Description' => 'Kunden/Lieferantenname und Beschreibung',
@@ -2392,6 +2395,7 @@ $self->{texts} = {
   'SAVED'                       => 'Gespeichert',
   'SAVED FOR DUNNING'           => 'Gespeichert',
   'SCREENED'                    => 'Angezeigt',
+  'SEPA'                        => 'SEPA',
   'SEPA XML download'           => 'SEPA-XML-Download',
   'SEPA creditor ID'            => 'SEPA-Kreditoren-Identifikation',
   'SEPA exports'                => 'SEPA-Exporte',
@@ -3343,6 +3347,7 @@ $self->{texts} = {
   'Users, Clients and User Groups' => 'Benutzer, Mandanten und Benutzergruppen',
   'Usually the sales quotation is valid until the next working day. If a value is set here then the quotation will be valid for at least that many days. The resulting date will be adjusted to the next working day if it ends up on a weekend.' => 'Standardmäßig ist ein Verkaufsangebot bis zum nächsten Werktag gültig. Ist hier ein Wert angegeben, so ist ein Angebot mindestens so viele Tage gültig. Sollte das dabei herauskommende Datum auf ein Wochenende fallen, so wird statt dessen der nachfolgende Arbeitstag genommen.',
   'VAT ID'                      => 'UStdID-Nr',
+  'VN'                          => 'Kred.-Nr.',
   'Valid'                       => 'Gültig',
   'Valid from'                  => 'Gültig ab',
   'Valid until'                 => 'gültig bis',
diff --git a/sql/Pg-upgrade2/sepa_reference_add_vc_vc_id.sql b/sql/Pg-upgrade2/sepa_reference_add_vc_vc_id.sql
new file mode 100644 (file)
index 0000000..f454c06
--- /dev/null
@@ -0,0 +1,5 @@
+-- @tag: sepa_reference_add_vc_vc_id
+-- @description: Einstellung, ob bei SEPA Überweisungen zusätzlich die Lieferanten-/Kundennummer im Verwendungszweck angezeigt wird
+-- @depends: release_3_4_1
+
+ALTER TABLE defaults ADD COLUMN sepa_reference_add_vc_vc_id boolean DEFAULT FALSE;
index c95c6e5..324c0c5 100644 (file)
       </div>
     </td>
   </tr>
-
+  <tr><td class="listheading" colspan="4">[% LxERP.t8("SEPA") %]</td></tr>
+  <tr>
+   <td align="right">[% LxERP.t8('Add Customer/Vendor Number as a reference add-on for SEPA export.') %]</td>
+   <td>[% L.yes_no_tag('defaults.sepa_reference_add_vc_vc_id', SELF.defaults.sepa_reference_add_vc_vc_id) %]</td>
+  </tr>
  </table>
 </div>
index e9875b0..c974cf7 100644 (file)
     <td><input name="translation__[% language.id %]" size="40" value="[% HTML.escape(language.translation) %]"></td>
    </tr>
    [%- END %]
+   <tr>
+    <th class="listheading">&nbsp;</th>
+    <th class="listheading">[% 'Remittance information optional Vendor/Customer No postfix' | $T8 %]</th>
+   </tr>
+
+   [%- FOREACH language = LANGUAGES %]
+   <tr>
+    <td>
+     [%- IF language.id == 'default' %]
+     [% 'Default (no language selected)' | $T8 %]
+     [%- ELSE %]
+     [%- HTML.escape(language.description) %]
+     [%- END %]
+    </td>
+    <td><input name="translation__[% language.id %]__vc" size="40" value="[% HTML.escape(language.translation_vc) %]"></td>
+   </tr>
+   [%- END %]
 
   </table>
 
index 4b25022..89c36e3 100644 (file)
       <td align="right">[% invoice.transdate %]</td>
       <td align="right">[% invoice.duedate %]</td>
       <td>
+    [% IF INSTANCE_CONF.get_sepa_reference_add_vc_vc_id %]
+       [%- SET reference = invoice.reference_prefix _ invoice.invnumber _ invoice.reference_prefix_vc _ invoice.vc_vc_id %]
+    [% ELSE %]
        [%- SET reference = invoice.reference_prefix _ invoice.invnumber %]
-       <input name="bank_transfers[].reference" value="[% HTML.escape(reference.substr(0, 140)) %]" maxlength="140" size="20">
+    [% END %]
+       <input name="bank_transfers[].reference" value="[% HTML.escape(reference.substr(0, 140)) %]" maxlength="140" size="30">
       </td>
       <td align="right">
        <input id=[% loop.count %] name="bank_transfers[].amount" id="amount_[% loop.count %]" value="[% LxERP.format_amount(invoice.invoice_amount_suggestion, 2) %]" style="text-align: right" size="12">