]> wagnertech.de Git - kivitendo-erp.git/commitdiff
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 775961593a19766dbdb8e34457f85c1b455dc02f..0ef66db2583f68d1a1ab8fa0355066c07058db50 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 a9ba2f3dadf508a9791290b6b1dff1bd2e6e9424..7724a52aab6a6fb10eb4a9b186ce3c8493aa1231 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 7b8d4a196a8d4f9358ca667ed9965d143f08fd82..d4d59d8b090e2979d3be4e40e9ad4e64c419f0f5 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 2e45511c7bddda0e0294cab00de0910ca8319886..0f5a242a8f5d241cae18422c251b5096fec27db2 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 2b77b59a51bf920c7052c37abe8429b6d4ecd9b9..90cd476f63ac5e6fafa7034de12260e3666061ca 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 db133be9d5ef5c11c0595f9b262d2fca07c077e5..9c662f81501685b843e90dce8fdedab17f6616be 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 c95c6e5db974591d1e7ef442ba10c5fdefe6a34e..324c0c588c817b640941760cfc27d5654e22ee04 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 e9875b0f3d9272b2413d1537e0456744e6d764aa..c974cf79146ce3b9a14513ec8b67419fc03cb9b7 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 4b2502242219ca0bc23a870291565f84aad06d84..89c36e38b2f70c3fe89683091393af48e15bed47 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">