Initial import from Docker volume

This commit is contained in:
root
2025-12-26 13:11:43 +00:00
commit 4998dc066a
13336 changed files with 1767801 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
# 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
from . import account, invoice, party
def register():
Pool.register(
account.AccountTypeTemplate,
account.AccountType,
invoice.Invoice,
invoice.InvoiceLine,
invoice.DepositRecallStart,
party.Party,
module='account_deposit', type_='model')
Pool.register(
account.Reconcile,
invoice.DepositRecall,
party.Erase,
module='account_deposit', type_='wizard')
Pool.register(
account.Payment,
module='account_deposit', type_='model',
depends=['account_payment_clearing'])

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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), If(Eval('active_ids', []) == [Eval('active_id')], ('party', '=', Eval('active_id')), ('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,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,160 @@
# 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
import logging
logger = logging.getLogger(__name__)
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
@classmethod
def __setup__(cls):
super(Invoice, cls).__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)
logger.info("BALANCE:%s",balance)
logger.info("TOTAL AMOUNT:%s",total_amount)
logger.info("TYPE:%s",self.type)
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)
logger.info("AMOUNT:%s",amount)
if amount < 0:
line = self._get_deposit_recall_invoice_line(
amount, account, description)
logger.info("LINE:%s",line)
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(InvoiceLine, cls)._account_domain(type_)
return domain + [('type.deposit', '=', True)]
class DepositRecall(Wizard):
'Recall deposit on Invoice'
__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):
'Recall deposit on Invoice'
__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,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 ""
#, 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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,67 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Recuperació de bestreta en 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"
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\"."
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,65 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,69 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Anzahlung auf Rechnung verrechnen"
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"
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."
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,69 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Recuperación de anticipo en 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"
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\"."
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,68 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Recuperación de anticipo en factura"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,67 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Tagasta arve deposiit"
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"
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."
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,69 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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 "یادآوری سپرده"
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\" ندارد."
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,65 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,68 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Rappeler les dépôts sur la facture"
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"
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 »."
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,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 ""
#, 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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,67 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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 ""
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,69 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Richiama il deposito sulla fattura"
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"
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\"."
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,68 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,65 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,69 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.account.type,deposit:"
msgid "Deposit"
msgstr "Storting"
msgctxt "field:account.account.type.template,deposit:"
msgid "Deposit"
msgstr "Storting"
msgctxt "field:account.invoice.recall_deposit.start,account:"
msgid "Account"
msgstr "Rekening"
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 "Specificatie"
msgctxt "field:party.party,deposit:"
msgid "Deposit"
msgstr "storting"
msgctxt "model:account.invoice.recall_deposit.start,name:"
msgid "Recall deposit on Invoice"
msgstr "herinnering ??( Recall deposit on Invoice)"
msgctxt "model:ir.action,name:act_move_line_deposit"
msgid "Deposit Lines"
msgstr "Stortingsregels"
msgctxt "model:ir.action,name:wizard_recall_deposit"
msgid "Recall Deposit"
msgstr "Stort terug"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"De rekening \"%(account)s\" heeft niet voldoende krediet van relatie "
"\"%(party)s\"."
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 wissen terwijl ze een tegoed hebben bij "
"bedrijf \"%(company)s\"."
msgctxt "model:ir.model.button,string:invoice_recall_deposit_button"
msgid "Recall Deposit"
msgstr "Stort 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 "Terugroepen"

View File

@@ -0,0 +1,68 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,68 @@
#
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Recuperar o depósito na fatura"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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 "Companie"
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Rechemare depozit pe Factura"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
"Contul \"%(notification)s\" nu are destul de mult depozit de la parte "
"\"%(party)s\"."
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,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 ""
#, 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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,68 @@
#
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 "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 ""
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,name:"
msgid "Recall deposit on Invoice"
msgstr "Odpoklic depozita za račun"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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 "Prekliči"
msgctxt "wizard_button:account.invoice.recall_deposit,start,recall:"
msgid "Recall"
msgstr "Odpoklic"

View File

@@ -0,0 +1,67 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,65 @@
#
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,name:"
msgid "Recall deposit on Invoice"
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 ""
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,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 ""
#, 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,name:"
msgid "Recall deposit on Invoice"
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"
msgctxt "model:ir.message,text:msg_deposit_not_enough"
msgid "The account \"%(account)s\" has not enough deposit from party \"%(party)s\"."
msgstr ""
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,40 @@
<?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 language="bg">
<record id="account_type_template_deposit_bg" model="account.account.type.template">
<field name="name">депозит</field>
<field name="parent" ref="account.account_type_template_off_balance_bg"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_bg" model="account.account.template">
<field name="name">депозит</field>
<field name="type" ref="account_type_template_deposit_bg"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_bg"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,40 @@
<?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 language="ca">
<record id="account_type_template_deposit_ca" model="account.account.type.template">
<field name="name">Dipòsit</field>
<field name="parent" ref="account.account_type_template_off_balance_ca"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_ca" model="account.account.template">
<field name="name">Dipòsit</field>
<field name="type" ref="account_type_template_deposit_ca"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_ca"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,40 @@
<?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 language="de">
<record id="account_type_template_deposit_de" model="account.account.type.template">
<field name="name">Anzahlung</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">Anzahlung</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,40 @@
<?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 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,40 @@
<?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 language="es">
<record id="account_type_template_deposit_es" model="account.account.type.template">
<field name="name">Depósito</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ósito</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,40 @@
<?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 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,40 @@
<?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 language="nl">
<record id="account_type_template_deposit_nl" model="account.account.type.template">
<field name="name">Afzetting</field>
<field name="parent" ref="account.account_type_template_off_balance_nl"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_nl" model="account.account.template">
<field name="name">Afzetting</field>
<field name="type" ref="account_type_template_deposit_nl"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_nl"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,40 @@
<?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 language="pt">
<record id="account_type_template_deposit_pt" model="account.account.type.template">
<field name="name">Depositar</field>
<field name="parent" ref="account.account_type_template_off_balance_pt"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_pt" model="account.account.template">
<field name="name">Depositar</field>
<field name="type" ref="account_type_template_deposit_pt"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_pt"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,40 @@
<?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 language="ru">
<record id="account_type_template_deposit_ru" model="account.account.type.template">
<field name="name">депозит</field>
<field name="parent" ref="account.account_type_template_off_balance_ru"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_ru" model="account.account.template">
<field name="name">депозит</field>
<field name="type" ref="account_type_template_deposit_ru"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_ru"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,40 @@
<?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 language="sl">
<record id="account_type_template_deposit_sl" model="account.account.type.template">
<field name="name">Polog</field>
<field name="parent" ref="account.account_type_template_off_balance_sl"/>
<field name="statement">off-balance</field>
<field name="deposit" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="account_template_deposit_sl" model="account.account.template">
<field name="name">Polog</field>
<field name="type" ref="account_type_template_deposit_sl"/>
<field name="reconcile" eval="True"/>
<field name="parent" ref="account.account_template_root_sl"/>
<field name="party_required" eval="True"/>
</record>
</data>
</tryton>

159
modules/account_deposit/party.py Executable file
View File

@@ -0,0 +1,159 @@
# 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.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
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])
cursor.execute(*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)),
where=account_type.deposit
& party_clause
& (line.reconciliation == Null)
& (account.company == user.company.id)
& line_clause,
group_by=line.party))
for party_id, value in cursor:
# SQLite uses float for SUM
if not isinstance(value, Decimal):
value = currency.round(Decimal(str(value)))
values[party_id] = value
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(
Sum(Coalesce(line.debit, 0) - Coalesce(line.credit, 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))
cursor.execute(*line.select(amount, where=where))
amount, = cursor.fetchone()
if amount is None:
amount = Decimal(0)
if not isinstance(amount, Decimal):
amount = Decimal(str(amount))
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,107 @@
================
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, get_company
>>> from trytond.tests.tools import activate_modules
Activate modules::
>>> config = activate_modules('account_deposit')
Create company::
>>> _ = create_company()
>>> company = get_company()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(
... create_fiscalyear(company))
>>> fiscalyear.click('create_period')
Create chart of accounts::
>>> _ = create_chart(company)
>>> accounts = add_deposit_accounts(get_accounts(company))
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,117 @@
=====================================
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')
>>> Party = Model.get('party.party')
>>> Invoice = Model.get('account.invoice')
Create company::
>>> currency = get_currency('USD')
>>> eur = get_currency('EUR')
>>> _ = create_company(currency=currency)
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')
Create chart of accounts::
>>> _ = create_chart()
>>> 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,26 @@
[tryton]
version=7.2.0
depends:
account
account_invoice
company
ir
party
res
extras_depend:
account_payment_clearing
xml:
account.xml
invoice.xml
party.xml
minimal_chart_bg.xml
minimal_chart_ca.xml
minimal_chart_de.xml
minimal_chart_en.xml
minimal_chart_es.xml
minimal_chart_fr.xml
minimal_chart_nl.xml
minimal_chart_pt.xml
minimal_chart_ru.xml
minimal_chart_sl.xml
message.xml

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,10 @@
<?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"/>
</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>