\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-05-31 06:02+0000\n"
+"X-Generator: Launchpad (build 17031)\n"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.mandate_valid
+msgid "SEPA Direct Debit Mandate Validated"
+msgstr "SEPA incasso machtiging bevestigd."
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,filename:0
+#: field:banking.export.sdd.wizard,filename:0
+msgid "Filename"
+msgstr "Bestandsnaam"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:200
+#, python-format
+msgid ""
+"The SEPA Direct Debit mandate with reference '%s' for partner '%s' has "
+"expired."
+msgstr ""
+"De SEPA incasso machtiging met referentie '%s' voor relatie '%s' is verlopen."
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:219
+#, python-format
+msgid "Cannot validate the mandate '%s' without a date of signature."
+msgstr ""
+"Het is niet mogelijk de machtiging '%s' te bevestigen zonder een datum van "
+"ondertekenen."
+
+#. module: account_banking_sepa_direct_debit
+#: selection:sdd.mandate,recurrent_sequence_type:0
+msgid "Final"
+msgstr "Definitief"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd.wizard,state:0
+msgid "Finish"
+msgstr "Gereed"
+
+#. module: account_banking_sepa_direct_debit
+#: view:res.partner:0
+#: view:res.partner.bank:0
+msgid "SDD Mandates"
+msgstr "SDD machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: constraint:payment.line:0
+#: constraint:sdd.mandate:0
+msgid "Error msg in raise"
+msgstr "Fout bericht"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,state:0
+msgid "Reconciled"
+msgstr "Afgeletterd"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,recurrent_sequence_type:0
+msgid "Sequence Type for Next Debit"
+msgstr "Reeks soort voor volgende incasso"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,charge_bearer:0
+#: selection:banking.export.sdd.wizard,charge_bearer:0
+msgid "Borne by Creditor"
+msgstr "Op rekening van schuldeiser"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.actions.act_window,name:account_banking_sepa_direct_debit.sdd_mandate_action
+#: model:ir.ui.menu,name:account_banking_sepa_direct_debit.sdd_mandate_menu
+#: view:res.partner.bank:0
+#: field:res.partner.bank,sdd_mandate_ids:0
+msgid "SEPA Direct Debit Mandates"
+msgstr "SEPA incasso machtigingen"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd.wizard:0
+#: view:sdd.mandate:0
+msgid "Validate"
+msgstr "Bevestigen"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.recurrent_sequence_type_recurring
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.recurrent_sequence_type_recurring
+msgid "Sequence Type set to Recurring"
+msgstr "Reeks soort ingesteld op herhalend"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd.wizard:0
+msgid "Generate"
+msgstr "Genereer"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.mandate_cancel
+msgid "SEPA Direct Debit Mandate Cancelled"
+msgstr "SEPA incasso machtigingen geannuleerd"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,charge_bearer:0
+#: selection:banking.export.sdd.wizard,charge_bearer:0
+msgid "Borne by Debtor"
+msgstr "Rekening van schuldenaar"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:212
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:218
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:224
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:232
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:239
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:245
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:253
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:395
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:140
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:192
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:199
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:209
+#, python-format
+msgid "Error:"
+msgstr "Fout:"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,message_ids:0
+msgid "Messages"
+msgstr "Berichten"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,unique_mandate_reference:0
+msgid "Unique Mandate Reference"
+msgstr "Unieke machtiging referentie"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,state:0
+msgid "Cancelled"
+msgstr "Geannuleerd"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:141
+#, python-format
+msgid ""
+"Payment Type Code '%s' is not supported. The only Payment Type Code "
+"supported for SEPA Direct Debit are 'pain.008.001.02', 'pain.008.001.03' and "
+"'pain.008.001.04'."
+msgstr ""
+"Betaal soort code '%s' wordt niet ondersteund. De enige betaalsoort code "
+"ondersteund voor SEPA incasso's zijn 'pain.008.001.02', 'pain.008.001.03' en "
+"'pain.008.001.04'."
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr "Indien aangevinkt zullen nieuwe berichten uw aandacht vragen."
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd.wizard,file_id:0
+msgid "SDD File"
+msgstr "SDD bestand"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.mandate_expired
+msgid "SEPA Direct Debit Mandate has Expired"
+msgstr "SEPA Direct incasso machtiging is verlopen"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:246
+#, python-format
+msgid ""
+"The recurrent mandate '%s' which is not marked as 'Migrated to SEPA' must "
+"have its recurrent sequence type set to 'First'."
+msgstr ""
+"Bij de herhalende machtiging '%s' welke niet is gemarkeerd als 'gemigreerd "
+"naar SEPA' dient de reeks soort te worden ingesteld op 'Eerste'."
+
+#. module: account_banking_sepa_direct_debit
+#: help:banking.export.sdd,charge_bearer:0
+#: help:banking.export.sdd.wizard,charge_bearer:0
+msgid ""
+"Following service level : transaction charges are to be applied following "
+"the rules agreed in the service level and/or scheme (SEPA Core messages must "
+"use this). Shared : transaction charges on the creditor side are to be borne "
+"by the creditor, transaction charges on the debtor side are to be borne by "
+"the debtor. Borne by creditor : all transaction charges are to be borne by "
+"the creditor. Borne by debtor : all transaction charges are to be borne by "
+"the debtor."
+msgstr ""
+"Volg service level: Transactie kosten worden toegepast volgens de "
+"afgesproken regels in het service level en/of schema (Voor SEPA berichten "
+"deze gebruiken). Gedeeld : De transactiekosten aan de crediteur zijde zijn "
+"voor de schuldenaar, transactiekosten aan de debiteur kant zijn voor de "
+"schuldeiser. Op rekening van de schuldenaar: Alle transactie kosten zijn "
+"voor rekening van de schuldenaar. Op rekening van de schuldeiser: Alle "
+"transactie kosten zijn voor rekening van de schuldeiser."
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+msgid "Reference"
+msgstr "Referentie"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd:0
+msgid "SEPA Direct Debit"
+msgstr "SEPA Incasso (Direct Debit)"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd.wizard:0
+msgid "SEPA Direct Debit XML file generation"
+msgstr "SEPA Incasso XML bestand aanmaken"
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,message_summary:0
+msgid ""
+"Holds the Chatter summary (number of messages, ...). This summary is "
+"directly in html format in order to be inserted in kanban views."
+msgstr ""
+"Bevat de samenvatting van de chatter (aantal berichten,...). Deze "
+"samenvatting is direct in html formaat om zo in de kanban weergave te worden "
+"ingevoegd."
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_payment_line
+msgid "Payment Line"
+msgstr "Betaalregel"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,create_date:0
+msgid "Generation Date"
+msgstr "Aangemaakt op"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:396
+#, python-format
+msgid ""
+"The payment line with reference '%s' has the bank account '%s' which is not "
+"attached to the mandate '%s' (this mandate is attached to the bank account "
+"'%s')."
+msgstr ""
+"De betaalregel met referentie '%s' heeft het bankrekeningnummer '%s' welke "
+"niet is gekoppeld aan de machtiging '%s' (deze machtiging is gekoppeld aan "
+"bankrekening '%s')."
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd.wizard,state:0
+msgid "Create"
+msgstr "Aanmaken"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,nb_transactions:0
+#: field:banking.export.sdd.wizard,nb_transactions:0
+msgid "Number of Transactions"
+msgstr "Aantal transacties"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,type:0
+msgid "One-Off"
+msgstr "Eenmalig"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,state:0
+#: field:banking.export.sdd.wizard,state:0
+msgid "State"
+msgstr "Status"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:240
+#, python-format
+msgid "The recurrent mandate '%s' must have a sequence type."
+msgstr "De herhalende machtiging '%s' dient een reeks soort te hebben."
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,message_follower_ids:0
+msgid "Followers"
+msgstr "Volgers"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,message_unread:0
+msgid "Unread Messages"
+msgstr "Ongelezen berichten"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd:0
+#: field:banking.export.sdd,payment_order_ids:0
+#: field:banking.export.sdd.wizard,payment_order_ids:0
+msgid "Payment Orders"
+msgstr "Betaalopdrachten"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+msgid "Type"
+msgstr "Soort"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,state:0
+msgid "Sent"
+msgstr "Verstuurd"
+
+#. module: account_banking_sepa_direct_debit
+#: field:res.company,original_creditor_identifier:0
+msgid "Original Creditor Identifier"
+msgstr "Originele Incassant-ID"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:sdd.mandate,recurrent_sequence_type:0
+msgid "Recurring"
+msgstr "Terugkerend"
+
+#. module: account_banking_sepa_direct_debit
+#: help:res.company,sepa_creditor_identifier:0
+msgid ""
+"Enter the Creditor Identifier that has been attributed to your company to "
+"make SEPA Direct Debits. This identifier is composed of :\n"
+"- your country ISO code (2 letters)\n"
+"- a 2-digits checkum\n"
+"- a 3-letters business code\n"
+"- a country-specific identifier"
+msgstr ""
+"Geef de Incassant-ID in, welke is toegewezen aan uw bedrijf om incasso's uit "
+"te voeren. De Incassant-ID is samengesteld uit:\n"
+"- uw ISO landcode (2 letters)\n"
+"- een 2 cijferig controlegetal\n"
+"- een 3 cijferig business code\n"
+"- een landspecifieke identifier"
+
+#. module: account_banking_sepa_direct_debit
+#: sql_constraint:sdd.mandate:0
+msgid "A Mandate with the same reference already exists for this company !"
+msgstr "Een machtiging met dezelfde referentie bestaat al vooR dit bedrijf!"
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,state:0
+msgid ""
+"Only valid mandates can be used in a payment line. A cancelled mandate is a "
+"mandate that has been cancelled by the customer. A one-off mandate expires "
+"after its first use. A recurrent mandate expires after it's final use or if "
+"it hasn't been used for 36 months."
+msgstr ""
+"Alleen geldige machtigingen kunnen worden gebruikt op betaalregels. Een "
+"geannuleerde machtiging is een machtiging welke is geannuleerd door de "
+"klant. Een eenmalige machtiging verloopt na eenmalig gebruik. Een herhalende "
+"machtiging verloopt na zijn laatste gebruik of als deze niet is gebruikt "
+"voor 36 maanden."
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,recurrent_sequence_type:0
+msgid ""
+"This field is only used for Recurrent mandates, not for One-Off mandates."
+msgstr ""
+"Dit veld wordt alleen gebruikt voor herhalende machtigingen, niet voor een "
+"eenmalige machtiging."
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:213
+#, python-format
+msgid "The date of signature of mandate '%s' is in the future !"
+msgstr ""
+"De datum van de handtekening van de machtiging '%s' is in de toekomst!"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+msgid "Signature Date"
+msgstr "Handtekening datum"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,charge_bearer:0
+#: field:banking.export.sdd.wizard,charge_bearer:0
+msgid "Charge Bearer"
+msgstr "Kostenverdeling"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,partner_id:0
+msgid "Partner"
+msgstr "Relatie"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:sdd.mandate,recurrent_sequence_type:0
+msgid "First"
+msgstr "Eerste"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,signature_date:0
+msgid "Date of Signature of the Mandate"
+msgstr "Datum avn de handtekening van de machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.mandate_cancel
+msgid "Mandate Cancelled"
+msgstr "Machtiging geannuleerd"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.actions.act_window,name:account_banking_sepa_direct_debit.act_banking_export_sdd_payment_order
+msgid "Generated SEPA Direct Debit Files"
+msgstr "Genereerde SEPA incasso bestanden"
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,sepa_migrated:0
+msgid ""
+"If this field is not active, the mandate section of the next direct debit "
+"file that include this mandate will contain the 'Original Mandate "
+"Identification' and the 'Original Creditor Scheme Identification'. This is "
+"required in a few countries (Belgium for instance), but not in all "
+"countries. If this is not required in your country, you should keep this "
+"field always active."
+msgstr ""
+"Indien niet aangevinkt, zal het machtiging gedeelte van het volgende incasso "
+"bestand, dat deze machtiging bevat, de 'Originele machtiging identificatie' "
+"en de 'Origineel schuldeiser identificatie' bevatten. Dit is verplicht in "
+"een aantal landen (zoals bijvoorbeeld België), maar niet in alle landen. "
+"Indien dit niet verplicht is in uw land, dient u dit veld altijd aangevinkt "
+"te houden."
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,company_id:0
+msgid "Company"
+msgstr "Bedijf"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_banking_export_sdd_wizard
+msgid "Export SEPA Direct Debit File"
+msgstr "Exporteer SEPA incasso bestand"
+
+#. module: account_banking_sepa_direct_debit
+#: help:banking.export.sdd,batch_booking:0
+#: help:banking.export.sdd.wizard,batch_booking:0
+msgid ""
+"If true, the bank statement will display only one credit line for all the "
+"direct debits of the SEPA file ; if false, the bank statement will display "
+"one credit line per direct debit of the SEPA file."
+msgstr ""
+"Indien aangevinkt, zal het bankafschrift maar één credit regel weergeven "
+"voor alle incasso's van het SEPA bestand. Indien niet aangevinkt wordt voor "
+"iedere incasso een credit regel weergegeven op het bankafschrift."
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:225
+#, python-format
+msgid ""
+"Cannot validate the mandate '%s' because it is not attached to a bank "
+"account."
+msgstr ""
+"Kan de machtiging '%s' niet bevestigen omdat deze niet is gekoppeld aan een "
+"bankrekening."
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,state:0
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,state:0
+msgid "Draft"
+msgstr "Concept"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:290
+#, python-format
+msgid "Mandate update"
+msgstr "Machtiging bijwerken"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,charge_bearer:0
+#: selection:banking.export.sdd.wizard,charge_bearer:0
+msgid "Shared"
+msgstr "Gedeeld"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,batch_booking:0
+#: field:banking.export.sdd.wizard,batch_booking:0
+msgid "Batch Booking"
+msgstr "Bach verwerking"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,sepa_migrated:0
+msgid "Migrated to SEPA"
+msgstr "Gemigreerd naar SEPa"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,total_amount:0
+#: field:banking.export.sdd.wizard,total_amount:0
+msgid "Total Amount"
+msgstr "Totaalbedrag"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.actions.act_window,name:account_banking_sepa_direct_debit.action_account_banking_sdd
+#: model:ir.ui.menu,name:account_banking_sepa_direct_debit.menu_account_banking_sdd
+msgid "SEPA Direct Debit Files"
+msgstr "SEPA incasso bestanden"
+
+#. module: account_banking_sepa_direct_debit
+#: selection:banking.export.sdd,charge_bearer:0
+#: selection:banking.export.sdd.wizard,charge_bearer:0
+msgid "Following Service Level"
+msgstr "Volg service level"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:233
+#, python-format
+msgid ""
+"The mandate '%s' can't have a date of last debit before the date of "
+"signature."
+msgstr ""
+"De machtiging '%s' kan geen datum van laatste incasso hebben die eerder is "
+"dan de datum van ondertekening."
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.recurrent_sequence_type_final
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.recurrent_sequence_type_final
+msgid "Sequence Type set to Final"
+msgstr "Reeks soort ingesteld op definitief"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,message_is_follower:0
+msgid "Is a Follower"
+msgstr "Is een volger"
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,original_mandate_identification:0
+msgid ""
+"When the field 'Migrated to SEPA' is not active, this field will be used as "
+"the Original Mandate Identification in the Direct Debit file."
+msgstr ""
+"Wanneer het veld 'gemigreerd naar SEPA' niet actief is, zal dit veld worden "
+"gebruikt als de originele machtiging identificatie in het incasso bestand."
+
+#. module: account_banking_sepa_direct_debit
+#: view:payment.order:0
+msgid "SDD Mandate"
+msgstr "SDD machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,original_mandate_identification:0
+msgid "Original Mandate Identification"
+msgstr "Originele machtiging indificatie"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_res_company
+msgid "Companies"
+msgstr "Bedrijven"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,message_summary:0
+msgid "Summary"
+msgstr "Samenvatting"
+
+#. module: account_banking_sepa_direct_debit
+#: model:res.groups,name:account_banking_sepa_direct_debit.group_original_mandate_required
+msgid "Original Mandate Required (SEPA)"
+msgstr "Originele machtiging benodigd (SEPA)"
+
+#. module: account_banking_sepa_direct_debit
+#: field:account.invoice,sdd_mandate_id:0
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_sdd_mandate
+#: field:payment.line,sdd_mandate_id:0
+#: view:sdd.mandate:0
+msgid "SEPA Direct Debit Mandate"
+msgstr "SEPA incasso machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:193
+#, python-format
+msgid ""
+"Missing SEPA Direct Debit mandate on the payment line with partner '%s' and "
+"Invoice ref '%s'."
+msgstr ""
+"Ontbrekende SEPA incasso machtiging op de betaalregel met relatie '%s' en "
+"factuur referentie '%s'."
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/wizard/export_sdd.py:210
+#, python-format
+msgid ""
+"The mandate with reference '%s' for partner '%s' has type set to 'One-Off' "
+"and it has a last debit date set to '%s', so we can't use it."
+msgstr ""
+"De machtiging referentie '%s' voor relatie %s' is ingesteld op 'eenmalig' en "
+"de laatste incasso datum is ingesteld op '%s'. Zodoende kunnen we deze niet "
+"gebruiken."
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,scan:0
+msgid "Scan of the Mandate"
+msgstr "Scan van de machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,last_debit_date:0
+msgid "Date of the Last Debit"
+msgstr "Datum van laatste incasso"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.mandate_expired
+msgid "Mandate Expired"
+msgstr "Machtiging verlopen"
+
+#. module: account_banking_sepa_direct_debit
+#: constraint:res.company:0
+msgid "Invalid SEPA Creditor Identifier."
+msgstr "Ongeldige SEPA Incassant-ID."
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "Bankrekeningen"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.actions.act_window,help:account_banking_sepa_direct_debit.sdd_mandate_action
+msgid ""
+"\n"
+" Click to create a new SEPA Direct Debit Mandate.\n"
+"
\n"
+" A SEPA Direct Debit Mandate is a document signed by your customer "
+"that gives you the autorization to do one or several direct debits on his "
+"bank account.\n"
+"
\n"
+" "
+msgstr ""
+"\n"
+" Klik voor het maken van een nieuwe SEPA incasso machtiging.\n"
+"
\n"
+" Een SEPA incasso machtiging is een document ondertekend door uw "
+"klant, welke u toestemming geeft om incasso's uit te voeren op zijn "
+"bankrekening.\n"
+"
\n"
+" "
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd:0
+msgid "General Information"
+msgstr "Algemene informatie"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,state:0
+msgid "Valid"
+msgstr "Geldig"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_account_invoice
+msgid "Invoice"
+msgstr "Factuur"
+
+#. module: account_banking_sepa_direct_debit
+#: view:banking.export.sdd.wizard:0
+#: view:sdd.mandate:0
+msgid "Cancel"
+msgstr "Annuleer"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: field:sdd.mandate,payment_line_ids:0
+msgid "Related Payment Lines"
+msgstr "Gerelateerde betaalregels"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,type:0
+msgid "Recurrent"
+msgstr "Terugkerend"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,type:0
+msgid "Type of Mandate"
+msgstr "Soort machtiging"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.mandate_valid
+msgid "Mandate Validated"
+msgstr "Machtiging bevestigd"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd,file:0
+msgid "SEPA File"
+msgstr "SEPA bestand"
+
+#. module: account_banking_sepa_direct_debit
+#: field:res.company,sepa_creditor_identifier:0
+msgid "SEPA Creditor Identifier"
+msgstr "SEPA Incassant-ID"
+
+#. module: account_banking_sepa_direct_debit
+#: model:ir.model,name:account_banking_sepa_direct_debit.model_banking_export_sdd
+msgid "SEPA Direct Debit export"
+msgstr "SEPA incasso export"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+#: selection:sdd.mandate,state:0
+msgid "Expired"
+msgstr "Verlopen"
+
+#. module: account_banking_sepa_direct_debit
+#: field:sdd.mandate,partner_bank_id:0
+msgid "Bank Account"
+msgstr "Bankrekening"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:254
+#, python-format
+msgid ""
+"You must set the 'Original Mandate Identification' on the recurrent mandate "
+"'%s' which is not marked as 'Migrated to SEPA'."
+msgstr ""
+"U dient de 'Originele machtiging identificatie' in te stellen op de "
+"herhalende machtiging '%s' welke niet is gemarkeerd als 'Gemigreerd naar "
+"SEPA'"
+
+#. module: account_banking_sepa_direct_debit
+#: model:mail.message.subtype,description:account_banking_sepa_direct_debit.recurrent_sequence_type_first
+#: model:mail.message.subtype,name:account_banking_sepa_direct_debit.recurrent_sequence_type_first
+msgid "Sequence Type set to First"
+msgstr "Reeks ingesteld op eerste"
+
+#. module: account_banking_sepa_direct_debit
+#: code:addons/account_banking_sepa_direct_debit/account_banking_sdd.py:291
+#, python-format
+msgid ""
+"As you changed the bank account attached to this mandate, the 'Sequence "
+"Type' has been set back to 'First'."
+msgstr ""
+"Omdat u de gekoppelde bankrekening heeft gewijzigd is de reeks terug gezet "
+"naar 'Eerste'."
+
+#. module: account_banking_sepa_direct_debit
+#: help:sdd.mandate,message_ids:0
+msgid "Messages and communication history"
+msgstr "Berichten en communicatie historie"
+
+#. module: account_banking_sepa_direct_debit
+#: view:sdd.mandate:0
+msgid "Search SEPA Direct Debit Mandates"
+msgstr "Zoek SEPA incasso machtigingen"
+
+#. module: account_banking_sepa_direct_debit
+#: field:banking.export.sdd.wizard,file:0
+msgid "File"
+msgstr "Bestand"
diff --git a/account_banking_sepa_direct_debit/mandate_expire_cron.xml b/account_banking_sepa_direct_debit/mandate_expire_cron.xml
new file mode 100644
index 000000000..4cb0693d2
--- /dev/null
+++ b/account_banking_sepa_direct_debit/mandate_expire_cron.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+ Set SEPA Direct Debit Mandates to Expired
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+
diff --git a/account_banking_sepa_direct_debit/res_partner_bank_view.xml b/account_banking_sepa_direct_debit/res_partner_bank_view.xml
new file mode 100644
index 000000000..0b32e9f1c
--- /dev/null
+++ b/account_banking_sepa_direct_debit/res_partner_bank_view.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ sdd.mandate.res.partner.bank.form
+ res.partner.bank
+
+
+
+
+
+
+
+
+
+
+
+ sdd.mandate.res.partner.bank.tree
+ res.partner.bank
+
+
+
+
+
+
+
+
+
+
+ sdd.mandate.partner.form
+ res.partner
+
+
+
+
+
+
+
+
+
+
diff --git a/account_banking_sepa_direct_debit/sdd_mandate_view.xml b/account_banking_sepa_direct_debit/sdd_mandate_view.xml
new file mode 100644
index 000000000..c42a534f5
--- /dev/null
+++ b/account_banking_sepa_direct_debit/sdd_mandate_view.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ sdd.mandate.form
+ form
+ sdd.mandate
+
+
+
+
+
+
+ sdd.mandate.tree
+ tree
+ sdd.mandate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sdd.mandate.search
+ search
+ sdd.mandate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SEPA Direct Debit Mandates
+ sdd.mandate
+ form
+ tree,form
+
+
+ Click to create a new SEPA Direct Debit Mandate.
+
+ A SEPA Direct Debit Mandate is a document signed by your customer that gives you the autorization to do one or several direct debits on his bank account.
+
+
+
+
+
+
+
+
diff --git a/account_banking_sepa_direct_debit/security/ir.model.access.csv b/account_banking_sepa_direct_debit/security/ir.model.access.csv
new file mode 100644
index 000000000..cf78ffb59
--- /dev/null
+++ b/account_banking_sepa_direct_debit/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_banking_export_sdd","Full access on banking.export.sdd","model_banking_export_sdd","account_payment.group_account_payment",1,1,1,1
+"access_sdd_mandate","Full access on sdd.mandate","model_sdd_mandate","account_payment.group_account_payment",1,1,1,1
+"access_sdd_mandate_read","Read access on sdd.mandate","model_sdd_mandate","base.group_user",1,0,0,0
diff --git a/account_banking_sepa_direct_debit/security/original_mandate_required_security.xml b/account_banking_sepa_direct_debit/security/original_mandate_required_security.xml
new file mode 100644
index 000000000..e6a8570cf
--- /dev/null
+++ b/account_banking_sepa_direct_debit/security/original_mandate_required_security.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+ Original Mandate Required (SEPA)
+
+
+
+
+
diff --git a/account_banking_sepa_direct_debit/sepa_direct_debit_demo.xml b/account_banking_sepa_direct_debit/sepa_direct_debit_demo.xml
new file mode 100644
index 000000000..220261088
--- /dev/null
+++ b/account_banking_sepa_direct_debit/sepa_direct_debit_demo.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ SEPA Direct Debit La Banque Postale
+
+
+
+
+
+
+
+ FR78ZZZ424242
+
+
+
+
+ recurrent
+ first
+ 2014-02-01
+ valid
+
+
+
+
diff --git a/account_banking_sepa_direct_debit/static/src/img/icon.png b/account_banking_sepa_direct_debit/static/src/img/icon.png
new file mode 100644
index 000000000..6d1d923b6
Binary files /dev/null and b/account_banking_sepa_direct_debit/static/src/img/icon.png differ
diff --git a/account_banking_sepa_direct_debit/wizard/__init__.py b/account_banking_sepa_direct_debit/wizard/__init__.py
new file mode 100644
index 000000000..3830e36d9
--- /dev/null
+++ b/account_banking_sepa_direct_debit/wizard/__init__.py
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# SEPA Direct Debit module for OpenERP
+# Copyright (C) 2013 Akretion (http://www.akretion.com)
+# @author: Alexis de Lattre
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from . import export_sdd
diff --git a/account_banking_sepa_direct_debit/wizard/export_sdd.py b/account_banking_sepa_direct_debit/wizard/export_sdd.py
new file mode 100644
index 000000000..19520d318
--- /dev/null
+++ b/account_banking_sepa_direct_debit/wizard/export_sdd.py
@@ -0,0 +1,451 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# SEPA Direct Debit module for OpenERP
+# Copyright (C) 2013 Akretion (http://www.akretion.com)
+# @author: Alexis de Lattre
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+
+from openerp.osv import orm, fields
+from openerp.tools.translate import _
+from openerp import netsvc
+from datetime import datetime
+from lxml import etree
+
+
+class banking_export_sdd_wizard(orm.TransientModel):
+ _name = 'banking.export.sdd.wizard'
+ _inherit = ['banking.export.pain']
+ _description = 'Export SEPA Direct Debit File'
+ _columns = {
+ 'state': fields.selection([
+ ('create', 'Create'),
+ ('finish', 'Finish'),
+ ], 'State', readonly=True),
+ 'batch_booking': fields.boolean(
+ 'Batch Booking',
+ help="If true, the bank statement will display only one credit "
+ "line for all the direct debits of the SEPA file ; if false, "
+ "the bank statement will display one credit line per direct "
+ "debit of the SEPA file."),
+ 'charge_bearer': fields.selection([
+ ('SLEV', 'Following Service Level'),
+ ('SHAR', 'Shared'),
+ ('CRED', 'Borne by Creditor'),
+ ('DEBT', 'Borne by Debtor'),
+ ], 'Charge Bearer', required=True,
+ help="Following service level : transaction charges are to be "
+ "applied following the rules agreed in the service level and/or "
+ "scheme (SEPA Core messages must use this). Shared : transaction "
+ "charges on the creditor side are to be borne by the creditor, "
+ "transaction charges on the debtor side are to be borne by the "
+ "debtor. Borne by creditor : all transaction charges are to be "
+ "borne by the creditor. Borne by debtor : all transaction "
+ "charges are to be borne by the debtor."),
+ 'nb_transactions': fields.related(
+ 'file_id', 'nb_transactions', type='integer',
+ string='Number of Transactions', readonly=True),
+ 'total_amount': fields.related(
+ 'file_id', 'total_amount', type='float', string='Total Amount',
+ readonly=True),
+ 'file_id': fields.many2one(
+ 'banking.export.sdd', 'SDD File', readonly=True),
+ 'file': fields.related(
+ 'file_id', 'file', string="File", type='binary', readonly=True),
+ 'filename': fields.related(
+ 'file_id', 'filename', string="Filename", type='char', size=256,
+ readonly=True),
+ 'payment_order_ids': fields.many2many(
+ 'payment.order', 'wiz_sdd_payorders_rel', 'wizard_id',
+ 'payment_order_id', 'Payment Orders', readonly=True),
+ }
+
+ _defaults = {
+ 'charge_bearer': 'SLEV',
+ 'state': 'create',
+ }
+
+ def create(self, cr, uid, vals, context=None):
+ payment_order_ids = context.get('active_ids', [])
+ vals.update({
+ 'payment_order_ids': [[6, 0, payment_order_ids]],
+ })
+ return super(banking_export_sdd_wizard, self).create(
+ cr, uid, vals, context=context)
+
+ def _get_previous_bank(self, cr, uid, payline, context=None):
+ payline_obj = self.pool['payment.line']
+ previous_bank = False
+ payline_ids = payline_obj.search(
+ cr, uid, [
+ ('sdd_mandate_id', '=', payline.sdd_mandate_id.id),
+ ('bank_id', '!=', payline.bank_id.id),
+ ],
+ context=context)
+ if payline_ids:
+ older_lines = payline_obj.browse(
+ cr, uid, payline_ids, context=context)
+ previous_date = False
+ previous_payline_id = False
+ for older_line in older_lines:
+ older_line_date_sent = older_line.order_id.date_sent
+ if (older_line_date_sent
+ and older_line_date_sent > previous_date):
+ previous_date = older_line_date_sent
+ previous_payline_id = older_line.id
+ if previous_payline_id:
+ previous_payline = payline_obj.browse(
+ cr, uid, previous_payline_id, context=context)
+ previous_bank = previous_payline.bank_id
+ return previous_bank
+
+ def create_sepa(self, cr, uid, ids, context=None):
+ '''
+ Creates the SEPA Direct Debit file. That's the important code !
+ '''
+ sepa_export = self.browse(cr, uid, ids[0], context=context)
+
+ pain_flavor = sepa_export.payment_order_ids[0].mode.type.code
+ convert_to_ascii = \
+ sepa_export.payment_order_ids[0].mode.convert_to_ascii
+ if pain_flavor == 'pain.008.001.02':
+ bic_xml_tag = 'BIC'
+ name_maxsize = 70
+ root_xml_tag = 'CstmrDrctDbtInitn'
+ elif pain_flavor == 'pain.008.001.03':
+ bic_xml_tag = 'BICFI'
+ name_maxsize = 140
+ root_xml_tag = 'CstmrDrctDbtInitn'
+ elif pain_flavor == 'pain.008.001.04':
+ bic_xml_tag = 'BICFI'
+ name_maxsize = 140
+ root_xml_tag = 'CstmrDrctDbtInitn'
+ else:
+ raise orm.except_orm(
+ _('Error:'),
+ _("Payment Type Code '%s' is not supported. The only "
+ "Payment Type Code supported for SEPA Direct Debit "
+ "are 'pain.008.001.02', 'pain.008.001.03' and "
+ "'pain.008.001.04'.") % pain_flavor)
+
+ gen_args = {
+ 'bic_xml_tag': bic_xml_tag,
+ 'name_maxsize': name_maxsize,
+ 'convert_to_ascii': convert_to_ascii,
+ 'payment_method': 'DD',
+ 'pain_flavor': pain_flavor,
+ 'sepa_export': sepa_export,
+ 'file_obj': self.pool['banking.export.sdd'],
+ 'pain_xsd_file':
+ 'account_banking_sepa_direct_debit/data/%s.xsd' % pain_flavor,
+ }
+
+ pain_ns = {
+ 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
+ None: 'urn:iso:std:iso:20022:tech:xsd:%s' % pain_flavor,
+ }
+
+ xml_root = etree.Element('Document', nsmap=pain_ns)
+ pain_root = etree.SubElement(xml_root, root_xml_tag)
+
+ # A. Group header
+ group_header_1_0, nb_of_transactions_1_6, control_sum_1_7 = \
+ self.generate_group_header_block(
+ cr, uid, pain_root, gen_args, context=context)
+
+ transactions_count_1_6 = 0
+ total_amount = 0.0
+ amount_control_sum_1_7 = 0.0
+ lines_per_group = {}
+ # key = (requested_date, priority, sequence type)
+ # value = list of lines as objects
+ # Iterate on payment orders
+ today = fields.date.context_today(self, cr, uid, context=context)
+ for payment_order in sepa_export.payment_order_ids:
+ total_amount = total_amount + payment_order.total
+ # Iterate each payment lines
+ for line in payment_order.line_ids:
+ transactions_count_1_6 += 1
+ priority = line.priority
+ if payment_order.date_prefered == 'due':
+ requested_date = line.ml_maturity_date or today
+ elif payment_order.date_prefered == 'fixed':
+ requested_date = payment_order.date_scheduled or today
+ else:
+ requested_date = today
+ if not line.sdd_mandate_id:
+ raise orm.except_orm(
+ _('Error:'),
+ _("Missing SEPA Direct Debit mandate on the payment "
+ "line with partner '%s' and Invoice ref '%s'.")
+ % (line.partner_id.name,
+ line.ml_inv_ref.number))
+ if line.sdd_mandate_id.state != 'valid':
+ raise orm.except_orm(
+ _('Error:'),
+ _("The SEPA Direct Debit mandate with reference '%s' "
+ "for partner '%s' has expired.")
+ % (line.sdd_mandate_id.unique_mandate_reference,
+ line.sdd_mandate_id.partner_id.name))
+ if line.sdd_mandate_id.type == 'oneoff':
+ if not line.sdd_mandate_id.last_debit_date:
+ seq_type = 'OOFF'
+ else:
+ raise orm.except_orm(
+ _('Error:'),
+ _("The mandate with reference '%s' for partner "
+ "'%s' has type set to 'One-Off' and it has a "
+ "last debit date set to '%s', so we can't use "
+ "it.")
+ % (line.sdd_mandate_id.unique_mandate_reference,
+ line.sdd_mandate_id.partner_id.name,
+ line.sdd_mandate_id.last_debit_date))
+ elif line.sdd_mandate_id.type == 'recurrent':
+ seq_type_map = {
+ 'recurring': 'RCUR',
+ 'first': 'FRST',
+ 'final': 'FNAL',
+ }
+ seq_type_label = \
+ line.sdd_mandate_id.recurrent_sequence_type
+ assert seq_type_label is not False
+ seq_type = seq_type_map[seq_type_label]
+
+ key = (requested_date, priority, seq_type)
+ if key in lines_per_group:
+ lines_per_group[key].append(line)
+ else:
+ lines_per_group[key] = [line]
+ # Write requested_exec_date on 'Payment date' of the pay line
+ if requested_date != line.date:
+ self.pool['payment.line'].write(
+ cr, uid, line.id,
+ {'date': requested_date}, context=context)
+
+ for (requested_date, priority, sequence_type), lines in \
+ lines_per_group.items():
+ # B. Payment info
+ payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5 = \
+ self.generate_start_payment_info_block(
+ cr, uid, pain_root,
+ "sepa_export.payment_order_ids[0].reference + '-' + "
+ "sequence_type + '-' + requested_date.replace('-', '') "
+ "+ '-' + priority",
+ priority, 'CORE', sequence_type, requested_date, {
+ 'sepa_export': sepa_export,
+ 'sequence_type': sequence_type,
+ 'priority': priority,
+ 'requested_date': requested_date,
+ }, gen_args, context=context)
+
+ self.generate_party_block(
+ cr, uid, payment_info_2_0, 'Cdtr', 'B',
+ 'sepa_export.payment_order_ids[0].mode.bank_id.partner_id.'
+ 'name',
+ 'sepa_export.payment_order_ids[0].mode.bank_id.acc_number',
+ 'sepa_export.payment_order_ids[0].mode.bank_id.bank.bic',
+ {'sepa_export': sepa_export},
+ gen_args, context=context)
+
+ charge_bearer_2_24 = etree.SubElement(payment_info_2_0, 'ChrgBr')
+ charge_bearer_2_24.text = sepa_export.charge_bearer
+
+ creditor_scheme_identification_2_27 = etree.SubElement(
+ payment_info_2_0, 'CdtrSchmeId')
+ self.generate_creditor_scheme_identification(
+ cr, uid, creditor_scheme_identification_2_27,
+ 'sepa_export.payment_order_ids[0].company_id.'
+ 'sepa_creditor_identifier',
+ 'SEPA Creditor Identifier', {'sepa_export': sepa_export},
+ 'SEPA', gen_args, context=context)
+
+ transactions_count_2_4 = 0
+ amount_control_sum_2_5 = 0.0
+ for line in lines:
+ transactions_count_2_4 += 1
+ # C. Direct Debit Transaction Info
+ dd_transaction_info_2_28 = etree.SubElement(
+ payment_info_2_0, 'DrctDbtTxInf')
+ payment_identification_2_29 = etree.SubElement(
+ dd_transaction_info_2_28, 'PmtId')
+ end2end_identification_2_31 = etree.SubElement(
+ payment_identification_2_29, 'EndToEndId')
+ end2end_identification_2_31.text = self._prepare_field(
+ cr, uid, 'End to End Identification', 'line.name',
+ {'line': line}, 35,
+ gen_args=gen_args, context=context)
+ currency_name = self._prepare_field(
+ cr, uid, 'Currency Code', 'line.currency.name',
+ {'line': line}, 3, gen_args=gen_args,
+ context=context)
+ instructed_amount_2_44 = etree.SubElement(
+ dd_transaction_info_2_28, 'InstdAmt', Ccy=currency_name)
+ instructed_amount_2_44.text = '%.2f' % line.amount_currency
+ amount_control_sum_1_7 += line.amount_currency
+ amount_control_sum_2_5 += line.amount_currency
+ dd_transaction_2_46 = etree.SubElement(
+ dd_transaction_info_2_28, 'DrctDbtTx')
+ mandate_related_info_2_47 = etree.SubElement(
+ dd_transaction_2_46, 'MndtRltdInf')
+ mandate_identification_2_48 = etree.SubElement(
+ mandate_related_info_2_47, 'MndtId')
+ mandate_identification_2_48.text = self._prepare_field(
+ cr, uid, 'Unique Mandate Reference',
+ 'line.sdd_mandate_id.unique_mandate_reference',
+ {'line': line}, 35,
+ gen_args=gen_args, context=context)
+ mandate_signature_date_2_49 = etree.SubElement(
+ mandate_related_info_2_47, 'DtOfSgntr')
+ mandate_signature_date_2_49.text = self._prepare_field(
+ cr, uid, 'Mandate Signature Date',
+ 'line.sdd_mandate_id.signature_date',
+ {'line': line}, 10,
+ gen_args=gen_args, context=context)
+ if sequence_type == 'FRST' and (
+ line.sdd_mandate_id.last_debit_date or
+ not line.sdd_mandate_id.sepa_migrated):
+ previous_bank = self._get_previous_bank(
+ cr, uid, line, context=context)
+ if previous_bank or not line.sdd_mandate_id.sepa_migrated:
+ amendment_indicator_2_50 = etree.SubElement(
+ mandate_related_info_2_47, 'AmdmntInd')
+ amendment_indicator_2_50.text = 'true'
+ amendment_info_details_2_51 = etree.SubElement(
+ mandate_related_info_2_47, 'AmdmntInfDtls')
+ if previous_bank:
+ if previous_bank.bank.bic == line.bank_id.bank.bic:
+ ori_debtor_account_2_57 = etree.SubElement(
+ amendment_info_details_2_51, 'OrgnlDbtrAcct')
+ ori_debtor_account_id = etree.SubElement(
+ ori_debtor_account_2_57, 'Id')
+ ori_debtor_account_iban = etree.SubElement(
+ ori_debtor_account_id, 'IBAN')
+ ori_debtor_account_iban.text = self._validate_iban(
+ cr, uid, self._prepare_field(
+ cr, uid, 'Original Debtor Account',
+ 'previous_bank.acc_number',
+ {'previous_bank': previous_bank},
+ gen_args=gen_args,
+ context=context),
+ context=context)
+ else:
+ ori_debtor_agent_2_58 = etree.SubElement(
+ amendment_info_details_2_51, 'OrgnlDbtrAgt')
+ ori_debtor_agent_institution = etree.SubElement(
+ ori_debtor_agent_2_58, 'FinInstnId')
+ ori_debtor_agent_bic = etree.SubElement(
+ ori_debtor_agent_institution, bic_xml_tag)
+ ori_debtor_agent_bic.text = self._prepare_field(
+ cr, uid, 'Original Debtor Agent',
+ 'previous_bank.bank.bic',
+ {'previous_bank': previous_bank},
+ gen_args=gen_args,
+ context=context)
+ ori_debtor_agent_other = etree.SubElement(
+ ori_debtor_agent_institution, 'Othr')
+ ori_debtor_agent_other_id = etree.SubElement(
+ ori_debtor_agent_other, 'Id')
+ ori_debtor_agent_other_id.text = 'SMNDA'
+ # SMNDA = Same Mandate New Debtor Agent
+ elif not line.sdd_mandate_id.sepa_migrated:
+ ori_mandate_identification_2_52 = etree.SubElement(
+ amendment_info_details_2_51, 'OrgnlMndtId')
+ ori_mandate_identification_2_52.text = \
+ self._prepare_field(
+ cr, uid, 'Original Mandate Identification',
+ 'line.sdd_mandate_id.'
+ 'original_mandate_identification',
+ {'line': line},
+ gen_args=gen_args,
+ context=context)
+ ori_creditor_scheme_id_2_53 = etree.SubElement(
+ amendment_info_details_2_51, 'OrgnlCdtrSchmeId')
+ self.generate_creditor_scheme_identification(
+ cr, uid, ori_creditor_scheme_id_2_53,
+ 'sepa_export.payment_order_ids[0].company_id.'
+ 'original_creditor_identifier',
+ 'Original Creditor Identifier',
+ {'sepa_export': sepa_export},
+ 'SEPA', gen_args, context=context)
+
+ self.generate_party_block(
+ cr, uid, dd_transaction_info_2_28, 'Dbtr', 'C',
+ 'line.partner_id.name',
+ 'line.bank_id.acc_number',
+ 'line.bank_id.bank.bic',
+ {'line': line}, gen_args, context=context)
+
+ self.generate_remittance_info_block(
+ cr, uid, dd_transaction_info_2_28,
+ line, gen_args, context=context)
+
+ nb_of_transactions_2_4.text = str(transactions_count_2_4)
+ control_sum_2_5.text = '%.2f' % amount_control_sum_2_5
+ nb_of_transactions_1_6.text = str(transactions_count_1_6)
+ control_sum_1_7.text = '%.2f' % amount_control_sum_1_7
+
+ return self.finalize_sepa_file_creation(
+ cr, uid, ids, xml_root, total_amount, transactions_count_1_6,
+ gen_args, context=context)
+
+ def cancel_sepa(self, cr, uid, ids, context=None):
+ '''
+ Cancel the SEPA file: just drop the file
+ '''
+ sepa_export = self.browse(cr, uid, ids[0], context=context)
+ self.pool.get('banking.export.sdd').unlink(
+ cr, uid, sepa_export.file_id.id, context=context)
+ return {'type': 'ir.actions.act_window_close'}
+
+ def save_sepa(self, cr, uid, ids, context=None):
+ '''
+ Save the SEPA Direct Debit file: mark all payments in the file
+ as 'sent'. Write 'last debit date' on mandate and set oneoff
+ mandate to expired
+ '''
+ sepa_export = self.browse(cr, uid, ids[0], context=context)
+ self.pool.get('banking.export.sdd').write(
+ cr, uid, sepa_export.file_id.id, {'state': 'sent'},
+ context=context)
+ wf_service = netsvc.LocalService('workflow')
+ for order in sepa_export.payment_order_ids:
+ wf_service.trg_validate(uid, 'payment.order', order.id, 'done', cr)
+ mandate_ids = [line.sdd_mandate_id.id for line in order.line_ids]
+ self.pool['sdd.mandate'].write(
+ cr, uid, mandate_ids,
+ {'last_debit_date': datetime.today().strftime('%Y-%m-%d')},
+ context=context)
+ to_expire_ids = []
+ first_mandate_ids = []
+ for line in order.line_ids:
+ if line.sdd_mandate_id.type == 'oneoff':
+ to_expire_ids.append(line.sdd_mandate_id.id)
+ elif line.sdd_mandate_id.type == 'recurrent':
+ seq_type = line.sdd_mandate_id.recurrent_sequence_type
+ if seq_type == 'final':
+ to_expire_ids.append(line.sdd_mandate_id.id)
+ elif seq_type == 'first':
+ first_mandate_ids.append(line.sdd_mandate_id.id)
+ self.pool['sdd.mandate'].write(
+ cr, uid, to_expire_ids, {'state': 'expired'}, context=context)
+ self.pool['sdd.mandate'].write(
+ cr, uid, first_mandate_ids, {
+ 'recurrent_sequence_type': 'recurring',
+ 'sepa_migrated': True,
+ }, context=context)
+ return {'type': 'ir.actions.act_window_close'}
diff --git a/account_banking_sepa_direct_debit/wizard/export_sdd_view.xml b/account_banking_sepa_direct_debit/wizard/export_sdd_view.xml
new file mode 100644
index 000000000..1f5a533f0
--- /dev/null
+++ b/account_banking_sepa_direct_debit/wizard/export_sdd_view.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ banking.export.sdd.wizard.view
+ banking.export.sdd.wizard
+
+
+
+
+
+
+
diff --git a/account_direct_debit/__openerp__.py b/account_direct_debit/__openerp__.py
index e6d93a6f8..59b14ef60 100644
--- a/account_direct_debit/__openerp__.py
+++ b/account_direct_debit/__openerp__.py
@@ -31,7 +31,7 @@
'author': 'Therp BV / Smile',
'website': 'https://launchpad.net/banking-addons',
'category': 'Banking addons',
- 'depends': ['account_banking'],
+ 'depends': ['account_banking', 'account_banking_payment_export'],
'init_xml': [],
'update_xml': [
'view/account_payment.xml',
diff --git a/account_direct_debit/view/account_payment.xml b/account_direct_debit/view/account_payment.xml
index 1570cca36..73d7914ee 100644
--- a/account_direct_debit/view/account_payment.xml
+++ b/account_direct_debit/view/account_payment.xml
@@ -59,7 +59,7 @@
payment.mode.form add transfer account
payment.mode
-
+
form
diff --git a/account_direct_debit/workflow/account_payment.xml b/account_direct_debit/workflow/account_payment.xml
index 7ea27c523..ca6cc14b8 100644
--- a/account_direct_debit/workflow/account_payment.xml
+++ b/account_direct_debit/workflow/account_payment.xml
@@ -21,5 +21,11 @@
test_undo_done()
undo_done
+
+
+
+
+ done
+