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,64 @@
# 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.model import fields
from trytond.pool import PoolMeta
from trytond.pyson import Bool, Eval, If
def AccountTypeMixin(template=False):
class Mixin:
__slots__ = ()
deposit = fields.Boolean(
"Deposit",
domain=[
If(~Eval('statement').in_(['off-balance', 'balance']),
('deposit', '=', False), ()),
],
states={
'invisible': ~Eval('statement').in_(
['off-balance', 'balance']),
})
if not template:
for fname in dir(Mixin):
field = getattr(Mixin, fname)
if not isinstance(field, fields.Field):
continue
field.states['readonly'] = (
Bool(Eval('template', -1)) & ~Eval('template_override', False))
return Mixin
class AccountTypeTemplate(AccountTypeMixin(template=True), metaclass=PoolMeta):
__name__ = 'account.account.type.template'
def _get_type_value(self, type=None):
values = super()._get_type_value(type=type)
if not type or type.deposit != self.deposit:
values['deposit'] = self.deposit
return values
class AccountType(AccountTypeMixin(), metaclass=PoolMeta):
__name__ = 'account.account.type'
class Reconcile(metaclass=PoolMeta):
__name__ = 'account.reconcile'
def get_currencies(self, account, party, currency=None, _balanced=False):
if account.type.deposit:
_balanced = True
return super().get_currencies(
account, party, currency=None, _balanced=_balanced)
class Payment(metaclass=PoolMeta):
__name__ = 'account.payment'
@classmethod
def _account_type_domain(cls):
return ['OR',
super()._account_type_domain(),
('type.deposit', '=', True),
]

View File

@@ -0,0 +1,50 @@
<?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="account_type_template_view_form">
<field name="model">account.account.type.template</field>
<field name="inherit" ref="account.account_type_template_view_form"/>
<field name="name">account_type_form</field>
</record>
<record model="ir.ui.view" id="account_type_view_form">
<field name="model">account.account.type</field>
<field name="inherit" ref="account.account_type_view_form"/>
<field name="name">account_type_form</field>
</record>
<record model="ir.ui.view" id="move_line_view_list_deposit">
<field name="model">account.move.line</field>
<field name="type">tree</field>
<field name="priority" eval="30"/>
<field name="name">move_line_list_deposit</field>
</record>
<record model="ir.action.act_window" id="act_move_line_deposit">
<field name="name">Deposit Lines</field>
<field name="res_model">account.move.line</field>
<field
name="domain"
eval="[('account.type.deposit', '=', True), ('party', 'in', Eval('active_ids', []))]"
pyson="1"/>
<field name="search_value" eval="[('reconciliation', '=', None)]" pyson="1"/>
<field name="order" eval="[('date', 'DESC')]" pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_move_line_deposit_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="move_line_view_list_deposit"/>
<field name="act_window" ref="act_move_line_deposit"/>
</record>
<record model="ir.action.keyword" id="act_move_line_deposit_keyword1">
<field name="keyword">form_relate</field>
<field name="model">party.party,-1</field>
<field name="action" ref="act_move_line_deposit"/>
</record>
<record model="ir.action-res.group" id="act_move_line_deposit-group_account">
<field name="action" ref="act_move_line_deposit"/>
<field name="group" ref="account.group_account"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-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. -->
<tryton>
<data language="de">
<record id="account_type_template_deposit_de" model="account.account.type.template">
<field name="name">Kaution</field>
<field name="parent" ref="account.account_type_template_off_balance_de"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_de" model="account.account.template">
<field name="name">Kaution</field>
<field name="type" ref="account_type_template_deposit_de"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_de"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-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. -->
<tryton>
<data language="en">
<record id="account_type_template_deposit_en" model="account.account.type.template">
<field name="name">Deposit</field>
<field name="parent" ref="account.account_type_template_off_balance_en"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_en" model="account.account.template">
<field name="name">Deposit</field>
<field name="type" ref="account_type_template_deposit_en"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_en"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-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. -->
<tryton>
<data language="es">
<record id="account_type_template_deposit_es" model="account.account.type.template">
<field name="name">Depósitos</field>
<field name="parent" ref="account.account_type_template_off_balance_es"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_es" model="account.account.template">
<field name="name">Depósitos</field>
<field name="type" ref="account_type_template_deposit_es"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_es"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-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. -->
<tryton>
<data language="fr">
<record id="account_type_template_deposit_fr" model="account.account.type.template">
<field name="name">Dépôt</field>
<field name="parent" ref="account.account_type_template_off_balance_fr"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_fr" model="account.account.template">
<field name="name">Dépôt</field>
<field name="type" ref="account_type_template_deposit_fr"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_fr"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

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.model.exceptions import ValidationError
class DepositError(ValidationError):
pass

View File

@@ -0,0 +1,152 @@
# 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 decimal import Decimal
from trytond.i18n import gettext
from trytond.model import ModelView, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
from trytond.wizard import Button, StateTransition, StateView, Wizard
from .exceptions import DepositError
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
@classmethod
def __setup__(cls):
super().__setup__()
cls._buttons.update({
'recall_deposit': {
'invisible': Eval('state') != 'draft',
'depends': ['state'],
},
})
@classmethod
def _post(cls, invoices):
super()._post(invoices)
cls.check_deposit(invoices)
@classmethod
@ModelView.button_action('account_deposit.wizard_recall_deposit')
def recall_deposit(cls, invoices):
pass
def call_deposit(self, account, description, maximum=None):
pool = Pool()
InvoiceLine = pool.get('account.invoice.line')
balance = self.party.get_deposit_balance(
account, currency=self.currency)
if maximum is None:
maximum = self.total_amount
total_amount = min(maximum, self.total_amount, key=abs)
amount = Decimal(0)
if self.type.startswith('in'):
if balance > 0 and total_amount > 0:
amount = -min(balance, total_amount)
else:
if balance < 0 and total_amount > 0:
amount = -min(-balance, total_amount)
to_delete = []
for line in self.lines:
if line.account == account:
to_delete.append(line)
if amount < 0:
line = self._get_deposit_recall_invoice_line(
amount, account, description)
try:
line.sequence = max(l.sequence for l in self.lines
if l.sequence is not None)
except ValueError:
pass
line.save()
else:
amount = Decimal(0)
if to_delete:
InvoiceLine.delete(to_delete)
return amount
def _get_deposit_recall_invoice_line(self, amount, account, description):
pool = Pool()
Line = pool.get('account.invoice.line')
line = Line(
invoice=self,
company=self.company,
type='line',
quantity=1,
account=account,
unit_price=amount,
description=description,
)
# Set taxes
line.on_change_account()
return line
@classmethod
def check_deposit(cls, invoices):
to_check = set()
for invoice in invoices:
for line in invoice.lines:
if line.type != 'line':
continue
if line.account.type.deposit:
if line.amount < 0:
sign = 1 if invoice.type.startswith('in') else -1
to_check.add((invoice.party, line.account, sign))
for party, account, sign in to_check:
if not party.check_deposit(account, sign):
raise DepositError(
gettext('account_deposit.msg_deposit_not_enough',
account=account.rec_name,
party=party.rec_name))
class InvoiceLine(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
@classmethod
def _account_domain(cls, type_):
domain = super()._account_domain(type_)
return domain + [('type.deposit', '=', True)]
class DepositRecall(Wizard):
__name__ = 'account.invoice.recall_deposit'
start = StateView('account.invoice.recall_deposit.start',
'account_deposit.recall_deposit_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Recall', 'recall', 'tryton-ok', default=True),
])
recall = StateTransition()
def default_start(self, fields):
return {
'company': self.record.company.id,
'currency': self.record.currency.id,
}
def transition_recall(self):
self.record.call_deposit(self.start.account, self.start.description)
return 'end'
class DepositRecallStart(ModelView):
__name__ = 'account.invoice.recall_deposit.start'
company = fields.Many2One('company.company', 'Company', readonly=True)
currency = fields.Many2One('currency.currency', "Currency", readonly=True)
account = fields.Many2One('account.account', 'Account', required=True,
domain=[
('type.deposit', '=', True),
('company', '=', Eval('company', -1)),
['OR',
('currency', '=', Eval('currency', -1)),
('second_currency', '=', Eval('currency', -1)),
],
])
description = fields.Text('Description', required=True)

View File

@@ -0,0 +1,29 @@
<?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.action.wizard" id="wizard_recall_deposit">
<field name="name">Recall Deposit</field>
<field name="wiz_name">account.invoice.recall_deposit</field>
<field name="model">account.invoice</field>
</record>
<record model="ir.ui.view" id="recall_deposit_start_view_form">
<field name="model">account.invoice.recall_deposit.start</field>
<field name="type">form</field>
<field name="name">recall_deposit_form</field>
</record>
<record model="ir.ui.view" id="invoice_view_form">
<field name="model">account.invoice</field>
<field name="inherit" ref="account_invoice.invoice_view_form"/>
<field name="name">invoice_form</field>
</record>
<record model="ir.model.button" id="invoice_recall_deposit_button">
<field name="model">account.invoice</field>
<field name="name">recall_deposit</field>
<field name="string">Recall Deposit</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Фактури"
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Фирма"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Описание"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, fuzzy
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Отказване"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Dipòsit"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Dipòsit"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Compte"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Moneda"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descripció"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Bestreta"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Inici recuperar dipòsit de la factura"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Línies de dipòsit"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recupera bestreta"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr "El compte \"%(account)s\" no te suficient diposit pel tercer \"%(party)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"No es pot eliminar el tercer \"%(party)s\" mentre tingui diposit a l'empresa"
" \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recupera bestreta"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Cancel·la"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Recupera"

View File

@@ -0,0 +1,67 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr ""
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Anzahlung"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Anzahlung"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Unternehmen"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Währung"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Beschreibung"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Anzahlung"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Buchhaltung Rechnung Anzahlung verrechnen Start"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Anzahlungspositionen"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Anzahlung verrechnen"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"Auf Konto \"%(account)s\" ist nicht genügend Guthaben von Partei "
"\"%(party)s\" vorhanden."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Partei \"%(party)s\" kann nicht gelöscht werden, solange Sie noch ein "
"Guthaben bei Unternehmen \"%(company)s\" hat."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Anzahlung verrechnen"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Abbrechen"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Verrechnen"

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Anticipo"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Anticipo"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Cuenta"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Moneda"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descripción"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Anticipo"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Inicio recuperar deposito factura"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Líneas de anticipo"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recuperar anticipo"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"La cuenta \"%(account)s\" no tiene suficiente anticipo para el tercero "
"\"%(party)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"No puede eliminar el tercero \"%(party)s\" mientras tenga un anticipo en la "
"empresa \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recuperar anticipo"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Recuperar"

View File

@@ -0,0 +1,70 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Anticipo"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Anticipo"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Cuenta"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descripción"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Anticipo"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recuperar anticipo"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recuperar anticipo"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Recuperar"

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Deposiit"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Deposiit"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Ettevõte"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Kirjeldus"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Deposiit"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Deposiidi read"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Tagasta deposiit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr "Kontol \"%(account)s\" pole piisavalt osapoole \"%(party)s\" deposiiti."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Ei saa kustutada osapoolt \"%(party)s\" kui neil on ettevõttes "
"\"%(company)s\" deposiit."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Tühista deposiit."
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Tühista"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Tühista"

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "سپرده"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "سپرده"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "حساب"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "شرکت"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "شرح"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "سپرده"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "یادآوری سپرده"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr "حساب : \"%(account)s\" سپرده کافی از طرف نهاد/سازمان: \"%(party)s\" ندارد."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"شما نمیتوانید نهاد/سازمان : \"%(party)s\" را حذف کنید، در حالی که آنها در "
"شرکت : \"%(company)s\" سپرده دارند."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "انصراف"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "فراخوانی"

View File

@@ -0,0 +1,67 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr ""
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,70 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Dépôt"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Dépôt"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Compte"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Société"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Devise"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Description"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Dépôt"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Rappel de dépôt de facture comptable début"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Lignes de dépôt"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Rappeler les dépôts"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"Le compte « %(account)s » n'a pas assez de dépôt du tiers « %(party)s »."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Vous ne pouvez pas effacer le tiers « %(party)s » tant qu'il a un dépôt dans"
" la société « %(company)s »."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Rappeler les dépôts"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Annuler"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Rappeler"

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Számla"
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Társaság"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Leírás"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, fuzzy
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Mégse"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Setoran"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Setoran"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Akun"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Perusahaan"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Deskripsi"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Simpanan"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Anda tidak dapat menghapus pihak \"%(party)s\" saat mereka memiliki setoran "
"di perusahaan \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Batal"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Deposito"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Deposito"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Conto"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Azienda"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Valuta"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descrizione"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Deposito"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Linee di deposito"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Richiama deposito"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"L'account \"%(account)s\" non ha abbastanza deposito dalla controparte "
"\"%(party)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Non è possibile cancellare la controparte \"%(party)s\" mentre hanno un "
"deposito presso la società \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Richiama Deposito"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Annulla"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Richiama"

View File

@@ -0,0 +1,70 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "ເງິນມັດຈໍາ"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "ເງິນມັດຈໍາ"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "ບັນຊີ"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "ບໍລິສັດ"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "ເນື້ອໃນລາຍການ"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "ເງິນມັດຈໍາ"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "ຍົກເລີກ"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "ຮຽກຄືນ"

View File

@@ -0,0 +1,67 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Organizacija"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr ""
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Aanbetaling"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Aanbetaling"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Grootboekrekening"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Bedrijf"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Valuta"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Omschrijving"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Aanbetaling"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Terugstorten factuur aanbetaling start"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Aanbetalingsregels"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Terugstorten aanbetaling"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"De grootboekrekening \"%(account)s\" heeft niet voldoende aanbetaling van "
"relatie \"%(party)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"U kunt relatie \"%(party)s\" niet verwijderen terwijl men een aanbetaling "
"heeft bij bedrijf \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Stort aanbetaling terug"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Annuleren"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Terugstorten"

View File

@@ -0,0 +1,70 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Wpłata"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Wpłata"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Firma"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Opis"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Wpłata"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Anuluj"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,70 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Depósito"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Depósito"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Conta"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descrição"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Depósito"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Linhas de Depósito"
#, fuzzy
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Recuperar"

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Cont"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Societate"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Valută"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Descriere"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr "Factură Început Retragere Depozit"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Rânduri Depozit"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Rechemare Depozit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr "Contul \"%(account)s\" nu are suficient depozit de la parte \"%(party)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Nu se poate şterge parte\"%(party)s\" când au depozit la compania "
"\"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Rechemare Depozit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Anulare"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Rechemare"

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Счет"
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Учет.орг."
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Описание"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, fuzzy
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Отменить"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Konto"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Družba"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr "Valuta"
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Opis"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Vrstice depozita"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Odpoklic depozita"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr "Konto \"%(account)s\" partnerja \"%(party)s\" nima zadostnega depozita."
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
"Partnerja \"%(party)s\" ni mogoče izbrisati dokler ima depozit pri družbi "
"\"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Prekliči"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Odpoklic"

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Depozit"
#, fuzzy
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Hesap"
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr "Şirket"
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "Tanım"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "Depozit"
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "Vazgeç"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,67 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr ""
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr ""
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,company:"
msgid "Company"
msgstr ""
msgctxt "field:account.invoice.recall_deposit.start,currency:"
msgid "Currency"
msgstr ""
#, fuzzy
msgctxt "field:account.invoice.recall_deposit.start,description:"
msgid "Description"
msgstr "描述"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr ""
msgctxt "model:account.invoice.recall_deposit.start,string:"
msgid "Account Invoice Recall Deposit Start"
msgstr ""
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr ""
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, python-format
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_erase_party_deposit"
msgid ""
"You cannot erase party \"%(party)s\" while they have deposit at company "
"\"%(company)s\"."
msgstr ""
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Recall Deposit"
#, fuzzy
msgctxt "wizard_button:account.invoice.recall_deposit,start,end:"
msgid "Cancel"
msgstr "取消"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr ""

View File

@@ -0,0 +1,13 @@
<?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_erase_party_deposit">
<field name="text">You cannot erase party "%(party)s" while they have deposit at company "%(company)s".</field>
</record>
<record model="ir.message" id="msg_deposit_not_enough">
<field name="text">The account "%(account)s" has not enough deposit from party "%(party)s".</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,162 @@
# 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 decimal import Decimal
from sql import For, Literal, Null
from sql.aggregate import Sum
from sql.conditionals import Case, Coalesce
from trytond import backend
from trytond.i18n import gettext
from trytond.model import fields
from trytond.modules.currency.fields import Monetary
from trytond.modules.party.exceptions import EraseError
from trytond.pool import Pool, PoolMeta
from trytond.tools import grouped_slice, reduce_ids, sqlite_apply_types
from trytond.transaction import Transaction
class Party(metaclass=PoolMeta):
__name__ = 'party.party'
deposit = fields.Function(Monetary(
"Deposit", currency='currency', digits='currency'),
'get_deposit', searcher='search_deposit')
@classmethod
def get_deposit(cls, parties, name):
pool = Pool()
MoveLine = pool.get('account.move.line')
Account = pool.get('account.account')
AccountType = pool.get('account.account.type')
User = pool.get('res.user')
cursor = Transaction().connection.cursor()
line = MoveLine.__table__()
account = Account.__table__()
account_type = AccountType.__table__()
values = {p.id: Decimal(0) for p in parties}
user = User(Transaction().user)
if not user.company:
return values
currency = user.company.currency
line_clause, _ = MoveLine.query_get(line)
for sub_parties in grouped_slice(parties):
party_clause = reduce_ids(line.party, [p.id for p in sub_parties])
query = (line
.join(account, condition=account.id == line.account)
.join(account_type, condition=account.type == account_type.id)
.select(line.party,
# Use credit - debit to positive deposit amount
Sum(Coalesce(line.credit, 0) - Coalesce(line.debit, 0)
).as_('debit'),
where=account_type.deposit
& party_clause
& (line.reconciliation == Null)
& (account.company == user.company.id)
& line_clause,
group_by=line.party))
if backend.name == 'sqlite':
sqlite_apply_types(query, [None, 'NUMERIC'])
cursor.execute(*query)
values.update((p, currency.round(a)) for p, a in cursor)
return values
@classmethod
def search_deposit(cls, name, clause):
pool = Pool()
MoveLine = pool.get('account.move.line')
Account = pool.get('account.account')
AccountType = pool.get('account.account.type')
User = pool.get('res.user')
line = MoveLine.__table__()
account = Account.__table__()
account_type = AccountType.__table__()
user = User(Transaction().user)
if not user.company:
return []
line_clause, _ = MoveLine.query_get(line)
Operator = fields.SQL_OPERATORS[clause[1]]
query = (line
.join(account, condition=account.id == line.account)
.join(account_type, condition=account.type == account_type.id)
.select(line.party,
where=account.active
& account_type.deposit
& (line.party != Null)
& (line.reconciliation == Null)
& (account.company == user.company.id)
& line_clause,
group_by=line.party,
having=Operator(
# Use credit - debit to positive deposit amount
Sum(Coalesce(line.credit, 0) - Coalesce(line.debit, 0)),
Decimal(clause[2] or 0))))
return [('id', 'in', query)]
def get_deposit_balance(self, deposit_account, currency=None):
'Return the deposit account balance (debit - credit) for the party'
pool = Pool()
MoveLine = pool.get('account.move.line')
transaction = Transaction()
cursor = transaction.connection.cursor()
line = MoveLine.__table__()
if currency is None:
currency = deposit_account.currency
assert deposit_account.type.deposit
where = ((line.account == deposit_account.id)
& (line.party == self.id)
& (line.reconciliation == Null))
if transaction.database.has_select_for():
cursor.execute(*line.select(
Literal(1),
where=where,
for_=For('UPDATE', nowait=True)))
else:
MoveLine.lock()
if currency == deposit_account.currency:
amount = Sum(Coalesce(line.debit, 0) - Coalesce(line.credit, 0))
else:
amount = Sum(Case(
(line.second_currency == currency.id,
line.amount_second_currency),
else_=0))
query = line.select(amount.as_('deposit_balance'), where=where)
if backend.name == 'sqlite':
sqlite_apply_types(query, ['NUMERIC'])
cursor.execute(*query)
amount, = cursor.fetchone()
if amount is None:
amount = Decimal(0)
return currency.round(amount)
def check_deposit(self, deposit_account, sign=1):
'''Check if the deposit account balance (debit - credit) has the same
sign for the party'''
assert sign in (1, -1)
amount = self.get_deposit_balance(
deposit_account, currency=deposit_account.second_currency)
return not amount or ((amount < 0) == (sign < 0))
class Erase(metaclass=PoolMeta):
__name__ = 'party.erase'
def check_erase_company(self, party, company):
if party.deposit:
raise EraseError(
gettext('account_deposit.msg_erase_party_deposit',
party=party.rec_name,
company=company.rec_name))

View File

@@ -0,0 +1,17 @@
<?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="party_view_tree">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_tree"/>
<field name="name">party_tree</field>
</record>
<record model="ir.ui.view" id="party_view_form">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_form"/>
<field name="name">party_form</field>
</record>
</data>
</tryton>

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,101 @@
================
Deposit Scenario
================
Imports::
>>> 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_deposit.tests.tools import add_deposit_accounts
>>> from trytond.modules.account_invoice.tests.tools import (
... create_payment_term, 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_deposit', create_company, create_chart)
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(
... create_fiscalyear())
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = add_deposit_accounts(get_accounts())
Create party::
>>> Party = Model.get('party.party')
>>> party = Party(name='Party')
>>> party.save()
Create payment_term::
>>> payment_term = create_payment_term()
>>> payment_term.save()
Create deposit invoice::
>>> Invoice = Model.get('account.invoice')
>>> invoice = Invoice(party=party, payment_term=payment_term)
>>> line = invoice.lines.new()
>>> line.account = accounts['deposit']
>>> line.description = 'Deposit'
>>> line.quantity = 1
>>> line.unit_price = Decimal(100)
>>> invoice.click('post')
>>> invoice.untaxed_amount
Decimal('100.00')
Check party deposit::
>>> party.reload()
>>> party.deposit
Decimal('100.00')
Create final invoice::
>>> invoice = Invoice(party=party, payment_term=payment_term)
>>> line = invoice.lines.new()
>>> line.account = accounts['revenue']
>>> line.description = 'Revenue'
>>> line.quantity = 1
>>> line.unit_price = Decimal(500)
>>> invoice.save()
>>> invoice.untaxed_amount
Decimal('500.00')
Recall deposit::
>>> recall_deposit = invoice.click('recall_deposit')
>>> recall_deposit.form.account = accounts['deposit']
>>> recall_deposit.form.description = 'Recall Deposit'
>>> recall_deposit.execute('recall')
>>> invoice.reload()
>>> deposit_line, = [l for l in invoice.lines
... if l.account == accounts['deposit']]
>>> deposit_line.amount
Decimal('-100.00')
>>> invoice.untaxed_amount
Decimal('400.00')
Recall too much::
>>> deposit_line.unit_price = Decimal('-200.00')
>>> deposit_line.save()
>>> invoice.click('post')
Traceback (most recent call last):
...
DepositError: ...
Recall available::
>>> deposit_line.unit_price = Decimal('-100.00')
>>> deposit_line.save()
>>> invoice.click('post')

View File

@@ -0,0 +1,115 @@
=====================================
Deposit with Second Currency 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_deposit.tests.tools import add_deposit_accounts
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules
>>> today = dt.date.today()
>>> yesterday = today - dt.timedelta(days=1)
Activate modules::
>>> config = activate_modules('account_deposit', create_company, create_chart)
>>> Party = Model.get('party.party')
>>> Invoice = Model.get('account.invoice')
Get currencies::
>>> currency = get_currency('USD')
>>> eur = get_currency('EUR')
Set alternate currency rates::
>>> rate = eur.rates.new()
>>> rate.date = yesterday
>>> rate.rate = Decimal('1.20')
>>> rate = eur.rates.new()
>>> rate.date = today
>>> rate.rate = Decimal('1.10')
>>> eur.save()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = add_deposit_accounts(get_accounts())
>>> accounts['deposit'].second_currency = eur
>>> accounts['deposit'].save()
Create party::
>>> party = Party(name='Party')
>>> party.save()
Create deposit invoice::
>>> invoice = Invoice(party=party, currency=eur, invoice_date=yesterday)
>>> line = invoice.lines.new()
>>> line.account = accounts['deposit']
>>> line.description = "Deposit"
>>> line.quantity = 1
>>> line.unit_price = Decimal(100)
>>> invoice.click('post')
>>> invoice.untaxed_amount
Decimal('100.00')
Check party deposit::
>>> party.reload()
>>> party.deposit
Decimal('83.33')
Create final invoice::
>>> invoice = Invoice(party=party, currency=eur, invoice_date=today)
>>> line = invoice.lines.new()
>>> line.account = accounts['revenue']
>>> line.description = "Revenue"
>>> line.quantity = 1
>>> line.unit_price = Decimal(500)
>>> invoice.save()
>>> invoice.untaxed_amount
Decimal('500.00')
Recall deposit::
>>> recall_deposit = invoice.click('recall_deposit')
>>> recall_deposit.form.account = accounts['deposit']
>>> recall_deposit.form.description = "Recall Deposit"
>>> recall_deposit.execute('recall')
>>> invoice.reload()
>>> deposit_line, = [l for l in invoice.lines
... if l.account == accounts['deposit']]
>>> deposit_line.amount
Decimal('-100.00')
>>> invoice.untaxed_amount
Decimal('400.00')
>>> invoice.click('post')
Check party deposit::
>>> party.reload()
>>> party.deposit
Decimal('-7.58')
>>> accounts['deposit'].reload()
>>> accounts['deposit'].balance
Decimal('7.58')
>>> accounts['deposit'].amount_second_currency
Decimal('0.00')

View File

@@ -0,0 +1,16 @@
# 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, PartyCompanyCheckEraseMixin)
from trytond.tests.test_tryton import ModuleTestCase
class AccountDepositTestCase(
PartyCompanyCheckEraseMixin, CompanyTestMixin, ModuleTestCase):
'Test Account Deposit module'
module = 'account_deposit'
extras = ['account_payment_clearing']
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,19 @@
# 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 proteus import Model
from trytond.modules.company.tests.tools import get_company
def add_deposit_accounts(accounts, company=None, config=None):
'Add deposit to accounts'
Account = Model.get('account.account', config=config)
if not company:
company = get_company(config=config)
accounts['deposit'], = Account.find([
('type.deposit', '=', True),
('company', '=', company.id),
('name', '=', 'Deposit'),
])
return accounts

View File

@@ -0,0 +1,37 @@
[tryton]
version=7.8.1
depends:
account
account_invoice
company
ir
party
res
extras_depend:
account_payment_clearing
xml:
account.xml
invoice.xml
party.xml
account_chart_de.xml
account_chart_en.xml
account_chart_es.xml
account_chart_fr.xml
message.xml
[register]
model:
account.AccountTypeTemplate
account.AccountType
invoice.Invoice
invoice.InvoiceLine
invoice.DepositRecallStart
party.Party
wizard:
account.Reconcile
invoice.DepositRecall
party.Erase
[register account_payment_clearing]
model:
account.Payment

View File

@@ -0,0 +1,9 @@
<?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="//group[@id='checkboxes']" position="inside">
<label name="deposit"/>
<field name="deposit" xexpand="0" width="25"/>
</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='total_amount']" position="after">
<button name="recall_deposit" colspan="2"/>
</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. -->
<tree>
<field name="date"/>
<field name="party"/>
<field name="amount"/>
<field name="amount_currency"/>
<field name="move"/>
<field name="origin"/>
<field name="move_description_used"/>
<field name="description_used"/>
<field name="reconciliation" tree_invisible="1"/>
</tree>

View File

@@ -0,0 +1,12 @@
<?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/notebook/page[@id='accounting']/field[@name='payable']"
position="after">
<newline/>
<label name="deposit"/>
<field name="deposit"/>
<newline/>
</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="/tree/field[@name='payable_today']" position="after">
<field name="deposit" optional="0"/>
</xpath>
</data>

View File

@@ -0,0 +1,9 @@
<?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="account"/>
<field name="account"/>
<separator name="description" colspan="4"/>
<field name="description" colspan="4"/>
</form>