first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,48 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import Pool, PoolMeta
from trytond.tools import grouped_slice
class Move(metaclass=PoolMeta):
__name__ = 'account.move'
@classmethod
def _get_origin(cls):
models = super()._get_origin()
return models + ['account.payment']
def _payments_to_update(reconciliations):
pool = Pool()
Payment = pool.get('account.payment')
Reconciliation = pool.get('account.move.reconciliation')
moves = set()
others = set()
for reconciliation in reconciliations:
for line in reconciliation.lines:
moves.add(line.move)
others.update(line.reconciliations_delegated)
payments = set()
for sub_moves in grouped_slice(moves):
payments.update(Payment.search([
('clearing_move', 'in', [m.id for m in sub_moves]),
], order=[]))
if others:
payments.update(_payments_to_update(Reconciliation.browse(others)))
return payments
class MoveReconciliation(metaclass=PoolMeta):
__name__ = 'account.move.reconciliation'
@classmethod
def on_modification(cls, mode, reconciliations, field_names=None):
pool = Pool()
Payment = pool.get('account.payment')
super().on_modification(mode, reconciliations, field_names=field_names)
Payment.__queue__.update_reconciled(
list(_payments_to_update(reconciliations)))

View File

@@ -0,0 +1,14 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.method.selection.append(
('account.payment.journal|cron_post_clearing_moves',
"Post Clearing Moves"))

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,146 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Compte"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Assentament de liquidació"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Liquidació conciliada"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr "Línies d'extracte"
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Liquidació conciliada"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr "Línies d'extracte"
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Compte de liquidació"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Diari de liquidació"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "Retràs comptabilització liquidació"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Defineix el compte a utilitzar pel moviment de liquidació."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr "Marcat si l'apunt de liquidació s'ha conciliat."
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Tots els pagaments del grup s'han conciliat."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"Comptabilitza automàticament els asentaments de liquidació desprès del retràs.\n"
"Deixeu-ho en blanc per no comptabilitzar."
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'payment_group'"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr "Inici marcar pagaments amb éxit"
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Grups amb èxit"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Marca pagaments amb èxit"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
"Per liquidar el pagament \"%(payment)s\" heu de configurar un compte de "
"reeemplaç pel compte \"%(account)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
"Per liquidar el pagament \"%(payment)s\" heu de configurar un compte de "
"reemplaç pel compte \"%(account)s\" o un compte actiu pel diari de pagaments"
" \"%(journal)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
"Per liquidar el pagament \"%(payment)s\" heu de configurar un compte a pagar"
" pel tercer \"%(party)s\"."
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
"Per liquidar el pagament \"%(payment)s\" heu de configurar un compte a "
"cobrar pel tercer \"%(party)s\"."
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Amb èxit"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Amb èxit"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Comptabilitza assentaments de liquidació"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Liquidació"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Cancel·la"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Amb èxit"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,146 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Abstimmungsbuchungssatz"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Zahlungsausgleich abgestimmt"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr "Kontoauszugspositionen"
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Zahlungsausgleich abgestimmt"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr "Kontoauszugspositionen"
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Konto Zahlungsausgleich"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Journal Zahlungsausgleich"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "Verzögerung des Zahlungsausgleichs"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Datum"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Definieren des Kontos für die Ausgleichsbuchungssätze."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr "Ausgewählt wenn Zahlungsausgleichsbuchung abgestimmt ist."
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Alle Zahlungen in der Gruppe sind abgestimmt."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"Automatisches Verbuchen der Ausgleichsbuchungssätze mit Verzögerung.\n"
"Leer lassen, um keine Buchungssätze zu erzeugen."
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'payment_group': Zahlungsgruppe"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr "Buchhaltung Zahlung Erfolgreich Start"
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Zahlungsläufe als erfolgreich markieren"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Erfolgreiche Zahlungen"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
"Um die Zahlung \"%(payment)s\" auszugleichen muss ein Ersatzkonto für "
"\"%(account)s\" konfiguriert werden."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
"Um die Zahlung \"%(payment)s\" auszugleichen, muss ein Ersatzkonto für "
"\"%(account)s\" konfiguriert oder ein aktives Konto auf dem Zahlungsjournal "
"\"%(journal)s\" erfasst werden."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
"Um die Zahlung \"%(payment)s\" auszugleichen muss ein Verbindlichkeitenkonto"
" für die Partei \"%(party)s\" konfiguriert werden."
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
"Um die Zahlung \"%(payment)s\" auszugleichen, muss ein Forderungskonto für "
"die Partei \"%(party)s\" konfiguriert werden."
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Erfolgreich markieren"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Erfolgreich markieren"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Ausgleichsbuchungssätze erstellen"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Zahlungsausgleich"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Abbrechen"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Erfolgreich"

View File

@@ -0,0 +1,146 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Cuenta"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Asiento de liquidación"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Liquidación conciliada"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr "Líneas de extracto"
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Liquidación conciliada"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr "Líneas de extracto"
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Cuenta de liquidación"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Diario de liquidación"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "Retraso contabilización liquidación"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Fecha"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Define la cuenta a utilizar para el asiento de liquidación."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr "Marcado si el apunte de liquidación se ha conciliado."
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Todos los pagos del grupo se han conciliado."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"Contabiliza automáticamente los apuntes de liquidación después del retraso.\n"
"Dejar en blanco para no contabilizar."
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'payment_group'"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr "Inicio marcar pagos con éxito"
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Grupos con éxito"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Marcar pagos con éxito"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
"Para liquidar el pago \"%(payment)s\" debes configurar una cuenta de "
"reemplazo para la cuenta \"%(account)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
"Para liquidar el pago \"%(payment)s\" debes configurar una cuenta de "
"remplazo para la cuenta \"%(account)s\" o una cuenta activa para el diario "
"de pagos \"%(journal)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
"Para liquidar el pago \"%(payment)s\" debes configurar una cuenta a pagar "
"para el tercero \"%(party)s\"."
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
"Para liquidar el pago \"%(payment)s\" debes configurar una cuenta a cobrar "
"para el tercero \"%(party)s\"."
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Con éxito"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Con éxito"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Contabilizar asientos de liquidación"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Liquidación"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Con éxito"

View File

@@ -0,0 +1,139 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Asiento de compensación"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Asiento de compensación"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Asiento de compensación"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Cuenta de compensación"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Libro diario de compensación"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Fecha"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "Grupo de pago"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Exitoso"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Pago exitoso"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Exitoso"
#, fuzzy
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Exitoso"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr ""
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Compensación"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Exitoso"

View File

@@ -0,0 +1,140 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Arvelduse kanne"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Arvelduse kanne"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Arvelduse kanne"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Arvelduse konto"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Arvelduse päevaraamat"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "Arvelduse postitamise viivitus"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Kuupäev"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Määra konto, mida kasutada arveldamise kandel."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"Postita automaatselt arvelduse kanded pärast viivitust.Jäta tühjaks kui ei "
"soovi postitada."
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "Tasumise grupp"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Õnnestunud"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Tasumised õnnestusid"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Õnnestunud"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Õnnestunud"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Postita tasumise kanded"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Tasumine"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Tühista"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Õnnestunud"

View File

@@ -0,0 +1,141 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "حساب"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "تسویه جابجایی"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "تسویه جابجایی"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "تسویه جابجایی"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "تسویه حساب"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "تسویه روزنامه"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "تسویه تاخیر ارسال"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "تاریخ"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "تعریف حساب برای استفاده تسویه جابجایی."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"ارسال تسویه جابجایی ها بعداز تأخییر بطورخودکار.\n"
"برای بدون ارسال خالی بگذارید."
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "گروه پرداخت"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "پرداخت های موفق"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "تسویه"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "انصراف"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "موفق شد"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,146 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Compte"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Mouvement de compensation"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Compensation réconciliée"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr "Lignes de relevé"
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Compensation réconciliée"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr "Lignes de relevé"
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Compte de compensation"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Journal de compensation"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "Délai de comptabilisation de compensation"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Date"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Définit le compte à utiliser pour le mouvement de compensation."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr "Coché si la ligne de compensation est réconciliée."
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Tous les paiements du groupe sont réconciliés."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"Comptabilise automatiquement les mouvements de compensation après le délai.\n"
"Laissez vide pour ne pas comptabiliser."
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'payment_group'"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr "Paiement comptable réussi début"
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Groupes réussis"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Réussir les paiements"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
"Pour compenser le paiement « %(payment)s », vous devez configurer un compte "
"de remplacement pour « %(account)s »."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
"Pour compenser le paiement « %(payment)s », vous devez configurer un compte "
"de remplacement pour « %(account)s » ou un compte actif dans le journal des "
"paiements « %(journal)s »."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
"Pour compenser le paiement « %(payment)s », vous devez configurer un compte "
"à payer pour le tiers « %(party)s »."
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
"Pour compenser le paiement « %(payment)s », vous devez configurer un compte "
"client pour le tiers « %(party)s »."
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Réussir"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Réussir"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Comptabiliser les mouvements de compensation"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Compensation"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Annuler"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Réussir"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Akun"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Tanggal"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr ""
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr ""
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Batal"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr ""

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Conto"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Movimento di compensazione"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Movimento di compensazione"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Conto di compensazione"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Registro di compensazione"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "Raggruppamento pagamenti"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Riusciti"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Pagamenti avvenuti con successo"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Riusciti"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Riusciti"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr ""
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Compensazione"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Annulla"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Riusciti"

View File

@@ -0,0 +1,140 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "ຊໍາລະເຄື່ອນຍ້າຍ"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "ຊໍາລະເຄື່ອນຍ້າຍ"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "ຊໍາລະເຄື່ອນຍ້າຍ"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "ບັນຊີສະສາງ"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "ບັນຊີສະສາງປະຈຳວັນ"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "ວັນທີ"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "ໝວດການຈ່າຍ"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
#, fuzzy
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "ການຊໍາລະ"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "ຍົກເລີກ"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "ສຳເລັດແລ້ວ"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Koresponduojanti sąskaita"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "Mokėjimų grupė"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Sėkmingai"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Sėkmingai apmokėta"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Sėkmingai"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Sėkmingai"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Atsisakyti"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Sėkmingai"

View File

@@ -0,0 +1,146 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Rekening"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "tegenboeking"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Compensatieboeking afgeletterd"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr "Afschrift regels"
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Compensatieboeking afgeletterd"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr "Afschrift regels"
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "tegen rekening"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "tegen dagboek"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr "tegenboeking vertraging"
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Datum"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "definieer de rekening om te gebruiken voor de tegenboekingen."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr "Aangevinkt als de compensatieboekingsregel is afgeletterd."
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Alle betalingen in de groep zijn afgeletterd."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
"maak automatisch de tegenboeking na de vertraging (delay).\n"
"Laat leeg om geen boekingen te maken."
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'betalingsgroep'"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr "Betaling succesvol start"
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Geslaagde groepen"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "geslaagde betalingen"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
"Om de betaling \"%(payment)s\" te verwerken, moet er een vervangende "
"rekening geconfigureerd worden voor \"%(account)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
"Om de betaling \"%(payment)s\" te verwerken, moet er een vervangend account "
"geconfigureerd worden voor \"%(account)s\" of een actieve rekening van het "
"betalingsdagboek \"%(journal)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
"Om de betaling \"%(payment)s\" te verwerken, moet er een crediteurenrekening"
" geconfigureerd worden voor relatie \"%(party)s\"."
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
"Om de betaling \"%(payment)s\" te verwerken, moet er een debiteurenrekening "
"geconfigureerd worden voor relatie \"%(party)s\"."
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succesvol"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "geslaagd"
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Maak tegenboekingen"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "tegenboeking"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Annuleer"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "geslaagd"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Anuluj"
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,141 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Conta"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Movimento de Compensação"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Movimento de Compensação"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Movimento de Compensação"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Conta de Compensação"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Diário de Compensação"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Define a conta usada para o movimento de compensação."
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
"\n"
"'pagamento_agrupado'"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
#, fuzzy
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Compensação"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Sucesso"

View File

@@ -0,0 +1,135 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Cont"
#, fuzzy
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Ștergerea Mișcării"
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Data"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
#, fuzzy
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr "Toate plățile din grup sunt reconciliate."
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr ""
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr ""
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Anulare"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr ""

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,140 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr "Klirinška knjižba"
#, fuzzy
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Klirinška knjižba"
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
#, fuzzy
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr "Klirinška knjižba"
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr "Klirinški konto"
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr "Klirinški dnevnik"
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr "Datum"
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr "Konto za knjiženje klirinškega prometa"
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
#, fuzzy
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr "Plačilna skupina"
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
#, fuzzy
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr "Kliring"
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr "Prekliči"
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Zaključi"

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr ""
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr ""
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr ""

View File

@@ -0,0 +1,137 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.payment,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.payment,clearing_move:"
msgid "Clearing Move"
msgstr ""
msgctxt "field:account.payment,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.group,clearing_reconciled:"
msgid "Clearing Reconciled"
msgstr ""
msgctxt "field:account.payment.group,statement_lines:"
msgid "Statement Lines"
msgstr ""
msgctxt "field:account.payment.journal,clearing_account:"
msgid "Clearing Account"
msgstr ""
msgctxt "field:account.payment.journal,clearing_journal:"
msgid "Clearing Journal"
msgstr ""
msgctxt "field:account.payment.journal,clearing_posting_delay:"
msgid "Clearing Posting Delay"
msgstr ""
msgctxt "field:account.payment.succeed.start,date:"
msgid "Date"
msgstr ""
msgctxt "help:account.payment,account:"
msgid "Define the account to use for clearing move."
msgstr ""
msgctxt "help:account.payment,clearing_reconciled:"
msgid "Checked if clearing line is reconciled."
msgstr ""
msgctxt "help:account.payment.group,clearing_reconciled:"
msgid "All payments in the group are reconciled."
msgstr ""
msgctxt "help:account.payment.journal,clearing_posting_delay:"
msgid ""
"Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting."
msgstr ""
msgctxt "help:account.statement.rule,description:"
msgid ""
"\n"
"'payment_group'"
msgstr ""
msgctxt "model:account.payment.succeed.start,string:"
msgid "Account Payment Succeed Start"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_payment_group_succeed"
msgid "Succeed Groups"
msgstr "Succeed"
msgctxt "model:ir.action,name:wizard_succeed"
msgid "Succeed Payments"
msgstr "Succeed Payments"
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_missing_journal"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a replacement "
"account for \"%(account)s\" or an active account on the payment journal "
"\"%(journal)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_payment_clearing_account_payable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a payable account "
"for party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt ""
"model:ir.message,text:msg_payment_clearing_account_receivable_missing"
msgid ""
"To clear the payment \"%(payment)s\" you must configure a receivable account"
" for party \"%(party)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:payment_group_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
msgctxt "model:ir.model.button,string:payment_succeed_wizard_button"
msgid "Succeed"
msgstr "Succeed"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Post Clearing Moves"
msgstr "Post Clearing Moves"
msgctxt "view:account.payment.journal:"
msgid "Clearing"
msgstr ""
msgctxt "wizard_button:account.payment.succeed,start,end:"
msgid "Cancel"
msgstr ""
#, fuzzy
msgctxt "wizard_button:account.payment.succeed,start,succeed:"
msgid "Succeed"
msgstr "Succeed"

View File

@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data grouped="1">
<record model="ir.message" id="msg_payment_clearing_account_missing">
<field name="text">To clear the payment "%(payment)s" you must configure a replacement account for "%(account)s".</field>
</record>
<record model="ir.message" id="msg_payment_clearing_account_missing_journal">
<field name="text">To clear the payment "%(payment)s" you must configure a replacement account for "%(account)s" or an active account on the payment journal "%(journal)s".</field>
</record>
<record model="ir.message" id="msg_payment_clearing_account_payable_missing">
<field name="text">To clear the payment "%(payment)s" you must configure a payable account for party "%(party)s".</field>
</record>
<record model="ir.message" id="msg_payment_clearing_account_receivable_missing">
<field name="text">To clear the payment "%(payment)s" you must configure a receivable account for party "%(party)s".</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,14 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta
class PartyReceptionDirectDebit(metaclass=PoolMeta):
__name__ = 'party.party.reception_direct_debit'
def get_balance_pending_payment_domain(self):
return [
super().get_balance_pending_payment_domain(),
('clearing_move', '=', None),
]

View File

@@ -0,0 +1,526 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from collections import defaultdict
from functools import wraps
from sql import Null
from sql.aggregate import BoolAnd, Min
from sql.conditionals import Coalesce
from trytond import backend
from trytond.i18n import gettext
from trytond.model import ModelView, Workflow, fields
from trytond.modules.account.exceptions import AccountMissing
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If, TimeDelta
from trytond.tools import grouped_slice, reduce_ids
from trytond.transaction import Transaction
from trytond.wizard import Button, StateTransition, StateView, Wizard
class Journal(metaclass=PoolMeta):
__name__ = 'account.payment.journal'
clearing_account = fields.Many2One('account.account', 'Clearing Account',
domain=[
('company', '=', Eval('company', -1)),
('type', '!=', None),
('closed', '!=', True),
('party_required', '=', False),
],
states={
'required': Bool(Eval('clearing_journal')),
})
clearing_journal = fields.Many2One('account.journal', 'Clearing Journal',
states={
'required': Bool(Eval('clearing_account')),
},
context={
'company': Eval('company', None),
})
clearing_posting_delay = fields.TimeDelta(
"Clearing Posting Delay",
domain=['OR',
('clearing_posting_delay', '=', None),
('clearing_posting_delay', '>=', TimeDelta()),
],
help="Post automatically the clearing moves after the delay.\n"
"Leave empty for no posting.")
@classmethod
def cron_post_clearing_moves(cls, date=None):
pool = Pool()
Date = pool.get('ir.date')
Move = pool.get('account.move')
if date is None:
date = Date.today()
moves = []
journals = cls.search([
('company', '=', Transaction().context.get('company')),
('clearing_posting_delay', '!=', None),
])
for journal in journals:
move_date = date - journal.clearing_posting_delay
moves.extend(Move.search([
('date', '<=', move_date),
('origin.journal.id', '=', journal.id,
'account.payment'),
('state', '=', 'draft'),
('company', '=', journal.company.id),
]))
Move.post(moves)
def cancel_clearing_move(func):
@wraps(func)
def wrapper(cls, payments, *args, **kwargs):
pool = Pool()
Move = pool.get('account.move')
Line = pool.get('account.move.line')
Reconciliation = pool.get('account.move.reconciliation')
result = func(cls, payments, *args, **kwargs)
to_delete = []
to_reconcile = defaultdict(lambda: defaultdict(list))
to_unreconcile = []
for payment in payments:
if payment.clearing_move:
if payment.clearing_move.state == 'draft':
to_delete.append(payment.clearing_move)
for line in payment.clearing_move.lines:
if line.reconciliation:
to_unreconcile.append(line.reconciliation)
else:
cancel_move = payment.clearing_move.cancel()
for line in (payment.clearing_move.lines
+ cancel_move.lines):
if line.reconciliation:
to_unreconcile.append(line.reconciliation)
if line.account.reconcile:
to_reconcile[payment.party][line.account].append(
line)
# Remove clearing_move before delete
# in case reconciliation triggers use it.
cls.write(payments, {'clearing_move': None})
if to_unreconcile:
Reconciliation.delete(to_unreconcile)
if to_delete:
Move.delete(to_delete)
for party in to_reconcile:
for lines in to_reconcile[party].values():
Line.reconcile(lines)
cls.update_reconciled(payments)
return result
return wrapper
class Payment(metaclass=PoolMeta):
__name__ = 'account.payment'
account = fields.Many2One(
'account.account', "Account", ondelete='RESTRICT',
domain=[
('closed', '!=', True),
('company', '=', Eval('company', -1)),
['OR',
('second_currency', '=', Eval('currency', None)),
[
('company.currency', '=', Eval('currency', None)),
('second_currency', '=', None),
],
],
If(Eval('line'),
('id', '=', None),
()),
],
states={
'readonly': Eval('state') != 'draft',
'invisible': Eval('line') & ~Eval('account'),
},
help="Define the account to use for clearing move.")
clearing_move = fields.Many2One('account.move', 'Clearing Move',
readonly=True)
clearing_reconciled = fields.Boolean(
"Clearing Reconciled", readonly=True,
states={
'invisible': ~Eval('clearing_move'),
},
help="Checked if clearing line is reconciled.")
@property
def amount_line_paid(self):
amount = super().amount_line_paid
if self.clearing_move:
clearing_lines = [
l for l in self.clearing_move.lines
if l.account == self.clearing_account]
if clearing_lines:
clearing_line = clearing_lines[0]
if (not self.line.reconciliation
and clearing_line.reconciliation):
if self.line.second_currency:
payment_amount = abs(self.line.amount_second_currency)
else:
payment_amount = abs(
self.line.credit - self.line.debit)
amount -= max(min(self.amount, payment_amount), 0)
return amount
@classmethod
def __setup__(cls):
super().__setup__()
line_invisible = Eval('account') & ~Eval('line')
if 'invisible' in cls.line.states:
cls.line.states['invisible'] &= line_invisible
else:
cls.line.states['invisible'] = line_invisible
cls._buttons.update({
'succeed_wizard': cls._buttons['succeed'],
})
cls.account.domain = [
cls.account.domain,
cls._account_type_domain(),
]
@classmethod
def _account_type_domain(cls):
return If(Eval('state') == 'draft',
If(Eval('kind') == 'receivable',
('type.receivable', '=', True),
('type.payable', '=', True),
),
())
@fields.depends('party', 'kind', 'date')
def on_change_party(self):
super().on_change_party()
if self.kind == 'receivable':
if self.party:
with Transaction().set_context(date=self.date):
self.account = self.party.account_receivable_used
else:
self.account = None
@classmethod
@ModelView.button_action('account_payment_clearing.wizard_succeed')
def succeed_wizard(cls, payments):
pass
@classmethod
@ModelView.button
@Workflow.transition('succeeded')
def succeed(cls, payments):
pool = Pool()
Line = pool.get('account.move.line')
super().succeed(payments)
cls.set_clearing_move(payments)
to_reconcile = []
for payment in payments:
if (payment.line
and not payment.line.reconciliation
and payment.clearing_move):
lines = [l for l in payment.clearing_move.lines
if l.account == payment.line.account] + [payment.line]
if not sum(l.debit - l.credit for l in lines):
to_reconcile.append(lines)
Line.reconcile(*to_reconcile)
cls.reconcile_clearing(payments)
cls.update_reconciled(payments)
@property
def clearing_account(self):
transaction = Transaction()
context = transaction.context
with transaction.set_context(date=context.get('clearing_date')):
if self.line:
account = self.line.account.current()
if not account:
raise AccountMissing(gettext(
'account_payment_clearing'
'.msg_payment_clearing_account_missing',
payment=self.rec_name,
account=self.line.account.rec_name))
elif self.account:
account = self.account.current()
if not account:
raise AccountMissing(gettext(
'account_payment_clearing'
'.msg_payment_clearing_account_missing',
payment=self.rec_name,
account=self.account.rec_name))
elif self.kind == 'payable':
account = self.party.account_payable_used
if not account:
raise AccountMissing(gettext(
'account_payment_clearing'
'.msg_payment_clearing_account_payable_missing',
payment=self.rec_name,
party=self.party.rec_name))
elif self.kind == 'receivable':
account = self.party.account_receivable_used
if not account:
raise AccountMissing(gettext(
'account_payment_clearing'
'.msg_payment_clearing_account_receivable_missing',
payment=self.rec_name,
party=self.party.rec_name))
return account
@property
def clearing_party(self):
if self.line:
return self.line.party
else:
return self.party
@classmethod
def set_clearing_move(cls, payments):
pool = Pool()
Move = pool.get('account.move')
moves = []
for payment in payments:
move = payment._get_clearing_move()
if move and not payment.clearing_move:
payment.clearing_move = move
moves.append(move)
if moves:
Move.save(moves)
cls.save(payments)
def _get_clearing_move(self, date=None):
pool = Pool()
Move = pool.get('account.move')
Line = pool.get('account.move.line')
Currency = pool.get('currency.currency')
Period = pool.get('account.period')
Date = pool.get('ir.date')
if (not self.journal.clearing_account
or not self.journal.clearing_journal):
return
if self.clearing_move:
return self.clearing_move
if date is None:
date = Transaction().context.get('clearing_date')
if date is None:
with Transaction().set_context(company=self.company.id):
date = Date.today()
period = Period.find(self.company, date=date)
local_currency = self.journal.currency == self.company.currency
if not local_currency:
with Transaction().set_context(date=self.date):
local_amount = Currency.compute(
self.journal.currency, self.amount, self.company.currency)
else:
local_amount = self.amount
move = Move(journal=self.journal.clearing_journal, origin=self,
date=date, period=period, company=self.company)
line = Line()
if self.kind == 'payable':
line.debit, line.credit = local_amount, 0
else:
line.debit, line.credit = 0, local_amount
line.account = self.clearing_account
if not local_currency:
line.amount_second_currency = self.amount.copy_sign(
line.debit - line.credit)
line.second_currency = self.journal.currency
line.party = (self.clearing_party
if line.account.party_required else None)
counterpart = Line()
if self.kind == 'payable':
counterpart.debit, counterpart.credit = 0, local_amount
else:
counterpart.debit, counterpart.credit = local_amount, 0
counterpart.account = self.journal.clearing_account.current(date)
if not counterpart.account:
raise AccountMissing(gettext(
'account_payment_clearing'
'.msg_payment_clearing_account_missing_journal',
payment=self.rec_name,
account=self.journal.clearing_account.rec_name,
journal=self.journal.rec_name))
if not local_currency:
counterpart.amount_second_currency = self.amount.copy_sign(
counterpart.debit - counterpart.credit)
counterpart.second_currency = self.journal.currency
move.lines = (line, counterpart)
return move
@classmethod
@ModelView.button
@Workflow.transition('processing')
@cancel_clearing_move
def proceed(cls, payments):
super().proceed(payments)
@classmethod
@ModelView.button
@Workflow.transition('failed')
@cancel_clearing_move
def fail(cls, payments):
super().fail(payments)
@classmethod
def update_reconciled(cls, payments):
for payment in payments:
if payment.clearing_move:
payment.clearing_reconciled = all(
l.reconciliation for l in payment.clearing_lines)
else:
payment.clearing_reconciled = False
cls.save(payments)
@classmethod
def reconcile_clearing(cls, payments):
pool = Pool()
MoveLine = pool.get('account.move.line')
Group = pool.get('account.payment.group')
to_reconcile = []
for payment in payments:
if not payment.clearing_move:
continue
clearing_account = payment.journal.clearing_account
if not clearing_account or not clearing_account.reconcile:
continue
lines = [l for l in payment.clearing_lines if not l.reconciliation]
if lines and not sum((l.debit - l.credit) for l in lines):
to_reconcile.append(lines)
if to_reconcile:
MoveLine.reconcile(*to_reconcile)
Group.reconcile_clearing(
Group.browse(list({p.group for p in payments if p.group})))
@property
def clearing_lines(self):
clearing_account = self.journal.clearing_account
if self.clearing_move:
for line in self.clearing_move.lines:
if line.account == clearing_account:
yield line
@classmethod
def copy(cls, payments, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('clearing_move')
return super().copy(payments, default=default)
class Group(metaclass=PoolMeta):
__name__ = 'account.payment.group'
clearing_reconciled = fields.Function(fields.Boolean(
"Clearing Reconciled",
help="All payments in the group are reconciled."),
'get_reconciled', searcher='search_reconciled')
@classmethod
def __setup__(cls):
super().__setup__()
cls._buttons.update({
'succeed_wizard': cls._buttons['succeed'],
})
@classmethod
def get_reconciled(cls, groups, name):
pool = Pool()
Payment = pool.get('account.payment')
payment = Payment.__table__()
cursor = Transaction().connection.cursor()
result = defaultdict(lambda: None)
column = Coalesce(payment.clearing_reconciled, False)
if backend.name == 'sqlite':
column = Min(column)
else:
column = BoolAnd(column)
for sub_groups in grouped_slice(groups):
cursor.execute(*payment.select(
payment.group, column,
where=reduce_ids(payment.group, sub_groups),
group_by=payment.group))
result.update(cursor)
return result
@classmethod
def search_reconciled(cls, name, clause):
pool = Pool()
Payment = pool.get('account.payment')
payment = Payment.__table__()
_, operator, value = clause
Operator = fields.SQL_OPERATORS[operator]
column = Coalesce(payment.clearing_reconciled, False)
if backend.name == 'sqlite':
column = Min(column)
else:
column = BoolAnd(column)
query = payment.select(
payment.group,
where=payment.group != Null,
having=Operator(column, value),
group_by=payment.group)
return [('id', 'in', query)]
@classmethod
@ModelView.button_action(
'account_payment_clearing.wizard_payment_group_succeed')
def succeed_wizard(cls, groups):
pass
@classmethod
def reconcile_clearing(cls, groups):
pool = Pool()
MoveLine = pool.get('account.move.line')
to_reconcile = []
for group in groups:
clearing_account = group.journal.clearing_account
if not clearing_account or not clearing_account.reconcile:
continue
lines = [l for l in group.clearing_lines if not l.reconciliation]
if lines and not sum((l.debit - l.credit) for l in lines):
to_reconcile.append(lines)
if to_reconcile:
MoveLine.reconcile(*to_reconcile)
@property
def clearing_lines(self):
for payment in self.payments:
yield from payment.clearing_lines
class Succeed(Wizard):
__name__ = 'account.payment.succeed'
start = StateView('account.payment.succeed.start',
'account_payment_clearing.succeed_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Succeed', 'succeed', 'tryton-ok', default=True),
])
succeed = StateTransition()
def transition_succeed(self):
with Transaction().set_context(clearing_date=self.start.date):
self.model.succeed(self.records)
return 'end'
class SucceedStart(ModelView):
__name__ = 'account.payment.succeed.start'
date = fields.Date("Date", required=True)
@classmethod
def default_date(cls):
pool = Pool()
Date = pool.get('ir.date')
return Date.today()

View File

@@ -0,0 +1,73 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="payment_journal_view_form">
<field name="model">account.payment.journal</field>
<field name="inherit"
ref="account_payment.payment_journal_view_form"/>
<field name="name">payment_journal_form</field>
</record>
<record model="ir.ui.view" id="payment_view_form">
<field name="model">account.payment</field>
<field name="inherit" ref="account_payment.payment_view_form"/>
<field name="name">payment_form</field>
</record>
<record model="ir.ui.view" id="payment_view_list">
<field name="model">account.payment</field>
<field name="inherit" ref="account_payment.payment_view_list"/>
<field name="name">payment_list</field>
</record>
<record model="ir.ui.view" id="payment_group_view_form">
<field name="model">account.payment.group</field>
<field name="inherit" ref="account_payment.payment_group_view_form"/>
<field name="name">payment_group_form</field>
</record>
<record model="ir.ui.view" id="payment_group_view_list">
<field name="model">account.payment.group</field>
<field name="inherit" ref="account_payment.payment_group_view_list"/>
<field name="name">payment_group_list</field>
</record>
<record model="ir.model.button" id="payment_group_succeed_wizard_button">
<field name="model">account.payment.group</field>
<field name="name">succeed_wizard</field>
<field name="string">Succeed</field>
</record>
<record model="ir.action.wizard" id="wizard_payment_group_succeed">
<field name="name">Succeed Groups</field>
<field name="wiz_name">account.payment.succeed</field>
<field name="model">account.payment.group</field>
</record>
<record model="ir.action.wizard" id="wizard_succeed">
<field name="name">Succeed Payments</field>
<field name="wiz_name">account.payment.succeed</field>
<field name="model">account.payment</field>
</record>
<record model="ir.ui.view" id="succeed_start_view_form">
<field name="model">account.payment.succeed.start</field>
<field name="type">form</field>
<field name="name">succeed_start_form</field>
</record>
<record model="ir.model.button" id="payment_succeed_wizard_button">
<field name="model">account.payment</field>
<field name="name">succeed_wizard</field>
<field name="string">Succeed</field>
</record>
</data>
<data noupdate="1">
<record model="ir.cron" id="cron_post_clearing_moves">
<field name="method">account.payment.journal|cron_post_clearing_moves</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">days</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,233 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from sql import Null
from sql.operators import Concat
from trytond.model import fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, If
from trytond.transaction import Transaction
class Payment(metaclass=PoolMeta):
__name__ = 'account.payment'
statement_lines = fields.One2Many(
'account.statement.line', 'related_to', "Statement Lines",
readonly=True)
@property
def clearing_lines(self):
clearing_account = self.journal.clearing_account
yield from super().clearing_lines
for statement_line in self.statement_lines:
if statement_line.move:
for line in statement_line.move.lines:
if line.account == clearing_account:
yield line
class PaymentGroup(metaclass=PoolMeta):
__name__ = 'account.payment.group'
statement_lines = fields.One2Many(
'account.statement.line', 'related_to', "Statement Lines",
readonly=True)
@property
def clearing_lines(self):
clearing_account = self.journal.clearing_account
yield from super().clearing_lines
for statement_line in self.statement_lines:
if statement_line.move:
for line in statement_line.move.lines:
if line.account == clearing_account:
yield line
class Statement(metaclass=PoolMeta):
__name__ = 'account.statement'
@classmethod
def _process_payments(cls, moves):
pool = Pool()
Payment = pool.get('account.payment')
payments = super()._process_payments(moves)
if payments:
Payment.__queue__.reconcile_clearing(payments)
return payments
def _group_key(self, line):
key = super()._group_key(line)
if hasattr(line, 'payment'):
key += (('payment', line.payment),)
return key
class StatementLine(metaclass=PoolMeta):
__name__ = 'account.statement.line'
@classmethod
def __setup__(cls):
super().__setup__()
cls.related_to.domain['account.payment'] = [
cls.related_to.domain.get('account.payment', []),
If(Eval('statement_state') == 'draft',
('clearing_reconciled', '!=', True),
()),
]
cls.related_to.domain['account.payment.group'] = [
('company', '=', Eval('company', -1)),
If(Eval('second_currency'),
('currency', '=', Eval('second_currency', -1)),
('currency', '=', Eval('currency', -1))),
If(Eval('statement_state') == 'draft',
('clearing_reconciled', '!=', True),
()),
]
@classmethod
def __register__(cls, module):
table = cls.__table__()
super().__register__(module)
table_h = cls.__table_handler__(module)
cursor = Transaction().connection.cursor()
# Migration from 6.2: replace payment by related_to
if table_h.column_exist('payment'):
cursor.execute(*table.update(
[table.related_to],
[Concat('account.payment,', table.payment)],
where=table.payment != Null))
table_h.drop_column('payment')
# Migration from 6.2: replace payment_group by related_to
if table_h.column_exist('payment_group'):
cursor.execute(*table.update(
[table.related_to],
[Concat('account.payment.group,', table.payment_group)],
where=table.payment_group != Null))
table_h.drop_column('payment_group')
@classmethod
def _get_relations(cls):
return super()._get_relations() + ['account.payment.group']
@property
@fields.depends('related_to')
def payment_group(self):
pool = Pool()
PaymentGroup = pool.get('account.payment.group')
related_to = getattr(self, 'related_to', None)
if isinstance(related_to, PaymentGroup) and related_to.id >= 0:
return related_to
@payment_group.setter
def payment_group(self, value):
self.related_to = value
@fields.depends(methods=['payment', 'payment_group'])
def on_change_related_to(self):
super().on_change_related_to()
if self.payment:
clearing_account = self.payment.journal.clearing_account
if clearing_account:
self.account = clearing_account
if self.payment_group:
self.party = None
clearing_account = self.payment_group.journal.clearing_account
if clearing_account:
self.account = clearing_account
def payments(self):
yield from super().payments()
if self.payment_group:
yield self.payment_group.kind, self.payment_group.payments
@fields.depends('party', methods=['payment'])
def on_change_party(self):
super().on_change_party()
if self.party:
self.payment_group = None
@fields.depends('account', methods=['payment', 'payment_group'])
def on_change_account(self):
super().on_change_account()
if self.payment:
clearing_account = self.payment.journal.clearing_account
elif self.payment_group:
clearing_account = self.payment_group.journal.clearing_account
else:
return
if self.account != clearing_account:
self.payment = None
@classmethod
def post_move(cls, lines):
pool = Pool()
Move = pool.get('account.move')
super().post_move(lines)
Move.post([l.payment.clearing_move for l in lines
if l.payment
and l.payment.clearing_move
and l.payment.clearing_move.state == 'draft'])
class StatementRule(metaclass=PoolMeta):
__name__ = 'account.statement.rule'
@classmethod
def __setup__(cls):
super().__setup__()
cls.description.help += "\n'payment_group'"
class StatementRuleLine(metaclass=PoolMeta):
__name__ = 'account.statement.rule.line'
def _get_related_to(self, origin, keywords, party=None, amount=0):
return super()._get_related_to(
origin, keywords, party=party, amount=amount) | {
self._get_payment_group(origin, keywords),
}
def _get_account_from(self, related_to):
pool = Pool()
Payment = pool.get('account.payment')
PaymentGroup = pool.get('account.payment.group')
account = super()._get_account_from(related_to)
if isinstance(related_to, (Payment, PaymentGroup)):
account = related_to.journal.clearing_account
return account
@classmethod
def _get_payment_domain(cls, payment, origin):
return [
super()._get_payment_domain(payment, origin),
('clearing_reconciled', '!=', True),
]
@classmethod
def _get_payment_group_domain(cls, payment_group, origin):
return [
('rec_name', '=', payment_group),
('company', '=', origin.company.id),
('currency', '=', origin.currency.id),
('clearing_reconciled', '!=', True),
]
def _get_payment_group(self, origin, keywords):
pool = Pool()
PaymentGroup = pool.get('account.payment.group')
if keywords.get('payment_group'):
domain = self._get_payment_group_domain(
keywords['payment_group'], origin)
groups = PaymentGroup.search(domain)
if len(groups) == 1:
group, = groups
return group

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,109 @@
==================================
Negative Payment Clearing Scenario
==================================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules
>>> today = dt.date.today()
Activate modules::
>>> config = activate_modules(
... 'account_payment_clearing', create_company, create_chart)
Create fiscal year::
>>> fiscalyear = create_fiscalyear()
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = get_accounts()
>>> receivable = accounts['receivable']
>>> payable = accounts['payable']
>>> cash = accounts['cash']
>>> expense = accounts['expense']
>>> Account = Model.get('account.account')
>>> bank_clearing = Account(parent=payable.parent)
>>> bank_clearing.name = 'Bank Clearing'
>>> bank_clearing.type = payable.type
>>> bank_clearing.reconcile = True
>>> bank_clearing.deferral = True
>>> bank_clearing.save()
>>> Journal = Model.get('account.journal')
>>> expense_journal, = Journal.find([('code', '=', 'EXP')])
Create payment journal::
>>> PaymentJournal = Model.get('account.payment.journal')
>>> payment_journal = PaymentJournal(name='Manual',
... process_method='manual', clearing_journal=expense_journal,
... clearing_account=bank_clearing)
>>> payment_journal.save()
Create parties::
>>> Party = Model.get('party.party')
>>> supplier = Party(name='Supplier')
>>> supplier.save()
Create payable move::
>>> Move = Model.get('account.move')
>>> move = Move()
>>> move.journal = expense_journal
>>> line = move.lines.new(
... account=payable, party=supplier, maturity_date=today,
... debit=Decimal('-50.00'))
>>> line = move.lines.new(account=expense, credit=Decimal('-50.00'))
>>> move.click('post')
>>> payable.reload()
>>> payable.balance
Decimal('-50.00')
Pay the line::
>>> Payment = Model.get('account.payment')
>>> line, = [l for l in move.lines if l.account == payable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('state', '=', 'draft')])
>>> payment.amount
Decimal('50.00')
>>> payment.click('submit')
>>> payment.click('approve')
>>> payment.state
'approved'
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Succeed payment::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> payment.state
'succeeded'
>>> payment.clearing_move.state
'draft'
>>> payable.reload()
>>> payable.balance
Decimal('0.00')
>>> bank_clearing.reload()
>>> bank_clearing.balance
Decimal('-50.00')
>>> bool(payment.line.reconciliation)
True

View File

@@ -0,0 +1,476 @@
=========================
Payment Clearing Scenario
=========================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> today = dt.date.today()
>>> yesterday = today - dt.timedelta(days=1)
>>> first = today + dt.timedelta(days=1)
Activate modules::
>>> config = activate_modules(
... ['account_payment_clearing', 'account_statement'],
... create_company, create_chart)
Get company::
>>> company = get_company()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(
... create_fiscalyear(today=(yesterday, first)))
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = get_accounts()
>>> receivable = accounts['receivable']
>>> revenue = accounts['revenue']
>>> expense = accounts['expense']
>>> payable = accounts['payable']
>>> cash = accounts['cash']
>>> Account = Model.get('account.account')
>>> bank_clearing = Account(parent=payable.parent)
>>> bank_clearing.name = 'Bank Clearing'
>>> bank_clearing.type = payable.type
>>> bank_clearing.reconcile = True
>>> bank_clearing.deferral = True
>>> bank_clearing.save()
>>> Journal = Model.get('account.journal')
>>> expense_journal, = Journal.find([('code', '=', 'EXP')])
>>> revenue_journal, = Journal.find([('code', '=', 'REV')])
Create payment journal::
>>> PaymentJournal = Model.get('account.payment.journal')
>>> payment_journal = PaymentJournal(name='Manual',
... process_method='manual',
... clearing_journal=expense_journal,
... clearing_account=bank_clearing,
... clearing_posting_delay=dt.timedelta(1))
>>> payment_journal.save()
Create parties::
>>> Party = Model.get('party.party')
>>> supplier = Party(name='Supplier')
>>> supplier.save()
>>> customer = Party(name='Customer')
>>> customer.save()
Create payable move::
>>> Move = Model.get('account.move')
>>> move = Move()
>>> move.journal = expense_journal
>>> line = move.lines.new(
... account=payable, party=supplier, maturity_date=today,
... credit=Decimal('50.00'))
>>> line = move.lines.new(account=expense, debit=Decimal('50.00'))
>>> move.click('post')
>>> payable.reload()
>>> payable.balance
Decimal('-50.00')
Partially pay the line::
>>> Payment = Model.get('account.payment')
>>> line, = [l for l in move.lines if l.account == payable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find()
>>> payment.amount = Decimal('30.0')
>>> payment.click('submit')
>>> payment.click('approve')
>>> payment.state
'approved'
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Succeed payment::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.form.date = first
>>> succeed.execute('succeed')
>>> payment.state
'succeeded'
>>> assertEqual(payment.clearing_move.date, first)
>>> payment.clearing_move.state
'draft'
>>> bool(payment.clearing_reconciled)
False
>>> payable.reload()
>>> payable.balance
Decimal('-20.00')
>>> bank_clearing.reload()
>>> bank_clearing.balance
Decimal('-30.00')
>>> payment.line.reconciliation
Fail payment::
>>> payment.click('fail')
>>> payment.state
'failed'
>>> payment.clearing_move
>>> bool(payment.clearing_reconciled)
False
>>> payment.line.reconciliation
>>> payable.reload()
>>> payable.balance
Decimal('-50.00')
>>> bank_clearing.reload()
>>> bank_clearing.balance
Decimal('0.00')
Pay the line::
>>> line, = [l for l in move.lines if l.account == payable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('state', '=', 'draft')])
>>> payment.amount
Decimal('50.00')
>>> payment.click('submit')
>>> payment.click('approve')
>>> payment.state
'approved'
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Succeed payment::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> payment.state
'succeeded'
>>> payment.clearing_move.state
'draft'
>>> payable.reload()
>>> payable.balance
Decimal('0.00')
>>> bank_clearing.reload()
>>> bank_clearing.balance
Decimal('-50.00')
>>> bool(payment.line.reconciliation)
True
Fail payment::
>>> payment.click('fail')
>>> payment.state
'failed'
>>> payment.clearing_move
>>> payment.line.reconciliation
Succeed payment and post clearing::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.form.date = yesterday
>>> succeed.execute('succeed')
>>> payment.state
'succeeded'
>>> Cron = Model.get('ir.cron')
>>> Company = Model.get('company.company')
>>> cron_post_clearing_moves, = Cron.find([
... ('method', '=',
... 'account.payment.journal|cron_post_clearing_moves'),
... ])
>>> cron_post_clearing_moves.companies.append(Company(company.id))
>>> cron_post_clearing_moves.click('run_once')
>>> payment.reload()
>>> clearing_move = payment.clearing_move
>>> clearing_move.state
'posted'
Fail payment with posted clearing::
>>> payment.click('fail')
>>> payment.state
'failed'
>>> payment.clearing_move
>>> bool(payment.clearing_reconciled)
False
>>> payment.line.reconciliation
>>> clearing_move.reload()
>>> line, = [l for l in clearing_move.lines
... if l.account == payment.line.account]
>>> bool(line.reconciliation)
True
Succeed payment to use on statement::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> payment.state
'succeeded'
Create statement::
>>> StatementJournal = Model.get('account.statement.journal')
>>> Statement = Model.get('account.statement')
>>> account_journal, = Journal.find([('code', '=', 'STA')], limit=1)
>>> statement_journal = StatementJournal(name='Test',
... journal=account_journal,
... account=cash,
... )
>>> statement_journal.save()
>>> statement = Statement(name='test',
... journal=statement_journal,
... start_balance=Decimal('0.00'),
... end_balance=Decimal('-50.00'),
... )
Create a line for the payment::
>>> line = statement.lines.new(date=today)
>>> line.amount = Decimal('-50.00')
>>> line.related_to = payment
>>> assertEqual(line.party, supplier)
>>> assertEqual(line.account, bank_clearing)
Remove the party must remove payment::
>>> line.party = None
>>> line.related_to
>>> line.related_to = payment
Change account must remove payment::
>>> line.account = receivable
>>> line.related_to
>>> line.account = None
>>> line.related_to = payment
Validate statement::
>>> statement.click('validate_statement')
>>> statement.state
'validated'
>>> line, = statement.lines
>>> move_line, = [l for l in line.move.lines
... if l.account == bank_clearing]
>>> bool(move_line.reconciliation)
True
>>> bank_clearing.reload()
>>> bank_clearing.balance
Decimal('0.00')
>>> payment.reload()
>>> bool(payment.clearing_reconciled)
True
>>> bool(payment.group.clearing_reconciled)
True
Unreconcile payment clearing to allow reimbursement::
>>> move_line.reconciliation.delete()
>>> payment.reload()
>>> bool(payment.clearing_reconciled)
False
>>> bool(payment.group.clearing_reconciled)
False
Create a statement that reimburse the payment group::
>>> statement = Statement(name='test',
... journal=statement_journal,
... start_balance=Decimal('-50.00'),
... end_balance=Decimal('0.00'),
... )
>>> line = statement.lines.new(date=today)
>>> line.related_to = payment.group
>>> assertEqual(line.account, bank_clearing)
>>> line.amount = Decimal('50.00')
>>> statement.click('validate_statement')
>>> statement.state
'validated'
Payment must be failed::
>>> payment.reload()
>>> payment.state
'failed'
Payment in a foreign currency
-----------------------------
Create a payment journal in Euro::
>>> euro = get_currency('EUR')
>>> euro_payment_journal = PaymentJournal(
... name='Euro Payments', process_method='manual', currency=euro,
... clearing_journal=expense_journal, clearing_account=bank_clearing)
>>> euro_payment_journal.save()
Create a payable move::
>>> move = Move()
>>> move.journal = expense_journal
>>> line = move.lines.new(
... account=payable, party=supplier, maturity_date=today,
... credit=Decimal('20.00'),
... amount_second_currency=Decimal('-40.00'), second_currency=euro)
>>> line = move.lines.new(
... account=expense, debit=Decimal('20.00'),
... amount_second_currency=Decimal('40.00'), second_currency=euro)
>>> move.click('post')
Pay the line::
>>> line, = [l for l in move.lines if l.account == payable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = euro_payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('state', '=', 'draft')])
>>> payment.amount
Decimal('40.00')
>>> payment.click('submit')
>>> payment.click('approve')
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Succeed payment::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> debit_line, = [l for l in payment.clearing_move.lines if l.debit > 0]
>>> debit_line.debit
Decimal('20.00')
>>> debit_line.amount_second_currency
Decimal('40.00')
Create receivable move::
>>> move = Move()
>>> move.journal = revenue_journal
>>> line = move.lines.new(
... account=receivable, party=customer, maturity_date=today,
... debit=Decimal('50.00'), second_currency=euro,
... amount_second_currency=Decimal('100.0'))
>>> line = move.lines.new(account=revenue, credit=Decimal('50.00'))
>>> move.click('post')
>>> receivable.reload()
>>> receivable.balance
Decimal('50.00')
Pay the line::
>>> Payment = Model.get('account.payment')
>>> line, = [l for l in move.lines if l.account == receivable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = euro_payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('state', '=', 'draft')])
>>> payment.amount
Decimal('100.0')
>>> payment.click('submit')
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Succeed payment::
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> credit_line, = [l for l in payment.clearing_move.lines if l.credit > 0]
>>> credit_line.credit
Decimal('50.00')
>>> credit_line.amount_second_currency
Decimal('-100.0')
Validate Statement with processing payment
--------------------------------------------
Create a payable move::
>>> move = Move()
>>> move.journal = expense_journal
>>> line = move.lines.new(
... account=payable, party=supplier, maturity_date=today,
... credit=Decimal('50.00'))
>>> line = move.lines.new(account=expense, debit=Decimal('50.00'))
>>> move.click('post')
Create a processing payment for the move::
>>> Payment = Model.get('account.payment')
>>> line, = [l for l in move.lines if l.account == payable]
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = payment_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('line', '=', line.id)])
>>> payment.click('submit')
>>> payment.click('approve')
>>> payment.state
'approved'
>>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
Create statement for the payment::
>>> statement = Statement(name='test',
... journal=statement_journal,
... start_balance=Decimal('0.00'),
... end_balance=Decimal('-50.00'))
>>> line = statement.lines.new(date=yesterday)
>>> line.amount = Decimal('-50.00')
>>> line.related_to = payment
>>> assertEqual(line.party, supplier)
>>> assertEqual(line.account, bank_clearing)
>>> statement.save()
Validate statement and check the payment is confirmed::
>>> statement.click('validate_statement')
>>> statement.state
'validated'
>>> line, = statement.lines
>>> move_line, = [l for l in line.move.lines
... if l.account == bank_clearing]
>>> bool(move_line.reconciliation)
True
>>> payment.reload()
>>> payment.state
'succeeded'
>>> bool(payment.clearing_reconciled)
True
>>> debit_line, = [l for l in payment.clearing_move.lines if l.debit > 0]
>>> debit_line.debit
Decimal('50.00')
>>> assertEqual(debit_line.date, yesterday)

View File

@@ -0,0 +1,169 @@
======================================
Payment Clearing Invoice Amount to Pay
======================================
Imports::
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules
Activate modules::
>>> config = activate_modules(
... ['account_payment_clearing', 'account_invoice'],
... create_company, create_chart)
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(
... create_fiscalyear())
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = get_accounts()
>>> receivable = accounts['receivable']
>>> revenue = accounts['revenue']
>>> expense = accounts['expense']
>>> payable = accounts['payable']
>>> cash = accounts['cash']
>>> Account = Model.get('account.account')
>>> bank_clearing = Account(parent=payable.parent)
>>> bank_clearing.name = 'Bank Clearing'
>>> bank_clearing.type = payable.type
>>> bank_clearing.reconcile = True
>>> bank_clearing.deferral = True
>>> bank_clearing.save()
>>> Journal = Model.get('account.journal')
>>> expense_journal, = Journal.find([('code', '=', 'EXP')])
>>> revenue_journal, = Journal.find([('code', '=', 'REV')])
Create payment journal::
>>> PaymentJournal = Model.get('account.payment.journal')
>>> payment_journal = PaymentJournal(name='No Clearing',
... process_method='manual')
>>> payment_journal.save()
>>> clearing_journal = PaymentJournal(name='Clearing',
... process_method='manual',
... clearing_journal=expense_journal,
... clearing_account=bank_clearing)
>>> clearing_journal.save()
Create parties::
>>> Party = Model.get('party.party')
>>> supplier = Party(name='Supplier')
>>> supplier.save()
>>> customer = Party(name='Customer')
>>> customer.save()
Create and pay an invoice without clearing::
>>> Invoice = Model.get('account.invoice')
>>> invoice = Invoice()
>>> invoice.party = customer
>>> line = invoice.lines.new()
>>> line.account = revenue
>>> line.quantity = 1
>>> line.unit_price = Decimal('100')
>>> invoice.save()
>>> invoice.click('post')
>>> invoice.amount_to_pay
Decimal('100.00')
>>> paid_line, = [l for l in invoice.move.lines if l.account == receivable]
>>> pay_line = Wizard('account.move.line.pay', [paid_line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = payment_journal
>>> pay_line.execute('next_')
>>> Payment = Model.get('account.payment')
>>> payment, = Payment.find()
>>> payment.click('submit')
>>> payment.state
'submitted'
>>> process_payment = payment.click('process_wizard')
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> invoice.reload()
>>> invoice.state
'posted'
>>> invoice.amount_to_pay
Decimal('0.00')
Create an invoice and pay it::
>>> invoice1 = Invoice()
>>> invoice1.party = customer
>>> line = invoice1.lines.new()
>>> line.account = revenue
>>> line.quantity = 1
>>> line.unit_price = Decimal('100')
>>> invoice1.save()
>>> invoice1.click('post')
>>> invoice1.amount_to_pay
Decimal('100.00')
>>> paid_line, = [l for l in invoice1.move.lines if l.account == receivable]
>>> pay_line = Wizard('account.move.line.pay', [paid_line])
>>> pay_line.execute('next_')
>>> pay_line.form.journal = clearing_journal
>>> pay_line.execute('next_')
>>> payment, = Payment.find([('state', '=', 'draft')])
>>> payment.click('submit')
>>> payment.state
'submitted'
>>> process_payment = payment.click('process_wizard')
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
>>> invoice1.reload()
>>> invoice1.state
'paid'
>>> invoice1.amount_to_pay
Decimal('0')
Unreconcile the payment line and check the amount to pay::
>>> other_line, = [l for l in paid_line.reconciliation.lines
... if l != paid_line]
>>> unreconcile = Wizard('account.move.unreconcile_lines', [paid_line])
>>> invoice1.reload()
>>> invoice1.state
'posted'
>>> invoice1.amount_to_pay
Decimal('0.00')
Create a second invoice and reconcile its line to pay with the payment::
>>> invoice2 = Invoice()
>>> invoice2.party = customer
>>> line = invoice2.lines.new()
>>> line.account = revenue
>>> line.quantity = 1
>>> line.unit_price = Decimal('100')
>>> invoice2.save()
>>> invoice2.click('post')
>>> inv2_line, = [l for l in invoice2.move.lines if l.account == receivable]
>>> reconcile = Wizard(
... 'account.move.reconcile_lines', [inv2_line, other_line])
>>> invoice1.reload()
>>> invoice1.amount_to_pay
Decimal('100.00')
>>> invoice2.reload()
>>> invoice2.amount_to_pay
Decimal('0')

View File

@@ -0,0 +1,144 @@
=====================================================
Account Payment Clearing with Statement Rule Scenario
=====================================================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> today = dt.date.today()
Activate modules::
>>> config = activate_modules(
... ['account_payment_clearing',
... 'account_statement', 'account_statement_rule'],
... create_company, create_chart)
>>> Account = Model.get('account.account')
>>> AccountJournal = Model.get('account.journal')
>>> Party = Model.get('party.party')
>>> Payment = Model.get('account.payment')
>>> PaymentJournal = Model.get('account.payment.journal')
>>> Statement = Model.get('account.statement')
>>> StatementJournal = Model.get('account.statement.journal')
>>> StatementRule = Model.get('account.statement.rule')
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(
... create_fiscalyear())
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = get_accounts()
>>> bank_clearing = Account(parent=accounts['payable'].parent)
>>> bank_clearing.name = "Bank Clearing"
>>> bank_clearing.type = accounts['payable'].type
>>> bank_clearing.reconcile = True
>>> bank_clearing.deferral = True
>>> bank_clearing.save()
Create journals::
>>> expense_journal, = AccountJournal.find([('code', '=', 'EXP')])
>>> payment_journal = PaymentJournal(
... name="Manual",
... process_method='manual',
... clearing_journal=expense_journal,
... clearing_account=bank_clearing)
>>> payment_journal.save()
>>> account_journal, = AccountJournal.find([('code', '=', 'STA')], limit=1)
>>> statement_journal = StatementJournal(
... name="Statement",
... journal=account_journal,
... validation='amount',
... account=accounts['cash'])
>>> statement_journal.save()
Create parties::
>>> customer = Party(name="Customer")
>>> customer.save()
Create statement rules for payment and group::
>>> statement_rule = StatementRule(name="Rule Payment")
>>> statement_rule.description = r"Payment: *(?P<payment>.*)"
>>> statement_line = statement_rule.lines.new()
>>> statement_line.amount = "pending"
>>> statement_rule.save()
>>> statement_rule = StatementRule(name="Rule Payment Group")
>>> statement_rule.description = r"Payment Group: *(?P<payment_group>.*)"
>>> statement_line = statement_rule.lines.new()
>>> statement_line.amount = "pending"
>>> statement_rule.save()
Receive 2 payments::
>>> payment1 = Payment(kind='receivable')
>>> payment1.journal = payment_journal
>>> payment1.party = customer
>>> payment1.amount = Decimal('100.00')
>>> payment1.click('submit')
>>> process1_payment = payment1.click('process_wizard')
>>> payment1.state
'processing'
>>> payment2 = Payment(kind='receivable')
>>> payment2.journal = payment_journal
>>> payment2.party = customer
>>> payment2.amount = Decimal('200.00')
>>> payment2.click('submit')
>>> process2_payment = payment2.click('process_wizard')
>>> payment2.state
'processing'
Create a statement with payment and group as origins::
>>> statement = Statement(
... name="001",
... journal=statement_journal,
... total_amount=Decimal('300.00'))
>>> origin = statement.origins.new()
>>> origin.date = today
>>> origin.amount = Decimal('100.00')
>>> origin.description = "Payment: %s" % payment1.rec_name
>>> origin = statement.origins.new()
>>> origin.date = today
>>> origin.amount = Decimal('200.00')
>>> origin.description = "Payment Group: %s" % payment2.group.rec_name
>>> statement.click('apply_rules')
>>> line1, line2 = statement.lines
>>> assertEqual(line1.account, bank_clearing)
>>> assertEqual(line1.related_to, payment1)
>>> assertEqual(line1.account, bank_clearing)
>>> assertEqual(line2.related_to, payment2.group)
Check payments are succeeded after validation::
>>> statement.click('validate_statement')
>>> statement.state
'validated'
>>> payment1.reload()
>>> payment1.state
'succeeded'
>>> payment2.reload()
>>> payment2.state
'succeeded'

View File

@@ -0,0 +1,14 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.modules.company.tests import CompanyTestMixin
from trytond.tests.test_tryton import ModuleTestCase
class AccountPaymentTestCase(CompanyTestMixin, ModuleTestCase):
'Test Account Payment module'
module = 'account_payment_clearing'
extras = ['account_statement', 'account_statement_rule']
del ModuleTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,38 @@
[tryton]
version=7.8.0
depends:
company
account
account_payment
ir
extras_depend:
account_statement
account_statement_rule
xml:
payment.xml
message.xml
[register]
model:
ir.Cron
party.PartyReceptionDirectDebit
payment.Journal
payment.Payment
payment.Group
payment.SucceedStart
account.Move
account.MoveReconciliation
wizard:
payment.Succeed
[register account_statement]
model:
statement.Payment
statement.PaymentGroup
statement.Statement
statement.StatementLine
[register account_statement_rule]
model:
statement.StatementRule
statement.StatementRuleLine

View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/field[@name='line']" position="after">
<label name="account"/>
<field name="account"/>
<newline/>
</xpath>
<xpath expr="/form/notebook/page[@id='info']/field[@name='group']"
position="after">
<label name="clearing_move"/>
<field name="clearing_move"/>
</xpath>
<xpath expr="//button[@name='succeed']" position="replace_attributes">
<button name="succeed_wizard"/>
</xpath>
</data>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//button[@name='succeed']" position="replace_attributes">
<button name="succeed_wizard"/>
</xpath>
</data>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='payment_complete']" position="after">
<field name="clearing_reconciled"/>
</xpath>
</data>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/field[@name='process_method']" position="after">
<separator id="clearing" string="Clearing" colspan="4"/>
<label name="clearing_account"/>
<field name="clearing_account"/>
<label name="clearing_journal"/>
<field name="clearing_journal" widget="selection"/>
<label name="clearing_posting_delay"/>
<field name="clearing_posting_delay"/>
</xpath>
</data>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='state']" position="after">
<field name="clearing_reconciled"/>
</xpath>
</data>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="date"/>
<field name="date"/>
</form>