[MERGE] manual forward port of accounting-pocalypse (beaa30a3d1)
This commit merges the following models * account.invoice and account.move * account.invoice.line and account.move.line * account.voucher and account.move * account.voucher.line and account.move.line It was the opportunity for a big cleanup of the code, so it also restructures the whole account module, its different models/fields, the tests etc. for a better world and a better code readability. ==== Rationale ==== The rationale of this huge change is that we want journal entries / invoices to be easily edited, and changes reflected in the other model. It's a HUGE feature and very strategic for the fiduciary companies. For example, changing the account of a journal entry needs to be automatically reflected on the related invoice. The same reasoning applies to sale/purchase vouchers. ==== Changes made in features ===== When creating an invoice, you are now creating a journal entry directly. --> The object account.invoice no longer exists. In the same fashion when creating an invoice line, you're now adding journal items directly in the journal entry representing the invoice. If this invoice line has some tax, it may create additional journal items as well. --> The models account.invoice.line & account.invoice.tax no longer exist Identically, when creating a sale/purchase receipt with its lines, you are now creating a journal entry directly and there's no more usability difference between encoding a receipt or an invoice. --> The object account.voucher no longer exists. --> The object account.voucher.line no longer exists. --> The whole account_voucher module no longer exists. Positive side-effects coming from these changes are * draft invoices/bills/sale or purchase receipts now create a draft accounting entry. Validate these objects now simply post its journal entry. That means that draft invoices/bills/sale or purchase receipt can straightforwardly be included in reporting or budgets. * opening a journal entry in form view will now always open the correct view: if it's a sale/purchase journal entry we will have a customer invoice/vendor bill view or a sale/purchase receipt view, whatever the menu we're coming from. * code & business logic simplification. It is also condensed in a single place instead of being partially duplicated on invoices, vouchers and journal entries. There should be no feature loss, except the one allowing to group multiple journal items together based on the same product during the invoice validation. ==== Changes made in models ===== * account.invoice: model removed. Instead, now use account.move with following mapping field (account.invoice) field (account.move) ----------------------- -------------------- name invoice_payment_ref number name reference ref comment narration user_id invoice_user_id amount_ total_company_signed amount_total_signed residual amount_residual state state + invoice_payment_state /!\ selection changed date_invoice invoice_date date_due invoice_date_due sent invoice_sent origin invoice_origin payment_term_id invoice_payment_term_id partner_bank_id invoice_partner_bank_id incoterm_id invoice_incoterm_id vendor_bill_id invoice_vendor_bill_id source_email invoice_source_email vendor_display_name invoice_vendor_display_name invoice_icon invoice_vendor_icon cash_rounding_id invoice_cash_rounding_id sequence_number_next invoice_sequence_number_next sequence_number_next_prefix invoice_sequence_number_next_prefix 'invoices' subset of account.move can be accessed by using the selection field 'type' or one of the many helpers like is_invoice() * account.move: now has a valid state 'cancel' that has to be excluded from all business logic * account.move: field 'amount' renamed into 'amount_total' * account.move: field 'reverse_entry_id' renamed into 'reversed_entry_id' * account.move.line: now has a field 'display_type' that has to be excluded from all business logic, in order to support invoice layouting * account.invoice.line: model removed. Instead, now use account.move.line with following mapping field (account.invoice.line) field (account.move.line) ---------------------------- ------------------------- invoice_id move_id uom_id product_uom_id invoice_line_tax_ids tax_ids account_analytic_id analytic_account_id 'invoice lines' subset of all account.move.line from a journal entry can be accessed by using the boolean field 'exclude_from_invoice_tab' * account.invoice.tax: model removed. Instead, now use account.move.line with following mapping field (account.invoice.tax) field (account.move.line) --------------------------- ------------------------- invoice_id move_id account_analytic_id analytic_account_id amount price_unit base tax_base_amount 'tax lines' subset of all account.move.line from a journal entry can be accessed by using the relational field 'tax_line_id' * account.invoice.confirm: model removed. Instead, now use the 'post()' function of account.move * account.invoice.refund: model removed. Instead, now use account.move.reversal to reverse the entries with the same options as we had for invoices * account.voucher: model removed. Instead, now use account.move of type in ['out_receipt', 'in_receipt] * account.voucher.line: model removed. Instead, now use account.move.line ==== Changes made in functions ==== * on account.move, method _run_post_draft_to_post() renamed into _autopost_draft_entries() * on account.move, method action_account_invoice_payment() renamed into action_invoice_register_payment() * on account.move, method action_invoice_reconcile_to_check() renamed into action_open_matching_suspense_moves() * on account.move, method _get_domain_edition_mode_available() renamed into _get_domain_matching_supsense_moves() * on account.move, method _get_intrastat_country_id() renamed into _get_invoice_intrastat_country_id() * on account.move.line, method _get_domain_for_edition_mode() renamed into _get_suspense_moves_domain() * in account.bank.statement, contextual key 'edition_mode' renamed into 'suspense_moves_mode' Was task 1917430
This commit is contained in:
committed by
Christophe Simonis
parent
230bb2a84d
commit
bc131c0cfb
@@ -32,12 +32,9 @@ You could use this simplified accounting in case you work with an (external) acc
|
||||
'views/account_view.xml',
|
||||
'views/account_report.xml',
|
||||
'data/mail_template_data.xml',
|
||||
'wizard/account_invoice_refund_view.xml',
|
||||
'wizard/account_validate_move_view.xml',
|
||||
'wizard/account_invoice_state_view.xml',
|
||||
'wizard/pos_box.xml',
|
||||
'views/account_end_fy.xml',
|
||||
'views/account_invoice_view.xml',
|
||||
'views/partner_view.xml',
|
||||
'views/product_view.xml',
|
||||
'views/account_analytic_view.xml',
|
||||
|
||||
@@ -11,7 +11,9 @@ class PortalAccount(CustomerPortal):
|
||||
|
||||
def _prepare_portal_layout_values(self):
|
||||
values = super(PortalAccount, self)._prepare_portal_layout_values()
|
||||
invoice_count = request.env['account.invoice'].search_count([])
|
||||
invoice_count = request.env['account.move'].search_count([
|
||||
('type', 'in', ('out_invoice', 'in_invoice', 'out_refund', 'in_refund', 'out_receipt', 'in_receipt')),
|
||||
])
|
||||
values['invoice_count'] = invoice_count
|
||||
return values
|
||||
|
||||
@@ -29,13 +31,13 @@ class PortalAccount(CustomerPortal):
|
||||
@http.route(['/my/invoices', '/my/invoices/page/<int:page>'], type='http', auth="user", website=True)
|
||||
def portal_my_invoices(self, page=1, date_begin=None, date_end=None, sortby=None, **kw):
|
||||
values = self._prepare_portal_layout_values()
|
||||
AccountInvoice = request.env['account.invoice']
|
||||
AccountInvoice = request.env['account.move']
|
||||
|
||||
domain = []
|
||||
domain = [('type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]
|
||||
|
||||
searchbar_sortings = {
|
||||
'date': {'label': _('Invoice Date'), 'order': 'date_invoice desc'},
|
||||
'duedate': {'label': _('Due Date'), 'order': 'date_due desc'},
|
||||
'date': {'label': _('Invoice Date'), 'order': 'invoice_date desc'},
|
||||
'duedate': {'label': _('Due Date'), 'order': 'invoice_date_due desc'},
|
||||
'name': {'label': _('Reference'), 'order': 'name desc'},
|
||||
'state': {'label': _('Status'), 'order': 'state'},
|
||||
}
|
||||
@@ -44,7 +46,7 @@ class PortalAccount(CustomerPortal):
|
||||
sortby = 'date'
|
||||
order = searchbar_sortings[sortby]['order']
|
||||
|
||||
archive_groups = self._get_archive_groups('account.invoice', domain)
|
||||
archive_groups = self._get_archive_groups('account.move', domain)
|
||||
if date_begin and date_end:
|
||||
domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)]
|
||||
|
||||
@@ -77,7 +79,7 @@ class PortalAccount(CustomerPortal):
|
||||
@http.route(['/my/invoices/<int:invoice_id>'], type='http', auth="public", website=True)
|
||||
def portal_my_invoice_detail(self, invoice_id, access_token=None, report_type=None, download=False, **kw):
|
||||
try:
|
||||
invoice_sudo = self._document_check_access('account.invoice', invoice_id, access_token)
|
||||
invoice_sudo = self._document_check_access('account.move', invoice_id, access_token)
|
||||
except (AccessError, MissingError):
|
||||
return request.redirect('/my')
|
||||
|
||||
@@ -88,7 +90,7 @@ class PortalAccount(CustomerPortal):
|
||||
acquirers = values.get('acquirers')
|
||||
if acquirers:
|
||||
country_id = values.get('partner_id') and values.get('partner_id')[0].country_id.id
|
||||
values['acq_extra_fees'] = acquirers.get_acquirer_extra_fees(invoice_sudo.residual, invoice_sudo.currency_id, country_id)
|
||||
values['acq_extra_fees'] = acquirers.get_acquirer_extra_fees(invoice_sudo.amount_residual, invoice_sudo.currency_id, country_id)
|
||||
|
||||
return request.render("account.portal_invoice_page", values)
|
||||
|
||||
|
||||
@@ -78,19 +78,19 @@
|
||||
<!-- Account-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_invoice_validated" model="mail.message.subtype">
|
||||
<field name="name">Validated</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Invoice validated</field>
|
||||
</record>
|
||||
<record id="mt_invoice_paid" model="mail.message.subtype">
|
||||
<field name="name">Paid</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Invoice paid</field>
|
||||
</record>
|
||||
<record id="mt_invoice_created" model="mail.message.subtype">
|
||||
<field name="name">Invoice Created</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="hidden" eval="True"/>
|
||||
<field name="description">Invoice Created</field>
|
||||
@@ -175,10 +175,10 @@
|
||||
</record>
|
||||
|
||||
<!-- Share Button in action menu -->
|
||||
<record id="model_account_invoice_action_share" model="ir.actions.server">
|
||||
<record id="model_account_move_action_share" model="ir.actions.server">
|
||||
<field name="name">Share</field>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
<field name="binding_model_id" ref="account.model_account_invoice"/>
|
||||
<field name="model_id" ref="account.model_account_move"/>
|
||||
<field name="binding_model_id" ref="account.model_account_move"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.action_share()</field>
|
||||
</record>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<!--Email template -->
|
||||
<record id="email_template_edi_invoice" model="mail.template">
|
||||
<field name="name">Invoice: Send by email</field>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
<field name="model_id" ref="account.model_account_move"/>
|
||||
<field name="email_from">${(object.user_id.email_formatted or user.email_formatted) |safe}</field>
|
||||
<field name="partner_to">${object.partner_id.id}</field>
|
||||
<field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})</field>
|
||||
<field name="subject">${object.company_id.name} Invoice (Ref ${object.name or 'n/a'})</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
@@ -22,17 +22,17 @@
|
||||
% endif
|
||||
<br /><br />
|
||||
Here is your
|
||||
% if object.number:
|
||||
invoice <strong>${object.number}</strong>
|
||||
% if object.name:
|
||||
invoice <strong>${object.name}</strong>
|
||||
% else:
|
||||
invoice
|
||||
%endif
|
||||
% if object.origin:
|
||||
(with reference: ${object.origin})
|
||||
% if object.invoice_origin:
|
||||
(with reference: ${object.invoice_origin})
|
||||
% endif
|
||||
amounting in <strong>${format_amount(object.amount_total, object.currency_id)}</strong>
|
||||
from ${object.company_id.name}.
|
||||
% if object.state=='paid':
|
||||
% if object.invoice_payment_state == 'paid':
|
||||
This invoice is already paid.
|
||||
% else:
|
||||
Please remit payment at your earliest convenience.
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
</field>
|
||||
<field name="report_template" ref="account_invoices"/>
|
||||
<field name="report_name">Invoice_${(object.number or '').replace('/','_')}${object.state == 'draft' and '_draft' or ''}</field>
|
||||
<field name="report_name">Invoice_${(object.name or '').replace('/','_')}${object.state == 'draft' and '_draft' or ''}</field>
|
||||
<field name="lang">${object.partner_id.lang}</field>
|
||||
<field name="user_signature" eval="False"/>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<field name="nextcall" eval="(DateTime.now().replace(hour=2, minute=0) + timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')" />
|
||||
<field name="doall" eval="False"/>
|
||||
<field name="model_id" ref="model_account_move"/>
|
||||
<field name="code">model._run_post_draft_to_post()</field>
|
||||
<field name="code">model._autopost_draft_entries()</field>
|
||||
<field name="state">code</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -4,10 +4,11 @@ from . import partner
|
||||
from . import account
|
||||
from . import account_reconcile_model
|
||||
from . import account_payment
|
||||
from . import account_invoice
|
||||
from . import account_payment_term
|
||||
from . import account_bank_statement
|
||||
from . import account_move
|
||||
from . import account_payment_term
|
||||
from . import account_bank_statement
|
||||
from . import chart_template
|
||||
from . import account_analytic_line
|
||||
from . import account_journal_dashboard
|
||||
|
||||
@@ -553,8 +553,6 @@ class AccountJournal(models.Model):
|
||||
domain=[('deprecated', '=', False)], help="It acts as a default account for debit amount")
|
||||
update_posted = fields.Boolean(string='Allow Cancelling Entries',
|
||||
help="Check this box if you want to allow the cancellation the entries related to this journal or of the invoice related to this journal")
|
||||
group_invoice_lines = fields.Boolean(string='Group Invoice Lines',
|
||||
help="If this box is checked, the system will try to group the accounting lines when generating them from invoices.")
|
||||
sequence_id = fields.Many2one('ir.sequence', string='Entry Sequence',
|
||||
help="This field contains the information related to the numbering of the journal entries of this journal.", required=True, copy=False)
|
||||
refund_sequence_id = fields.Many2one('ir.sequence', string='Credit Note Entry Sequence',
|
||||
@@ -738,7 +736,7 @@ class AccountJournal(models.Model):
|
||||
if self.alias_id:
|
||||
self.alias_id.write(alias_values)
|
||||
else:
|
||||
self.alias_id = self.env['mail.alias'].with_context(alias_model_name='account.invoice',
|
||||
self.alias_id = self.env['mail.alias'].with_context(alias_model_name='account.move',
|
||||
alias_parent_model_name='account.journal').create(alias_values)
|
||||
|
||||
if vals.get('alias_name'):
|
||||
@@ -1179,17 +1177,6 @@ class AccountTax(models.Model):
|
||||
if self.price_include:
|
||||
self.include_base_amount = True
|
||||
|
||||
def get_grouping_key(self, invoice_tax_val):
|
||||
""" Returns a string that will be used to group account.invoice.tax sharing the same properties"""
|
||||
self.ensure_one()
|
||||
return str(invoice_tax_val['tax_id']) + '-' + \
|
||||
str(invoice_tax_val.get('tax_repartition_line_id')) + '-' + \
|
||||
str(invoice_tax_val['account_id']) + '-' + \
|
||||
str(invoice_tax_val['account_analytic_id']) + '-' + \
|
||||
str(invoice_tax_val.get('analytic_tag_ids', [])) + '-' + \
|
||||
str(invoice_tax_val.get('tax_ids') or []) + '-' + \
|
||||
str(invoice_tax_val.get('tag_ids') or [])
|
||||
|
||||
def _compute_amount(self, base_amount, price_unit, quantity=1.0, product=None, partner=None):
|
||||
""" Returns the amount of a single tax. base_amount is the actual amount on which the tax is applied, which is
|
||||
price_unit * quantity eventually affected by previous taxes (if tax is include_base_amount XOR price_include)
|
||||
@@ -1210,7 +1197,7 @@ class AccountTax(models.Model):
|
||||
else:
|
||||
return quantity * self.amount
|
||||
|
||||
price_include = self._context['force_price_include'] if 'force_price_include' in self._context else self.price_include
|
||||
price_include = self._context.get('force_price_include', self.price_include)
|
||||
|
||||
# base * (1 + tax_amount) = new_base
|
||||
if self.amount_type == 'percent' and not price_include:
|
||||
@@ -1254,12 +1241,15 @@ class AccountTax(models.Model):
|
||||
return rep_lines.filtered(lambda x: x.repartition_type == repartition_type).mapped('tag_ids')
|
||||
|
||||
@api.multi
|
||||
def compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False):
|
||||
def compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True):
|
||||
""" Returns all information required to apply taxes (in self + their children in case of a tax group).
|
||||
We consider the sequence of the parent for group of taxes.
|
||||
Eg. considering letters as taxes and alphabetic order as sequence :
|
||||
[G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G]
|
||||
|
||||
'handle_price_include' is used when we need to ignore all tax included in price. If False, it means the
|
||||
amount passed to this method will be considered as the base of all computations.
|
||||
|
||||
RETURN: {
|
||||
'total_excluded': 0.0, # Total without taxes
|
||||
'total_included': 0.0, # Total with taxes
|
||||
@@ -1362,28 +1352,29 @@ class AccountTax(models.Model):
|
||||
incl_fixed_amount = incl_percent_amount = incl_division_amount = 0
|
||||
# Store the tax amounts we compute while searching for the total_excluded
|
||||
cached_tax_amounts = {}
|
||||
for tax in reversed(taxes):
|
||||
if tax.include_base_amount:
|
||||
base = recompute_base(base, incl_fixed_amount, incl_percent_amount, incl_division_amount)
|
||||
incl_fixed_amount = incl_percent_amount = incl_division_amount = 0
|
||||
store_included_tax_total = True
|
||||
if tax.price_include:
|
||||
if tax.amount_type == 'percent':
|
||||
incl_percent_amount += tax.amount
|
||||
elif tax.amount_type == 'division':
|
||||
incl_division_amount += tax.amount
|
||||
elif tax.amount_type == 'fixed':
|
||||
incl_fixed_amount += quantity * tax.amount
|
||||
else:
|
||||
# tax.amount_type == other (python)
|
||||
tax_amount = tax._compute_amount(base, price_unit, quantity, product, partner)
|
||||
incl_fixed_amount += tax_amount
|
||||
# Avoid unecessary re-computation
|
||||
cached_tax_amounts[i] = tax_amount
|
||||
if store_included_tax_total:
|
||||
total_included_checkpoints[i] = base
|
||||
store_included_tax_total = False
|
||||
i -= 1
|
||||
if handle_price_include:
|
||||
for tax in reversed(taxes):
|
||||
if tax.include_base_amount:
|
||||
base = recompute_base(base, incl_fixed_amount, incl_percent_amount, incl_division_amount)
|
||||
incl_fixed_amount = incl_percent_amount = incl_division_amount = 0
|
||||
store_included_tax_total = True
|
||||
if tax.price_include:
|
||||
if tax.amount_type == 'percent':
|
||||
incl_percent_amount += tax.amount
|
||||
elif tax.amount_type == 'division':
|
||||
incl_division_amount += tax.amount
|
||||
elif tax.amount_type == 'fixed':
|
||||
incl_fixed_amount += quantity * tax.amount
|
||||
else:
|
||||
# tax.amount_type == other (python)
|
||||
tax_amount = tax._compute_amount(base, price_unit, quantity, product, partner)
|
||||
incl_fixed_amount += tax_amount
|
||||
# Avoid unecessary re-computation
|
||||
cached_tax_amounts[i] = tax_amount
|
||||
if store_included_tax_total:
|
||||
total_included_checkpoints[i] = base
|
||||
store_included_tax_total = False
|
||||
i -= 1
|
||||
|
||||
total_excluded = recompute_base(base, incl_fixed_amount, incl_percent_amount, incl_division_amount)
|
||||
|
||||
@@ -1438,8 +1429,8 @@ class AccountTax(models.Model):
|
||||
'price_include': tax.price_include,
|
||||
'tax_exigibility': tax.tax_exigibility,
|
||||
'tax_repartition_line_id': repartition_line.id,
|
||||
'tag_ids': [(6, False, (repartition_line.tag_ids + subsequent_tags).ids)],
|
||||
'tax_ids': [(6, False, subsequent_taxes.ids)]
|
||||
'tag_ids': (repartition_line.tag_ids + subsequent_tags).ids,
|
||||
'tax_ids': subsequent_taxes.ids,
|
||||
})
|
||||
|
||||
total_amount += line_amount
|
||||
|
||||
@@ -395,6 +395,7 @@ class AccountBankStatementLine(models.Model):
|
||||
aml_to_cancel.remove_move_reconcile()
|
||||
moves_to_cancel = aml_to_cancel.mapped('move_id')
|
||||
moves_to_cancel.button_cancel()
|
||||
moves_to_cancel.button_draft()
|
||||
moves_to_cancel.unlink()
|
||||
if payment_to_cancel:
|
||||
payment_to_cancel.unlink()
|
||||
@@ -432,7 +433,9 @@ class AccountBankStatementLine(models.Model):
|
||||
if self.ref:
|
||||
ref = move_ref + ' - ' + self.ref if move_ref else self.ref
|
||||
data = {
|
||||
'type': 'entry',
|
||||
'journal_id': self.statement_id.journal_id.id,
|
||||
'currency_id': self.statement_id.currency_id.id,
|
||||
'date': self.statement_id.accounting_date or self.date,
|
||||
'ref': ref,
|
||||
}
|
||||
@@ -622,7 +625,7 @@ class AccountBankStatementLine(models.Model):
|
||||
"""
|
||||
payable_account_type = self.env.ref('account.data_account_type_payable')
|
||||
receivable_account_type = self.env.ref('account.data_account_type_receivable')
|
||||
edition_mode = self._context.get('edition_mode')
|
||||
suspense_moves_mode = self._context.get('suspense_moves_mode')
|
||||
counterpart_aml_dicts = counterpart_aml_dicts or []
|
||||
payment_aml_rec = payment_aml_rec or self.env['account.move.line']
|
||||
new_aml_dicts = new_aml_dicts or []
|
||||
@@ -639,7 +642,7 @@ class AccountBankStatementLine(models.Model):
|
||||
if any(rec.statement_id for rec in payment_aml_rec):
|
||||
raise UserError(_('A selected move line was already reconciled.'))
|
||||
for aml_dict in counterpart_aml_dicts:
|
||||
if aml_dict['move_line'].reconciled and not edition_mode:
|
||||
if aml_dict['move_line'].reconciled and not suspense_moves_mode:
|
||||
raise UserError(_('A selected move line was already reconciled.'))
|
||||
if isinstance(aml_dict['move_line'], int):
|
||||
aml_dict['move_line'] = aml_obj.browse(aml_dict['move_line'])
|
||||
@@ -653,7 +656,7 @@ class AccountBankStatementLine(models.Model):
|
||||
user_type_id = self.env['account.account'].browse(aml_dict.get('account_id')).user_type_id
|
||||
if user_type_id in [payable_account_type, receivable_account_type] and user_type_id not in account_types:
|
||||
account_types |= user_type_id
|
||||
if edition_mode:
|
||||
if suspense_moves_mode:
|
||||
if any(not line.journal_entry_ids for line in self):
|
||||
raise UserError(_('Some selected statement line were not already reconciled with an account move.'))
|
||||
else:
|
||||
@@ -686,9 +689,9 @@ class AccountBankStatementLine(models.Model):
|
||||
# Create the move
|
||||
self.sequence = self.statement_id.line_ids.ids.index(self.id) + 1
|
||||
move_vals = self._prepare_reconciliation_move(self.statement_id.name)
|
||||
if edition_mode:
|
||||
if suspense_moves_mode:
|
||||
self.button_cancel_reconciliation()
|
||||
move = self.env['account.move'].create(move_vals)
|
||||
move = self.env['account.move'].with_context(default_journal_id=move_vals['journal_id']).create(move_vals)
|
||||
counterpart_moves = (counterpart_moves | move)
|
||||
|
||||
# Create The payment
|
||||
@@ -730,7 +733,7 @@ class AccountBankStatementLine(models.Model):
|
||||
|
||||
(new_aml | counterpart_move_line).reconcile()
|
||||
|
||||
self._check_invoice_state(counterpart_move_line.invoice_id)
|
||||
self._check_invoice_state(counterpart_move_line.move_id)
|
||||
|
||||
# Balance the move
|
||||
st_line_amount = -sum([x.balance for x in move.line_ids])
|
||||
@@ -756,7 +759,7 @@ class AccountBankStatementLine(models.Model):
|
||||
})
|
||||
self.bank_account_id = bank_account
|
||||
|
||||
counterpart_moves.assert_balanced()
|
||||
counterpart_moves._check_balanced()
|
||||
return counterpart_moves
|
||||
|
||||
@api.multi
|
||||
@@ -790,5 +793,4 @@ class AccountBankStatementLine(models.Model):
|
||||
aml_dict['currency_id'] = statement_currency.id
|
||||
|
||||
def _check_invoice_state(self, invoice):
|
||||
if invoice.state == 'in_payment' and all([payment.state == 'reconciled' for payment in invoice.mapped('payment_move_line_ids.payment_id')]):
|
||||
invoice.write({'state': 'paid'})
|
||||
invoice._compute_amount()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,9 @@ from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DF, safe_eval
|
||||
from odoo.tools.misc import formatLang, format_date as odoo_format_date
|
||||
import random
|
||||
|
||||
import ast
|
||||
|
||||
|
||||
class account_journal(models.Model):
|
||||
_inherit = "account.journal"
|
||||
|
||||
@@ -157,12 +160,12 @@ class account_journal(models.Model):
|
||||
start_date = (first_day_of_week + timedelta(days=-7))
|
||||
for i in range(0,6):
|
||||
if i == 0:
|
||||
query += "("+select_sql_clause+" and date_due < '"+start_date.strftime(DF)+"')"
|
||||
query += "("+select_sql_clause+" and invoice_date_due < '"+start_date.strftime(DF)+"')"
|
||||
elif i == 5:
|
||||
query += " UNION ALL ("+select_sql_clause+" and date_due >= '"+start_date.strftime(DF)+"')"
|
||||
query += " UNION ALL ("+select_sql_clause+" and invoice_date_due >= '"+start_date.strftime(DF)+"')"
|
||||
else:
|
||||
next_date = start_date + timedelta(days=7)
|
||||
query += " UNION ALL ("+select_sql_clause+" and date_due >= '"+start_date.strftime(DF)+"' and date_due < '"+next_date.strftime(DF)+"')"
|
||||
query += " UNION ALL ("+select_sql_clause+" and invoice_date_due >= '"+start_date.strftime(DF)+"' and invoice_date_due < '"+next_date.strftime(DF)+"')"
|
||||
start_date = next_date
|
||||
|
||||
self.env.cr.execute(query, query_args)
|
||||
@@ -190,9 +193,17 @@ class account_journal(models.Model):
|
||||
the bar graph's data as its first element, and the arguments dictionary
|
||||
for it as its second.
|
||||
"""
|
||||
return ("""SELECT sum(residual_company_signed) as total, min(date_due) as aggr_date
|
||||
FROM account_invoice
|
||||
WHERE journal_id = %(journal_id)s and state = 'open'""", {'journal_id':self.id})
|
||||
return ('''
|
||||
SELECT
|
||||
SUM((CASE WHEN move.type IN ('out_refund', 'in_refund') THEN -1 else 1 END) * line.amount_residual) AS total,
|
||||
MIN(invoice_date_due) AS aggr_date
|
||||
FROM account_move_line line
|
||||
JOIN account_move move ON move.id = line.move_id
|
||||
WHERE move.journal_id = %(journal_id)s
|
||||
AND move.state = 'posted'
|
||||
AND move.invoice_payment_state = 'not_paid'
|
||||
AND move.type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')
|
||||
''', {'journal_id': self.id})
|
||||
|
||||
@api.multi
|
||||
def get_journal_dashboard_datas(self):
|
||||
@@ -241,7 +252,20 @@ class account_journal(models.Model):
|
||||
query_results_drafts = self.env.cr.dictfetchall()
|
||||
|
||||
today = fields.Date.today()
|
||||
query = """SELECT residual_signed as amount_total, currency_id AS currency, type, date_invoice, company_id FROM account_invoice WHERE journal_id = %s AND date <= %s AND state = 'open';"""
|
||||
query = '''
|
||||
SELECT
|
||||
(CASE WHEN type IN ('out_refund', 'in_refund') THEN -1 ELSE 1 END) * amount_residual AS amount_total,
|
||||
currency_id AS currency,
|
||||
type,
|
||||
invoice_date,
|
||||
company_id
|
||||
FROM account_move move
|
||||
WHERE journal_id = %s
|
||||
AND date <= %s
|
||||
AND state = 'posted'
|
||||
AND invoice_payment_state = 'not_paid'
|
||||
AND type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt');
|
||||
'''
|
||||
self.env.cr.execute(query, (self.id, today))
|
||||
late_query_results = self.env.cr.dictfetchall()
|
||||
curr_cache = {}
|
||||
@@ -282,9 +306,19 @@ class account_journal(models.Model):
|
||||
data as its first element, and the arguments dictionary to use to run
|
||||
it as its second.
|
||||
"""
|
||||
return ("""SELECT state, residual_signed as amount_total, currency_id AS currency, type, date_invoice, company_id
|
||||
FROM account_invoice
|
||||
WHERE journal_id = %(journal_id)s AND state = 'open';""", {'journal_id':self.id})
|
||||
return ('''
|
||||
SELECT
|
||||
(CASE WHEN move.type IN ('out_refund', 'in_refund') THEN -1 ELSE 1 END) * move.amount_residual AS amount_total,
|
||||
move.currency_id AS currency,
|
||||
move.type,
|
||||
move.invoice_date,
|
||||
move.company_id
|
||||
FROM account_move move
|
||||
WHERE move.journal_id = %(journal_id)s
|
||||
AND move.state = 'posted'
|
||||
AND move.invoice_payment_state = 'not_paid'
|
||||
AND move.type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt');
|
||||
''', {'journal_id': self.id})
|
||||
|
||||
def _get_draft_bills_query(self):
|
||||
"""
|
||||
@@ -292,18 +326,19 @@ class account_journal(models.Model):
|
||||
gather the bills in draft state data, and the arguments
|
||||
dictionary to use to run it as its second.
|
||||
"""
|
||||
# there is no account_move_lines for draft invoices, so no relevant residual_signed value
|
||||
return ("""SELECT state,
|
||||
(CASE WHEN inv.type in ('out_invoice', 'in_invoice')
|
||||
THEN inv.amount_total
|
||||
ELSE (-1 * inv.amount_total)
|
||||
END) AS amount_total,
|
||||
inv.currency_id AS currency,
|
||||
inv.type,
|
||||
inv.date_invoice,
|
||||
inv.company_id
|
||||
FROM account_invoice inv
|
||||
WHERE journal_id = %(journal_id)s AND state = 'draft';""", {'journal_id':self.id})
|
||||
return ('''
|
||||
SELECT
|
||||
(CASE WHEN move.type IN ('out_refund', 'in_refund') THEN -1 ELSE 1 END) * move.amount_total AS amount_total,
|
||||
move.currency_id AS currency,
|
||||
move.type,
|
||||
move.invoice_date,
|
||||
move.company_id
|
||||
FROM account_move move
|
||||
WHERE move.journal_id = %(journal_id)s
|
||||
AND move.state = 'draft'
|
||||
AND move.invoice_payment_state = 'not_paid'
|
||||
AND move.type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt');
|
||||
''', {'journal_id': self.id})
|
||||
|
||||
def _count_results_and_sum_amounts(self, results_dict, target_currency, curr_cache=None):
|
||||
""" Loops on a query result to count the total number of invoices and sum
|
||||
@@ -320,7 +355,7 @@ class account_journal(models.Model):
|
||||
cur = self.env['res.currency'].browse(result.get('currency'))
|
||||
company = self.env['res.company'].browse(result.get('company_id')) or self.env.company
|
||||
rslt_count += 1
|
||||
date = result.get('date_invoice') or fields.Date.today()
|
||||
date = result.get('invoice_date') or fields.Date.today()
|
||||
|
||||
amount = result.get('amount_total', 0) or 0
|
||||
if cur != target_currency:
|
||||
@@ -336,27 +371,20 @@ class account_journal(models.Model):
|
||||
@api.multi
|
||||
def action_create_new(self):
|
||||
ctx = self._context.copy()
|
||||
model = 'account.invoice'
|
||||
ctx['default_journal_id'] = self.id
|
||||
if self.type == 'sale':
|
||||
ctx.update({'journal_type': self.type, 'default_type': 'out_invoice', 'type': 'out_invoice', 'default_journal_id': self.id})
|
||||
if ctx.get('refund'):
|
||||
ctx.update({'default_type':'out_refund', 'type':'out_refund'})
|
||||
view_id = self.env.ref('account.invoice_form').id
|
||||
ctx['default_type'] = 'out_refund' if ctx.get('refund') else 'out_invoice'
|
||||
elif self.type == 'purchase':
|
||||
ctx.update({'journal_type': self.type, 'default_type': 'in_invoice', 'type': 'in_invoice', 'default_journal_id': self.id})
|
||||
if ctx.get('refund'):
|
||||
ctx.update({'default_type': 'in_refund', 'type': 'in_refund'})
|
||||
view_id = self.env.ref('account.invoice_supplier_form').id
|
||||
ctx['default_type'] = 'in_refund' if ctx.get('refund') else 'in_invoice'
|
||||
else:
|
||||
ctx.update({'default_journal_id': self.id, 'view_no_maturity': True})
|
||||
view_id = self.env.ref('account.view_move_form').id
|
||||
model = 'account.move'
|
||||
ctx['default_type'] = 'entry'
|
||||
ctx['view_no_maturity'] = True
|
||||
return {
|
||||
'name': _('Create invoice/bill'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': model,
|
||||
'view_id': view_id,
|
||||
'res_model': 'account.move',
|
||||
'view_id': self.env.ref('account.view_move_form').id,
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
@@ -400,7 +428,7 @@ class account_journal(models.Model):
|
||||
self.ensure_one()
|
||||
ids = self.to_check_ids().ids
|
||||
action_context = {'show_mode_selector': False, 'company_ids': self.mapped('company_id').ids}
|
||||
action_context.update({'edition_mode': True})
|
||||
action_context.update({'suspense_moves_mode': True})
|
||||
action_context.update({'statement_line_ids': ids})
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
@@ -410,7 +438,7 @@ class account_journal(models.Model):
|
||||
|
||||
def to_check_ids(self):
|
||||
self.ensure_one()
|
||||
domain = self.env['account.move.line']._get_domain_for_edition_mode()
|
||||
domain = self.env['account.move.line']._get_suspense_moves_domain()
|
||||
domain.append(('journal_id', '=', self.id))
|
||||
statement_line_ids = self.env['account.move.line'].search(domain).mapped('statement_line_id')
|
||||
return statement_line_ids
|
||||
@@ -418,60 +446,42 @@ class account_journal(models.Model):
|
||||
@api.multi
|
||||
def open_action(self):
|
||||
"""return action based on type for related journals"""
|
||||
action_name = self._context.get('action_name', False)
|
||||
action_name = self._context.get('action_name')
|
||||
|
||||
# Find action based on journal.
|
||||
if not action_name:
|
||||
if self.type == 'bank':
|
||||
action_name = 'action_bank_statement_tree'
|
||||
elif self.type == 'cash':
|
||||
action_name = 'action_view_bank_statement_tree'
|
||||
elif self.type == 'sale':
|
||||
action_name = 'action_invoice_tree1'
|
||||
use_domain = expression.AND(
|
||||
[self.env.context.get('use_domain', []), [('journal_id', '=', self.id)]]
|
||||
)
|
||||
self = self.with_context(use_domain=use_domain)
|
||||
action_name = 'action_move_out_invoice_type'
|
||||
elif self.type == 'purchase':
|
||||
action_name = 'action_vendor_bill_template'
|
||||
use_domain = expression.AND(
|
||||
[self.env.context.get('use_domain', []), [('journal_id', '=', self.id)]]
|
||||
)
|
||||
self = self.with_context(use_domain=use_domain)
|
||||
action_name = 'action_move_in_invoice_type'
|
||||
else:
|
||||
action_name = 'action_move_journal_line'
|
||||
|
||||
_journal_invoice_type_map = {
|
||||
('sale', None): 'out_invoice',
|
||||
('purchase', None): 'in_invoice',
|
||||
('sale', 'refund'): 'out_refund',
|
||||
('purchase', 'refund'): 'in_refund',
|
||||
('bank', None): 'bank',
|
||||
('cash', None): 'cash',
|
||||
('general', None): 'general',
|
||||
}
|
||||
invoice_type = _journal_invoice_type_map[(self.type, self._context.get('invoice_type'))]
|
||||
# Set 'account.' prefix if missing.
|
||||
if '.' not in action_name:
|
||||
action_name = 'account.%s' % action_name
|
||||
|
||||
ctx = self._context.copy()
|
||||
ctx.pop('group_by', None)
|
||||
ctx.update({
|
||||
'journal_type': self.type,
|
||||
action = self.env.ref(action_name).read()[0]
|
||||
context = self._context.copy()
|
||||
if 'context' in action and type(action['context']) == str:
|
||||
context.update(ast.literal_eval(action['context']))
|
||||
else:
|
||||
context.update(action.get('context', {}))
|
||||
action['context'] = context
|
||||
action['context'].update({
|
||||
'default_journal_id': self.id,
|
||||
'default_type': invoice_type,
|
||||
'type': invoice_type,
|
||||
'search_default_journal_id': self.id,
|
||||
})
|
||||
|
||||
[action] = self.env.ref('account.%s' % action_name).read()
|
||||
action['context'] = ctx
|
||||
action['domain'] = self._context.get('use_domain', [])
|
||||
account_invoice_filter = self.env.ref('account.view_account_invoice_filter', False)
|
||||
if action_name in ['action_invoice_tree1', 'action_vendor_bill_template']:
|
||||
action['search_view_id'] = account_invoice_filter and account_invoice_filter.id or False
|
||||
if action_name in ['action_bank_statement_tree', 'action_view_bank_statement_tree']:
|
||||
action['views'] = False
|
||||
action['view_id'] = False
|
||||
if self.type == 'purchase':
|
||||
new_help = self.env['account.invoice'].with_context(ctx).complete_empty_list_help()
|
||||
action.update({'help': (action.get('help') or '') + new_help})
|
||||
if self.type == 'sale':
|
||||
action['domain'] = [('type', 'in', ('out_invoice', 'out_refund', 'out_receipt'))]
|
||||
elif self.type == 'purchase':
|
||||
action['domain'] = [('type', 'in', ('in_invoice', 'in_refund', 'in_receipt'))]
|
||||
|
||||
return action
|
||||
|
||||
@api.multi
|
||||
|
||||
+2825
-820
File diff suppressed because it is too large
Load Diff
@@ -2,22 +2,14 @@
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from odoo.tools import float_compare
|
||||
|
||||
from itertools import groupby
|
||||
|
||||
MAP_INVOICE_TYPE_PARTNER_TYPE = {
|
||||
'out_invoice': 'customer',
|
||||
'out_refund': 'customer',
|
||||
'out_receipt': 'customer',
|
||||
'in_invoice': 'supplier',
|
||||
'in_refund': 'supplier',
|
||||
}
|
||||
# Since invoice amounts are unsigned, this is how we know if money comes in or goes out
|
||||
MAP_INVOICE_TYPE_PAYMENT_SIGN = {
|
||||
'out_invoice': 1,
|
||||
'in_refund': -1,
|
||||
'in_invoice': -1,
|
||||
'out_refund': 1,
|
||||
'in_receipt': 'supplier',
|
||||
}
|
||||
|
||||
|
||||
@@ -47,11 +39,11 @@ class account_payment(models.Model):
|
||||
# For money transfer, money goes from journal_id to a transfer account, then from the transfer account to destination_journal_id
|
||||
destination_journal_id = fields.Many2one('account.journal', string='Transfer To', domain=[('type', 'in', ('bank', 'cash'))], readonly=True, states={'draft': [('readonly', False)]})
|
||||
|
||||
invoice_ids = fields.Many2many('account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id', string="Invoices", copy=False, readonly=True,
|
||||
invoice_ids = fields.Many2many('account.move', 'account_invoice_payment_rel', 'payment_id', 'invoice_id', string="Invoices", copy=False, readonly=True,
|
||||
help="""Technical field containing the invoice for which the payment has been generated.
|
||||
This does not especially correspond to the invoices reconciled with the payment,
|
||||
as it can have been generated first, and reconciled later""")
|
||||
reconciled_invoice_ids = fields.Many2many('account.invoice', string='Reconciled Invoices', compute='_compute_reconciled_invoice_ids', help="Invoices whose journal items have been reconciled with this payment's.")
|
||||
reconciled_invoice_ids = fields.Many2many('account.move', string='Reconciled Invoices', compute='_compute_reconciled_invoice_ids', help="Invoices whose journal items have been reconciled with these payments.")
|
||||
has_invoices = fields.Boolean(compute="_compute_reconciled_invoice_ids", help="Technical field used for usability purposes")
|
||||
|
||||
move_line_ids = fields.One2many('account.move.line', 'payment_id', readonly=True, copy=False, ondelete='restrict')
|
||||
@@ -94,19 +86,19 @@ class account_payment(models.Model):
|
||||
require_partner_bank_account = fields.Boolean(compute='_compute_show_partner_bank', help='Technical field used to know whether the field `partner_bank_account_id` needs to be required or not in the payments form views')
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
rec = super(account_payment, self).default_get(fields)
|
||||
def default_get(self, default_fields):
|
||||
rec = super(account_payment, self).default_get(default_fields)
|
||||
active_ids = self._context.get('active_ids') or self._context.get('active_id')
|
||||
active_model = self._context.get('active_model')
|
||||
|
||||
# Check for selected invoices ids
|
||||
if not active_ids or active_model != 'account.invoice':
|
||||
if not active_ids or active_model != 'account.move':
|
||||
return rec
|
||||
|
||||
invoices = self.env['account.invoice'].browse(active_ids)
|
||||
invoices = self.env['account.move'].browse(active_ids).filtered(lambda move: move.is_invoice(include_receipts=True))
|
||||
|
||||
# Check all invoices are open
|
||||
if any(invoice.state != 'open' for invoice in invoices):
|
||||
if not invoices or any(invoice.state != 'posted' for invoice in invoices):
|
||||
raise UserError(_("You can only register payments for open invoices"))
|
||||
# Check if, in batch payments, there are not negative invoices and positive invoices
|
||||
dtype = invoices[0].type
|
||||
@@ -119,23 +111,23 @@ class account_payment(models.Model):
|
||||
(dtype == 'out_invoice' and inv.type == 'out_refund')):
|
||||
raise UserError(_("You cannot register payments for customer invoices and credit notes at the same time."))
|
||||
|
||||
amount = self._compute_payment_amount(invoices, invoices[0].currency_id)
|
||||
amount = self._compute_payment_amount(invoices, invoices[0].currency_id, invoices[0].journal_id, rec.get('payment_date') or fields.Date.today())
|
||||
rec.update({
|
||||
'currency_id': invoices[0].currency_id.id,
|
||||
'amount': abs(amount),
|
||||
'payment_type': 'inbound' if amount > 0 else 'outbound',
|
||||
'partner_id': invoices[0].commercial_partner_id.id,
|
||||
'partner_type': MAP_INVOICE_TYPE_PARTNER_TYPE[invoices[0].type],
|
||||
'communication': invoices[0].reference or invoices[0].number,
|
||||
'communication': invoices[0].ref or invoices[0].name,
|
||||
'invoice_ids': [(6, 0, invoices.ids)],
|
||||
})
|
||||
return rec
|
||||
|
||||
@api.one
|
||||
@api.constrains('amount')
|
||||
def _check_amount(self):
|
||||
if self.amount < 0:
|
||||
raise ValidationError(_('The payment amount cannot be negative.'))
|
||||
for payment in self:
|
||||
if payment.amount < 0:
|
||||
raise ValidationError(_('The payment amount cannot be negative.'))
|
||||
|
||||
@api.model
|
||||
def _get_method_codes_using_bank_account(self):
|
||||
@@ -169,11 +161,14 @@ class account_payment(models.Model):
|
||||
def _compute_payment_difference(self):
|
||||
for pay in self.filtered(lambda p: p.invoice_ids and p.state == 'draft'):
|
||||
payment_amount = -pay.amount if pay.payment_type == 'outbound' else pay.amount
|
||||
pay.payment_difference = pay._compute_payment_amount() - payment_amount
|
||||
pay.payment_difference = pay._compute_payment_amount(pay.invoice_ids, pay.currency_id, pay.journal_id, pay.payment_date) - payment_amount
|
||||
|
||||
@api.onchange('journal_id')
|
||||
def _onchange_journal(self):
|
||||
if self.journal_id:
|
||||
if self.journal_id.currency_id:
|
||||
self.currency_id = self.journal_id.currency_id
|
||||
|
||||
# Set default payment method (we consider the first to be the default one)
|
||||
payment_methods = self.payment_type == 'inbound' and self.journal_id.inbound_payment_method_ids or self.journal_id.outbound_payment_method_ids
|
||||
payment_methods_list = payment_methods.ids
|
||||
@@ -190,18 +185,18 @@ class account_payment(models.Model):
|
||||
|
||||
domain = {'payment_method_id': [('payment_type', '=', payment_type), ('id', 'in', payment_methods_list)]}
|
||||
|
||||
if self.env.context.get('active_model') == 'account.invoice':
|
||||
if self.env.context.get('active_model') == 'account.move':
|
||||
active_ids = self._context.get('active_ids')
|
||||
invoices = self.env['account.invoice'].browse(active_ids)
|
||||
self.amount = abs(self._compute_payment_amount(invoices))
|
||||
invoices = self.env['account.move'].browse(active_ids)
|
||||
self.amount = abs(self._compute_payment_amount(invoices, self.currency_id, self.journal_id, self.payment_date))
|
||||
|
||||
return {'domain': domain}
|
||||
return {}
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _onchange_partner_id(self):
|
||||
if self.invoice_ids and self.invoice_ids[0].partner_bank_id:
|
||||
self.partner_bank_account_id = self.invoice_ids[0].partner_bank_id
|
||||
if self.invoice_ids and self.invoice_ids[0].invoice_partner_bank_id:
|
||||
self.partner_bank_account_id = self.invoice_ids[0].invoice_partner_bank_id
|
||||
elif self.partner_id != self.partner_bank_account_id.partner_id:
|
||||
# This condition ensures we use the default value provided into
|
||||
# context for partner_bank_account_id properly when provided with a
|
||||
@@ -272,7 +267,7 @@ class account_payment(models.Model):
|
||||
|
||||
@api.onchange('currency_id')
|
||||
def _onchange_currency(self):
|
||||
self.amount = abs(self._compute_payment_amount())
|
||||
self.amount = abs(self._compute_payment_amount(self.invoice_ids, self.currency_id, self.journal_id, self.payment_date))
|
||||
|
||||
if self.journal_id: # TODO: only return if currency differ?
|
||||
return
|
||||
@@ -285,36 +280,48 @@ class account_payment(models.Model):
|
||||
if journal:
|
||||
return {'value': {'journal_id': journal.id}}
|
||||
|
||||
@api.multi
|
||||
def _compute_payment_amount(self, invoices=None, currency=None):
|
||||
@api.model
|
||||
def _compute_payment_amount(self, invoices, currency, journal, date):
|
||||
'''Compute the total amount for the payment wizard.
|
||||
|
||||
:param invoices: If not specified, pick all the invoices.
|
||||
:param currency: If not specified, search a default currency on wizard/journal.
|
||||
:return: The total amount to pay the invoices.
|
||||
:param invoices: Invoices on which compute the total as an account.invoice recordset.
|
||||
:param currency: The payment's currency as a res.currency record.
|
||||
:param journal: The payment's journal as an account.journal record.
|
||||
:param date: The payment's date as a datetime.date object.
|
||||
:return: The total amount to pay the invoices.
|
||||
'''
|
||||
company = journal.company_id
|
||||
currency = currency or journal.currency_id or company.currency_id
|
||||
date = date or fields.Date.today()
|
||||
|
||||
# Get the payment invoices
|
||||
if not invoices:
|
||||
invoices = self.invoice_ids
|
||||
return 0.0
|
||||
|
||||
# Get the payment currency
|
||||
if not currency:
|
||||
currency = self.currency_id or self.journal_id.currency_id or self.journal_id.company_id.currency_id
|
||||
self._cr.execute('''
|
||||
SELECT
|
||||
move.type AS type,
|
||||
move.currency_id AS currency_id,
|
||||
SUM(line.amount_residual) AS amount_residual,
|
||||
SUM(line.amount_residual_currency) AS residual_currency
|
||||
FROM account_move move
|
||||
LEFT JOIN account_move_line line ON line.move_id = move.id
|
||||
LEFT JOIN account_account account ON account.id = line.account_id
|
||||
LEFT JOIN account_account_type account_type ON account_type.id = account.user_type_id
|
||||
WHERE move.id IN %s
|
||||
AND account_type.type IN ('receivable', 'payable')
|
||||
GROUP BY move.id, move.type
|
||||
''', [tuple(invoices.ids)])
|
||||
query_res = self._cr.dictfetchall()
|
||||
|
||||
# Avoid currency rounding issues by summing the amounts according to the company_currency_id before
|
||||
invoice_datas = invoices.read_group(
|
||||
[('id', 'in', invoices.ids)],
|
||||
['currency_id', 'type', 'residual_signed'],
|
||||
['currency_id', 'type'], lazy=False)
|
||||
total = 0.0
|
||||
for invoice_data in invoice_datas:
|
||||
amount_total = MAP_INVOICE_TYPE_PAYMENT_SIGN[invoice_data['type']] * invoice_data['residual_signed']
|
||||
payment_currency = self.env['res.currency'].browse(invoice_data['currency_id'][0])
|
||||
if payment_currency == currency:
|
||||
total += amount_total
|
||||
for res in query_res:
|
||||
move_currency = self.env['res.currency'].browse(res['currency_id'])
|
||||
if move_currency == currency and move_currency != company.currency_id:
|
||||
total += res['residual_currency']
|
||||
elif move_currency == currency == company.currency_id:
|
||||
total += res['amount_residual']
|
||||
else:
|
||||
total += payment_currency._convert(amount_total, currency, self.env.company, self.payment_date or fields.Date.today())
|
||||
total += move_currency._convert(res['amount_residual'], currency, company, date)
|
||||
return total
|
||||
|
||||
@api.multi
|
||||
@@ -358,7 +365,8 @@ class account_payment(models.Model):
|
||||
@api.depends('invoice_ids', 'payment_type', 'partner_type', 'partner_id')
|
||||
def _compute_destination_account_id(self):
|
||||
if self.invoice_ids:
|
||||
self.destination_account_id = self.invoice_ids[0].account_id.id
|
||||
self.destination_account_id = self.invoice_ids[0].mapped('line_ids.account_id')\
|
||||
.filtered(lambda account: account.user_type_id.type in ('receivable', 'payable'))[0]
|
||||
elif self.payment_type == 'transfer':
|
||||
if not self.company_id.transfer_account_id.id:
|
||||
raise UserError(_('There is no Transfer Account defined in the accounting settings. Please define one to be able to confirm this transfer.'))
|
||||
@@ -378,8 +386,9 @@ class account_payment(models.Model):
|
||||
@api.depends('move_line_ids.matched_debit_ids', 'move_line_ids.matched_credit_ids')
|
||||
def _compute_reconciled_invoice_ids(self):
|
||||
for record in self:
|
||||
record.reconciled_invoice_ids = (record.move_line_ids.mapped('matched_debit_ids.debit_move_id.invoice_id') |
|
||||
record.move_line_ids.mapped('matched_credit_ids.credit_move_id.invoice_id'))
|
||||
reconciled_moves = record.move_line_ids.mapped('matched_debit_ids.debit_move_id.move_id')\
|
||||
+ record.move_line_ids.mapped('matched_credit_ids.credit_move_id.move_id')
|
||||
record.reconciled_invoice_ids = reconciled_moves.filtered(lambda move: move.is_invoice())
|
||||
record.has_invoices = bool(record.reconciled_invoice_ids)
|
||||
|
||||
@api.multi
|
||||
@@ -411,16 +420,12 @@ class account_payment(models.Model):
|
||||
|
||||
@api.multi
|
||||
def button_invoices(self):
|
||||
if self.partner_type == 'supplier':
|
||||
views = [(self.env.ref('account.invoice_supplier_tree').id, 'tree'), (self.env.ref('account.invoice_supplier_form').id, 'form')]
|
||||
else:
|
||||
views = [(self.env.ref('account.invoice_tree').id, 'tree'), (self.env.ref('account.invoice_form').id, 'form')]
|
||||
return {
|
||||
'name': _('Paid Invoices'),
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'account.invoice',
|
||||
'res_model': 'account.move',
|
||||
'view_id': False,
|
||||
'views': views,
|
||||
'views': [(self.env.ref('account.view_move_tree').id, 'tree'), (self.env.ref('account.view_move_form').id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'domain': [('id', 'in', [x.id for x in self.reconciled_invoice_ids])],
|
||||
}
|
||||
@@ -454,6 +459,186 @@ class account_payment(models.Model):
|
||||
raise UserError(_('It is not allowed to delete a payment that already created a journal entry since it would create a gap in the numbering. You should create the journal entry again and cancel it thanks to a regular revert.'))
|
||||
return super(account_payment, self).unlink()
|
||||
|
||||
@api.multi
|
||||
def _prepare_payment_moves(self):
|
||||
''' Prepare the creation of journal entries (account.move) by creating a list of python dictionary to be passed
|
||||
to the 'create' method.
|
||||
|
||||
Example 1: outbound with write-off:
|
||||
|
||||
Account | Debit | Credit
|
||||
---------------------------------------------------------
|
||||
BANK | 900.0 |
|
||||
RECEIVABLE | | 1000.0
|
||||
WRITE-OFF ACCOUNT | 100.0 |
|
||||
|
||||
Example 2: internal transfer from BANK to CASH:
|
||||
|
||||
Account | Debit | Credit
|
||||
---------------------------------------------------------
|
||||
BANK | | 1000.0
|
||||
TRANSFER | 1000.0 |
|
||||
CASH | 1000.0 |
|
||||
TRANSFER | | 1000.0
|
||||
|
||||
:return: A list of Python dictionary to be passed to env['account.move'].create.
|
||||
'''
|
||||
all_move_vals = []
|
||||
for payment in self:
|
||||
company_currency = payment.company_id.currency_id
|
||||
|
||||
# Compute amounts.
|
||||
write_off_amount = payment.payment_difference_handling == 'reconcile' and -payment.payment_difference or 0.0
|
||||
if payment.payment_type in ('outbound', 'transfer'):
|
||||
counterpart_amount = payment.amount
|
||||
liquidity_line_account = payment.journal_id.default_debit_account_id
|
||||
else:
|
||||
counterpart_amount = -payment.amount
|
||||
liquidity_line_account = payment.journal_id.default_credit_account_id
|
||||
|
||||
# Manage currency.
|
||||
if payment.currency_id == company_currency:
|
||||
# Single-currency.
|
||||
balance = counterpart_amount
|
||||
write_off_balance = write_off_amount
|
||||
counterpart_amount = write_off_amount = 0.0
|
||||
currency_id = False
|
||||
else:
|
||||
# Multi-currencies.
|
||||
balance = payment.currency_id._convert(counterpart_amount, company_currency, payment.company_id, payment.payment_date)
|
||||
write_off_balance = payment.currency_id._convert(write_off_amount, company_currency, payment.company_id, payment.payment_date)
|
||||
currency_id = payment.currency_id.id
|
||||
|
||||
# Manage custom currency on journal for liquidity line.
|
||||
if payment.journal_id.currency_id and payment.currency_id != payment.journal_id.currency_id:
|
||||
# Custom currency on journal.
|
||||
liquidity_line_currency_id = payment.journal_id.currency_id.id
|
||||
liquidity_amount = company_currency._convert(
|
||||
balance, payment.journal_id.currency_id, payment.company_id, payment.payment_date)
|
||||
else:
|
||||
# Use the payment currency.
|
||||
liquidity_line_currency_id = currency_id
|
||||
liquidity_amount = counterpart_amount
|
||||
|
||||
# Compute 'name' to be used in receivable/payable line.
|
||||
rec_pay_line_name = ''
|
||||
if payment.payment_type == 'transfer':
|
||||
rec_pay_line_name = payment.name
|
||||
else:
|
||||
if payment.partner_type == 'customer':
|
||||
if payment.payment_type == 'inbound':
|
||||
rec_pay_line_name += _("Customer Payment")
|
||||
elif payment.payment_type == 'outbound':
|
||||
rec_pay_line_name += _("Customer Credit Note")
|
||||
elif payment.partner_type == 'supplier':
|
||||
if payment.payment_type == 'inbound':
|
||||
rec_pay_line_name += _("Vendor Credit Note")
|
||||
elif payment.payment_type == 'outbound':
|
||||
rec_pay_line_name += _("Vendor Payment")
|
||||
if payment.invoice_ids:
|
||||
rec_pay_line_name += ': %s' % ', '.join(payment.invoice_ids.mapped('name'))
|
||||
|
||||
# Compute 'name' to be used in liquidity line.
|
||||
if payment.payment_type == 'transfer':
|
||||
liquidity_line_name = _('Transfer to %s') % payment.destination_journal_id.name
|
||||
else:
|
||||
liquidity_line_name = payment.name
|
||||
|
||||
# ==== 'inbound' / 'outbound' ====
|
||||
|
||||
move_vals = {
|
||||
'date': payment.payment_date,
|
||||
'ref': payment.communication,
|
||||
'journal_id': payment.journal_id.id,
|
||||
'currency_id': payment.journal_id.currency_id.id or payment.company_id.currency_id.id,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'line_ids': [
|
||||
# Receivable / Payable / Transfer line.
|
||||
(0, 0, {
|
||||
'name': rec_pay_line_name,
|
||||
'amount_currency': counterpart_amount + write_off_amount,
|
||||
'currency_id': currency_id,
|
||||
'debit': balance + write_off_balance > 0.0 and balance + write_off_balance or 0.0,
|
||||
'credit': balance + write_off_balance < 0.0 and -balance - write_off_balance or 0.0,
|
||||
'date_maturity': payment.payment_date,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'account_id': payment.destination_account_id.id,
|
||||
'payment_id': payment.id,
|
||||
}),
|
||||
# Liquidity line.
|
||||
(0, 0, {
|
||||
'name': liquidity_line_name,
|
||||
'amount_currency': -liquidity_amount,
|
||||
'currency_id': liquidity_line_currency_id,
|
||||
'debit': balance < 0.0 and -balance or 0.0,
|
||||
'credit': balance > 0.0 and balance or 0.0,
|
||||
'date_maturity': payment.payment_date,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'account_id': liquidity_line_account.id,
|
||||
'payment_id': payment.id,
|
||||
}),
|
||||
],
|
||||
}
|
||||
if write_off_balance:
|
||||
# Write-off line.
|
||||
move_vals['line_ids'].append((0, 0, {
|
||||
'name': payment.writeoff_label,
|
||||
'amount_currency': -write_off_amount,
|
||||
'currency_id': currency_id,
|
||||
'debit': write_off_balance < 0.0 and -write_off_balance or 0.0,
|
||||
'credit': write_off_balance > 0.0 and write_off_balance or 0.0,
|
||||
'date_maturity': payment.payment_date,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'account_id': payment.writeoff_account_id.id,
|
||||
'payment_id': payment.id,
|
||||
}))
|
||||
|
||||
all_move_vals.append(move_vals)
|
||||
|
||||
# ==== 'transfer' ====
|
||||
if payment.payment_type == 'transfer':
|
||||
|
||||
if payment.destination_journal_id.currency_id:
|
||||
transfer_amount = payment.currency_id._convert(counterpart_amount, payment.destination_journal_id.currency_id, payment.company_id, payment.payment_date)
|
||||
else:
|
||||
transfer_amount = 0.0
|
||||
|
||||
transfer_move_vals = {
|
||||
'date': payment.payment_date,
|
||||
'ref': payment.communication,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'journal_id': payment.destination_journal_id.id,
|
||||
'line_ids': [
|
||||
# Transfer debit line.
|
||||
(0, 0, {
|
||||
'name': payment.name,
|
||||
'amount_currency': -counterpart_amount,
|
||||
'currency_id': currency_id,
|
||||
'debit': balance < 0.0 and -balance or 0.0,
|
||||
'credit': balance > 0.0 and balance or 0.0,
|
||||
'date_maturity': payment.payment_date,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'account_id': payment.company_id.transfer_account_id.id,
|
||||
'payment_id': payment.id,
|
||||
}),
|
||||
# Liquidity credit line.
|
||||
(0, 0, {
|
||||
'name': _('Transfer from %s') % payment.journal_id.name,
|
||||
'amount_currency': transfer_amount,
|
||||
'currency_id': payment.destination_journal_id.currency_id.id,
|
||||
'debit': balance > 0.0 and balance or 0.0,
|
||||
'credit': balance < 0.0 and -balance or 0.0,
|
||||
'date_maturity': payment.payment_date,
|
||||
'partner_id': payment.partner_id.id,
|
||||
'account_id': payment.destination_journal_id.default_credit_account_id.id,
|
||||
'payment_id': payment.id,
|
||||
}),
|
||||
],
|
||||
}
|
||||
|
||||
all_move_vals.append(transfer_move_vals)
|
||||
return all_move_vals
|
||||
|
||||
@api.multi
|
||||
def post(self):
|
||||
""" Create the journal items for the payment and update the payment's state to 'posted'.
|
||||
@@ -462,12 +647,13 @@ class account_payment(models.Model):
|
||||
If invoice_ids is not empty, there will be one reconcilable move line per invoice to reconcile with.
|
||||
If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
|
||||
"""
|
||||
AccountMove = self.env['account.move'].with_context(default_type='entry')
|
||||
for rec in self:
|
||||
|
||||
if rec.state != 'draft':
|
||||
raise UserError(_("Only a draft payment can be posted."))
|
||||
|
||||
if any(inv.state != 'open' for inv in rec.invoice_ids):
|
||||
if any(inv.state != 'posted' for inv in rec.invoice_ids):
|
||||
raise ValidationError(_("The payment cannot be processed because the invoice is not open!"))
|
||||
|
||||
# keep the name in case of a payment reset to draft
|
||||
@@ -486,187 +672,35 @@ class account_payment(models.Model):
|
||||
sequence_code = 'account.payment.supplier.refund'
|
||||
if rec.payment_type == 'outbound':
|
||||
sequence_code = 'account.payment.supplier.invoice'
|
||||
rec.name = self.env['ir.sequence'].with_context(ir_sequence_date=rec.payment_date).next_by_code(sequence_code)
|
||||
rec.name = self.env['ir.sequence'].next_by_code(sequence_code, sequence_date=rec.payment_date)
|
||||
if not rec.name and rec.payment_type != 'transfer':
|
||||
raise UserError(_("You have to define a sequence for %s in your company.") % (sequence_code,))
|
||||
|
||||
# Create the journal entry
|
||||
amount = rec.amount * (rec.payment_type in ('outbound', 'transfer') and 1 or -1)
|
||||
move = rec._create_payment_entry(amount)
|
||||
moves = AccountMove.create(rec._prepare_payment_moves())
|
||||
moves.filtered(lambda move: not move.journal_id.post_at_bank_rec).post()
|
||||
|
||||
# In case of a transfer, the first journal entry created debited the source liquidity account and credited
|
||||
# the transfer account. Now we debit the transfer account and credit the destination liquidity account.
|
||||
if rec.payment_type == 'transfer':
|
||||
transfer_credit_aml = move.line_ids.filtered(lambda r: r.account_id == rec.company_id.transfer_account_id)
|
||||
transfer_debit_aml = rec._create_transfer_entry(amount)
|
||||
(transfer_credit_aml + transfer_debit_aml).reconcile()
|
||||
# Update the state / move before performing any reconciliation.
|
||||
rec.write({'state': 'posted', 'move_name': moves[0].name})
|
||||
|
||||
if rec.payment_type in ('inbound', 'outbound'):
|
||||
# ==== 'inbound' / 'outbound' ====
|
||||
if rec.invoice_ids:
|
||||
(moves[0] + rec.invoice_ids).line_ids \
|
||||
.filtered(lambda line: not line.reconciled and line.account_id == rec.destination_account_id)\
|
||||
.reconcile()
|
||||
elif rec.payment_type == 'transfer':
|
||||
# ==== 'transfer' ====
|
||||
moves.mapped('line_ids')\
|
||||
.filtered(lambda line: line.account_id == rec.company_id.transfer_account_id)\
|
||||
.reconcile()
|
||||
|
||||
rec.write({'state': 'posted', 'move_name': move.name})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def action_draft(self):
|
||||
return self.write({'state': 'draft'})
|
||||
|
||||
def _create_payment_entry(self, amount):
|
||||
""" Create a journal entry corresponding to a payment, if the payment references invoice(s) they are reconciled.
|
||||
Return the journal entry.
|
||||
"""
|
||||
aml_obj = self.env['account.move.line'].with_context(check_move_validity=False)
|
||||
debit, credit, amount_currency, currency_id = aml_obj.with_context(date=self.payment_date)._compute_amount_fields(amount, self.currency_id, self.company_id.currency_id)
|
||||
|
||||
move = self.env['account.move'].create(self._get_move_vals())
|
||||
|
||||
#Write line corresponding to invoice payment
|
||||
counterpart_aml_dict = self._get_shared_move_line_vals(debit, credit, amount_currency, move.id, False)
|
||||
counterpart_aml_dict.update(self._get_counterpart_move_line_vals(self.invoice_ids))
|
||||
counterpart_aml_dict.update({'currency_id': currency_id})
|
||||
counterpart_aml = aml_obj.create(counterpart_aml_dict)
|
||||
|
||||
#Reconcile with the invoices
|
||||
if self.payment_difference_handling == 'reconcile' and self.payment_difference:
|
||||
writeoff_line = self._get_shared_move_line_vals(0, 0, 0, move.id, False)
|
||||
debit_wo, credit_wo, amount_currency_wo, currency_id = aml_obj.with_context(date=self.payment_date)._compute_amount_fields(self.payment_difference, self.currency_id, self.company_id.currency_id)
|
||||
writeoff_line['name'] = self.writeoff_label
|
||||
writeoff_line['account_id'] = self.writeoff_account_id.id
|
||||
writeoff_line['debit'] = debit_wo
|
||||
writeoff_line['credit'] = credit_wo
|
||||
writeoff_line['amount_currency'] = amount_currency_wo
|
||||
writeoff_line['currency_id'] = currency_id
|
||||
writeoff_line = aml_obj.create(writeoff_line)
|
||||
if counterpart_aml['debit'] or (writeoff_line['credit'] and not counterpart_aml['credit']):
|
||||
counterpart_aml['debit'] += credit_wo - debit_wo
|
||||
if counterpart_aml['credit'] or (writeoff_line['debit'] and not counterpart_aml['debit']):
|
||||
counterpart_aml['credit'] += debit_wo - credit_wo
|
||||
counterpart_aml['amount_currency'] -= amount_currency_wo
|
||||
|
||||
#Write counterpart lines
|
||||
if not self.currency_id.is_zero(self.amount):
|
||||
if not self.currency_id != self.company_id.currency_id:
|
||||
amount_currency = 0
|
||||
liquidity_aml_dict = self._get_shared_move_line_vals(credit, debit, -amount_currency, move.id, False)
|
||||
liquidity_aml_dict.update(self._get_liquidity_move_line_vals(-amount))
|
||||
aml_obj.create(liquidity_aml_dict)
|
||||
|
||||
#validate the payment
|
||||
if not self.journal_id.post_at_bank_rec:
|
||||
move.post()
|
||||
|
||||
#reconcile the invoice receivable/payable line(s) with the payment
|
||||
if self.invoice_ids:
|
||||
self.invoice_ids.register_payment(counterpart_aml)
|
||||
|
||||
return move
|
||||
|
||||
def _create_transfer_entry(self, amount):
|
||||
""" Create the journal entry corresponding to the 'incoming money' part of an internal transfer, return the reconcilable move line
|
||||
"""
|
||||
aml_obj = self.env['account.move.line'].with_context(check_move_validity=False)
|
||||
debit, credit, amount_currency, dummy = aml_obj.with_context(date=self.payment_date)._compute_amount_fields(amount, self.currency_id, self.company_id.currency_id)
|
||||
amount_currency = self.destination_journal_id.currency_id and self.currency_id._convert(amount, self.destination_journal_id.currency_id, self.company_id, self.payment_date or fields.Date.today()) or 0
|
||||
|
||||
dst_move = self.env['account.move'].create(self._get_move_vals(self.destination_journal_id))
|
||||
|
||||
dst_liquidity_aml_dict = self._get_shared_move_line_vals(debit, credit, amount_currency, dst_move.id)
|
||||
dst_liquidity_aml_dict.update({
|
||||
'name': _('Transfer from %s') % self.journal_id.name,
|
||||
'account_id': self.destination_journal_id.default_credit_account_id.id,
|
||||
'currency_id': self.destination_journal_id.currency_id.id,
|
||||
'journal_id': self.destination_journal_id.id})
|
||||
aml_obj.create(dst_liquidity_aml_dict)
|
||||
|
||||
transfer_debit_aml_dict = self._get_shared_move_line_vals(credit, debit, 0, dst_move.id)
|
||||
transfer_debit_aml_dict.update({
|
||||
'name': self.name,
|
||||
'account_id': self.company_id.transfer_account_id.id,
|
||||
'journal_id': self.destination_journal_id.id})
|
||||
if self.currency_id != self.company_id.currency_id:
|
||||
transfer_debit_aml_dict.update({
|
||||
'currency_id': self.currency_id.id,
|
||||
'amount_currency': -self.amount,
|
||||
})
|
||||
transfer_debit_aml = aml_obj.create(transfer_debit_aml_dict)
|
||||
if not self.destination_journal_id.post_at_bank_rec:
|
||||
dst_move.post()
|
||||
return transfer_debit_aml
|
||||
|
||||
def _get_move_vals(self, journal=None):
|
||||
""" Return dict to create the payment move
|
||||
"""
|
||||
journal = journal or self.journal_id
|
||||
move_vals = {
|
||||
'date': self.payment_date,
|
||||
'ref': self.communication or '',
|
||||
'company_id': self.company_id.id,
|
||||
'journal_id': journal.id,
|
||||
}
|
||||
if self.move_name:
|
||||
move_vals['name'] = self.move_name
|
||||
return move_vals
|
||||
|
||||
def _get_shared_move_line_vals(self, debit, credit, amount_currency, move_id, invoice_id=False):
|
||||
""" Returns values common to both move lines (except for debit, credit and amount_currency which are reversed)
|
||||
"""
|
||||
return {
|
||||
'partner_id': self.payment_type in ('inbound', 'outbound') and self.env['res.partner']._find_accounting_partner(self.partner_id).id or False,
|
||||
'invoice_id': invoice_id and invoice_id.id or False,
|
||||
'move_id': move_id,
|
||||
'debit': debit,
|
||||
'credit': credit,
|
||||
'amount_currency': amount_currency or False,
|
||||
'payment_id': self.id,
|
||||
'journal_id': self.journal_id.id,
|
||||
}
|
||||
|
||||
def _get_counterpart_move_line_vals(self, invoice=False):
|
||||
if self.payment_type == 'transfer':
|
||||
name = self.name
|
||||
else:
|
||||
name = ''
|
||||
if self.partner_type == 'customer':
|
||||
if self.payment_type == 'inbound':
|
||||
name += _("Customer Payment")
|
||||
elif self.payment_type == 'outbound':
|
||||
name += _("Customer Credit Note")
|
||||
elif self.partner_type == 'supplier':
|
||||
if self.payment_type == 'inbound':
|
||||
name += _("Vendor Credit Note")
|
||||
elif self.payment_type == 'outbound':
|
||||
name += _("Vendor Payment")
|
||||
if invoice:
|
||||
name += ': '
|
||||
for inv in invoice:
|
||||
if inv.move_id:
|
||||
name += inv.number + ', '
|
||||
name = name[:len(name)-2]
|
||||
return {
|
||||
'name': name,
|
||||
'account_id': self.destination_account_id.id,
|
||||
'currency_id': self.currency_id != self.company_id.currency_id and self.currency_id.id or False,
|
||||
}
|
||||
|
||||
def _get_liquidity_move_line_vals(self, amount):
|
||||
name = self.name
|
||||
if self.payment_type == 'transfer':
|
||||
name = _('Transfer to %s') % self.destination_journal_id.name
|
||||
vals = {
|
||||
'name': name,
|
||||
'account_id': self.payment_type in ('outbound', 'transfer') and self.journal_id.default_debit_account_id.id or self.journal_id.default_credit_account_id.id,
|
||||
'journal_id': self.journal_id.id,
|
||||
'currency_id': self.currency_id != self.company_id.currency_id and self.currency_id.id or False,
|
||||
}
|
||||
|
||||
# If the journal has a currency specified, the journal item need to be expressed in this currency
|
||||
if self.journal_id.currency_id and self.currency_id != self.journal_id.currency_id:
|
||||
amount = self.currency_id._convert(amount, self.journal_id.currency_id, self.company_id, self.payment_date or fields.Date.today())
|
||||
debit, credit, amount_currency, dummy = self.env['account.move.line'].with_context(date=self.payment_date)._compute_amount_fields(amount, self.journal_id.currency_id, self.company_id.currency_id)
|
||||
vals.update({
|
||||
'amount_currency': amount_currency,
|
||||
'currency_id': self.journal_id.currency_id.id,
|
||||
})
|
||||
|
||||
return vals
|
||||
|
||||
@api.multi
|
||||
def _get_invoice_payment_amount(self, inv):
|
||||
"""
|
||||
Computes the amount covered by the current payment in the given invoice.
|
||||
@@ -677,11 +711,10 @@ class account_payment(models.Model):
|
||||
self.ensure_one()
|
||||
return sum([
|
||||
data['amount']
|
||||
for data in inv._get_payments_vals()
|
||||
for data in inv._get_reconciled_info_JSON_values()
|
||||
if data['account_payment_id'] == self.id
|
||||
])
|
||||
|
||||
|
||||
class payment_register(models.TransientModel):
|
||||
_name = 'account.payment.register'
|
||||
_description = 'Register Payment'
|
||||
@@ -694,21 +727,20 @@ class payment_register(models.TransientModel):
|
||||
"Check: Pay bill by check and print it from Odoo.\n"
|
||||
"Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\n"
|
||||
"SEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ")
|
||||
invoice_ids = fields.Many2many('account.invoice', 'account_invoice_payment_rel_transient', 'payment_id', 'invoice_id', string="Invoices", copy=False, readonly=True)
|
||||
invoice_ids = fields.Many2many('account.move', 'account_invoice_payment_rel_transient', 'payment_id', 'invoice_id', string="Invoices", copy=False, readonly=True)
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
rec = super(payment_register, self).default_get(fields)
|
||||
active_ids = self._context.get('active_ids')
|
||||
active_model = self._context.get('active_model')
|
||||
invoices = self.env['account.invoice'].browse(active_ids)
|
||||
invoices = self.env['account.move'].browse(active_ids)
|
||||
|
||||
# Check all invoices are open
|
||||
if any(invoice.state != 'open' for invoice in invoices):
|
||||
if any(invoice.state != 'posted' or invoice.invoice_payment_state != 'not_paid' or not invoice.is_invoice() for invoice in invoices):
|
||||
raise UserError(_("You can only register payments for open invoices"))
|
||||
# Check all invoices are inbound or all invoices are outbound
|
||||
outbound_list = [invoice.type in ('in_invoice', 'out_refund') for invoice in invoices]
|
||||
first_outbound = invoices[0].type in ('in_invoice', 'out_refund')
|
||||
outbound_list = [invoice.is_outbound() for invoice in invoices]
|
||||
first_outbound = invoices[0].is_outbound()
|
||||
if any(x != first_outbound for x in outbound_list):
|
||||
raise UserError(_("You can only register at the same time for payment that are all inbound or all outbound"))
|
||||
if 'invoice_ids' not in rec:
|
||||
@@ -716,7 +748,7 @@ class payment_register(models.TransientModel):
|
||||
if 'journal_id' not in rec:
|
||||
rec['journal_id'] = self.env['account.journal'].search([('company_id', '=', self.env.company.id), ('type', 'in', ('bank', 'cash'))], limit=1).id
|
||||
if 'payment_method_id' not in rec:
|
||||
if invoices[0].type in ('out_invoice', 'in_refund'):
|
||||
if invoices[0].is_inbound():
|
||||
domain = [('payment_type', '=', 'inbound')]
|
||||
else:
|
||||
domain = [('payment_type', '=', 'outbound')]
|
||||
@@ -726,9 +758,9 @@ class payment_register(models.TransientModel):
|
||||
@api.onchange('journal_id', 'invoice_ids')
|
||||
def _onchange_journal(self):
|
||||
active_ids = self._context.get('active_ids')
|
||||
invoices = self.env['account.invoice'].browse(active_ids)
|
||||
invoices = self.env['account.move'].browse(active_ids)
|
||||
if self.journal_id and invoices:
|
||||
if invoices[0].type in ('out_invoice', 'in_refund'):
|
||||
if invoices[0].is_inbound():
|
||||
domain = [('payment_type', '=', 'inbound'), ('id', 'in', self.journal_id.inbound_payment_method_ids.ids)]
|
||||
else:
|
||||
domain = [('payment_type', '=', 'outbound'), ('id', 'in', self.journal_id.outbound_payment_method_ids.ids)]
|
||||
@@ -743,19 +775,19 @@ class payment_register(models.TransientModel):
|
||||
:param invoice: A single invoice/bill to pay.
|
||||
:return: The payment values as a dictionary.
|
||||
'''
|
||||
amount = self.env['account.payment']._compute_payment_amount(invoices=invoice, currency=invoice.currency_id)
|
||||
amount = self.env['account.payment']._compute_payment_amount(invoice, invoice.currency_id, self.journal_id, self.payment_date)
|
||||
values = {
|
||||
'journal_id': self.journal_id.id,
|
||||
'payment_method_id': self.payment_method_id.id,
|
||||
'payment_date': self.payment_date,
|
||||
'communication': invoice.reference or invoice.number,
|
||||
'communication': invoice.ref or invoice.name,
|
||||
'invoice_ids': [(6, 0, invoice.ids)],
|
||||
'payment_type': ('inbound' if amount > 0 else 'outbound'),
|
||||
'amount': abs(amount),
|
||||
'currency_id': invoice.currency_id.id,
|
||||
'partner_id': invoice.commercial_partner_id.id,
|
||||
'partner_type': MAP_INVOICE_TYPE_PARTNER_TYPE[invoice.type],
|
||||
'partner_bank_account_id': invoice.partner_bank_id.id,
|
||||
'partner_bank_account_id': invoice.invoice_partner_bank_id.id,
|
||||
}
|
||||
return values
|
||||
|
||||
|
||||
@@ -33,15 +33,15 @@ class AccountPaymentTerm(models.Model):
|
||||
raise ValidationError(_('A Payment Term should have only one line of type Balance.'))
|
||||
|
||||
@api.multi
|
||||
def compute(self, value, date_ref=False):
|
||||
def compute(self, value, date_ref=False, currency=None):
|
||||
self.ensure_one()
|
||||
date_ref = date_ref or fields.Date.today()
|
||||
amount = value
|
||||
sign = value < 0 and -1 or 1
|
||||
result = []
|
||||
if self.env.context.get('currency_id'):
|
||||
if not currency and self.env.context.get('currency_id'):
|
||||
currency = self.env['res.currency'].browse(self.env.context['currency_id'])
|
||||
else:
|
||||
elif not currency:
|
||||
currency = self.env.company.currency_id
|
||||
for line in self.line_ids:
|
||||
if line.value == 'fixed':
|
||||
@@ -50,19 +50,18 @@ class AccountPaymentTerm(models.Model):
|
||||
amt = currency.round(value * (line.value_amount / 100.0))
|
||||
elif line.value == 'balance':
|
||||
amt = currency.round(amount)
|
||||
if amt:
|
||||
next_date = fields.Date.from_string(date_ref)
|
||||
if line.option == 'day_after_invoice_date':
|
||||
next_date += relativedelta(days=line.days)
|
||||
if line.day_of_the_month > 0:
|
||||
months_delta = (line.day_of_the_month < next_date.day) and 1 or 0
|
||||
next_date += relativedelta(day=line.day_of_the_month, months=months_delta)
|
||||
elif line.option == 'day_following_month':
|
||||
next_date += relativedelta(day=line.days, months=1)
|
||||
elif line.option == 'day_current_month':
|
||||
next_date += relativedelta(day=line.days, months=0)
|
||||
result.append((fields.Date.to_string(next_date), amt))
|
||||
amount -= amt
|
||||
next_date = fields.Date.from_string(date_ref)
|
||||
if line.option == 'day_after_invoice_date':
|
||||
next_date += relativedelta(days=line.days)
|
||||
if line.day_of_the_month > 0:
|
||||
months_delta = (line.day_of_the_month < next_date.day) and 1 or 0
|
||||
next_date += relativedelta(day=line.day_of_the_month, months=months_delta)
|
||||
elif line.option == 'day_following_month':
|
||||
next_date += relativedelta(day=line.days, months=1)
|
||||
elif line.option == 'day_current_month':
|
||||
next_date += relativedelta(day=line.days, months=0)
|
||||
result.append((fields.Date.to_string(next_date), amt))
|
||||
amount -= amt
|
||||
amount = sum(amt for _, amt in result)
|
||||
dist = currency.round(value - amount)
|
||||
if dist:
|
||||
@@ -73,7 +72,7 @@ class AccountPaymentTerm(models.Model):
|
||||
@api.multi
|
||||
def unlink(self):
|
||||
for terms in self:
|
||||
if self.env['account.invoice'].search([('payment_term_id', 'in', terms.ids)]):
|
||||
if self.env['account.move'].search([('payment_term_id', 'in', terms.ids)]):
|
||||
raise UserError(_('You can not delete payment terms as other records still reference it. However, you can archive it.'))
|
||||
property_recs = self.env['ir.property'].search([('value_reference', 'in', ['account.payment.term,%s'%payment_term.id for payment_term in terms])])
|
||||
property_recs.unlink()
|
||||
|
||||
@@ -102,18 +102,25 @@ class AccountReconcileModel(models.Model):
|
||||
second_analytic_account_id = fields.Many2one('account.analytic.account', string='Second Analytic Account', ondelete='set null')
|
||||
second_analytic_tag_ids = fields.Many2many('account.analytic.tag', string='Second Analytic Tags',
|
||||
relation='account_reconcile_model_second_analytic_tag_rel')
|
||||
|
||||
|
||||
number_entries = fields.Integer(string='Number of entries related to this model', compute='_compute_number_entries')
|
||||
|
||||
@api.multi
|
||||
def action_reconcile_stat(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref('account.action_move_journal_line').read()[0]
|
||||
self._cr.execute('''
|
||||
SELECT ARRAY_AGG(DISTINCT move_id)
|
||||
FROM account_move_line
|
||||
WHERE reconcile_model_id = %s
|
||||
''', [self.id])
|
||||
action.update({
|
||||
'context': {'search_default_reconcile_model_id': self.name},
|
||||
'context': {},
|
||||
'domain': [('id', 'in', self._cr.fetchone()[0])],
|
||||
'help': """<p class="o_view_nocontent_empty_folder">{}</p>""".format(_('No move from this reconciliation model')),
|
||||
})
|
||||
return action
|
||||
|
||||
|
||||
@api.multi
|
||||
def _compute_number_entries(self):
|
||||
data = self.env['account.move.line'].read_group([('reconcile_model_id', 'in', self.ids)], ['reconcile_model_ids'], 'reconcile_model_id')
|
||||
@@ -438,10 +445,11 @@ class AccountReconcileModel(models.Model):
|
||||
LEFT JOIN res_company company ON company.id = st_line.company_id
|
||||
LEFT JOIN partners_table line_partner ON line_partner.line_id = st_line.id
|
||||
, account_move_line aml
|
||||
LEFT JOIN account_move move ON move.id = aml.move_id
|
||||
LEFT JOIN account_move move ON move.id = aml.move_id AND move.state = 'posted'
|
||||
LEFT JOIN account_account account ON account.id = aml.account_id
|
||||
WHERE st_line.id IN %s
|
||||
AND aml.company_id = st_line.company_id
|
||||
AND move.state = 'posted'
|
||||
AND (
|
||||
-- the field match_partner of the rule might enforce the second part of
|
||||
-- the OR condition, later in _apply_conditions()
|
||||
@@ -456,7 +464,7 @@ class AccountReconcileModel(models.Model):
|
||||
|
||||
-- if there is a partner, propose all aml of the partner, otherwise propose only the ones
|
||||
-- matching the statement line communication
|
||||
AND
|
||||
AND
|
||||
(
|
||||
(
|
||||
line_partner.partner_id != 0
|
||||
|
||||
@@ -264,7 +264,7 @@ class AccountChartTemplate(models.Model):
|
||||
the provided company (meaning hence that its chart of accounts cannot
|
||||
be changed anymore).
|
||||
"""
|
||||
model_to_check = ['account.move.line', 'account.invoice', 'account.payment', 'account.bank.statement']
|
||||
model_to_check = ['account.move', 'account.payment', 'account.bank.statement']
|
||||
for model in model_to_check:
|
||||
if len(self.env[model].search([('company_id', '=', company_id.id)])) > 0:
|
||||
return True
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
from datetime import timedelta, datetime
|
||||
import calendar
|
||||
import time
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import fields, models, api, _
|
||||
@@ -10,6 +9,7 @@ from odoo.exceptions import ValidationError, UserError, RedirectWarning
|
||||
from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT
|
||||
from odoo.tools.float_utils import float_round, float_is_zero
|
||||
from odoo.tools import date_utils
|
||||
from odoo.tests.common import Form
|
||||
|
||||
|
||||
MONTH_SELECTION = [
|
||||
@@ -102,7 +102,7 @@ Best Regards,'''))
|
||||
account_dashboard_onboarding_state = fields.Selection([('not_done', "Not done"), ('just_done', "Just done"), ('done', "Done"), ('closed', "Closed")], string="State of the account dashboard onboarding panel", default='not_done')
|
||||
invoice_terms = fields.Text(string='Default Terms and Conditions', translate=True)
|
||||
|
||||
@api.constrains('account_opening_date', 'fiscalyear_last_day', 'fiscalyear_last_month')
|
||||
@api.constrains('account_opening_move_id', 'fiscalyear_last_day', 'fiscalyear_last_month')
|
||||
def _check_fiscalyear_last_day(self):
|
||||
# if the user explicitly chooses the 29th of February we allow it:
|
||||
# there is no "fiscalyear_last_year" so we do not know his intentions.
|
||||
@@ -483,7 +483,7 @@ Best Regards,'''))
|
||||
|
||||
company_id = self.env.company.id
|
||||
# try to find an existing sample invoice
|
||||
sample_invoice = self.env['account.invoice'].search(
|
||||
sample_invoice = self.env['account.move'].search(
|
||||
[('company_id', '=', company_id),
|
||||
('partner_id', '=', partner.id)], limit=1)
|
||||
|
||||
@@ -498,25 +498,23 @@ Best Regards,'''))
|
||||
"\nPlease go to Configuration > Journals.")
|
||||
raise RedirectWarning(msg, action.id, _("Go to the journal configuration"))
|
||||
|
||||
sample_invoice = self.env['account.invoice'].create({
|
||||
'name': _("Sample invoice"),
|
||||
'journal_id': journal.id,
|
||||
sample_invoice = self.env['account.move'].with_context(default_type='out_invoice', default_journal_id=journal.id).create({
|
||||
'invoice_payment_ref': _('Sample invoice'),
|
||||
'partner_id': partner.id,
|
||||
})
|
||||
# sample invoice lines
|
||||
self.env['account.invoice.line'].create({
|
||||
'name': _("Sample invoice line name"),
|
||||
'invoice_id': sample_invoice.id,
|
||||
'account_id': account.id,
|
||||
'price_unit': 199.99,
|
||||
'quantity': 2,
|
||||
})
|
||||
self.env['account.invoice.line'].create({
|
||||
'name': _("Sample invoice line name 2"),
|
||||
'invoice_id': sample_invoice.id,
|
||||
'account_id': account.id,
|
||||
'price_unit': 25,
|
||||
'quantity': 1,
|
||||
'invoice_line_ids': [
|
||||
(0, 0, {
|
||||
'name': _('Sample invoice line name'),
|
||||
'account_id': account.id,
|
||||
'quantity': 2,
|
||||
'price_unit': 199.99,
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': _('Sample invoice line name 2'),
|
||||
'account_id': account.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 25.0,
|
||||
}),
|
||||
],
|
||||
})
|
||||
return sample_invoice
|
||||
|
||||
@@ -531,7 +529,7 @@ Best Regards,'''))
|
||||
'default_res_id': sample_invoice.id,
|
||||
'default_use_template': bool(template),
|
||||
'default_template_id': template and template.id or False,
|
||||
'default_model': 'account.invoice',
|
||||
'default_model': 'account.move',
|
||||
'default_composition_mode': 'comment',
|
||||
'mark_invoice_as_sent': True,
|
||||
'custom_layout': 'mail.mail_notification_borders',
|
||||
|
||||
@@ -16,14 +16,18 @@ class Digest(models.Model):
|
||||
raise AccessError(_("Do not have access, skip this data for user's digest email"))
|
||||
for record in self:
|
||||
start, end, company = record._get_kpi_compute_parameters()
|
||||
account_moves = self.env['account.move'].read_group([
|
||||
('journal_id.type', '=', 'sale'),
|
||||
('company_id', '=', company.id),
|
||||
('date', '>=', start),
|
||||
('date', '<', end)], ['journal_id', 'amount'], ['journal_id'])
|
||||
record.kpi_account_total_revenue_value = sum([account_move['amount'] for account_move in account_moves])
|
||||
self._cr.execute('''
|
||||
SELECT SUM(line.debit)
|
||||
FROM account_move_line line
|
||||
JOIN account_move move ON move.id = line.move_id
|
||||
JOIN account_journal journal ON journal.id = move.journal_id
|
||||
WHERE line.company_id = %s AND line.date >= %s AND line.date < %s
|
||||
AND journal.type = 'sale'
|
||||
''', [company.id, start, end])
|
||||
query_res = self._cr.fetchone()
|
||||
record.kpi_account_total_revenue_value = query_res and query_res[0] or 0.0
|
||||
|
||||
def compute_kpis_actions(self, company, user):
|
||||
res = super(Digest, self).compute_kpis_actions(company, user)
|
||||
res['kpi_account_total_revenue'] = 'account.action_invoice_tree1&menu_id=%s' % self.env.ref('account.menu_finance').id
|
||||
res['kpi_account_total_revenue'] = 'account.action_move_out_invoice_type&menu_id=%s' % self.env.ref('account.menu_finance').id
|
||||
return res
|
||||
|
||||
@@ -209,7 +209,7 @@ class ResPartner(models.Model):
|
||||
if where_clause:
|
||||
where_clause = 'AND ' + where_clause
|
||||
self._cr.execute("""SELECT account_move_line.partner_id, act.type, SUM(account_move_line.amount_residual)
|
||||
FROM account_move_line
|
||||
FROM """ + tables + """
|
||||
LEFT JOIN account_account a ON (account_move_line.account_id=a.id)
|
||||
LEFT JOIN account_account_type act ON (a.user_type_id=act.id)
|
||||
WHERE act.type IN ('receivable','payable')
|
||||
@@ -286,7 +286,7 @@ class ResPartner(models.Model):
|
||||
|
||||
# price_total is in the company currency
|
||||
query = """
|
||||
SELECT SUM(price_total) as total, partner_id
|
||||
SELECT SUM(price_subtotal) as total, partner_id
|
||||
FROM account_invoice_report account_invoice_report
|
||||
WHERE %s
|
||||
GROUP BY partner_id
|
||||
@@ -410,7 +410,7 @@ class ResPartner(models.Model):
|
||||
help='Last time the invoices & payments matching was performed for this partner. '
|
||||
'It is set either if there\'s not at least an unreconciled debit and an unreconciled credit '
|
||||
'or if you click the "Done" button.')
|
||||
invoice_ids = fields.One2many('account.invoice', 'partner_id', string='Invoices', readonly=True, copy=False)
|
||||
invoice_ids = fields.One2many('account.move', 'partner_id', string='Invoices', readonly=True, copy=False)
|
||||
contract_ids = fields.One2many('account.analytic.account', 'partner_id', string='Partner Contracts', readonly=True)
|
||||
bank_account_count = fields.Integer(compute='_compute_bank_count', string="Bank")
|
||||
trust = fields.Selection([('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')], string='Degree of trust you have in this debtor', default='normal', company_dependent=True)
|
||||
@@ -437,15 +437,17 @@ class ResPartner(models.Model):
|
||||
@api.multi
|
||||
def action_view_partner_invoices(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref('account.action_invoice_refund_out_tree').read()[0]
|
||||
action['domain'] = [('type','in', ['out_invoice', 'out_refund']), ('state', '!=', 'cancel')]
|
||||
action['domain'].append(('partner_id', 'child_of', self.id))
|
||||
action = self.env.ref('account.action_move_out_invoice_type').read()[0]
|
||||
action['domain'] = [
|
||||
('type', 'in', ('out_invoice', 'out_refund')),
|
||||
('type', '=', 'posted'),
|
||||
('partner_id', 'child_of', self.id),
|
||||
]
|
||||
action['context'] = {'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale', 'search_default_unpaid': 1}
|
||||
return action
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _onchange_company_id(self):
|
||||
company = self.env['res.company']
|
||||
if self.company_id:
|
||||
company = self.company_id
|
||||
else:
|
||||
@@ -456,10 +458,9 @@ class ResPartner(models.Model):
|
||||
can_edit_vat = super(ResPartner, self).can_edit_vat()
|
||||
if not can_edit_vat:
|
||||
return can_edit_vat
|
||||
Invoice = self.env['account.invoice']
|
||||
has_invoice = Invoice.search([
|
||||
has_invoice = self.env['account.move'].search([
|
||||
('type', 'in', ['out_invoice', 'out_refund']),
|
||||
('partner_id', 'child_of', self.commercial_partner_id.id),
|
||||
('state', 'not in', ['draft', 'cancel'])
|
||||
('state', '=', 'posted')
|
||||
], limit=1)
|
||||
return can_edit_vat and not (bool(has_invoice))
|
||||
|
||||
@@ -55,31 +55,3 @@ class ProductTemplate(models.Model):
|
||||
if not fiscal_pos:
|
||||
fiscal_pos = self.env['account.fiscal.position']
|
||||
return fiscal_pos.map_accounts(accounts)
|
||||
|
||||
class ProductProduct(models.Model):
|
||||
_inherit = "product.product"
|
||||
|
||||
@api.model
|
||||
def _convert_prepared_anglosaxon_line(self, line, partner):
|
||||
return {
|
||||
'date_maturity': line.get('date_maturity', False),
|
||||
'partner_id': partner,
|
||||
'name': line['name'],
|
||||
'debit': line['price'] > 0 and line['price'],
|
||||
'credit': line['price'] < 0 and -line['price'],
|
||||
'account_id': line['account_id'],
|
||||
'analytic_line_ids': line.get('analytic_line_ids', []),
|
||||
'amount_currency': line['price'] > 0 and abs(line.get('amount_currency', False)) or -abs(line.get('amount_currency', False)),
|
||||
'currency_id': line.get('currency_id', False),
|
||||
'quantity': line.get('quantity', 1.00),
|
||||
'product_id': line.get('product_id', False),
|
||||
'product_uom_id': line.get('uom_id', False),
|
||||
'analytic_account_id': line.get('account_analytic_id', False),
|
||||
'invoice_id': line.get('invoice_id', False),
|
||||
'tax_ids': line.get('tax_ids', False),
|
||||
'tax_line_id': line.get('tax_line_id', False),
|
||||
'analytic_tag_ids': line.get('analytic_tag_ids', False),
|
||||
'tax_repartition_line_id': line.get('tax_repartition_line_id'),
|
||||
'tag_ids': line.get('tag_ids'),
|
||||
'tax_base_amount': line.get('tax_base_amount'),
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ class AccountReconciliation(models.AbstractModel):
|
||||
"""
|
||||
if not bank_statement_line_ids:
|
||||
return {}
|
||||
edition_mode = self._context.get('edition_mode')
|
||||
suspense_moves_mode = self._context.get('suspense_moves_mode')
|
||||
bank_statements = self.env['account.bank.statement.line'].browse(bank_statement_line_ids).mapped('statement_id')
|
||||
|
||||
search_sql = '''
|
||||
@@ -220,7 +220,7 @@ class AccountReconciliation(models.AbstractModel):
|
||||
{srch}
|
||||
GROUP BY line.id
|
||||
'''.format(
|
||||
cond=not edition_mode and "AND NOT EXISTS (SELECT 1 from account_move_line aml WHERE aml.statement_line_id = line.id)" or "",
|
||||
cond=not suspense_moves_mode and "AND NOT EXISTS (SELECT 1 from account_move_line aml WHERE aml.statement_line_id = line.id)" or "",
|
||||
srch=search_str and search_sql or "",
|
||||
)
|
||||
self.env.cr.execute(query, {'ids':tuple(bank_statement_line_ids), 'search_str':search_str})
|
||||
@@ -503,7 +503,7 @@ class AccountReconciliation(models.AbstractModel):
|
||||
AccountMoveLine = self.env['account.move.line']
|
||||
|
||||
#Always exclude the journal items that have been marked as 'to be checked' in a former bank statement reconciliation
|
||||
to_check_excluded = AccountMoveLine.search(AccountMoveLine._get_domain_for_edition_mode()).ids
|
||||
to_check_excluded = AccountMoveLine.search(AccountMoveLine._get_suspense_moves_domain()).ids
|
||||
excluded_ids.extend(to_check_excluded)
|
||||
|
||||
domain_reconciliation = [
|
||||
|
||||
@@ -8,46 +8,19 @@ class AccountInvoiceReport(models.Model):
|
||||
_name = "account.invoice.report"
|
||||
_description = "Invoices Statistics"
|
||||
_auto = False
|
||||
_rec_name = 'date'
|
||||
_rec_name = 'invoice_date'
|
||||
_order = 'invoice_date desc'
|
||||
|
||||
@api.multi
|
||||
@api.depends('currency_id', 'date', 'price_total', 'price_average', 'residual')
|
||||
def _compute_amounts_in_user_currency(self):
|
||||
"""Compute the amounts in the currency of the user
|
||||
"""
|
||||
user_currency_id = self.env.company.currency_id
|
||||
currency_rate_id = self.env['res.currency.rate'].search([
|
||||
('rate', '=', 1),
|
||||
'|', ('company_id', '=', self.env.company.id), ('company_id', '=', False)], limit=1)
|
||||
base_currency_id = currency_rate_id.currency_id
|
||||
for record in self:
|
||||
date = record.date or fields.Date.today()
|
||||
company = record.company_id
|
||||
record.user_currency_price_total = base_currency_id._convert(record.price_total, user_currency_id, company, date)
|
||||
record.user_currency_price_average = base_currency_id._convert(record.price_average, user_currency_id, company, date)
|
||||
record.user_currency_residual = base_currency_id._convert(record.residual, user_currency_id, company, date)
|
||||
|
||||
number = fields.Char('Invoice #', readonly=True)
|
||||
date = fields.Date(readonly=True, string="Invoice Date")
|
||||
product_id = fields.Many2one('product.product', string='Product', readonly=True)
|
||||
product_qty = fields.Float(string='Product Quantity', readonly=True)
|
||||
uom_name = fields.Char(string='Reference Unit of Measure', readonly=True)
|
||||
payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms', oldname='payment_term', readonly=True)
|
||||
fiscal_position_id = fields.Many2one('account.fiscal.position', oldname='fiscal_position', string='Fiscal Position', readonly=True)
|
||||
currency_id = fields.Many2one('res.currency', string='Currency', readonly=True)
|
||||
categ_id = fields.Many2one('product.category', string='Product Category', readonly=True)
|
||||
# ==== Invoice fields ====
|
||||
move_id = fields.Many2one('account.move', readonly=True)
|
||||
name = fields.Char('Invoice #', readonly=True)
|
||||
journal_id = fields.Many2one('account.journal', string='Journal', readonly=True)
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True)
|
||||
currency_id = fields.Many2one('res.currency', string='Currency', readonly=True)
|
||||
partner_id = fields.Many2one('res.partner', string='Partner', readonly=True)
|
||||
commercial_partner_id = fields.Many2one('res.partner', string='Partner Company', help="Commercial Entity")
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True)
|
||||
user_id = fields.Many2one('res.users', string='Salesperson', readonly=True)
|
||||
price_total = fields.Float(string='Untaxed Total', readonly=True)
|
||||
user_currency_price_total = fields.Float(string="Total Without Tax in Currency", compute='_compute_amounts_in_user_currency', digits=0)
|
||||
price_average = fields.Float(string='Average Price', readonly=True, group_operator="avg")
|
||||
user_currency_price_average = fields.Float(string="Average Price in Currency", compute='_compute_amounts_in_user_currency', digits=0)
|
||||
currency_rate = fields.Float(string='Currency Rate', readonly=True, group_operator="avg", groups="base.group_multi_currency")
|
||||
nbr = fields.Integer(string='Line Count', readonly=True) # TDE FIXME master: rename into nbr_lines
|
||||
invoice_id = fields.Many2one('account.invoice', readonly=True)
|
||||
country_id = fields.Many2one('res.country', string="Partner Company's Country")
|
||||
invoice_user_id = fields.Many2one('res.users', string='Salesperson', readonly=True)
|
||||
type = fields.Selection([
|
||||
('out_invoice', 'Customer Invoice'),
|
||||
('in_invoice', 'Vendor Bill'),
|
||||
@@ -56,32 +29,42 @@ class AccountInvoiceReport(models.Model):
|
||||
], readonly=True)
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('open', 'Open'),
|
||||
('paid', 'Paid'),
|
||||
('posted', 'Open'),
|
||||
('cancel', 'Cancelled')
|
||||
], string='Invoice Status', readonly=True)
|
||||
date_due = fields.Date(string='Due Date', readonly=True)
|
||||
account_id = fields.Many2one('account.account', string='Receivable/Payable Account', readonly=True, domain=[('deprecated', '=', False)])
|
||||
account_line_id = fields.Many2one('account.account', string='Revenue/Expense Account', readonly=True, domain=[('deprecated', '=', False)])
|
||||
partner_bank_id = fields.Many2one('res.partner.bank', string='Bank Account', readonly=True)
|
||||
invoice_payment_state = fields.Selection(selection=[
|
||||
('not_paid', 'Not Paid'),
|
||||
('in_payment', 'In Payment'),
|
||||
('paid', 'paid')
|
||||
], string='Payment Status', readonly=True)
|
||||
fiscal_position_id = fields.Many2one('account.fiscal.position', oldname='fiscal_position', string='Fiscal Position', readonly=True)
|
||||
invoice_date = fields.Date(readonly=True, string="Invoice Date")
|
||||
invoice_payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms', oldname='payment_term', readonly=True)
|
||||
invoice_partner_bank_id = fields.Many2one('res.partner.bank', string='Bank Account', readonly=True)
|
||||
nbr_lines = fields.Integer(string='Line Count', readonly=True)
|
||||
residual = fields.Float(string='Due Amount', readonly=True)
|
||||
user_currency_residual = fields.Float(string="Total Residual", compute='_compute_amounts_in_user_currency', digits=0)
|
||||
country_id = fields.Many2one('res.country', string="Partner Company's Country")
|
||||
account_analytic_id = fields.Many2one('account.analytic.account', string='Analytic Account', groups="analytic.group_analytic_accounting")
|
||||
amount_total = fields.Float(string='Total', readonly=True)
|
||||
|
||||
_order = 'date desc'
|
||||
# ==== Invoice line fields ====
|
||||
quantity = fields.Float(string='Product Quantity', readonly=True)
|
||||
product_id = fields.Many2one('product.product', string='Product', readonly=True)
|
||||
product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure', readonly=True)
|
||||
product_categ_id = fields.Many2one('product.category', string='Product Category', readonly=True)
|
||||
invoice_date_due = fields.Date(string='Due Date', readonly=True)
|
||||
account_id = fields.Many2one('account.account', string='Revenue/Expense Account', readonly=True, domain=[('deprecated', '=', False)])
|
||||
analytic_account_id = fields.Many2one('account.analytic.account', string='Analytic Account', groups="analytic.group_analytic_accounting")
|
||||
price_subtotal = fields.Float(string='Untaxed Total', readonly=True)
|
||||
price_average = fields.Float(string='Average Price', readonly=True, group_operator="avg")
|
||||
|
||||
_depends = {
|
||||
'account.invoice': [
|
||||
'account_id', 'amount_total_company_signed', 'commercial_partner_id', 'company_id',
|
||||
'currency_id', 'date_due', 'date_invoice', 'fiscal_position_id',
|
||||
'journal_id', 'number', 'partner_bank_id', 'partner_id', 'payment_term_id',
|
||||
'residual', 'state', 'type', 'user_id',
|
||||
'account.move': [
|
||||
'name', 'state', 'type', 'partner_id', 'invoice_user_id', 'fiscal_position_id',
|
||||
'invoice_date', 'invoice_date_due', 'invoice_payment_term_id', 'invoice_partner_bank_id',
|
||||
],
|
||||
'account.invoice.line': [
|
||||
'account_id', 'invoice_id', 'price_subtotal', 'product_id',
|
||||
'quantity', 'uom_id', 'account_analytic_id',
|
||||
'account.move.line': [
|
||||
'quantity', 'price_subtotal', 'amount_residual', 'balance', 'amount_currency',
|
||||
'move_id', 'product_id', 'product_uom_id', 'account_id', 'analytic_account_id',
|
||||
'journal_id', 'company_id', 'currency_id', 'partner_id',
|
||||
],
|
||||
'product.product': ['product_tmpl_id'],
|
||||
'product.template': ['categ_id'],
|
||||
@@ -90,97 +73,107 @@ class AccountInvoiceReport(models.Model):
|
||||
'res.partner': ['country_id'],
|
||||
}
|
||||
|
||||
@api.model
|
||||
def _select(self):
|
||||
select_str = """
|
||||
SELECT sub.id, sub.number, sub.date, sub.product_id, sub.partner_id, sub.country_id, sub.account_analytic_id,
|
||||
sub.payment_term_id, sub.uom_name, sub.currency_id, sub.journal_id,
|
||||
sub.fiscal_position_id, sub.user_id, sub.company_id, sub.nbr, sub.invoice_id, sub.type, sub.state,
|
||||
sub.categ_id, sub.date_due, sub.account_id, sub.account_line_id, sub.partner_bank_id,
|
||||
sub.product_qty, sub.price_total as price_total, sub.price_average as price_average, sub.amount_total / COALESCE(cr.rate, 1) as amount_total,
|
||||
COALESCE(cr.rate, 1) as currency_rate, sub.residual as residual, sub.commercial_partner_id as commercial_partner_id
|
||||
"""
|
||||
return select_str
|
||||
|
||||
def _sub_select(self):
|
||||
select_str = """
|
||||
SELECT ail.id AS id,
|
||||
ai.date_invoice AS date,
|
||||
ai.number as number,
|
||||
ail.product_id, ai.partner_id, ai.payment_term_id, ail.account_analytic_id,
|
||||
u2.name AS uom_name,
|
||||
ai.currency_id, ai.journal_id, ai.fiscal_position_id, ai.user_id, ai.company_id,
|
||||
1 AS nbr,
|
||||
ai.id AS invoice_id, ai.type, ai.state, pt.categ_id, ai.date_due, ai.account_id, ail.account_id AS account_line_id,
|
||||
ai.partner_bank_id,
|
||||
SUM ((invoice_type.sign_qty * ail.quantity) / COALESCE(u.factor,1) * COALESCE(u2.factor,1)) AS product_qty,
|
||||
SUM(ail.price_subtotal_signed * invoice_type.sign) AS price_total,
|
||||
SUM(ail.price_total * invoice_type.sign_qty) AS amount_total,
|
||||
SUM(ABS(ail.price_subtotal_signed)) / CASE
|
||||
WHEN SUM(ail.quantity / COALESCE(u.factor,1) * COALESCE(u2.factor,1)) <> 0::numeric
|
||||
THEN SUM(ail.quantity / COALESCE(u.factor,1) * COALESCE(u2.factor,1))
|
||||
ELSE 1::numeric
|
||||
END AS price_average,
|
||||
ai.residual_company_signed / (SELECT count(*) FROM account_invoice_line l where invoice_id = ai.id) *
|
||||
count(*) * invoice_type.sign AS residual,
|
||||
ai.commercial_partner_id as commercial_partner_id,
|
||||
coalesce(partner.country_id, partner_ai.country_id) AS country_id
|
||||
"""
|
||||
return select_str
|
||||
return '''
|
||||
SELECT
|
||||
line.id,
|
||||
line.move_id,
|
||||
line.product_id,
|
||||
line.account_id,
|
||||
line.analytic_account_id,
|
||||
line.journal_id,
|
||||
line.company_id,
|
||||
line.currency_id,
|
||||
line.partner_id AS commercial_partner_id,
|
||||
move.name,
|
||||
move.state,
|
||||
move.type,
|
||||
move.partner_id,
|
||||
move.invoice_user_id,
|
||||
move.fiscal_position_id,
|
||||
move.invoice_payment_state,
|
||||
move.invoice_date,
|
||||
move.invoice_date_due,
|
||||
move.invoice_payment_term_id,
|
||||
move.invoice_partner_bank_id,
|
||||
move.amount_residual_signed AS residual,
|
||||
move.amount_total_signed AS amount_total,
|
||||
uom_template.id AS product_uom_id,
|
||||
template.categ_id AS product_categ_id,
|
||||
SUM(line.quantity / NULLIF(COALESCE(uom_line.factor, 1) * COALESCE(uom_template.factor, 1), 0.0))
|
||||
AS quantity,
|
||||
-SUM(line.balance) AS price_subtotal,
|
||||
-SUM(line.balance / NULLIF(COALESCE(uom_line.factor, 1) * COALESCE(uom_template.factor, 1), 0.0))
|
||||
AS price_average,
|
||||
COALESCE(partner.country_id, commercial_partner.country_id) AS country_id,
|
||||
1 AS nbr_lines
|
||||
'''
|
||||
|
||||
@api.model
|
||||
def _from(self):
|
||||
from_str = """
|
||||
FROM account_invoice_line ail
|
||||
JOIN account_invoice ai ON ai.id = ail.invoice_id
|
||||
JOIN res_partner partner ON ai.commercial_partner_id = partner.id
|
||||
JOIN res_partner partner_ai ON ai.partner_id = partner_ai.id
|
||||
LEFT JOIN product_product pr ON pr.id = ail.product_id
|
||||
left JOIN product_template pt ON pt.id = pr.product_tmpl_id
|
||||
LEFT JOIN uom_uom u ON u.id = ail.uom_id
|
||||
LEFT JOIN uom_uom u2 ON u2.id = pt.uom_id
|
||||
JOIN (
|
||||
-- Temporary table to decide if the qty should be added or retrieved (Invoice vs Credit Note)
|
||||
SELECT id,(CASE
|
||||
WHEN ai.type::text = ANY (ARRAY['in_refund'::character varying::text, 'in_invoice'::character varying::text])
|
||||
THEN -1
|
||||
ELSE 1
|
||||
END) AS sign,(CASE
|
||||
WHEN ai.type::text = ANY (ARRAY['out_refund'::character varying::text, 'in_invoice'::character varying::text])
|
||||
THEN -1
|
||||
ELSE 1
|
||||
END) AS sign_qty
|
||||
FROM account_invoice ai
|
||||
) AS invoice_type ON invoice_type.id = ai.id
|
||||
"""
|
||||
return from_str
|
||||
return '''
|
||||
FROM account_move_line line
|
||||
LEFT JOIN res_partner partner ON partner.id = line.partner_id
|
||||
LEFT JOIN product_product product ON product.id = line.product_id
|
||||
LEFT JOIN account_account account ON account.id = line.account_id
|
||||
LEFT JOIN account_account_type user_type ON user_type.id = account.user_type_id
|
||||
LEFT JOIN product_template template ON template.id = product.product_tmpl_id
|
||||
LEFT JOIN uom_uom uom_line ON uom_line.id = line.product_uom_id
|
||||
LEFT JOIN uom_uom uom_template ON uom_template.id = template.uom_id
|
||||
INNER JOIN account_move move ON move.id = line.move_id
|
||||
LEFT JOIN res_partner commercial_partner ON commercial_partner.id = move.commercial_partner_id
|
||||
'''
|
||||
|
||||
@api.model
|
||||
def _where(self):
|
||||
return '''
|
||||
WHERE move.type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')
|
||||
AND line.account_id IS NOT NULL
|
||||
AND NOT line.exclude_from_invoice_tab
|
||||
'''
|
||||
|
||||
@api.model
|
||||
def _group_by(self):
|
||||
group_by_str = """
|
||||
GROUP BY ail.id, ail.product_id, ail.account_analytic_id, ai.date_invoice, ai.id,
|
||||
ai.partner_id, ai.payment_term_id, u2.name, u2.id, ai.currency_id, ai.journal_id,
|
||||
ai.fiscal_position_id, ai.user_id, ai.company_id, ai.id, ai.type, invoice_type.sign, ai.state, pt.categ_id,
|
||||
ai.date_due, ai.account_id, ail.account_id, ai.partner_bank_id, ai.residual_company_signed,
|
||||
ai.amount_total_company_signed, ai.commercial_partner_id, coalesce(partner.country_id, partner_ai.country_id)
|
||||
"""
|
||||
return group_by_str
|
||||
return '''
|
||||
GROUP BY
|
||||
line.id,
|
||||
line.move_id,
|
||||
line.product_id,
|
||||
line.account_id,
|
||||
line.analytic_account_id,
|
||||
line.journal_id,
|
||||
line.company_id,
|
||||
line.currency_id,
|
||||
line.partner_id,
|
||||
move.name,
|
||||
move.state,
|
||||
move.type,
|
||||
move.amount_residual_signed,
|
||||
move.amount_total_signed,
|
||||
move.partner_id,
|
||||
move.invoice_user_id,
|
||||
move.fiscal_position_id,
|
||||
move.invoice_payment_state,
|
||||
move.invoice_date,
|
||||
move.invoice_date_due,
|
||||
move.invoice_payment_term_id,
|
||||
move.invoice_partner_bank_id,
|
||||
uom_template.id,
|
||||
template.categ_id,
|
||||
COALESCE(partner.country_id, commercial_partner.country_id)
|
||||
'''
|
||||
|
||||
@api.model_cr
|
||||
def init(self):
|
||||
# self._table = account_invoice_report
|
||||
tools.drop_view_if_exists(self.env.cr, self._table)
|
||||
self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
|
||||
WITH currency_rate AS (%s)
|
||||
%s
|
||||
FROM (
|
||||
%s %s WHERE ail.account_id IS NOT NULL %s
|
||||
) AS sub
|
||||
LEFT JOIN currency_rate cr ON
|
||||
(cr.currency_id = sub.currency_id AND
|
||||
cr.company_id = sub.company_id AND
|
||||
cr.date_start <= COALESCE(sub.date, NOW()) AND
|
||||
(cr.date_end IS NULL OR cr.date_end > COALESCE(sub.date, NOW())))
|
||||
)""" % (
|
||||
self._table, self.env['res.currency']._select_companies_rates(),
|
||||
self._select(), self._sub_select(), self._from(), self._group_by()))
|
||||
self.env.cr.execute('''
|
||||
CREATE OR REPLACE VIEW %s AS (
|
||||
%s %s %s %s
|
||||
)
|
||||
''' % (
|
||||
self._table, self._select(), self._from(), self._where(), self._group_by()
|
||||
))
|
||||
|
||||
|
||||
class ReportInvoiceWithPayment(models.AbstractModel):
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<field name="model">account.invoice.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Invoices Analysis" disable_linking="True">
|
||||
<field name="categ_id" type="row"/>
|
||||
<field name="date" type="col"/>
|
||||
<field name="price_total" type="measure"/>
|
||||
<field name="product_categ_id" type="row"/>
|
||||
<field name="invoice_date" type="col"/>
|
||||
<field name="price_subtotal" type="measure"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
@@ -18,8 +18,8 @@
|
||||
<field name="model">account.invoice.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Invoices Analysis">
|
||||
<field name="categ_id"/>
|
||||
<field name="price_total" type="measure"/>
|
||||
<field name="product_categ_id"/>
|
||||
<field name="price_subtotal" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
@@ -30,35 +30,35 @@
|
||||
<field name="model_id">account.invoice.report</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date:month', 'user_id']}</field>
|
||||
<field name="context">{'group_by': ['invoice_date:month', 'invoice_user_id']}</field>
|
||||
</record>
|
||||
<record id="filter_invoice_product" model="ir.filters">
|
||||
<field name="name">By Product</field>
|
||||
<field name="model_id">account.invoice.report</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date:month', 'product_id'], 'set_visible':True, 'residual_invisible':True}</field>
|
||||
<field name="context">{'group_by': ['invoice_date:month', 'product_id'], 'set_visible':True, 'residual_invisible':True}</field>
|
||||
</record>
|
||||
<record id="filter_invoice_product_category" model="ir.filters">
|
||||
<field name="name">By Product Category</field>
|
||||
<field name="model_id">account.invoice.report</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date:month', 'categ_id'], 'residual_invisible':True}</field>
|
||||
<field name="context">{'group_by': ['invoice_date:month', 'product_categ_id'], 'residual_invisible':True}</field>
|
||||
</record>
|
||||
<record id="filter_invoice_refund" model="ir.filters">
|
||||
<field name="name">By Credit Note</field>
|
||||
<field name="model_id">account.invoice.report</field>
|
||||
<field name="domain">[('type', '=', 'out_refund')]</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date:month', 'user_id']}</field>
|
||||
<field name="context">{'group_by': ['invoice_date:month', 'invoice_user_id']}</field>
|
||||
</record>
|
||||
<record id="filter_invoice_country" model="ir.filters">
|
||||
<field name="name">By Country</field>
|
||||
<field name="model_id">account.invoice.report</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date:month', 'country_id']}</field>
|
||||
<field name="context">{'group_by': ['invoice_date:month', 'country_id']}</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_invoice_report_search" model="ir.ui.view">
|
||||
@@ -66,9 +66,9 @@
|
||||
<field name="model">account.invoice.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Invoices Analysis">
|
||||
<filter string="My Invoices" name="my_invoice" domain="[('user_id', '=', uid)]"/>
|
||||
<filter string="My Invoices" name="my_invoice" domain="[('invoice_user_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
<field name="date"/>
|
||||
<field name="invoice_date"/>
|
||||
<separator/>
|
||||
<filter string="To Invoice" name="toinvoice" domain="[('state','=','draft')]" help = "Draft Invoices"/>
|
||||
<filter string="Invoiced" name="current" domain="[('state','not in', ('draft','cancel'))]"/>
|
||||
@@ -79,19 +79,19 @@
|
||||
<filter string="Invoices" name="invoice" domain="['|', ('type','=','out_invoice'),('type','=','in_invoice')]"/>
|
||||
<filter string="Credit Notes" name="creditnote" domain="['|', ('type','=','out_refund'),('type','=','in_refund')]"/>
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
<field name="user_id" />
|
||||
<field name="invoice_user_id" />
|
||||
<field name="product_id" />
|
||||
<field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/>
|
||||
<field name="product_categ_id" filter_domain="[('product_categ_id', 'child_of', self)]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Salesperson" name='user' context="{'group_by':'user_id'}"/>
|
||||
<filter string="Salesperson" name='user' context="{'group_by':'invoice_user_id'}"/>
|
||||
<filter string="Partner" name="partner_id" context="{'group_by':'partner_id','residual_visible':True}"/>
|
||||
<filter string="Product Category" name="category_product" context="{'group_by':'categ_id','residual_invisible':True}"/>
|
||||
<filter string="Product Category" name="category_product" context="{'group_by':'product_categ_id','residual_invisible':True}"/>
|
||||
<filter string="Status" name="status" context="{'group_by':'state'}"/>
|
||||
<filter string="Analytic Account" name="account_analytic_id" context="{'group_by':'account_analytic_id'}" groups="analytic.group_analytic_accounting" />
|
||||
<filter string="Analytic Account" name="analytic_account_id" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting" />
|
||||
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Date" name="date" context="{'group_by':'date'}"/>
|
||||
<filter string="Due Date" name="duemonth" context="{'group_by':'date_due:month'}"/>
|
||||
<filter string="Date" name="invoice_date" context="{'group_by':'invoice_date'}"/>
|
||||
<filter string="Due Date" name="duemonth" context="{'group_by':'invoice_date_due:month'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -131,13 +131,6 @@
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_comp_rule" model="ir.rule">
|
||||
<field name="name">Invoice multi-company</field>
|
||||
<field name="model_id" ref="model_account_invoice"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_analysis_comp_rule" model="ir.rule">
|
||||
<field name="name">Invoice Analysis multi-company</field>
|
||||
<field name="model_id" ref="model_account_invoice_report"/>
|
||||
@@ -152,13 +145,6 @@
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="account_invoice_line_comp_rule">
|
||||
<field name="name">Invoice Line company rule</field>
|
||||
<field name="model_id" ref="model_account_invoice_line"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="account_bank_statement_comp_rule">
|
||||
<field name="name">Account bank statement company rule</field>
|
||||
<field name="model_id" ref="model_account_bank_statement"/>
|
||||
@@ -193,18 +179,18 @@
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<!-- Portal for invoice and invoice lines -->
|
||||
<!-- Portal for invoice move and invoice move lines -->
|
||||
<record id="account_invoice_rule_portal" model="ir.rule">
|
||||
<field name="name">Portal Personal Account Invoices</field>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
<field name="domain_force">[('message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
|
||||
<field name="model_id" ref="account.model_account_move"/>
|
||||
<field name="domain_force">[('type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="account_invoice_line_rule_portal" model="ir.rule">
|
||||
<field name="name">Portal Invoice Lines</field>
|
||||
<field name="model_id" ref="account.model_account_invoice_line"/>
|
||||
<field name="domain_force">[('invoice_id.message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
|
||||
<field name="model_id" ref="account.model_account_move_line"/>
|
||||
<field name="domain_force">[('move_id.type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('move_id.message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
@@ -23,11 +23,10 @@ access_account_bank_statement,account.bank.statement,model_account_bank_statemen
|
||||
access_account_bank_statement_line,account.bank.statement.line,model_account_bank_statement_line,account.group_account_user,1,1,1,1
|
||||
access_account_analytic_line_manager,account.analytic.line manager,model_account_analytic_line,account.group_account_manager,1,0,0,0
|
||||
access_account_analytic_account,account.analytic.account,analytic.model_account_analytic_account,base.group_user,1,0,0,0
|
||||
access_account_invoice_uinvoice,account.invoice,model_account_invoice,account.group_account_invoice,1,1,1,1
|
||||
access_account_invoice_line_uinvoice,account.invoice.line,model_account_invoice_line,account.group_account_invoice,1,1,1,1
|
||||
access_account_invoice_tax_uinvoice,account.invoice.tax,model_account_invoice_tax,account.group_account_invoice,1,1,1,1
|
||||
access_account_move_uinvoice,account.move,model_account_move,account.group_account_invoice,1,1,1,1
|
||||
access_account_move_line_uinvoice,account.move.line invoice,model_account_move_line,account.group_account_invoice,1,1,1,1
|
||||
access_account_invoice_portal,account.move.portal,account.model_account_move,base.group_portal,1,0,0,0
|
||||
access_account_invoice_line_portal,account.move.line.portal,account.model_account_move_line,base.group_portal,1,0,0,0
|
||||
access_account_payment_term_manager,account.payment.term,model_account_payment_term,account.group_account_manager,1,1,1,1
|
||||
access_account_payment_term_line_manager,account.payment.term.line,model_account_payment_term_line,account.group_account_manager,1,1,1,1
|
||||
access_account_cash_rounding_uinvoice,account.cash.rounding,model_account_cash_rounding,account.group_account_invoice,1,1,1,1
|
||||
@@ -35,11 +34,8 @@ access_account_tax_manager,account.tax,model_account_tax,account.group_account_m
|
||||
access_account_journal_manager,account.journal,model_account_journal,account.group_account_manager,1,1,1,1
|
||||
access_account_journal_user,account.journal,model_account_journal,account.group_account_user,1,0,0,0
|
||||
access_account_journal_invoice,account.journal invoice,model_account_journal,account.group_account_invoice,1,0,0,0
|
||||
access_account_invoice_group_invoice,account.invoice group invoice,model_account_invoice,account.group_account_invoice,1,1,1,1
|
||||
access_res_currency_account_manager,res.currency account manager,base.model_res_currency,group_account_manager,1,1,1,1
|
||||
access_res_currency_rate_account_manager,res.currency.rate account manager,base.model_res_currency_rate,group_account_manager,1,1,1,1
|
||||
access_account_invoice_portal,account.invoice.portal,account.model_account_invoice,base.group_portal,1,0,0,0
|
||||
access_account_invoice_line_portal,account.invoice.line.portal,account.model_account_invoice_line,base.group_portal,1,0,0,0
|
||||
access_account_payment_term_partner_manager,account.payment.term partner manager,model_account_payment_term,base.group_user,1,0,0,0
|
||||
access_account_payment_term_line_partner_manager,account.payment.term.line partner manager,model_account_payment_term_line,base.group_user,1,0,0,0
|
||||
access_account_fiscal_position_product_manager,account.fiscal.position account.manager,model_account_fiscal_position,account.group_account_manager,1,1,1,1
|
||||
@@ -55,12 +51,9 @@ access_account_invoice_report_user,account.invoice.report_user,model_account_inv
|
||||
access_account_invoice_report,account.invoice.report,model_account_invoice_report,account.group_account_manager,1,1,1,1
|
||||
access_account_invoice_report_billing,account.invoice.report_billing,model_account_invoice_report,account.group_account_invoice,1,0,0,0
|
||||
access_res_partner_group_account_manager,res_partner group_account_manager,model_res_partner,account.group_account_manager,1,0,0,0
|
||||
access_account_invoice_accountant,account.invoice accountant,model_account_invoice,account.group_account_user,1,0,0,0
|
||||
access_account_move_line_manager,account.move.line manager,model_account_move_line,account.group_account_manager,1,0,0,0
|
||||
access_account_move_manager,account.move manager,model_account_move,account.group_account_manager,1,0,0,0
|
||||
access_account_invoice_tax_accountant,account.invoice.tax accountant,model_account_invoice_tax,account.group_account_user,1,0,0,0
|
||||
access_account_analytic_line_invoice,account.analytic.line invoice,model_account_analytic_line,account.group_account_invoice,1,1,1,1
|
||||
access_account_invoice_line_accountant,account.invoice.line accountant,model_account_invoice_line,account.group_account_user,1,0,0,0
|
||||
access_account_account_invoice,account.account invoice,model_account_account,account.group_account_invoice,1,0,0,0
|
||||
access_account_analytic_accountant,account.analytic.account accountant,analytic.model_account_analytic_account,account.group_account_user,1,1,1,1
|
||||
access_account_account_type_invoice,account.account.type invoice,model_account_account_type,account.group_account_invoice,1,0,0,0
|
||||
|
||||
|
@@ -69,7 +69,6 @@ var ShowPaymentLineWidget = AbstractField.extend({
|
||||
move_id: content.move_id,
|
||||
ref: content.ref,
|
||||
account_payment_id: content.account_payment_id,
|
||||
invoice_id: content.invoice_id,
|
||||
}));
|
||||
$content.filter('.js_unreconcile_payment').on('click', self._onRemoveMoveReconcile.bind(self));
|
||||
$content.filter('.js_open_payment').on('click', self._onOpenPayment.bind(self));
|
||||
@@ -96,15 +95,11 @@ var ShowPaymentLineWidget = AbstractField.extend({
|
||||
* @param {MouseEvent} event
|
||||
*/
|
||||
_onOpenPayment: function (event) {
|
||||
var invoiceId = parseInt($(event.target).attr('invoice-id'));
|
||||
var paymentId = parseInt($(event.target).attr('payment-id'));
|
||||
var moveId = parseInt($(event.target).attr('move-id'));
|
||||
var res_model;
|
||||
var id;
|
||||
if (invoiceId !== undefined && !isNaN(invoiceId)){
|
||||
res_model = "account.invoice";
|
||||
id = invoiceId;
|
||||
} else if (paymentId !== undefined && !isNaN(paymentId)){
|
||||
if (paymentId !== undefined && !isNaN(paymentId)){
|
||||
res_model = "account.payment";
|
||||
id = paymentId;
|
||||
} else if (moveId !== undefined && !isNaN(moveId)){
|
||||
@@ -133,9 +128,9 @@ var ShowPaymentLineWidget = AbstractField.extend({
|
||||
var self = this;
|
||||
var id = $(event.target).data('id') || false;
|
||||
this._rpc({
|
||||
model: 'account.invoice',
|
||||
method: 'assign_outstanding_credit',
|
||||
args: [JSON.parse(this.value).invoice_id, id],
|
||||
model: 'account.move',
|
||||
method: 'js_assign_outstanding_line',
|
||||
args: [JSON.parse(this.value).move_id, id],
|
||||
}).then(function () {
|
||||
self.trigger_up('reload');
|
||||
});
|
||||
@@ -153,7 +148,7 @@ var ShowPaymentLineWidget = AbstractField.extend({
|
||||
model: 'account.move.line',
|
||||
method: 'remove_move_reconcile',
|
||||
args: [paymentId],
|
||||
context: {'invoice_id': this.res_id},
|
||||
context: {'move_id': this.res_id},
|
||||
}).then(function () {
|
||||
self.trigger_up('reload');
|
||||
});
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-primary js_unreconcile_payment float-left" t-att-payment-id="payment_id" style="margin-top:5px; margin-bottom:5px;">Unreconcile</button>
|
||||
<button class="btn btn-sm btn-secondary js_open_payment float-right" t-att-payment-id="account_payment_id" t-att-invoice-id="invoice_id" t-att-move-id="move_id" style="margin-top:5px; margin-bottom:5px;">View</button>
|
||||
<button class="btn btn-sm btn-secondary js_open_payment float-right" t-att-payment-id="account_payment_id" t-att-move-id="move_id" style="margin-top:5px; margin-bottom:5px;">View</button>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
|
||||
@@ -9,7 +9,7 @@ var createView = testUtils.createView;
|
||||
QUnit.module('account', {
|
||||
beforeEach: function () {
|
||||
this.data = {
|
||||
'account.invoice': {
|
||||
'account.move': {
|
||||
fields: {
|
||||
payments_widget: {string: "payments_widget data", type: "char"},
|
||||
outstanding_credits_debits_widget: {string: "outstanding_credits_debits_widget data", type: "char"},
|
||||
@@ -17,7 +17,7 @@ QUnit.module('account', {
|
||||
records: [{
|
||||
id: 1,
|
||||
payments_widget: '{"content": [{"digits": [69, 2], "currency": "$", "amount": 555.0, "name": "Customer Payment: INV/2017/0004", "date": "2017-04-25", "position": "before", "ref": "BNK1/2017/0003 (INV/2017/0004)", "payment_id": 22, "move_id": 10, "journal_name": "Bank"}], "outstanding": false, "title": "Less Payment"}',
|
||||
outstanding_credits_debits_widget: '{"content": [{"digits": [69, 2], "currency": "$", "amount": 100.0, "journal_name": "INV/2017/0004", "position": "before", "id": 20}], "invoice_id": 4, "outstanding": true, "title": "Outstanding credits"}',
|
||||
outstanding_credits_debits_widget: '{"content": [{"digits": [69, 2], "currency": "$", "amount": 100.0, "journal_name": "INV/2017/0004", "position": "before", "id": 20}], "move_id": 4, "outstanding": true, "title": "Outstanding credits"}',
|
||||
}]
|
||||
},
|
||||
};
|
||||
@@ -30,7 +30,7 @@ QUnit.module('account', {
|
||||
|
||||
var form = await createView({
|
||||
View: FormView,
|
||||
model: 'account.invoice',
|
||||
model: 'account.move',
|
||||
data: this.data,
|
||||
arch: '<form>'+
|
||||
'<field name="outstanding_credits_debits_widget" widget="payment"/>'+
|
||||
@@ -40,11 +40,11 @@ QUnit.module('account', {
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === 'remove_move_reconcile') {
|
||||
assert.deepEqual(args.args, [22], "should call remove_move_reconcile {warning: required focus}");
|
||||
assert.deepEqual(args.kwargs, {context: {"invoice_id": 1}}, "should call remove_move_reconcile {warning: required focus}");
|
||||
assert.deepEqual(args.kwargs, {context: {"move_id": 1}}, "should call remove_move_reconcile {warning: required focus}");
|
||||
return Promise.resolve();
|
||||
}
|
||||
if (args.method === 'assign_outstanding_credit') {
|
||||
assert.deepEqual(args.args, [4, 20], "should call assign_outstanding_credit {warning: required focus}");
|
||||
if (args.method === 'js_assign_outstanding_line') {
|
||||
assert.deepEqual(args.args, [4, 20], "should call js_assign_outstanding_line {warning: required focus}");
|
||||
return Promise.resolve();
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
#Accounting tests written in python should extend the class AccountingTestCase.
|
||||
#See its doc for more info.
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import test_account_customer_invoice
|
||||
from . import test_account_move_closed_period
|
||||
from . import test_account_move_tax_lock_date
|
||||
from . import test_account_supplier_invoice
|
||||
from . import test_account_validate_account_move
|
||||
from . import test_account_invoice_rounding
|
||||
from . import test_account_move_out_invoice
|
||||
from . import test_account_move_out_refund
|
||||
from . import test_account_move_in_invoice
|
||||
from . import test_account_move_in_refund
|
||||
from . import test_account_move_entry
|
||||
from . import test_account_invoice_report
|
||||
from . import test_account_journal_dashboard
|
||||
from . import test_bank_statement_reconciliation
|
||||
from . import test_fiscal_position
|
||||
from . import test_invoice_onchange
|
||||
from . import test_reconciliation_widget
|
||||
from . import test_payment
|
||||
from . import test_product_id_change
|
||||
from . import test_reconciliation
|
||||
from . import test_search
|
||||
from . import test_tax
|
||||
from . import test_invoice_taxes
|
||||
from . import test_account_move_taxes_edition
|
||||
from . import test_templates_consistency
|
||||
from . import test_account_fiscal_year
|
||||
from . import test_account_all_l10n
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import fields
|
||||
from odoo.tests.common import Form, SavepointCase
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class AccountingSavepointCase(SavepointCase):
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# DATA GENERATION
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(AccountingSavepointCase, cls).setUpClass()
|
||||
|
||||
chart_template = cls.env.user.company_id.chart_template_id
|
||||
if not chart_template:
|
||||
chart_template = cls.env.ref('l10n_generic_coa.configurable_chart_template', raise_if_not_found=False)
|
||||
if not chart_template:
|
||||
cls.skipTest("Accounting Tests skipped because the user's company has no chart of accounts.")
|
||||
|
||||
# Create user.
|
||||
user = cls.env['res.users'].create({
|
||||
'name': 'Because I am accountman!',
|
||||
'login': 'accountman',
|
||||
'groups_id': [(6, 0, cls.env.user.groups_id.ids)],
|
||||
})
|
||||
user.partner_id.email = 'accountman@test.com'
|
||||
|
||||
# Shadow the current environment/cursor with one having the report user.
|
||||
# This is mandatory to test access rights.
|
||||
cls.env = cls.env(user=user)
|
||||
cls.cr = cls.env.cr
|
||||
|
||||
cls.company_data = cls.setup_company_data('company_1_data')
|
||||
cls.currency_data = cls.setup_multi_currency_data()
|
||||
|
||||
@classmethod
|
||||
def setup_company_data(cls, company_name, **kwargs):
|
||||
''' Create a new company having the name passed as parameter.
|
||||
A chart of accounts will be installed to this company: the same as the current company one.
|
||||
The current user will get access to this company.
|
||||
|
||||
:param company_name: The name of the company.
|
||||
:return: A dictionary will be returned containing all relevant accounting data for testing.
|
||||
'''
|
||||
chart_template = cls.env.user.company_id.chart_template_id
|
||||
company = cls.env['res.company'].create({
|
||||
'name': company_name,
|
||||
'currency_id': cls.env.user.company_id.currency_id.id,
|
||||
**kwargs,
|
||||
})
|
||||
cls.env.user.company_ids |= company
|
||||
cls.env.user.company_id = company
|
||||
|
||||
chart_template = cls.env['account.chart.template'].browse(chart_template.id)
|
||||
chart_template.load_for_current_company(15.0, 15.0)
|
||||
|
||||
# The currency could be different after the installation of the chart template.
|
||||
company.write({'currency_id': kwargs.get('currency_id', cls.env.user.company_id.currency_id.id)})
|
||||
|
||||
return {
|
||||
'company': company,
|
||||
'currency': company.currency_id,
|
||||
'default_account_revenue': cls.env['account.account'].search([
|
||||
('company_id', '=', company.id),
|
||||
('user_type_id', '=', cls.env.ref('account.data_account_type_revenue').id)
|
||||
], limit=1),
|
||||
'default_account_expense': cls.env['account.account'].search([
|
||||
('company_id', '=', company.id),
|
||||
('user_type_id', '=', cls.env.ref('account.data_account_type_expenses').id)
|
||||
], limit=1),
|
||||
'default_account_receivable': cls.env['account.account'].search([
|
||||
('company_id', '=', company.id),
|
||||
('user_type_id.type', '=', 'receivable')
|
||||
], limit=1),
|
||||
'default_account_payable': cls.env['account.account'].search([
|
||||
('company_id', '=', company.id),
|
||||
('user_type_id.type', '=', 'payable')
|
||||
], limit=1),
|
||||
'default_account_tax_sale': company.account_sale_tax_id.mapped('invoice_repartition_line_ids.account_id'),
|
||||
'default_account_tax_purchase': company.account_purchase_tax_id.mapped('invoice_repartition_line_ids.account_id'),
|
||||
'default_journal_misc': cls.env['account.journal'].search([
|
||||
('company_id', '=', company.id),
|
||||
('type', '=', 'general')
|
||||
], limit=1),
|
||||
'default_journal_sale': cls.env['account.journal'].search([
|
||||
('company_id', '=', company.id),
|
||||
('type', '=', 'sale')
|
||||
], limit=1),
|
||||
'default_journal_purchase': cls.env['account.journal'].search([
|
||||
('company_id', '=', company.id),
|
||||
('type', '=', 'purchase')
|
||||
], limit=1),
|
||||
'default_tax_sale': company.account_sale_tax_id,
|
||||
'default_tax_purchase': company.account_purchase_tax_id,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def setup_multi_currency_data(cls):
|
||||
gold_currency = cls.env['res.currency'].create({
|
||||
'name': 'Gold Coin',
|
||||
'symbol': '☺',
|
||||
'rounding': 0.001,
|
||||
'position': 'after',
|
||||
'currency_unit_label': 'Gold',
|
||||
'currency_subunit_label': 'Silver',
|
||||
})
|
||||
rate1 = cls.env['res.currency.rate'].create({
|
||||
'name': '2016-01-01',
|
||||
'rate': 3.0,
|
||||
'currency_id': gold_currency.id,
|
||||
'company_id': cls.env.company.id,
|
||||
})
|
||||
rate2 = cls.env['res.currency.rate'].create({
|
||||
'name': '2017-01-01',
|
||||
'rate': 2.0,
|
||||
'currency_id': gold_currency.id,
|
||||
'company_id': cls.env.company.id,
|
||||
})
|
||||
return {
|
||||
'currency': gold_currency,
|
||||
'rates': rate1 + rate2,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def setup_armageddon_tax(cls, tax_name, company_data):
|
||||
return cls.env['account.tax'].create({
|
||||
'name': '%s (group)' % tax_name,
|
||||
'amount_type': 'group',
|
||||
'amount': 0.0,
|
||||
'children_tax_ids': [
|
||||
(0, 0, {
|
||||
'name': '%s (child 1)' % tax_name,
|
||||
'amount_type': 'percent',
|
||||
'amount': 20.0,
|
||||
'price_include': True,
|
||||
'include_base_amount': True,
|
||||
'tax_exigibility': 'on_invoice',
|
||||
'invoice_repartition_line_ids': [
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
(0, 0, {
|
||||
'factor_percent': 40,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': company_data['default_account_tax_sale'].id,
|
||||
}),
|
||||
(0, 0, {
|
||||
'factor_percent': 60,
|
||||
'repartition_type': 'tax',
|
||||
# /!\ No account set.
|
||||
}),
|
||||
],
|
||||
'refund_repartition_line_ids': [
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
(0, 0, {
|
||||
'factor_percent': 40,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': company_data['default_account_tax_sale'].id,
|
||||
}),
|
||||
(0, 0, {
|
||||
'factor_percent': 60,
|
||||
'repartition_type': 'tax',
|
||||
# /!\ No account set.
|
||||
}),
|
||||
],
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': '%s (child 2)' % tax_name,
|
||||
'amount_type': 'percent',
|
||||
'amount': 10.0,
|
||||
'tax_exigibility': 'on_payment',
|
||||
'cash_basis_transition_account_id': company_data['default_account_tax_sale'].copy().id,
|
||||
'invoice_repartition_line_ids': [
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': company_data['default_account_tax_sale'].id,
|
||||
}),
|
||||
],
|
||||
'refund_repartition_line_ids': [
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
|
||||
(0, 0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': company_data['default_account_tax_sale'].id,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
})
|
||||
@@ -0,0 +1,147 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.account_test_savepoint import AccountingSavepointCase
|
||||
from odoo.tests.common import Form
|
||||
from odoo.tests import tagged
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo import fields
|
||||
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class InvoiceTestCommon(AccountingSavepointCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(InvoiceTestCommon, cls).setUpClass()
|
||||
|
||||
# ==== Taxes ====
|
||||
cls.tax_sale_a = cls.company_data['default_tax_sale']
|
||||
cls.tax_sale_b = cls.company_data['default_tax_sale'].copy()
|
||||
cls.tax_purchase_a = cls.company_data['default_tax_purchase']
|
||||
cls.tax_purchase_b = cls.company_data['default_tax_purchase'].copy()
|
||||
cls.tax_armageddon = cls.setup_armageddon_tax('complex_tax', cls.company_data)
|
||||
|
||||
# ==== Products ====
|
||||
cls.product_a = cls.env['product.product'].create({
|
||||
'name': 'product_a',
|
||||
'uom_id': cls.env.ref('uom.product_uom_unit').id,
|
||||
'lst_price': 1000.0,
|
||||
'standard_price': 800.0,
|
||||
'property_account_income_id': cls.company_data['default_account_revenue'].id,
|
||||
'property_account_expense_id': cls.company_data['default_account_expense'].id,
|
||||
'taxes_id': [(6, 0, cls.tax_sale_a.ids)],
|
||||
'supplier_taxes_id': [(6, 0, cls.tax_purchase_a.ids)],
|
||||
})
|
||||
cls.product_b = cls.env['product.product'].create({
|
||||
'name': 'product_b',
|
||||
'uom_id': cls.env.ref('uom.product_uom_dozen').id,
|
||||
'lst_price': 200.0,
|
||||
'standard_price': 160.0,
|
||||
'property_account_income_id': cls.company_data['default_account_revenue'].copy().id,
|
||||
'property_account_expense_id': cls.company_data['default_account_expense'].copy().id,
|
||||
'taxes_id': [(6, 0, (cls.tax_sale_a + cls.tax_sale_b).ids)],
|
||||
'supplier_taxes_id': [(6, 0, (cls.tax_purchase_a + cls.tax_purchase_b).ids)],
|
||||
})
|
||||
|
||||
# ==== Fiscal positions ====
|
||||
cls.fiscal_pos_a = cls.env['account.fiscal.position'].create({
|
||||
'name': 'fiscal_pos_a',
|
||||
'tax_ids': [
|
||||
(0, None, {
|
||||
'tax_src_id': cls.tax_sale_a.id,
|
||||
'tax_dest_id': cls.tax_sale_b.id,
|
||||
}),
|
||||
(0, None, {
|
||||
'tax_src_id': cls.tax_purchase_a.id,
|
||||
'tax_dest_id': cls.tax_purchase_b.id,
|
||||
}),
|
||||
],
|
||||
'account_ids': [
|
||||
(0, None, {
|
||||
'account_src_id': cls.product_a.property_account_income_id.id,
|
||||
'account_dest_id': cls.product_b.property_account_income_id.id,
|
||||
}),
|
||||
(0, None, {
|
||||
'account_src_id': cls.product_a.property_account_expense_id.id,
|
||||
'account_dest_id': cls.product_b.property_account_expense_id.id,
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
# ==== Payment terms ====
|
||||
cls.pay_terms_a = cls.env.ref('account.account_payment_term_immediate')
|
||||
cls.pay_terms_b = cls.env['account.payment.term'].create({
|
||||
'name': '30% Advance End of Following Month',
|
||||
'note': 'Payment terms: 30% Advance End of Following Month',
|
||||
'line_ids': [
|
||||
(0, 0, {
|
||||
'value': 'percent',
|
||||
'value_amount': 30.0,
|
||||
'sequence': 400,
|
||||
'days': 0,
|
||||
'option': 'day_after_invoice_date',
|
||||
}),
|
||||
(0, 0, {
|
||||
'value': 'balance',
|
||||
'value_amount': 0.0,
|
||||
'sequence': 500,
|
||||
'days': 31,
|
||||
'option': 'day_following_month',
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
# ==== Partners ====
|
||||
cls.partner_a = cls.env['res.partner'].create({
|
||||
'name': 'partner_a',
|
||||
'property_payment_term_id': cls.pay_terms_a.id,
|
||||
'property_supplier_payment_term_id': cls.pay_terms_a.id,
|
||||
'property_account_receivable_id': cls.company_data['default_account_receivable'].id,
|
||||
'property_account_payable_id': cls.company_data['default_account_payable'].id,
|
||||
'company_id': False,
|
||||
})
|
||||
cls.partner_b = cls.env['res.partner'].create({
|
||||
'name': 'partner_b',
|
||||
'property_payment_term_id': cls.pay_terms_b.id,
|
||||
'property_supplier_payment_term_id': cls.pay_terms_b.id,
|
||||
'property_account_position_id': cls.fiscal_pos_a.id,
|
||||
'property_account_receivable_id': cls.company_data['default_account_receivable'].copy().id,
|
||||
'property_account_payable_id': cls.company_data['default_account_payable'].copy().id,
|
||||
'company_id': False,
|
||||
})
|
||||
|
||||
# ==== Cash rounding ====
|
||||
cls.cash_rounding_a = cls.env['account.cash.rounding'].create({
|
||||
'name': 'add_invoice_line',
|
||||
'rounding': 0.05,
|
||||
'strategy': 'add_invoice_line',
|
||||
'account_id': cls.company_data['default_account_revenue'].copy().id,
|
||||
'rounding_method': 'UP',
|
||||
})
|
||||
cls.cash_rounding_b = cls.env['account.cash.rounding'].create({
|
||||
'name': 'biggest_tax',
|
||||
'rounding': 0.05,
|
||||
'strategy': 'biggest_tax',
|
||||
'rounding_method': 'DOWN',
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def init_invoice(cls, move_type):
|
||||
move_form = Form(cls.env['account.move'].with_context(default_type=move_type))
|
||||
move_form.invoice_date = fields.Date.from_string('2019-01-01')
|
||||
move_form.partner_id = cls.partner_a
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = cls.product_a
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = cls.product_b
|
||||
return move_form.save()
|
||||
|
||||
def assertInvoiceValues(self, move, expected_lines_values, expected_move_values):
|
||||
def sort_lines(lines):
|
||||
return lines.sorted(lambda line: (line.exclude_from_invoice_tab, not bool(line.tax_line_id), line.name or '', line.balance))
|
||||
self.assertRecordValues(sort_lines(move.line_ids), expected_lines_values)
|
||||
self.assertRecordValues(sort_lines(move.invoice_line_ids), expected_lines_values[:len(move.invoice_line_ids)])
|
||||
self.assertRecordValues(move, [expected_move_values])
|
||||
@@ -1,364 +0,0 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo.addons.account.tests.account_test_users import AccountTestUsers
|
||||
import datetime
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountCustomerInvoice(AccountTestUsers):
|
||||
|
||||
def test_customer_invoice(self):
|
||||
# I will create bank detail with using manager access rights
|
||||
# because account manager can only create bank details.
|
||||
self.res_partner_bank_0 = self.env['res.partner.bank'].sudo(self.account_manager.id).create(dict(
|
||||
acc_type='bank',
|
||||
company_id=self.main_company.id,
|
||||
partner_id=self.main_partner.id,
|
||||
acc_number='123456789',
|
||||
bank_id=self.main_bank.id,
|
||||
))
|
||||
|
||||
# Test with that user which have rights to make Invoicing and payment and who is accountant.
|
||||
# Create a customer invoice
|
||||
self.account_invoice_obj = self.env['account.invoice']
|
||||
self.payment_term = self.env.ref('account.account_payment_term_advance')
|
||||
self.journalrec = self.env['account.journal'].search([('type', '=', 'sale')])[0]
|
||||
self.partner3 = self.env.ref('base.res_partner_3')
|
||||
account_user_type = self.env.ref('account.data_account_type_receivable')
|
||||
self.ova = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_current_assets').id)], limit=1)
|
||||
|
||||
#only adviser can create an account
|
||||
self.account_rec1_id = self.account_model.sudo(self.account_manager.id).create(dict(
|
||||
code="cust_acc",
|
||||
name="customer account",
|
||||
user_type_id=account_user_type.id,
|
||||
reconcile=True,
|
||||
))
|
||||
|
||||
invoice_line_data = [
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_5').id,
|
||||
'quantity': 10.0,
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id,
|
||||
'name': 'product test 5',
|
||||
'price_unit': 100.00,
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
self.account_invoice_customer0 = self.account_invoice_obj.sudo(self.account_user.id).create(dict(
|
||||
name="Test Customer Invoice",
|
||||
payment_term_id=self.payment_term.id,
|
||||
journal_id=self.journalrec.id,
|
||||
partner_id=self.partner3.id,
|
||||
account_id=self.account_rec1_id.id,
|
||||
invoice_line_ids=invoice_line_data
|
||||
))
|
||||
|
||||
# I manually assign tax on invoice
|
||||
invoice_tax_line = {
|
||||
'name': 'Test Tax for Customer Invoice',
|
||||
'manual': 1,
|
||||
'amount': 9050,
|
||||
'account_id': self.ova.id,
|
||||
'invoice_id': self.account_invoice_customer0.id,
|
||||
}
|
||||
tax = self.env['account.invoice.tax'].create(invoice_tax_line)
|
||||
assert tax, "Tax has not been assigned correctly"
|
||||
|
||||
total_before_confirm = self.partner3.total_invoiced
|
||||
|
||||
# I check that Initially customer invoice is in the "Draft" state
|
||||
self.assertEquals(self.account_invoice_customer0.state, 'draft')
|
||||
|
||||
# I check that there is no move attached to the invoice
|
||||
self.assertEquals(len(self.account_invoice_customer0.move_id), 0)
|
||||
|
||||
# I validate invoice by creating on
|
||||
self.account_invoice_customer0.action_invoice_open()
|
||||
|
||||
# I check that the invoice state is "Open"
|
||||
self.assertEquals(self.account_invoice_customer0.state, 'open')
|
||||
|
||||
# I check that now there is a move attached to the invoice
|
||||
assert self.account_invoice_customer0.move_id, "Move not created for open invoice"
|
||||
|
||||
# I totally pay the Invoice
|
||||
self.account_invoice_customer0.pay_and_reconcile(self.env['account.journal'].search([('type', '=', 'bank')], limit=1), 10050.0)
|
||||
|
||||
# I verify that invoice is now in Paid state
|
||||
assert (self.account_invoice_customer0.state == 'paid'), "Invoice is not in Paid state"
|
||||
|
||||
self.partner3.invalidate_cache(ids=self.partner3.ids)
|
||||
total_after_confirm = self.partner3.total_invoiced
|
||||
self.assertEquals(total_after_confirm - total_before_confirm, self.account_invoice_customer0.amount_untaxed_signed)
|
||||
|
||||
# I created a credit note Using Add Credit Note Button
|
||||
invoice_refund_obj = self.env['account.invoice.refund']
|
||||
self.account_invoice_refund_0 = invoice_refund_obj.create(dict(
|
||||
description='Credit Note for China Export',
|
||||
date=datetime.date.today(),
|
||||
filter_refund='refund'
|
||||
))
|
||||
|
||||
# I clicked on Add Credit Note button.
|
||||
self.account_invoice_refund_0.invoice_refund()
|
||||
|
||||
def test_customer_invoice_tax(self):
|
||||
|
||||
self.env.company.tax_calculation_rounding_method = 'round_globally'
|
||||
|
||||
payment_term = self.env.ref('account.account_payment_term_advance')
|
||||
journalrec = self.env['account.journal'].search([('type', '=', 'sale')])[0]
|
||||
partner3 = self.env.ref('base.res_partner_3')
|
||||
account_id = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id
|
||||
|
||||
tax = self.env['account.tax'].create({
|
||||
'name': 'Tax 15.0',
|
||||
'amount': 15.0,
|
||||
'amount_type': 'percent',
|
||||
'type_tax_use': 'sale',
|
||||
})
|
||||
|
||||
invoice_line_data = [
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 40.0,
|
||||
'account_id': account_id,
|
||||
'name': 'product test 1',
|
||||
'discount' : 10.00,
|
||||
'price_unit': 2.27,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax.id])],
|
||||
}
|
||||
),
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_2').id,
|
||||
'quantity': 21.0,
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id,
|
||||
'name': 'product test 2',
|
||||
'discount' : 10.00,
|
||||
'price_unit': 2.77,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax.id])],
|
||||
}
|
||||
),
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_3').id,
|
||||
'quantity': 21.0,
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id,
|
||||
'name': 'product test 3',
|
||||
'discount' : 10.00,
|
||||
'price_unit': 2.77,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax.id])],
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
invoice = self.env['account.invoice'].create(dict(
|
||||
name="Test Customer Invoice",
|
||||
payment_term_id=payment_term.id,
|
||||
journal_id=journalrec.id,
|
||||
partner_id=partner3.id,
|
||||
invoice_line_ids=invoice_line_data
|
||||
))
|
||||
|
||||
self.assertAlmostEquals(invoice.amount_untaxed, sum([x.base for x in invoice.tax_line_ids]))
|
||||
|
||||
def test_customer_invoice_tax_refund(self):
|
||||
company = self.env.company
|
||||
tax_account = self.env['account.account'].create({
|
||||
'name': 'TAX',
|
||||
'code': 'TAX',
|
||||
'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
|
||||
'company_id': company.id,
|
||||
})
|
||||
|
||||
tax_refund_account = self.env['account.account'].create({
|
||||
'name': 'TAX_REFUND',
|
||||
'code': 'TAX_R',
|
||||
'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
|
||||
'company_id': company.id,
|
||||
})
|
||||
|
||||
journalrec = self.env['account.journal'].search([('type', '=', 'sale')])[0]
|
||||
partner3 = self.env.ref('base.res_partner_3')
|
||||
account_id = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id
|
||||
|
||||
tax = self.env['account.tax'].create({
|
||||
'name': 'Tax 15.0',
|
||||
'amount': 15.0,
|
||||
'amount_type': 'percent',
|
||||
'type_tax_use': 'sale',
|
||||
'invoice_repartition_line_ids': [
|
||||
(0,0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
|
||||
(0,0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': tax_account.id,
|
||||
}),
|
||||
|
||||
],
|
||||
'refund_repartition_line_ids': [
|
||||
(0,0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'base',
|
||||
}),
|
||||
|
||||
(0,0, {
|
||||
'factor_percent': 100,
|
||||
'repartition_type': 'tax',
|
||||
'account_id': tax_refund_account.id,
|
||||
}),
|
||||
|
||||
],
|
||||
})
|
||||
|
||||
invoice_line_data = [
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 40.0,
|
||||
'account_id': account_id,
|
||||
'name': 'product test 1',
|
||||
'discount': 10.00,
|
||||
'price_unit': 2.27,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax.id])],
|
||||
}
|
||||
)]
|
||||
|
||||
invoice = self.env['account.invoice'].create(dict(
|
||||
name="Test Customer Invoice",
|
||||
journal_id=journalrec.id,
|
||||
partner_id=partner3.id,
|
||||
invoice_line_ids=invoice_line_data
|
||||
))
|
||||
|
||||
invoice.action_invoice_open()
|
||||
|
||||
refund = invoice.refund()
|
||||
self.assertEqual(invoice.tax_line_ids.mapped('account_id'), tax_account)
|
||||
self.assertEqual(refund.tax_line_ids.mapped('account_id'), tax_refund_account)
|
||||
|
||||
def test_customer_invoice_dashboard(self):
|
||||
def patched_today(*args, **kwargs):
|
||||
return '2019-01-22'
|
||||
|
||||
date_invoice = '2019-01-21'
|
||||
partner3 = self.env.ref('base.res_partner_3')
|
||||
account_id = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id
|
||||
|
||||
journal = self.env['account.journal'].create({
|
||||
'name': 'sale_0',
|
||||
'code': 'SALE0',
|
||||
'type': 'sale',
|
||||
})
|
||||
|
||||
invoice_line_data = [
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 40.0,
|
||||
'account_id': account_id,
|
||||
'name': 'product test 1',
|
||||
'discount': 10.00,
|
||||
'price_unit': 2.27,
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
invoice = self.env['account.invoice'].create(dict(
|
||||
name="Test Customer Invoice",
|
||||
journal_id=journal.id,
|
||||
partner_id=partner3.id,
|
||||
invoice_line_ids=invoice_line_data,
|
||||
date_invoice=date_invoice,
|
||||
))
|
||||
|
||||
refund_line_data = [
|
||||
(0, 0,
|
||||
{
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 1.0,
|
||||
'account_id': account_id,
|
||||
'name': 'product test 1',
|
||||
'price_unit': 13.3,
|
||||
}
|
||||
)]
|
||||
|
||||
refund = self.env['account.invoice'].create(dict(
|
||||
name="Test Customer Refund",
|
||||
type='out_refund',
|
||||
journal_id=journal.id,
|
||||
partner_id=partner3.id,
|
||||
invoice_line_ids=refund_line_data,
|
||||
date_invoice=date_invoice,
|
||||
))
|
||||
|
||||
# Check Draft
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
|
||||
self.assertEquals(dashboard_data['number_draft'], 2)
|
||||
self.assertIn('68.42', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check Both
|
||||
invoice.action_invoice_open()
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 1)
|
||||
self.assertIn('-13.30', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 1)
|
||||
self.assertIn('81.72', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check waiting payment
|
||||
refund.action_invoice_open()
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 2)
|
||||
self.assertIn('68.42', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check partial
|
||||
receivable_account = refund.move_id.line_ids.mapped('account_id').filtered(lambda a: a.internal_type == 'receivable')
|
||||
payment_move = self.env['account.move'].create({
|
||||
'journal_id': journal.id,
|
||||
})
|
||||
payment_move_line = self.env['account.move.line'].with_context(check_move_validity=False).create({
|
||||
'move_id': payment_move.id,
|
||||
'account_id': receivable_account.id,
|
||||
'debit': 10.00,
|
||||
})
|
||||
self.env['account.move.line'].with_context(check_move_validity=False).create({
|
||||
'move_id': payment_move.id,
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_liquidity').id)], limit=1).id,
|
||||
'credit': 10.00,
|
||||
})
|
||||
|
||||
payment_move.post()
|
||||
|
||||
refund.register_payment(payment_move_line)
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 2)
|
||||
self.assertIn('78.42', dashboard_data['sum_waiting'])
|
||||
|
||||
with patch('odoo.fields.Date.today', patched_today):
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_late'], 2)
|
||||
self.assertIn('78.42', dashboard_data['sum_late'])
|
||||
@@ -0,0 +1,123 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.invoice_test_common import InvoiceTestCommon
|
||||
from odoo.tests.common import Form
|
||||
from odoo.tests import tagged
|
||||
from odoo import fields
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountInvoiceReport(InvoiceTestCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAccountInvoiceReport, cls).setUpClass()
|
||||
|
||||
cls.invoices = cls.env['account.move'].create([
|
||||
{
|
||||
'type': 'out_invoice',
|
||||
'partner_id': cls.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2016-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 3,
|
||||
'price_unit': 1000,
|
||||
}),
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 3000,
|
||||
}),
|
||||
]
|
||||
},
|
||||
{
|
||||
'type': 'out_receipt',
|
||||
'invoice_date': fields.Date.from_string('2016-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 6000,
|
||||
}),
|
||||
]
|
||||
},
|
||||
{
|
||||
'type': 'out_refund',
|
||||
'partner_id': cls.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2017-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 1200,
|
||||
}),
|
||||
]
|
||||
},
|
||||
{
|
||||
'type': 'in_invoice',
|
||||
'partner_id': cls.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2016-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 60,
|
||||
}),
|
||||
]
|
||||
},
|
||||
{
|
||||
'type': 'in_receipt',
|
||||
'partner_id': cls.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2016-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 60,
|
||||
}),
|
||||
]
|
||||
},
|
||||
{
|
||||
'type': 'in_refund',
|
||||
'partner_id': cls.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2017-01-01'),
|
||||
'currency_id': cls.currency_data['currency'].id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {
|
||||
'product_id': cls.product_a.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 12,
|
||||
}),
|
||||
]
|
||||
},
|
||||
])
|
||||
|
||||
def assertInvoiceReportValues(self, expected_values_list):
|
||||
reports = self.env['account.invoice.report'].search([('company_id', '=', self.company_data['company'].id)], order='price_subtotal DESC')
|
||||
expected_values_dict = [{
|
||||
'amount_total': vals[0],
|
||||
'price_average': vals[1],
|
||||
'price_subtotal': vals[2],
|
||||
'residual': vals[3],
|
||||
'quantity': vals[4],
|
||||
} for vals in expected_values_list]
|
||||
self.assertRecordValues(reports, expected_values_dict)
|
||||
|
||||
def test_invoice_report_multiple_types(self):
|
||||
self.assertInvoiceReportValues([
|
||||
# amount_total price_average price_subtotal residual quantity
|
||||
[2000, 2000, 2000, 2000, 1],
|
||||
[2000, 1000, 1000, 2000, 1],
|
||||
[2000, 1000, 1000, 2000, 3],
|
||||
[6, 6, 6, 6, 1],
|
||||
[-20, -20, -20, -20, 1],
|
||||
[-20, -20, -20, -20, 1],
|
||||
[-600, -600, -600, -600, 1],
|
||||
])
|
||||
@@ -1,108 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests import tagged
|
||||
|
||||
import time
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountInvoiceRounding(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestAccountInvoiceRounding, self).setUp()
|
||||
self.account_receivable = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
|
||||
self.account_revenue = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1)
|
||||
self.fixed_tax = self.env['account.tax'].create({
|
||||
'name': 'Test Tax',
|
||||
'amount': 0.0,
|
||||
'amount_type': 'fixed',
|
||||
})
|
||||
|
||||
def create_cash_rounding(self, rounding, method, strategy):
|
||||
return self.env['account.cash.rounding'].create({
|
||||
'name': 'rounding ' + method,
|
||||
'rounding': rounding,
|
||||
'account_id': self.account_receivable.id,
|
||||
'strategy': strategy,
|
||||
'rounding_method': method,
|
||||
})
|
||||
|
||||
def create_invoice(self, amount, cash_rounding_id, tax_amount=None):
|
||||
""" Returns an open invoice """
|
||||
invoice_id = self.env['account.invoice'].create({
|
||||
'partner_id': self.env.ref("base.res_partner_2").id,
|
||||
'currency_id': self.env.ref('base.USD').id,
|
||||
'name': 'invoice test rounding',
|
||||
'account_id': self.account_receivable.id,
|
||||
'type': 'out_invoice',
|
||||
'date_invoice': time.strftime('%Y') + '-06-26',
|
||||
})
|
||||
if tax_amount:
|
||||
self.fixed_tax.amount = tax_amount
|
||||
self.env['account.invoice.line'].create({
|
||||
'product_id': self.env.ref("product.product_product_4").id,
|
||||
'quantity': 1,
|
||||
'price_unit': amount,
|
||||
'invoice_id': invoice_id.id,
|
||||
'name': 'something',
|
||||
'account_id': self.account_revenue.id,
|
||||
'invoice_line_tax_ids': [(6, 0, [self.fixed_tax.id])] if tax_amount else None
|
||||
})
|
||||
# Create the tax_line_ids
|
||||
invoice_id._onchange_invoice_line_ids()
|
||||
|
||||
# We need to set the cash_rounding_id after the _onchange_invoice_line_ids
|
||||
# to avoid a ValidationError from _check_cash_rounding because the onchange
|
||||
# are not well triggered in the tests.
|
||||
try:
|
||||
invoice_id.cash_rounding_id = cash_rounding_id
|
||||
except ValidationError:
|
||||
pass
|
||||
|
||||
invoice_id._onchange_cash_rounding()
|
||||
invoice_id.action_invoice_open()
|
||||
return invoice_id
|
||||
|
||||
def _check_invoice_rounding(self, inv, exp_lines_values, exp_tax_values=None):
|
||||
inv_lines = inv.invoice_line_ids
|
||||
self.assertEquals(len(inv_lines), len(exp_lines_values))
|
||||
for i in range(0, len(exp_lines_values)):
|
||||
self.assertEquals(inv_lines[i].price_unit, exp_lines_values[i])
|
||||
|
||||
if exp_tax_values:
|
||||
tax_lines = inv.tax_line_ids
|
||||
self.assertEquals(len(tax_lines), len(exp_tax_values))
|
||||
for i in range(0, len(exp_tax_values)):
|
||||
self.assertEquals(tax_lines[i].amount_total, exp_tax_values[i])
|
||||
|
||||
def test_rounding_add_invoice_line(self):
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.2, self.create_cash_rounding(0.5, 'UP', 'add_invoice_line')),
|
||||
[100.2, 0.3]
|
||||
)
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.9, self.create_cash_rounding(1.0, 'DOWN', 'add_invoice_line')),
|
||||
[100.9, -0.9]
|
||||
)
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.5, self.create_cash_rounding(1.0, 'HALF-UP', 'add_invoice_line')),
|
||||
[100.5, 0.5]
|
||||
)
|
||||
|
||||
def test_rounding_biggest_tax(self):
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.2, self.create_cash_rounding(0.5, 'UP', 'biggest_tax'), 1.0),
|
||||
[100.2], [1.3]
|
||||
)
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.9, self.create_cash_rounding(1.0, 'DOWN', 'biggest_tax'), 2.0),
|
||||
[100.9], [1.1]
|
||||
)
|
||||
self._check_invoice_rounding(
|
||||
self.create_invoice(100.5, self.create_cash_rounding(1.0, 'HALF-UP', 'biggest_tax'), 1.0),
|
||||
[100.5], [1.5]
|
||||
)
|
||||
@@ -0,0 +1,108 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo.addons.account.tests.account_test_users import AccountTestUsers
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountJournalDashboard(AccountTestUsers):
|
||||
def test_customer_invoice_dashboard(self):
|
||||
def patched_today(*args, **kwargs):
|
||||
return '2019-01-22'
|
||||
|
||||
date_invoice = '2019-01-21'
|
||||
|
||||
journal = self.env['account.journal'].create({
|
||||
'name': 'sale_0',
|
||||
'code': 'SALE0',
|
||||
'type': 'sale',
|
||||
})
|
||||
|
||||
invoice = self.env['account.move'].create({
|
||||
'type': 'out_invoice',
|
||||
'journal_id': journal.id,
|
||||
'partner_id': self.env.ref('base.res_partner_3').id,
|
||||
'invoice_date': date_invoice,
|
||||
'date': date_invoice,
|
||||
'invoice_line_ids': [(0, 0, {
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 40.0,
|
||||
'name': 'product test 1',
|
||||
'discount': 10.00,
|
||||
'price_unit': 2.27,
|
||||
})]
|
||||
})
|
||||
refund = self.env['account.move'].create({
|
||||
'type': 'out_refund',
|
||||
'journal_id': journal.id,
|
||||
'partner_id': self.env.ref('base.res_partner_3').id,
|
||||
'invoice_date': '2019-01-21',
|
||||
'date': date_invoice,
|
||||
'invoice_line_ids': [(0, 0, {
|
||||
'product_id': self.env.ref('product.product_product_1').id,
|
||||
'quantity': 1.0,
|
||||
'name': 'product test 1',
|
||||
'price_unit': 13.3,
|
||||
})]
|
||||
})
|
||||
|
||||
# Check Draft
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
|
||||
self.assertEquals(dashboard_data['number_draft'], 2)
|
||||
self.assertIn('68.42', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check Both
|
||||
invoice.post()
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 1)
|
||||
self.assertIn('-13.30', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 1)
|
||||
self.assertIn('81.72', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check waiting payment
|
||||
refund.post()
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 2)
|
||||
self.assertIn('68.42', dashboard_data['sum_waiting'])
|
||||
|
||||
# Check partial
|
||||
receivable_account = refund.line_ids.mapped('account_id').filtered(lambda a: a.internal_type == 'receivable')
|
||||
payment_move = self.env['account.move'].create({
|
||||
'journal_id': journal.id,
|
||||
})
|
||||
payment_move_line = self.env['account.move.line'].with_context(check_move_validity=False).create({
|
||||
'move_id': payment_move.id,
|
||||
'account_id': receivable_account.id,
|
||||
'debit': 10.00,
|
||||
})
|
||||
self.env['account.move.line'].with_context(check_move_validity=False).create({
|
||||
'move_id': payment_move.id,
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_liquidity').id)], limit=1).id,
|
||||
'credit': 10.00,
|
||||
})
|
||||
|
||||
payment_move.post()
|
||||
|
||||
refund.js_assign_outstanding_line(payment_move_line.id)
|
||||
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_draft'], 0)
|
||||
self.assertIn('0.00', dashboard_data['sum_draft'])
|
||||
|
||||
self.assertEquals(dashboard_data['number_waiting'], 2)
|
||||
self.assertIn('78.42', dashboard_data['sum_waiting'])
|
||||
|
||||
with patch('odoo.fields.Date.today', patched_today):
|
||||
dashboard_data = journal.get_journal_dashboard_datas()
|
||||
self.assertEquals(dashboard_data['number_late'], 2)
|
||||
self.assertIn('78.42', dashboard_data['sum_late'])
|
||||
@@ -1,48 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.osv.orm import except_orm
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from calendar import monthrange
|
||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestPeriodState(AccountingTestCase):
|
||||
"""
|
||||
Forbid creation of Journal Entries for a closed period.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestPeriodState, self).setUp()
|
||||
self.user_id = self.env.user
|
||||
|
||||
last_day_month = datetime.now() - relativedelta(months=1)
|
||||
last_day_month = last_day_month.replace(day=monthrange(last_day_month.year, last_day_month.month)[1])
|
||||
self.last_day_month_str = last_day_month.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
#make sure there is no unposted entry
|
||||
draft_entries = self.env['account.move'].search([('date', '<=', self.last_day_month_str), ('state', '=', 'draft')])
|
||||
if draft_entries:
|
||||
draft_entries.post()
|
||||
self.user_id.company_id.fiscalyear_lock_date = self.last_day_month_str
|
||||
self.sale_journal_id = self.env['account.journal'].search([('type', '=', 'sale')])[0]
|
||||
self.account_id = self.env['account.account'].search([('internal_type', '=', 'receivable')])[0]
|
||||
|
||||
def test_period_state(self):
|
||||
with self.assertRaises(except_orm):
|
||||
move = self.env['account.move'].create({
|
||||
'name': '/',
|
||||
'journal_id': self.sale_journal_id.id,
|
||||
'date': self.last_day_month_str,
|
||||
'line_ids': [(0, 0, {
|
||||
'name': 'foo',
|
||||
'debit': 10,
|
||||
'account_id': self.account_id.id,
|
||||
}), (0, 0, {
|
||||
'name': 'bar',
|
||||
'credit': 10,
|
||||
'account_id': self.account_id.id,
|
||||
})]
|
||||
})
|
||||
move.post()
|
||||
@@ -0,0 +1,112 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.invoice_test_common import InvoiceTestCommon
|
||||
from odoo.tests import tagged
|
||||
from odoo import fields
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountMove(InvoiceTestCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAccountMove, cls).setUpClass()
|
||||
|
||||
tax_repartition_line = cls.company_data['default_tax_sale'].invoice_repartition_line_ids\
|
||||
.filtered(lambda line: line.repartition_type == 'tax')
|
||||
cls.test_move = cls.env['account.move'].create({
|
||||
'type': 'entry',
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
'line_ids': [
|
||||
(0, None, {
|
||||
'name': 'revenue line 1',
|
||||
'account_id': cls.company_data['default_account_revenue'].id,
|
||||
'debit': 500.0,
|
||||
'credit': 0.0,
|
||||
}),
|
||||
(0, None, {
|
||||
'name': 'revenue line 2',
|
||||
'account_id': cls.company_data['default_account_revenue'].id,
|
||||
'debit': 1000.0,
|
||||
'credit': 0.0,
|
||||
'tax_ids': [(6, 0, cls.company_data['default_tax_sale'].ids)],
|
||||
}),
|
||||
(0, None, {
|
||||
'name': 'tax line',
|
||||
'account_id': cls.company_data['default_account_tax_sale'].id,
|
||||
'debit': 150.0,
|
||||
'credit': 0.0,
|
||||
'tax_repartition_line_id': tax_repartition_line.id,
|
||||
}),
|
||||
(0, None, {
|
||||
'name': 'counterpart line',
|
||||
'account_id': cls.company_data['default_account_expense'].id,
|
||||
'debit': 0.0,
|
||||
'credit': 1650.0,
|
||||
}),
|
||||
]
|
||||
})
|
||||
|
||||
def test_misc_fiscalyear_lock_date_1(self):
|
||||
with self.assertRaises((ValidationError, UserError)):
|
||||
self.test_move.company_id.fiscalyear_lock_date = fields.Date.from_string('2017-01-01')
|
||||
|
||||
self.cr.execute('''UPDATE res_company SET fiscalyear_lock_date = '2017-01-01' WHERE id = %s''', self.test_move.company_id.ids)
|
||||
|
||||
with self.assertRaises((ValidationError, UserError)):
|
||||
self.test_move.post()
|
||||
|
||||
with self.assertRaises(UserError):
|
||||
self.env['account.move'].create(self.test_move.copy_data())
|
||||
|
||||
def test_misc_tax_lock_date_1(self):
|
||||
# Set the tax lock date after the journal entry date.
|
||||
self.test_move.company_id.tax_lock_date = fields.Date.from_string('2017-01-01')
|
||||
|
||||
# lines[0] = 'counterpart line'
|
||||
# lines[1] = 'tax line'
|
||||
# lines[2] = 'revenue line 1'
|
||||
# lines[3] = 'revenue line 2'
|
||||
lines = self.test_move.line_ids.sorted('debit')
|
||||
|
||||
# Writing not affecting a tax is allowed.
|
||||
self.test_move.write({
|
||||
'line_ids': [
|
||||
(1, lines[0].id, {'credit': 1750.0}), # counterpart line
|
||||
(1, lines[2].id, {'debit': 600.0}), # revenue line 1
|
||||
],
|
||||
})
|
||||
|
||||
self.cr.execute('SAVEPOINT test_misc_tax_lock_date_1')
|
||||
|
||||
# Writing something affecting a tax is not allowed.
|
||||
with self.assertRaises(ValidationError):
|
||||
self.test_move.write({
|
||||
'line_ids': [
|
||||
(1, lines[0].id, {'credit': 2750.0}),
|
||||
(1, lines[3].id, {'debit': 2000.0}),
|
||||
],
|
||||
})
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
self.test_move.write({
|
||||
'line_ids': [
|
||||
(1, lines[3].id, {'tax_ids': [(6, 0, self.company_data['default_tax_purchase'].ids)]}),
|
||||
],
|
||||
})
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
self.test_move.write({
|
||||
'line_ids': [
|
||||
(1, lines[0].id, {'credit': 1900.0}),
|
||||
(1, lines[1].id, {'debit': 300.0}),
|
||||
],
|
||||
})
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
self.test_move.unlink()
|
||||
|
||||
self.cr.execute('ROLLBACK TO SAVEPOINT test_misc_tax_lock_date_1')
|
||||
|
||||
with self.assertRaises(UserError):
|
||||
self.test_move.post()
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,956 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.invoice_test_common import InvoiceTestCommon
|
||||
from odoo.tests.common import Form
|
||||
from odoo.tests import tagged
|
||||
from odoo import fields
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountMoveInRefundOnchanges(InvoiceTestCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAccountMoveInRefundOnchanges, cls).setUpClass()
|
||||
|
||||
cls.invoice = cls.init_invoice('in_refund')
|
||||
|
||||
cls.product_line_vals_1 = {
|
||||
'name': cls.product_a.name,
|
||||
'product_id': cls.product_a.id,
|
||||
'account_id': cls.product_a.property_account_expense_id.id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': cls.product_a.uom_id.id,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 800.0,
|
||||
'price_subtotal': 800.0,
|
||||
'price_total': 920.0,
|
||||
'tax_ids': cls.product_a.supplier_taxes_id.ids,
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 800.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.product_line_vals_2 = {
|
||||
'name': cls.product_b.name,
|
||||
'product_id': cls.product_b.id,
|
||||
'account_id': cls.product_b.property_account_expense_id.id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': cls.product_b.uom_id.id,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 160.0,
|
||||
'price_subtotal': 160.0,
|
||||
'price_total': 208.0,
|
||||
'tax_ids': cls.product_b.supplier_taxes_id.ids,
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 160.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.tax_line_vals_1 = {
|
||||
'name': cls.tax_purchase_a.name,
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_tax_purchase'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 144.0,
|
||||
'price_subtotal': 144.0,
|
||||
'price_total': 144.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': cls.tax_purchase_a.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 144.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.tax_line_vals_2 = {
|
||||
'name': cls.tax_purchase_b.name,
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_tax_purchase'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 24.0,
|
||||
'price_subtotal': 24.0,
|
||||
'price_total': 24.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': cls.tax_purchase_b.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 24.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.term_line_vals_1 = {
|
||||
'name': '',
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_payable'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': -1128.0,
|
||||
'price_subtotal': -1128.0,
|
||||
'price_total': -1128.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 1128.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': fields.Date.from_string('2019-01-01'),
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.move_vals = {
|
||||
'partner_id': cls.partner_a.id,
|
||||
'currency_id': cls.company_data['currency'].id,
|
||||
'journal_id': cls.company_data['default_journal_purchase'].id,
|
||||
'date': fields.Date.from_string('2019-01-01'),
|
||||
'fiscal_position_id': False,
|
||||
'invoice_payment_ref': '',
|
||||
'invoice_payment_term_id': cls.pay_terms_a.id,
|
||||
'amount_untaxed': 960.0,
|
||||
'amount_tax': 168.0,
|
||||
'amount_total': 1128.0,
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(TestAccountMoveInRefundOnchanges, self).setUp()
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
self.product_line_vals_1,
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
def test_in_refund_line_onchange_product_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.product_id = self.product_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'name': self.product_b.name,
|
||||
'product_id': self.product_b.id,
|
||||
'product_uom_id': self.product_b.uom_id.id,
|
||||
'account_id': self.product_b.property_account_expense_id.id,
|
||||
'price_unit': 160.0,
|
||||
'price_subtotal': 160.0,
|
||||
'price_total': 208.0,
|
||||
'tax_ids': self.product_b.supplier_taxes_id.ids,
|
||||
'credit': 160.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 48.0,
|
||||
'price_subtotal': 48.0,
|
||||
'price_total': 48.0,
|
||||
'credit': 48.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'price_unit': 48.0,
|
||||
'price_subtotal': 48.0,
|
||||
'price_total': 48.0,
|
||||
'credit': 48.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -416.0,
|
||||
'price_subtotal': -416.0,
|
||||
'price_total': -416.0,
|
||||
'debit': 416.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 320.0,
|
||||
'amount_tax': 96.0,
|
||||
'amount_total': 416.0,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_business_fields_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
# Current price_unit is 1000.
|
||||
# We set quantity = 4, discount = 50%, price_unit = 400 because (4 * 400) * 0.5 = 800.
|
||||
line_form.quantity = 4
|
||||
line_form.discount = 50
|
||||
line_form.price_unit = 400
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 4,
|
||||
'discount': 50.0,
|
||||
'price_unit': 400.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.line_ids.edit(2) as line_form:
|
||||
# Reset field except the discount that becomes 100%.
|
||||
# /!\ The modification is made on the accounting tab.
|
||||
line_form.quantity = 1
|
||||
line_form.discount = 100
|
||||
line_form.price_unit = 800
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'discount': 100.0,
|
||||
'price_subtotal': 0.0,
|
||||
'price_total': 0.0,
|
||||
'credit': 0.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 24.0,
|
||||
'price_subtotal': 24.0,
|
||||
'price_total': 24.0,
|
||||
'credit': 24.0,
|
||||
},
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -208.0,
|
||||
'price_subtotal': -208.0,
|
||||
'price_total': -208.0,
|
||||
'debit': 208.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 160.0,
|
||||
'amount_tax': 48.0,
|
||||
'amount_total': 208.0,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_accounting_fields_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.line_ids.edit(2) as line_form:
|
||||
# Custom credit on the first product line.
|
||||
line_form.credit = 3000
|
||||
with move_form.line_ids.edit(3) as line_form:
|
||||
# Custom debit on the second product line. Credit should be reset by onchange.
|
||||
# /!\ It's a negative line.
|
||||
line_form.debit = 500
|
||||
with move_form.line_ids.edit(0) as line_form:
|
||||
# Custom credit on the first tax line.
|
||||
line_form.credit = 800
|
||||
with move_form.line_ids.edit(4) as line_form:
|
||||
# Custom credit on the second tax line.
|
||||
line_form.credit = 250
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 3000.0,
|
||||
'price_subtotal': 3000.0,
|
||||
'price_total': 3450.0,
|
||||
'credit': 3000.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'price_unit': -500.0,
|
||||
'price_subtotal': -500.0,
|
||||
'price_total': -650.0,
|
||||
'credit': 0.0,
|
||||
'debit': 500.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 800.0,
|
||||
'price_subtotal': 800.0,
|
||||
'price_total': 800.0,
|
||||
'credit': 800.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'price_unit': 250.0,
|
||||
'price_subtotal': 250.0,
|
||||
'price_total': 250.0,
|
||||
'credit': 250.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -3550.0,
|
||||
'price_subtotal': -3550.0,
|
||||
'price_total': -3550.0,
|
||||
'debit': 3550.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 2500.0,
|
||||
'amount_tax': 1050.0,
|
||||
'amount_total': 3550.0,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_partner_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
move_form.partner_id = self.partner_b
|
||||
move_form.invoice_payment_ref = 'turlututu'
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -338.4,
|
||||
'price_subtotal': -338.4,
|
||||
'price_total': -338.4,
|
||||
'debit': 338.4,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -789.6,
|
||||
'price_subtotal': -789.6,
|
||||
'price_total': -789.6,
|
||||
'debit': 789.6,
|
||||
'date_maturity': fields.Date.from_string('2019-02-28'),
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'partner_id': self.partner_b.id,
|
||||
'invoice_payment_ref': 'turlututu',
|
||||
'fiscal_position_id': self.fiscal_pos_a.id,
|
||||
'invoice_payment_term_id': self.pay_terms_b.id,
|
||||
'amount_untaxed': 960.0,
|
||||
'amount_tax': 168.0,
|
||||
'amount_total': 1128.0,
|
||||
})
|
||||
|
||||
# Remove lines and recreate them to apply the fiscal position.
|
||||
move_form = Form(self.invoice)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_a
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'account_id': self.product_b.property_account_expense_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'tax_ids': self.tax_purchase_b.ids,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_total': 184.0,
|
||||
'tax_ids': self.tax_purchase_b.ids,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'name': self.tax_purchase_b.name,
|
||||
'partner_id': self.partner_b.id,
|
||||
'tax_line_id': self.tax_purchase_b.id,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'account_id': self.partner_b.property_account_payable_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -331.2,
|
||||
'price_subtotal': -331.2,
|
||||
'price_total': -331.2,
|
||||
'debit': 331.2,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'account_id': self.partner_b.property_account_payable_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -772.8,
|
||||
'price_subtotal': -772.8,
|
||||
'price_total': -772.8,
|
||||
'debit': 772.8,
|
||||
'date_maturity': fields.Date.from_string('2019-02-28'),
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'partner_id': self.partner_b.id,
|
||||
'invoice_payment_ref': 'turlututu',
|
||||
'fiscal_position_id': self.fiscal_pos_a.id,
|
||||
'invoice_payment_term_id': self.pay_terms_b.id,
|
||||
'amount_untaxed': 960.0,
|
||||
'amount_tax': 144.0,
|
||||
'amount_total': 1104.0,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_taxes_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.price_unit = 960
|
||||
line_form.tax_ids.add(self.tax_armageddon)
|
||||
move_form.save()
|
||||
|
||||
child_tax_1 = self.tax_armageddon.children_tax_ids[0]
|
||||
child_tax_2 = self.tax_armageddon.children_tax_ids[1]
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 960.0,
|
||||
'price_subtotal': 800.0,
|
||||
'price_total': 1176.0,
|
||||
'tax_ids': (self.tax_purchase_a + self.tax_armageddon).ids,
|
||||
'tax_exigible': False,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
'name': child_tax_1.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_expense'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 96.0,
|
||||
'price_subtotal': 96.0,
|
||||
'price_total': 105.6,
|
||||
'tax_ids': child_tax_2.ids,
|
||||
'tax_line_id': child_tax_1.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 96.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
'name': child_tax_1.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_tax_sale'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 64.0,
|
||||
'price_subtotal': 64.0,
|
||||
'price_total': 70.4,
|
||||
'tax_ids': child_tax_2.ids,
|
||||
'tax_line_id': child_tax_1.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 64.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
'name': child_tax_2.name,
|
||||
'product_id': False,
|
||||
'account_id': child_tax_2.cash_basis_transition_account_id.id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 96.0,
|
||||
'price_subtotal': 96.0,
|
||||
'price_total': 96.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': child_tax_2.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 96.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': False,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -1384.0,
|
||||
'price_subtotal': -1384.0,
|
||||
'price_total': -1384.0,
|
||||
'debit': 1384.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 960.0,
|
||||
'amount_tax': 424.0,
|
||||
'amount_total': 1384.0,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_cash_rounding_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
# Add a cash rounding having 'add_invoice_line'.
|
||||
move_form.invoice_cash_rounding_id = self.cash_rounding_a
|
||||
move_form.save()
|
||||
|
||||
# The cash rounding does nothing as the total is already rounded.
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
self.product_line_vals_1,
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.price_unit = 799.99
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
'name': 'add_invoice_line',
|
||||
'product_id': False,
|
||||
'account_id': self.cash_rounding_a.account_id.id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 0.01,
|
||||
'price_subtotal': 0.01,
|
||||
'price_total': 0.01,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 0.01,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 799.99,
|
||||
'price_subtotal': 799.99,
|
||||
'price_total': 919.99,
|
||||
'credit': 799.99,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
# Change the cash rounding to one having 'biggest_tax'.
|
||||
move_form.invoice_cash_rounding_id = self.cash_rounding_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 799.99,
|
||||
'price_subtotal': 799.99,
|
||||
'price_total': 919.99,
|
||||
'credit': 799.99,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
'name': '%s (rounding)' % self.tax_purchase_a.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_tax_purchase'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': -0.04,
|
||||
'price_subtotal': -0.04,
|
||||
'price_total': -0.04,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': self.tax_purchase_a.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.04,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -1127.95,
|
||||
'price_subtotal': -1127.95,
|
||||
'price_total': -1127.95,
|
||||
'debit': 1127.95,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 959.99,
|
||||
'amount_tax': 167.96,
|
||||
'amount_total': 1127.95,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_currency_1(self):
|
||||
# New journal having a foreign currency set.
|
||||
journal = self.company_data['default_journal_purchase'].copy()
|
||||
journal.currency_id = self.currency_data['currency']
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.journal_id = journal
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -800.0,
|
||||
'credit': 400.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -160.0,
|
||||
'credit': 80.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -144.0,
|
||||
'credit': 72.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -24.0,
|
||||
'credit': 12.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 1128.0,
|
||||
'debit': 564.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
# Change the date to get another rate: 1/3 instead of 1/2.
|
||||
move_form.date = fields.Date.from_string('2016-01-01')
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -800.0,
|
||||
'credit': 266.67,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -160.0,
|
||||
'credit': 53.33,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -144.0,
|
||||
'credit': 48.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -24.0,
|
||||
'credit': 8.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 1128.0,
|
||||
'debit': 376.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
# 0.045 * 0.1 = 0.0045. As the foreign currency has a 0.001 rounding,
|
||||
# the result should be 0.005 after rounding.
|
||||
line_form.quantity = 0.1
|
||||
line_form.price_unit = 0.045
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 0.1,
|
||||
'price_unit': 0.05,
|
||||
'price_subtotal': 0.005,
|
||||
'price_total': 0.006,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -0.005,
|
||||
'credit': 0.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -160.0,
|
||||
'credit': 53.33,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 24.0,
|
||||
'price_subtotal': 24.001,
|
||||
'price_total': 24.001,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -24.001,
|
||||
'credit': 8.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -24.0,
|
||||
'credit': 8.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'price_unit': -208.01,
|
||||
'price_subtotal': -208.006,
|
||||
'price_total': -208.006,
|
||||
'amount_currency': 208.006,
|
||||
'debit': 69.33,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
'amount_untaxed': 160.005,
|
||||
'amount_tax': 48.001,
|
||||
'amount_total': 208.006,
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.currency_id = self.company_data['currency']
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 0.1,
|
||||
'price_unit': 0.1,
|
||||
'price_subtotal': 0.01,
|
||||
'price_total': 0.01,
|
||||
'credit': 0.01,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 24.0,
|
||||
'price_subtotal': 24.0,
|
||||
'price_total': 24.0,
|
||||
'credit': 24.0,
|
||||
},
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -208.01,
|
||||
'price_subtotal': -208.01,
|
||||
'price_total': -208.01,
|
||||
'debit': 208.01,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.company_data['currency'].id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
'amount_untaxed': 160.01,
|
||||
'amount_tax': 48.0,
|
||||
'amount_total': 208.01,
|
||||
})
|
||||
|
||||
def test_in_refund_line_onchange_sequence_number_1(self):
|
||||
self.assertRecordValues(self.invoice, [{
|
||||
'invoice_sequence_number_next': '0001',
|
||||
'invoice_sequence_number_next_prefix': 'BILL/2019/',
|
||||
}])
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.invoice_sequence_number_next = '0042'
|
||||
move_form.save()
|
||||
|
||||
self.assertRecordValues(self.invoice, [{
|
||||
'invoice_sequence_number_next': '0042',
|
||||
'invoice_sequence_number_next_prefix': 'BILL/2019/',
|
||||
}])
|
||||
|
||||
self.invoice.post()
|
||||
|
||||
self.assertRecordValues(self.invoice, [{'name': 'BILL/2019/0042'}])
|
||||
|
||||
invoice_copy = self.invoice.copy()
|
||||
invoice_copy.post()
|
||||
|
||||
self.assertRecordValues(invoice_copy, [{'name': 'BILL/2019/0043'}])
|
||||
|
||||
def test_in_refund_onchange_past_invoice_1(self):
|
||||
copy_invoice = self.invoice.copy()
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
move_form.invoice_vendor_bill_id = copy_invoice
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
self.product_line_vals_1,
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
def test_in_refund_create_1(self):
|
||||
# Test creating an account_move with the least information.
|
||||
move = self.env['account.move'].create({
|
||||
'type': 'in_refund',
|
||||
'partner_id': self.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2019-01-01'),
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'invoice_payment_term_id': self.pay_terms_a.id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_1),
|
||||
(0, None, self.product_line_vals_2),
|
||||
]
|
||||
})
|
||||
|
||||
self.assertInvoiceValues(move, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -800.0,
|
||||
'credit': 400.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -160.0,
|
||||
'credit': 80.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -144.0,
|
||||
'credit': 72.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -24.0,
|
||||
'credit': 12.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 1128.0,
|
||||
'debit': 564.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
})
|
||||
|
||||
def test_in_refund_write_1(self):
|
||||
# Test creating an account_move with the least information.
|
||||
move = self.env['account.move'].create({
|
||||
'type': 'in_refund',
|
||||
'partner_id': self.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2019-01-01'),
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'invoice_payment_term_id': self.pay_terms_a.id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_1),
|
||||
]
|
||||
})
|
||||
move.write({
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_2),
|
||||
]
|
||||
})
|
||||
|
||||
self.assertInvoiceValues(move, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -800.0,
|
||||
'credit': 400.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -160.0,
|
||||
'credit': 80.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -144.0,
|
||||
'credit': 72.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -24.0,
|
||||
'credit': 12.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 1128.0,
|
||||
'debit': 564.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
})
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,939 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.invoice_test_common import InvoiceTestCommon
|
||||
from odoo.tests.common import Form
|
||||
from odoo.tests import tagged
|
||||
from odoo import fields
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountMoveOutRefundOnchanges(InvoiceTestCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAccountMoveOutRefundOnchanges, cls).setUpClass()
|
||||
|
||||
cls.invoice = cls.init_invoice('out_refund')
|
||||
|
||||
cls.product_line_vals_1 = {
|
||||
'name': cls.product_a.name,
|
||||
'product_id': cls.product_a.id,
|
||||
'account_id': cls.product_a.property_account_income_id.id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': cls.product_a.uom_id.id,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 1000.0,
|
||||
'price_subtotal': 1000.0,
|
||||
'price_total': 1150.0,
|
||||
'tax_ids': cls.product_a.taxes_id.ids,
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 1000.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.product_line_vals_2 = {
|
||||
'name': cls.product_b.name,
|
||||
'product_id': cls.product_b.id,
|
||||
'account_id': cls.product_b.property_account_income_id.id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': cls.product_b.uom_id.id,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 200.0,
|
||||
'price_subtotal': 200.0,
|
||||
'price_total': 260.0,
|
||||
'tax_ids': cls.product_b.taxes_id.ids,
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 200.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.tax_line_vals_1 = {
|
||||
'name': cls.tax_sale_a.name,
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_tax_sale'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 180.0,
|
||||
'price_subtotal': 180.0,
|
||||
'price_total': 180.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': cls.tax_sale_a.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 180.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.tax_line_vals_2 = {
|
||||
'name': cls.tax_sale_b.name,
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_tax_sale'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 30.0,
|
||||
'price_subtotal': 30.0,
|
||||
'price_total': 30.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': cls.tax_sale_b.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 30.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.term_line_vals_1 = {
|
||||
'name': '',
|
||||
'product_id': False,
|
||||
'account_id': cls.company_data['default_account_receivable'].id,
|
||||
'partner_id': cls.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': -1410.0,
|
||||
'price_subtotal': -1410.0,
|
||||
'price_total': -1410.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 1410.0,
|
||||
'date_maturity': fields.Date.from_string('2019-01-01'),
|
||||
'tax_exigible': True,
|
||||
}
|
||||
cls.move_vals = {
|
||||
'partner_id': cls.partner_a.id,
|
||||
'currency_id': cls.company_data['currency'].id,
|
||||
'journal_id': cls.company_data['default_journal_sale'].id,
|
||||
'date': fields.Date.from_string('2019-01-01'),
|
||||
'fiscal_position_id': False,
|
||||
'invoice_payment_ref': '',
|
||||
'invoice_payment_term_id': cls.pay_terms_a.id,
|
||||
'amount_untaxed': 1200.0,
|
||||
'amount_tax': 210.0,
|
||||
'amount_total': 1410.0,
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(TestAccountMoveOutRefundOnchanges, self).setUp()
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
self.product_line_vals_1,
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
def test_out_refund_line_onchange_product_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.product_id = self.product_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'name': self.product_b.name,
|
||||
'product_id': self.product_b.id,
|
||||
'product_uom_id': self.product_b.uom_id.id,
|
||||
'account_id': self.product_b.property_account_income_id.id,
|
||||
'price_unit': 200.0,
|
||||
'price_subtotal': 200.0,
|
||||
'price_total': 260.0,
|
||||
'tax_ids': self.product_b.taxes_id.ids,
|
||||
'debit': 200.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 60.0,
|
||||
'price_subtotal': 60.0,
|
||||
'price_total': 60.0,
|
||||
'debit': 60.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'price_unit': 60.0,
|
||||
'price_subtotal': 60.0,
|
||||
'price_total': 60.0,
|
||||
'debit': 60.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -520.0,
|
||||
'price_subtotal': -520.0,
|
||||
'price_total': -520.0,
|
||||
'credit': 520.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 400.0,
|
||||
'amount_tax': 120.0,
|
||||
'amount_total': 520.0,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_business_fields_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
# Current price_unit is 1000.
|
||||
# We set quantity = 4, discount = 50%, price_unit = 500 because (4 * 500) * 0.5 = 1000.
|
||||
line_form.quantity = 4
|
||||
line_form.discount = 50
|
||||
line_form.price_unit = 500
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 4,
|
||||
'discount': 50.0,
|
||||
'price_unit': 500.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.line_ids.edit(2) as line_form:
|
||||
# Reset field except the discount that becomes 100%.
|
||||
# /!\ The modification is made on the accounting tab.
|
||||
line_form.quantity = 1
|
||||
line_form.discount = 100
|
||||
line_form.price_unit = 1000
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'discount': 100.0,
|
||||
'price_subtotal': 0.0,
|
||||
'price_total': 0.0,
|
||||
'debit': 0.0,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 30.0,
|
||||
'price_subtotal': 30.0,
|
||||
'price_total': 30.0,
|
||||
'debit': 30.0,
|
||||
},
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -260.0,
|
||||
'price_subtotal': -260.0,
|
||||
'price_total': -260.0,
|
||||
'credit': 260.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 200.0,
|
||||
'amount_tax': 60.0,
|
||||
'amount_total': 260.0,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_accounting_fields_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.line_ids.edit(2) as line_form:
|
||||
# Custom debit on the first product line.
|
||||
line_form.debit = 3000
|
||||
with move_form.line_ids.edit(3) as line_form:
|
||||
# Custom credit on the second product line. Credit should be reset by onchange.
|
||||
# /!\ It's a negative line.
|
||||
line_form.credit = 500
|
||||
with move_form.line_ids.edit(0) as line_form:
|
||||
# Custom debit on the first tax line.
|
||||
line_form.debit = 800
|
||||
with move_form.line_ids.edit(4) as line_form:
|
||||
# Custom debit on the second tax line.
|
||||
line_form.debit = 250
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 3000.0,
|
||||
'price_subtotal': 3000.0,
|
||||
'price_total': 3450.0,
|
||||
'debit': 3000.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'price_unit': -500.0,
|
||||
'price_subtotal': -500.0,
|
||||
'price_total': -650.0,
|
||||
'debit': 0.0,
|
||||
'credit': 500.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 800.0,
|
||||
'price_subtotal': 800.0,
|
||||
'price_total': 800.0,
|
||||
'debit': 800.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'price_unit': 250.0,
|
||||
'price_subtotal': 250.0,
|
||||
'price_total': 250.0,
|
||||
'debit': 250.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -3550.0,
|
||||
'price_subtotal': -3550.0,
|
||||
'price_total': -3550.0,
|
||||
'credit': 3550.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 2500.0,
|
||||
'amount_tax': 1050.0,
|
||||
'amount_total': 3550.0,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_partner_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
move_form.partner_id = self.partner_b
|
||||
move_form.invoice_payment_ref = 'turlututu'
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -987.0,
|
||||
'price_subtotal': -987.0,
|
||||
'price_total': -987.0,
|
||||
'credit': 987.0,
|
||||
'date_maturity': fields.Date.from_string('2019-02-28'),
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -423.0,
|
||||
'price_subtotal': -423.0,
|
||||
'price_total': -423.0,
|
||||
'credit': 423.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'partner_id': self.partner_b.id,
|
||||
'invoice_payment_ref': 'turlututu',
|
||||
'fiscal_position_id': self.fiscal_pos_a.id,
|
||||
'invoice_payment_term_id': self.pay_terms_b.id,
|
||||
'amount_untaxed': 1200.0,
|
||||
'amount_tax': 210.0,
|
||||
'amount_total': 1410.0,
|
||||
})
|
||||
|
||||
# Remove lines and recreate them to apply the fiscal position.
|
||||
move_form = Form(self.invoice)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
move_form.invoice_line_ids.remove(0)
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_a
|
||||
with move_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'account_id': self.product_b.property_account_income_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'tax_ids': self.tax_sale_b.ids,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_total': 230.0,
|
||||
'tax_ids': self.tax_sale_b.ids,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'name': self.tax_sale_b.name,
|
||||
'partner_id': self.partner_b.id,
|
||||
'tax_line_id': self.tax_sale_b.id,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'account_id': self.partner_b.property_account_receivable_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -966.0,
|
||||
'price_subtotal': -966.0,
|
||||
'price_total': -966.0,
|
||||
'credit': 966.0,
|
||||
'date_maturity': fields.Date.from_string('2019-02-28'),
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'name': 'turlututu',
|
||||
'account_id': self.partner_b.property_account_receivable_id.id,
|
||||
'partner_id': self.partner_b.id,
|
||||
'price_unit': -414.0,
|
||||
'price_subtotal': -414.0,
|
||||
'price_total': -414.0,
|
||||
'credit': 414.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'partner_id': self.partner_b.id,
|
||||
'invoice_payment_ref': 'turlututu',
|
||||
'fiscal_position_id': self.fiscal_pos_a.id,
|
||||
'invoice_payment_term_id': self.pay_terms_b.id,
|
||||
'amount_untaxed': 1200.0,
|
||||
'amount_tax': 180.0,
|
||||
'amount_total': 1380.0,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_taxes_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.price_unit = 1200
|
||||
line_form.tax_ids.add(self.tax_armageddon)
|
||||
move_form.save()
|
||||
|
||||
child_tax_1 = self.tax_armageddon.children_tax_ids[0]
|
||||
child_tax_2 = self.tax_armageddon.children_tax_ids[1]
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 1200.0,
|
||||
'price_subtotal': 1000.0,
|
||||
'price_total': 1470.0,
|
||||
'tax_ids': (self.tax_sale_a + self.tax_armageddon).ids,
|
||||
'tax_exigible': False,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
'name': child_tax_1.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_tax_sale'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 80.0,
|
||||
'price_subtotal': 80.0,
|
||||
'price_total': 88.0,
|
||||
'tax_ids': child_tax_2.ids,
|
||||
'tax_line_id': child_tax_1.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 80.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
'name': child_tax_1.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_revenue'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 120.0,
|
||||
'price_subtotal': 120.0,
|
||||
'price_total': 132.0,
|
||||
'tax_ids': child_tax_2.ids,
|
||||
'tax_line_id': child_tax_1.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 120.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
'name': child_tax_2.name,
|
||||
'product_id': False,
|
||||
'account_id': child_tax_2.cash_basis_transition_account_id.id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 120.0,
|
||||
'price_subtotal': 120.0,
|
||||
'price_total': 120.0,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': child_tax_2.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 120.0,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': False,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -1730.0,
|
||||
'price_subtotal': -1730.0,
|
||||
'price_total': -1730.0,
|
||||
'credit': 1730.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 1200.0,
|
||||
'amount_tax': 530.0,
|
||||
'amount_total': 1730.0,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_cash_rounding_1(self):
|
||||
move_form = Form(self.invoice)
|
||||
# Add a cash rounding having 'add_invoice_line'.
|
||||
move_form.invoice_cash_rounding_id = self.cash_rounding_a
|
||||
move_form.save()
|
||||
|
||||
# The cash rounding does nothing as the total is already rounded.
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
self.product_line_vals_1,
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
line_form.price_unit = 999.99
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
'name': 'add_invoice_line',
|
||||
'product_id': False,
|
||||
'account_id': self.cash_rounding_a.account_id.id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': 0.01,
|
||||
'price_subtotal': 0.01,
|
||||
'price_total': 0.01,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': False,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.01,
|
||||
'credit': 0.0,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 999.99,
|
||||
'price_subtotal': 999.99,
|
||||
'price_total': 1149.99,
|
||||
'debit': 999.99,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
self.term_line_vals_1,
|
||||
], self.move_vals)
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
# Change the cash rounding to one having 'biggest_tax'.
|
||||
move_form.invoice_cash_rounding_id = self.cash_rounding_b
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'price_unit': 999.99,
|
||||
'price_subtotal': 999.99,
|
||||
'price_total': 1149.99,
|
||||
'debit': 999.99,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
self.tax_line_vals_1,
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
'name': '%s (rounding)' % self.tax_sale_a.name,
|
||||
'product_id': False,
|
||||
'account_id': self.company_data['default_account_tax_sale'].id,
|
||||
'partner_id': self.partner_a.id,
|
||||
'product_uom_id': False,
|
||||
'quantity': 1.0,
|
||||
'discount': 0.0,
|
||||
'price_unit': -0.04,
|
||||
'price_subtotal': -0.04,
|
||||
'price_total': -0.04,
|
||||
'tax_ids': [],
|
||||
'tax_line_id': self.tax_sale_a.id,
|
||||
'currency_id': False,
|
||||
'amount_currency': 0.0,
|
||||
'debit': 0.0,
|
||||
'credit': 0.04,
|
||||
'date_maturity': False,
|
||||
'tax_exigible': True,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -1409.95,
|
||||
'price_subtotal': -1409.95,
|
||||
'price_total': -1409.95,
|
||||
'credit': 1409.95,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'amount_untaxed': 1199.99,
|
||||
'amount_tax': 209.96,
|
||||
'amount_total': 1409.95,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_currency_1(self):
|
||||
# New journal having a foreign currency set.
|
||||
journal = self.company_data['default_journal_sale'].copy()
|
||||
journal.currency_id = self.currency_data['currency']
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.journal_id = journal
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 1000.0,
|
||||
'debit': 500.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 200.0,
|
||||
'debit': 100.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 180.0,
|
||||
'debit': 90.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 30.0,
|
||||
'debit': 15.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -1410.0,
|
||||
'credit': 705.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
# Change the date to get another rate: 1/3 instead of 1/2.
|
||||
move_form.date = fields.Date.from_string('2016-01-01')
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 1000.0,
|
||||
'debit': 333.33,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 200.0,
|
||||
'debit': 66.67,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 180.0,
|
||||
'debit': 60.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 30.0,
|
||||
'debit': 10.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': -1410.0,
|
||||
'credit': 470.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
with move_form.invoice_line_ids.edit(0) as line_form:
|
||||
# 0.045 * 0.1 = 0.0045. As the foreign currency has a 0.001 rounding,
|
||||
# the result should be 0.005 after rounding.
|
||||
line_form.quantity = 0.1
|
||||
line_form.price_unit = 0.045
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 0.1,
|
||||
'price_unit': 0.05,
|
||||
'price_subtotal': 0.005,
|
||||
'price_total': 0.006,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 0.005,
|
||||
'debit': 0.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 200.0,
|
||||
'debit': 66.67,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 30.0,
|
||||
'price_subtotal': 30.001,
|
||||
'price_total': 30.001,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 30.001,
|
||||
'debit': 10.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'amount_currency': 30.0,
|
||||
'debit': 10.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'price_unit': -260.01,
|
||||
'price_subtotal': -260.006,
|
||||
'price_total': -260.006,
|
||||
'amount_currency': -260.006,
|
||||
'credit': 86.67,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': journal.currency_id.id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
'amount_untaxed': 200.005,
|
||||
'amount_tax': 60.001,
|
||||
'amount_total': 260.006,
|
||||
})
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.currency_id = self.company_data['currency']
|
||||
move_form.save()
|
||||
|
||||
self.assertInvoiceValues(self.invoice, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'quantity': 0.1,
|
||||
'price_unit': 0.1,
|
||||
'price_subtotal': 0.01,
|
||||
'price_total': 0.01,
|
||||
'debit': 0.01,
|
||||
},
|
||||
self.product_line_vals_2,
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'price_unit': 30.0,
|
||||
'price_subtotal': 30.0,
|
||||
'price_total': 30.0,
|
||||
'debit': 30.0,
|
||||
},
|
||||
self.tax_line_vals_2,
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'price_unit': -260.01,
|
||||
'price_subtotal': -260.01,
|
||||
'price_total': -260.01,
|
||||
'credit': 260.01,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.company_data['currency'].id,
|
||||
'journal_id': journal.id,
|
||||
'date': fields.Date.from_string('2016-01-01'),
|
||||
'amount_untaxed': 200.01,
|
||||
'amount_tax': 60.0,
|
||||
'amount_total': 260.01,
|
||||
})
|
||||
|
||||
def test_out_refund_line_onchange_sequence_number_1(self):
|
||||
self.assertRecordValues(self.invoice, [{
|
||||
'invoice_sequence_number_next': '0001',
|
||||
'invoice_sequence_number_next_prefix': 'INV/2019/',
|
||||
}])
|
||||
|
||||
move_form = Form(self.invoice)
|
||||
move_form.invoice_sequence_number_next = '0042'
|
||||
move_form.save()
|
||||
|
||||
self.assertRecordValues(self.invoice, [{
|
||||
'invoice_sequence_number_next': '0042',
|
||||
'invoice_sequence_number_next_prefix': 'INV/2019/',
|
||||
}])
|
||||
|
||||
self.invoice.post()
|
||||
|
||||
self.assertRecordValues(self.invoice, [{'name': 'INV/2019/0042'}])
|
||||
|
||||
invoice_copy = self.invoice.copy()
|
||||
invoice_copy.post()
|
||||
|
||||
self.assertRecordValues(invoice_copy, [{'name': 'INV/2019/0043'}])
|
||||
|
||||
def test_out_refund_create_1(self):
|
||||
# Test creating an account_move with the least information.
|
||||
move = self.env['account.move'].create({
|
||||
'type': 'out_refund',
|
||||
'partner_id': self.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2019-01-01'),
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'invoice_payment_term_id': self.pay_terms_a.id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_1),
|
||||
(0, None, self.product_line_vals_2),
|
||||
]
|
||||
})
|
||||
|
||||
self.assertInvoiceValues(move, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 1000.0,
|
||||
'debit': 500.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 200.0,
|
||||
'debit': 100.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 180.0,
|
||||
'debit': 90.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 30.0,
|
||||
'debit': 15.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -1410.0,
|
||||
'credit': 705.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
})
|
||||
|
||||
def test_out_refund_write_1(self):
|
||||
# Test creating an account_move with the least information.
|
||||
move = self.env['account.move'].create({
|
||||
'type': 'out_refund',
|
||||
'partner_id': self.partner_a.id,
|
||||
'invoice_date': fields.Date.from_string('2019-01-01'),
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'invoice_payment_term_id': self.pay_terms_a.id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_1),
|
||||
]
|
||||
})
|
||||
move.write({
|
||||
'invoice_line_ids': [
|
||||
(0, None, self.product_line_vals_2),
|
||||
]
|
||||
})
|
||||
|
||||
self.assertInvoiceValues(move, [
|
||||
{
|
||||
**self.product_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 1000.0,
|
||||
'debit': 500.0,
|
||||
},
|
||||
{
|
||||
**self.product_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 200.0,
|
||||
'debit': 100.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 180.0,
|
||||
'debit': 90.0,
|
||||
},
|
||||
{
|
||||
**self.tax_line_vals_2,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': 30.0,
|
||||
'debit': 15.0,
|
||||
},
|
||||
{
|
||||
**self.term_line_vals_1,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
'amount_currency': -1410.0,
|
||||
'credit': 705.0,
|
||||
},
|
||||
], {
|
||||
**self.move_vals,
|
||||
'currency_id': self.currency_data['currency'].id,
|
||||
})
|
||||
@@ -1,116 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from calendar import monthrange
|
||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestTaxBlockDate(AccountingTestCase):
|
||||
"""
|
||||
Forbid creation, edition and deletion of Journal Items related to taxes with
|
||||
a date prior to the Tax Block Date.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestTaxBlockDate, self).setUp()
|
||||
self.user_id = self.env.user
|
||||
company_id = self.user_id.company_id.id
|
||||
|
||||
last_day_month = datetime.now()
|
||||
last_day_month = last_day_month.replace(day=monthrange(last_day_month.year, last_day_month.month)[1])
|
||||
self.last_day_month_str = last_day_month.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
first_day_month = datetime.now()
|
||||
first_day_month = first_day_month.replace(day=1)
|
||||
self.first_day_month_str = first_day_month.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
middle_day_month = datetime.now()
|
||||
middle_day_month = middle_day_month.replace(day=15)
|
||||
self.middle_day_month_str = middle_day_month.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
self.sale_journal_id = self.env['account.journal'].search([('type', '=', 'sale'), ('company_id', '=', company_id)], limit=1)[0]
|
||||
self.account_id = self.env['account.account'].search([('internal_type', '=', 'receivable'), ('company_id', '=', company_id)], limit=1)[0]
|
||||
self.other_account_id = self.env['account.account'].search([('internal_type', '!=', 'receivable'), ('company_id', '=', company_id)], limit=1)[0]
|
||||
self.tax_id = self.env['account.tax'].search([('company_id', '=', company_id)], limit=1)[0]
|
||||
|
||||
self.move = {
|
||||
'name': '/',
|
||||
'journal_id': self.sale_journal_id.id,
|
||||
'date': self.middle_day_month_str,
|
||||
'line_ids': [(0, 0, {
|
||||
'name': 'foo',
|
||||
'debit': 10,
|
||||
'account_id': self.account_id.id,
|
||||
'tax_ids': [(6, False, [self.tax_id.id])]
|
||||
}), (0, 0, {
|
||||
'name': 'bar',
|
||||
'credit': 10,
|
||||
'account_id': self.account_id.id,
|
||||
})]
|
||||
}
|
||||
|
||||
def test_create_before_block_date(self):
|
||||
"""
|
||||
Checks that you cannot create an account.move with a date before the tax
|
||||
lock date
|
||||
"""
|
||||
self.user_id.company_id.tax_lock_date = self.last_day_month_str
|
||||
with self.assertRaises(ValidationError):
|
||||
move = self.env['account.move'].create(self.move)
|
||||
move.post()
|
||||
|
||||
def test_change_after_block_date(self):
|
||||
"""
|
||||
Checks that you can change an account.move with a date after the tax
|
||||
lock date
|
||||
"""
|
||||
self.user_id.company_id.tax_lock_date = self.first_day_month_str
|
||||
move = self.env['account.move'].create(self.move)
|
||||
move.line_ids[0].write({'account_id': self.other_account_id.id})
|
||||
move.line_ids[1].write({'account_id': self.other_account_id.id})
|
||||
move.line_ids[1].write({'debit': 11})
|
||||
move.line_ids[0].write({'credit': 11})
|
||||
move.post()
|
||||
move.line_ids[1].write({'tax_ids': [(5, False, False)]})
|
||||
|
||||
def test_change_before_block_date(self):
|
||||
"""
|
||||
Checks that you cannot change an account.move with a date before the tax
|
||||
lock date
|
||||
"""
|
||||
self.user_id.company_id.tax_lock_date = self.first_day_month_str
|
||||
move = self.env['account.move'].create(self.move)
|
||||
self.user_id.company_id.tax_lock_date = self.last_day_month_str
|
||||
move.line_ids[0].write({'account_id': self.other_account_id.id})
|
||||
move.line_ids[1].write({'account_id': self.other_account_id.id})
|
||||
with self.assertRaises(ValidationError):
|
||||
with self.cr.savepoint():
|
||||
move.line_ids[1].write({'debit': 11})
|
||||
with self.assertRaises(ValidationError):
|
||||
with self.cr.savepoint():
|
||||
move.line_ids[1].write({'date': self.last_day_month_str, 'tax_ids': [(5, False, False)]})
|
||||
move.line_ids[0].write({'credit': 10})
|
||||
move.post()
|
||||
|
||||
def test_unlink_before_block_date(self):
|
||||
"""
|
||||
Checks that you cannot unlink an account.move with a date before the tax
|
||||
lock date
|
||||
"""
|
||||
self.user_id.company_id.tax_lock_date = self.first_day_month_str
|
||||
move = self.env['account.move'].create(self.move)
|
||||
move.post()
|
||||
self.user_id.company_id.tax_lock_date = self.last_day_month_str
|
||||
with self.assertRaises(ValidationError):
|
||||
move.unlink()
|
||||
|
||||
def test_unlink_after_block_date(self):
|
||||
"""
|
||||
Checks that you can unlink an account.move with a date after the lock
|
||||
date
|
||||
"""
|
||||
self.user_id.company_id.tax_lock_date = self.first_day_month_str
|
||||
move = self.env['account.move'].create(self.move)
|
||||
move.post()
|
||||
move.unlink()
|
||||
@@ -1,194 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.tests import tagged
|
||||
from odoo.tests.common import Form
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountMoveTaxesEdition(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(AccountingTestCase, self).setUp()
|
||||
self.percent_tax = self.env['account.tax'].create({
|
||||
'name': 'tax_line',
|
||||
'amount_type': 'percent',
|
||||
'amount': 10,
|
||||
})
|
||||
self.journal = self.env['account.journal'].search([], limit=1)
|
||||
self.account = self.env['account.account'].search([
|
||||
('deprecated', '=', False), ('company_id', '=', self.journal.company_id.id)
|
||||
], limit=1)
|
||||
|
||||
def test_onchange_taxes_1(self):
|
||||
'''
|
||||
Test an account.move.line is created automatically when adding a tax.
|
||||
This test uses the following scenario:
|
||||
- Create manually a debit line of 1000 having a tax.
|
||||
- Assume a line containing the tax amount is created automatically.
|
||||
- Create manually a credit line to balance the two previous lines.
|
||||
- Save the move.
|
||||
|
||||
tax = 10%
|
||||
|
||||
Name | Debit | Credit | Tax_ids | Tax_line_id's name
|
||||
----------------|-----------|-----------|---------------|-------------------
|
||||
debit_line_1 | 1000 | | tax |
|
||||
tax_line | 100 | | | tax_line
|
||||
debit_line_1 | | 1100 | |
|
||||
'''
|
||||
move_form = Form(self.env['account.move'], view='account.view_move_form')
|
||||
move_form.ref = 'azerty'
|
||||
move_form.journal_id = self.journal
|
||||
|
||||
# Create a new account.move.line with debit amount.
|
||||
with move_form.line_ids.new() as debit_line:
|
||||
debit_line.name = 'debit_line_1'
|
||||
debit_line.account_id = self.account
|
||||
debit_line.debit = 1000
|
||||
debit_line.tax_ids.clear()
|
||||
debit_line.tax_ids.add(self.percent_tax)
|
||||
|
||||
self.assertTrue(debit_line.recompute_tax_line)
|
||||
|
||||
# Create a third account.move.line with credit amount.
|
||||
with move_form.line_ids.new() as credit_line:
|
||||
credit_line.name = 'credit_line_1'
|
||||
credit_line.account_id = self.account
|
||||
credit_line.credit = 1100
|
||||
|
||||
move = move_form.save()
|
||||
|
||||
self.assertRecordValues(move.line_ids, [
|
||||
{'name': 'credit_line_1', 'debit': 0.0, 'credit': 1100.0, 'tax_ids': [], 'tax_line_id': False},
|
||||
{'name': 'tax_line', 'debit': 100.0, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.percent_tax.id},
|
||||
{'name': 'debit_line_1', 'debit': 1000.0, 'credit': 0.0, 'tax_ids': [self.percent_tax.id], 'tax_line_id': False},
|
||||
])
|
||||
|
||||
def test_onchange_taxes_2(self):
|
||||
'''
|
||||
Test the amount of tax account.move.line is adapted when editing the account.move.line amount.
|
||||
This test uses the following scenario:
|
||||
- Create manually a debit line of 1000 having a tax.
|
||||
- Assume a line containing the tax amount is created automatically.
|
||||
- Set the debit amount to 2000 in the first created line.
|
||||
- Assume the line containing the tax amount has been updated automatically.
|
||||
- Create manually a credit line to balance the two previous lines.
|
||||
- Save the move.
|
||||
|
||||
tax = 10%
|
||||
|
||||
Name | Debit | Credit | Tax_ids | Tax_line_id's name
|
||||
----------------|-----------|-----------|---------------|-------------------
|
||||
debit_line_1 | 2000 | | tax |
|
||||
tax_line | 200 | | | tax_line
|
||||
debit_line_1 | | 2200 | |
|
||||
'''
|
||||
move_form = Form(self.env['account.move'], view='account.view_move_form')
|
||||
move_form.ref = 'azerty'
|
||||
move_form.journal_id = self.journal
|
||||
|
||||
# Create a new account.move.line with debit amount.
|
||||
with move_form.line_ids.new() as debit_line:
|
||||
debit_line.name = 'debit_line_1'
|
||||
debit_line.account_id = self.account
|
||||
debit_line.debit = 1000
|
||||
debit_line.tax_ids.clear()
|
||||
debit_line.tax_ids.add(self.percent_tax)
|
||||
|
||||
self.assertTrue(debit_line.recompute_tax_line)
|
||||
|
||||
debit_line.debit = 2000
|
||||
|
||||
self.assertTrue(debit_line.recompute_tax_line)
|
||||
|
||||
# Create a third account.move.line with credit amount.
|
||||
with move_form.line_ids.new() as credit_line:
|
||||
credit_line.name = 'credit_line_1'
|
||||
credit_line.account_id = self.account
|
||||
credit_line.credit = 2200
|
||||
|
||||
move = move_form.save()
|
||||
|
||||
self.assertRecordValues(move.line_ids, [
|
||||
{'name': 'credit_line_1', 'debit': 0.0, 'credit': 2200.0, 'tax_ids': [], 'tax_line_id': False},
|
||||
{'name': 'tax_line', 'debit': 200.0, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.percent_tax.id},
|
||||
{'name': 'debit_line_1', 'debit': 2000.0, 'credit': 0.0, 'tax_ids': [self.percent_tax.id], 'tax_line_id': False},
|
||||
])
|
||||
|
||||
def test_onchange_taxes_3(self):
|
||||
'''
|
||||
Test the amount of tax account.move.line is still editable manually.
|
||||
Test the amount of tax account.move.line is cumulative for the same tax.
|
||||
This test uses the following scenario:
|
||||
- Create manually a debit line of 1000 having a tax.
|
||||
- Assume a line containing the tax amount is created automatically.
|
||||
- Edit the tax line amount of the auto-generated line by adding 5.
|
||||
- Create manually a credit line to balance the two previous lines.
|
||||
- Save the move.
|
||||
- Edit the move.
|
||||
- Create manually a debit line of 2000 having the same tax.
|
||||
- Assume the line containing the tax amount has been updated (no new line created).
|
||||
- Create manually a credit line to balance the four previous lines.
|
||||
- Save the move.
|
||||
|
||||
tax = 10%
|
||||
|
||||
Name | Debit | Credit | Tax_ids | Tax_line_id's name
|
||||
----------------|-----------|-----------|---------------|-------------------
|
||||
debit_line_1 | 1000 | | tax |
|
||||
tax_line | 300 | | | tax_line
|
||||
credit_line_1 | | 1105 | |
|
||||
debit_line_2 | 2000 | | tax |
|
||||
credit_line_2 | | 2195 | |
|
||||
'''
|
||||
move_form = Form(self.env['account.move'], view='account.view_move_form')
|
||||
move_form.ref = 'azerty'
|
||||
move_form.journal_id = self.journal
|
||||
|
||||
# Create a new account.move.line with debit amount.
|
||||
with move_form.line_ids.new() as debit_line:
|
||||
debit_line.name = 'debit_line_1'
|
||||
debit_line.account_id = self.account
|
||||
debit_line.debit = 1000
|
||||
debit_line.tax_ids.clear()
|
||||
debit_line.tax_ids.add(self.percent_tax)
|
||||
|
||||
self.assertTrue(debit_line.recompute_tax_line)
|
||||
|
||||
# Edit the tax account.move.line
|
||||
with move_form.line_ids.edit(index=1) as tax_line:
|
||||
tax_line.debit = 105 # Was 100
|
||||
|
||||
# Create a third account.move.line with credit amount.
|
||||
with move_form.line_ids.new() as credit_line:
|
||||
credit_line.name = 'credit_line_1'
|
||||
credit_line.account_id = self.account
|
||||
credit_line.credit = 1105
|
||||
|
||||
move = move_form.save()
|
||||
|
||||
move_form = Form(move, view='account.view_move_form')
|
||||
# Create a new account.move.line with debit amount.
|
||||
with move_form.line_ids.new() as debit_line2:
|
||||
debit_line2.name = 'debit_line_2'
|
||||
debit_line2.account_id = self.account
|
||||
debit_line2.debit = 2000
|
||||
debit_line2.tax_ids.clear()
|
||||
debit_line2.tax_ids.add(self.percent_tax)
|
||||
|
||||
self.assertTrue(debit_line2.recompute_tax_line)
|
||||
|
||||
with move_form.line_ids.new() as credit_line2:
|
||||
credit_line2.name = 'credit_line_2'
|
||||
credit_line2.account_id = self.account
|
||||
credit_line2.credit = 2195
|
||||
|
||||
move = move_form.save()
|
||||
|
||||
self.assertRecordValues(move.line_ids, [
|
||||
{'name': 'credit_line_2', 'debit': 0.0, 'credit': 2195.0, 'tax_ids': [], 'tax_line_id': False},
|
||||
{'name': 'debit_line_2', 'debit': 2000.0, 'credit': 0.0, 'tax_ids': [self.percent_tax.id], 'tax_line_id': False},
|
||||
{'name': 'credit_line_1', 'debit': 0.0, 'credit': 1105.0, 'tax_ids': [], 'tax_line_id': False},
|
||||
{'name': 'tax_line', 'debit': 300.0, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.percent_tax.id},
|
||||
{'name': 'debit_line_1', 'debit': 1000.0, 'credit': 0.0, 'tax_ids': [self.percent_tax.id], 'tax_line_id': False},
|
||||
])
|
||||
@@ -1,145 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.tests import tagged
|
||||
from odoo.exceptions import Warning
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountSupplierInvoice(AccountingTestCase):
|
||||
|
||||
def test_supplier_invoice(self):
|
||||
tax = self.env['account.tax'].create({
|
||||
'name': 'Tax 10.0',
|
||||
'amount': 10.0,
|
||||
'amount_type': 'fixed',
|
||||
})
|
||||
analytic_account = self.env['account.analytic.account'].create({
|
||||
'name': 'test account',
|
||||
})
|
||||
|
||||
# Should be changed by automatic on_change later
|
||||
invoice_account = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1).id
|
||||
invoice_line_account = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1).id
|
||||
|
||||
invoice = self.env['account.invoice'].create({'partner_id': self.env.ref('base.res_partner_2').id,
|
||||
'account_id': invoice_account,
|
||||
'type': 'in_invoice',
|
||||
})
|
||||
self.assertEquals(invoice.journal_id.type, 'purchase')
|
||||
|
||||
self.env['account.invoice.line'].create({'product_id': self.env.ref('product.product_product_4').id,
|
||||
'quantity': 1.0,
|
||||
'price_unit': 100.0,
|
||||
'invoice_id': invoice.id,
|
||||
'name': 'product that cost 100',
|
||||
'account_id': invoice_line_account,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax.id])],
|
||||
'account_analytic_id': analytic_account.id,
|
||||
})
|
||||
|
||||
# check that Initially supplier bill state is "Draft"
|
||||
self.assertTrue((invoice.state == 'draft'), "Initially vendor bill state is Draft")
|
||||
|
||||
#change the state of invoice to open by clicking Validate button
|
||||
invoice.action_invoice_open()
|
||||
|
||||
#I cancel the account move which is in posted state and verifies that it gives warning message
|
||||
with self.assertRaises(Warning):
|
||||
invoice.move_id.button_cancel()
|
||||
|
||||
def test_supplier_invoice2(self):
|
||||
tax_fixed = self.env['account.tax'].create({
|
||||
'sequence': 10,
|
||||
'name': 'Tax 10.0 (Fixed)',
|
||||
'amount': 10.0,
|
||||
'amount_type': 'fixed',
|
||||
'include_base_amount': True,
|
||||
})
|
||||
tax_percent_included_base_incl = self.env['account.tax'].create({
|
||||
'sequence': 20,
|
||||
'name': 'Tax 50.0% (Percentage of Price Tax Included)',
|
||||
'amount': 50.0,
|
||||
'amount_type': 'division',
|
||||
'include_base_amount': True,
|
||||
})
|
||||
tax_percentage = self.env['account.tax'].create({
|
||||
'sequence': 30,
|
||||
'name': 'Tax 20.0% (Percentage of Price)',
|
||||
'amount': 20.0,
|
||||
'amount_type': 'percent',
|
||||
'include_base_amount': False,
|
||||
})
|
||||
analytic_account = self.env['account.analytic.account'].create({
|
||||
'name': 'test account',
|
||||
})
|
||||
|
||||
# Should be changed by automatic on_change later
|
||||
invoice_account = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1).id
|
||||
invoice_line_account = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1).id
|
||||
|
||||
invoice = self.env['account.invoice'].create({'partner_id': self.env.ref('base.res_partner_2').id,
|
||||
'account_id': invoice_account,
|
||||
'type': 'in_invoice',
|
||||
})
|
||||
self.assertEquals(invoice.journal_id.type, 'purchase')
|
||||
|
||||
invoice_line = self.env['account.invoice.line'].create({'product_id': self.env.ref('product.product_product_4').id,
|
||||
'quantity': 5.0,
|
||||
'price_unit': 100.0,
|
||||
'invoice_id': invoice.id,
|
||||
'name': 'product that cost 100',
|
||||
'account_id': invoice_line_account,
|
||||
'invoice_line_tax_ids': [(6, 0, [tax_fixed.id, tax_percent_included_base_incl.id, tax_percentage.id])],
|
||||
'account_analytic_id': analytic_account.id,
|
||||
})
|
||||
invoice.compute_taxes()
|
||||
|
||||
# check that Initially supplier bill state is "Draft"
|
||||
self.assertTrue((invoice.state == 'draft'), "Initially vendor bill state is Draft")
|
||||
|
||||
#change the state of invoice to open by clicking Validate button
|
||||
invoice.action_invoice_open()
|
||||
|
||||
# Check if amount and corresponded base is correct for all tax scenarios given on a computational base
|
||||
# Keep in mind that tax amount can be changed by the user at any time before validating (based on the invoice and tax laws applicable)
|
||||
invoice_tax = invoice.tax_line_ids.sorted(key=lambda r: r.sequence)
|
||||
self.assertEquals(invoice_tax.mapped('amount'), [50.0, 550.0, 220.0])
|
||||
self.assertEquals(invoice_tax.mapped('base'), [500.0, 550.0, 1100.0])
|
||||
|
||||
#I cancel the account move which is in posted state and verifies that it gives warning message
|
||||
with self.assertRaises(Warning):
|
||||
invoice.move_id.button_cancel()
|
||||
|
||||
def test_vendor_bill_refund(self):
|
||||
invoice_account = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
|
||||
invoice_line_account = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1)
|
||||
|
||||
if self.env.ref('base.main_partner').bank_account_count > 0:
|
||||
bank = self.env['res.partner.bank'].search([('partner_id', '=', self.env.ref('base.main_partner').id)], limit=1)
|
||||
|
||||
else:
|
||||
bank = self.env['res.partner.bank'].create({
|
||||
'acc_number': '12345678910',
|
||||
'partner_id': self.env.ref('base.main_partner').id,
|
||||
})
|
||||
|
||||
invoice_id = self.env['account.invoice'].create({
|
||||
'name': 'invoice test refund',
|
||||
'partner_id': self.env.ref("base.res_partner_2").id,
|
||||
'account_id': invoice_account.id,
|
||||
'currency_id': self.env.ref('base.USD').id,
|
||||
'type': 'in_invoice',
|
||||
})
|
||||
self.env['account.invoice.line'].create({
|
||||
'product_id': self.env.ref("product.product_product_4").id,
|
||||
'quantity': 1,
|
||||
'price_unit': 15.0,
|
||||
'invoice_id': invoice_id.id,
|
||||
'name': 'something',
|
||||
'account_id': invoice_line_account.id,
|
||||
})
|
||||
|
||||
refund_invoices = invoice_id.refund()
|
||||
|
||||
self.assertEqual(refund_invoices.partner_bank_id, bank)
|
||||
@@ -1,44 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountValidateAccount(AccountingTestCase):
|
||||
|
||||
def test_account_validate_account(self):
|
||||
account_move_line = self.env['account.move.line']
|
||||
account_cash = self.env['account.account'].search([('user_type_id.type', '=', 'liquidity')], limit=1)
|
||||
journal = self.env['account.journal'].search([('type', '=', 'bank')], limit=1)
|
||||
|
||||
company_id = self.env['res.users'].browse(self.env.uid).company_id.id
|
||||
|
||||
# create move
|
||||
move = self.env['account.move'].create({'name': '/',
|
||||
'ref':'2011010',
|
||||
'journal_id': journal.id,
|
||||
'state':'draft',
|
||||
'company_id': company_id,
|
||||
})
|
||||
# create move line
|
||||
account_move_line.create({'account_id': account_cash.id,
|
||||
'name': 'Four Person Desk',
|
||||
'move_id': move.id,
|
||||
})
|
||||
|
||||
# create another move line
|
||||
account_move_line.create({'account_id': account_cash.id,
|
||||
'name': 'Four Person Desk',
|
||||
'move_id': move.id,
|
||||
})
|
||||
|
||||
# check that Initially account move state is "Draft"
|
||||
self.assertTrue((move.state == 'draft'), "Initially account move state is Draft")
|
||||
|
||||
# validate this account move by using the 'Post Journal Entries' wizard
|
||||
validate_account_move = self.env['validate.account.move'].with_context(active_ids=move.id).create({})
|
||||
|
||||
#click on validate Button
|
||||
validate_account_move.with_context({'active_ids': [move.id]}).validate_move()
|
||||
|
||||
#check that the move state is now "Posted"
|
||||
self.assertTrue((move.state == 'posted'), "Initially account move state is Posted")
|
||||
@@ -7,8 +7,6 @@ class TestBankStatementReconciliation(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestBankStatementReconciliation, self).setUp()
|
||||
self.i_model = self.env['account.invoice']
|
||||
self.il_model = self.env['account.invoice.line']
|
||||
self.bs_model = self.env['account.bank.statement']
|
||||
self.bsl_model = self.env['account.bank.statement.line']
|
||||
self.reconciliation_widget = self.env['account.reconciliation.widget']
|
||||
@@ -62,40 +60,24 @@ class TestBankStatementReconciliation(AccountingTestCase):
|
||||
self.assertTrue(rcv_mv_line.reconciled)
|
||||
self.assertTrue(counterpart_mv_line.reconciled)
|
||||
self.assertEqual(counterpart_mv_line.matched_credit_ids, rcv_mv_line.matched_debit_ids)
|
||||
self.assertEqual(rcv_mv_line.invoice_id.state, 'paid', "The related invoice's state should now be 'paid'")
|
||||
self.assertEqual(rcv_mv_line.move_id.invoice_payment_state, 'paid', "The related invoice's state should now be 'paid'")
|
||||
|
||||
def test_reconcile_with_write_off(self):
|
||||
pass
|
||||
|
||||
def create_invoice(self, amount):
|
||||
""" Return the move line that gets to be reconciled (the one in the receivable account) """
|
||||
vals = {'partner_id': self.partner.id,
|
||||
'type': 'out_invoice',
|
||||
'name': '-',
|
||||
'currency_id': self.env.company.currency_id.id,
|
||||
}
|
||||
# new creates a temporary record to apply the on_change afterwards
|
||||
invoice = self.i_model.new(vals)
|
||||
invoice._onchange_partner_id()
|
||||
vals.update({'account_id': invoice.account_id.id})
|
||||
invoice = self.i_model.create(vals)
|
||||
|
||||
self.il_model.create({
|
||||
'quantity': 1,
|
||||
'price_unit': amount,
|
||||
'invoice_id': invoice.id,
|
||||
'name': '.',
|
||||
'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1).id,
|
||||
move = self.env['account.move'].create({
|
||||
'type': 'out_invoice',
|
||||
'partner_id': self.partner.id,
|
||||
'invoice_line_ids': [(0, 0, {
|
||||
'quantity': 1,
|
||||
'price_unit': amount,
|
||||
'name': 'test invoice',
|
||||
})],
|
||||
})
|
||||
invoice.action_invoice_open()
|
||||
|
||||
mv_line = None
|
||||
for l in invoice.move_id.line_ids:
|
||||
if l.account_id.id == vals['account_id']:
|
||||
mv_line = l
|
||||
self.assertIsNotNone(mv_line)
|
||||
|
||||
return mv_line
|
||||
move.post()
|
||||
return move.line_ids.filtered(lambda line: line.account_id.user_type_id.type in ('receivable', 'payable'))
|
||||
|
||||
def create_statement_line(self, st_line_amount):
|
||||
journal = self.bs_model.with_context(journal_type='bank')._default_journal()
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.tests import tagged
|
||||
from odoo.tests.common import Form
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestInvoiceOnchange(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestInvoiceOnchange, self).setUp()
|
||||
self.invoice_line_onchange = self.env['account.invoice.line']._onchange_spec()
|
||||
self.half_currency = self.env['res.currency'].create({
|
||||
'name': 'HALF', 'symbol': '$HALF',
|
||||
'rate_ids': [(0, 0, {'name': '1980-01-01', 'rate': 2})],
|
||||
})
|
||||
self.apples_product = self.env['product.product'].create(dict(
|
||||
self.env['product.product'].default_get(self.env['product.product']._fields),
|
||||
lst_price=10, name='apples',
|
||||
))
|
||||
|
||||
def test_invoice_currency_onchange(self):
|
||||
self_ctx = self.env['account.invoice'].with_context(type='out_invoice')
|
||||
with Form(self_ctx, view='account.invoice_form') as invoice_form:
|
||||
invoice_form.partner_id = self.env.user.partner_id
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.product_id = self.apples_product
|
||||
# Check onchange keep price_unit if currency not changed
|
||||
self.assertEqual(invoice_line_form.price_unit, 10)
|
||||
invoice_form.currency_id = self.half_currency
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.product_id = self.apples_product
|
||||
# Check onchange gives converted price with custom currency
|
||||
self.assertEqual(invoice_line_form.price_unit, 20)
|
||||
@@ -46,21 +46,18 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
|
||||
:param taxes_per_line: A list of tuple (price_unit, account.tax recordset)
|
||||
'''
|
||||
self_ctx = self.env['account.invoice'].with_context(type=inv_type)
|
||||
journal_id = self_ctx._default_journal().id
|
||||
self_ctx = self_ctx.with_context(journal_id=journal_id)
|
||||
self_ctx = self.env['account.move'].with_context(default_type=inv_type)
|
||||
invoice_form = Form(self_ctx)
|
||||
invoice_form.partner_id = self.env.ref('base.partner_demo')
|
||||
|
||||
with Form(self_ctx, view=(inv_type in ('out_invoice', 'out_refund') and 'account.invoice_form' or 'invoice_supplier_form')) as invoice_form:
|
||||
invoice_form.partner_id = self.env.ref('base.partner_demo')
|
||||
|
||||
for amount, taxes in taxes_per_line:
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.name = 'xxxx'
|
||||
invoice_line_form.quantity = 1
|
||||
invoice_line_form.price_unit = amount
|
||||
invoice_line_form.invoice_line_tax_ids.clear()
|
||||
for tax in taxes:
|
||||
invoice_line_form.invoice_line_tax_ids.add(tax)
|
||||
for amount, taxes in taxes_per_line:
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.name = 'xxxx'
|
||||
invoice_line_form.quantity = 1
|
||||
invoice_line_form.price_unit = amount
|
||||
invoice_line_form.tax_ids.clear()
|
||||
for tax in taxes:
|
||||
invoice_line_form.tax_ids.add(tax)
|
||||
return invoice_form.save()
|
||||
|
||||
def test_one_tax_per_line(self):
|
||||
@@ -83,11 +80,11 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
(121, self.percent_tax_1_incl),
|
||||
(100, self.percent_tax_2),
|
||||
])
|
||||
invoice.action_invoice_open()
|
||||
self.assertRecordValues(invoice.tax_line_ids, [
|
||||
{'name': self.percent_tax_1.name, 'base': 100, 'amount': 21, 'tax_ids': []},
|
||||
{'name': self.percent_tax_1_incl.name, 'base': 100, 'amount': 21, 'tax_ids': []},
|
||||
{'name': self.percent_tax_2.name, 'base': 100, 'amount': 12, 'tax_ids': []},
|
||||
invoice.post()
|
||||
self.assertRecordValues(invoice.line_ids.filtered('tax_line_id'), [
|
||||
{'name': self.percent_tax_1.name, 'tax_base_amount': 100, 'price_unit': 21, 'tax_ids': []},
|
||||
{'name': self.percent_tax_1_incl.name, 'tax_base_amount': 100, 'price_unit': 21, 'tax_ids': []},
|
||||
{'name': self.percent_tax_2.name, 'tax_base_amount': 100, 'price_unit': 12, 'tax_ids': []},
|
||||
])
|
||||
|
||||
def test_affecting_base_amount(self):
|
||||
@@ -108,10 +105,10 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
(121, self.percent_tax_1_incl + self.percent_tax_2),
|
||||
(100, self.percent_tax_2),
|
||||
])
|
||||
invoice.action_invoice_open()
|
||||
self.assertRecordValues(invoice.tax_line_ids.sorted(lambda x: x.amount), [
|
||||
{'name': self.percent_tax_1_incl.name, 'base': 100, 'amount': 21, 'tax_ids': [self.percent_tax_2.id]},
|
||||
{'name': self.percent_tax_2.name, 'base': 221, 'amount': 26.52, 'tax_ids': []},
|
||||
invoice.post()
|
||||
self.assertRecordValues(invoice.line_ids.filtered('tax_line_id').sorted(lambda x: x.price_unit), [
|
||||
{'name': self.percent_tax_1_incl.name, 'tax_base_amount': 100, 'price_unit': 21, 'tax_ids': [self.percent_tax_2.id]},
|
||||
{'name': self.percent_tax_2.name, 'tax_base_amount': 221, 'price_unit': 26.52, 'tax_ids': []},
|
||||
])
|
||||
|
||||
def test_group_of_taxes(self):
|
||||
@@ -132,10 +129,10 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
(121, self.group_tax),
|
||||
(100, self.percent_tax_2),
|
||||
])
|
||||
invoice.action_invoice_open()
|
||||
self.assertRecordValues(invoice.tax_line_ids.sorted(lambda x: x.amount), [
|
||||
{'name': self.percent_tax_1_incl.name, 'base': 100, 'amount': 21, 'tax_ids': [self.percent_tax_2.id]},
|
||||
{'name': self.percent_tax_2.name, 'base': 221, 'amount': 26.52, 'tax_ids': []},
|
||||
invoice.post()
|
||||
self.assertRecordValues(invoice.line_ids.filtered('tax_line_id').sorted(lambda x: x.price_unit), [
|
||||
{'name': self.percent_tax_1_incl.name, 'tax_base_amount': 100, 'price_unit': 21, 'tax_ids': [self.percent_tax_2.id]},
|
||||
{'name': self.percent_tax_2.name, 'tax_base_amount': 221, 'price_unit': 26.52, 'tax_ids': []},
|
||||
])
|
||||
|
||||
def _create_tax_tag(self, tag_name):
|
||||
@@ -205,15 +202,14 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
|
||||
# Test invoice repartition
|
||||
invoice = self._create_invoice([(100, tax)], inv_type='out_invoice')
|
||||
invoice.action_invoice_open()
|
||||
invoice_move = invoice.move_id
|
||||
invoice.post()
|
||||
|
||||
self.assertEqual(len(invoice_move.line_ids), 4, "There should be 4 account move lines created for the invoice: payable, base and 2 tax lines")
|
||||
inv_base_line = invoice_move.line_ids.filtered(lambda x: not x.tax_repartition_line_id and x.account_id.user_type_id.type != 'receivable')
|
||||
self.assertEqual(len(invoice.line_ids), 4, "There should be 4 account move lines created for the invoice: payable, base and 2 tax lines")
|
||||
inv_base_line = invoice.line_ids.filtered(lambda x: not x.tax_repartition_line_id and x.account_id.user_type_id.type != 'receivable')
|
||||
self.assertEqual(len(inv_base_line), 1, "There should be only one base line generated")
|
||||
self.assertEqual(abs(inv_base_line.balance), 100, "Base amount should be 100")
|
||||
self.assertEqual(inv_base_line.tag_ids, inv_base_tag, "Base line should have received base tag")
|
||||
inv_tax_lines = invoice_move.line_ids.filtered(lambda x: x.tax_repartition_line_id.repartition_type == 'tax')
|
||||
inv_tax_lines = invoice.line_ids.filtered(lambda x: x.tax_repartition_line_id.repartition_type == 'tax')
|
||||
self.assertEqual(len(inv_tax_lines), 2, "There should be two tax lines, one for each repartition line.")
|
||||
self.assertEqual(abs(inv_tax_lines.filtered(lambda x: x.account_id == account_1).balance), 4.2, "Tax line on account 1 should amount to 4.2 (10% of 42)")
|
||||
self.assertEqual(inv_tax_lines.filtered(lambda x: x.account_id == account_1).tag_ids, inv_tax_tag_10, "Tax line on account 1 should have 10% tag")
|
||||
@@ -222,15 +218,14 @@ class TestInvoiceTaxes(AccountingTestCase):
|
||||
|
||||
# Test refund repartition
|
||||
refund = self._create_invoice([(100, tax)], inv_type='out_refund')
|
||||
refund.action_invoice_open()
|
||||
refund_move = refund.move_id
|
||||
refund.post()
|
||||
|
||||
self.assertEqual(len(refund_move.line_ids), 4, "There should be 4 account move lines created for the refund: payable, base and 2 tax lines")
|
||||
ref_base_line = refund_move.line_ids.filtered(lambda x: not x.tax_repartition_line_id and x.account_id.user_type_id.type != 'receivable')
|
||||
self.assertEqual(len(refund.line_ids), 4, "There should be 4 account move lines created for the refund: payable, base and 2 tax lines")
|
||||
ref_base_line = refund.line_ids.filtered(lambda x: not x.tax_repartition_line_id and x.account_id.user_type_id.type != 'receivable')
|
||||
self.assertEqual(len(ref_base_line), 1, "There should be only one base line generated")
|
||||
self.assertEqual(abs(ref_base_line.balance), 100, "Base amount should be 100")
|
||||
self.assertEqual(ref_base_line.tag_ids, ref_base_tag, "Base line should have received base tag")
|
||||
ref_tax_lines = refund_move.line_ids.filtered(lambda x: x.tax_repartition_line_id.repartition_type == 'tax')
|
||||
ref_tax_lines = refund.line_ids.filtered(lambda x: x.tax_repartition_line_id.repartition_type == 'tax')
|
||||
self.assertEqual(len(ref_tax_lines), 2, "There should be two refund tax lines")
|
||||
self.assertEqual(abs(ref_tax_lines.filtered(lambda x: x.account_id == ref_base_line.account_id).balance), 4.2, "Refund tax line on base account should amount to 4.2 (10% of 42)")
|
||||
self.assertEqual(abs(ref_tax_lines.filtered(lambda x: x.account_id == account_1).balance), 37.8, "Refund tax line on account 1 should amount to 37.8 (90% of 42)")
|
||||
|
||||
@@ -9,10 +9,8 @@ class TestPayment(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestPayment, self).setUp()
|
||||
self.register_payments_model = self.env['account.payment.register'].with_context(active_model='account.invoice')
|
||||
self.register_payments_model = self.env['account.payment.register'].with_context(active_model='account.move')
|
||||
self.payment_model = self.env['account.payment']
|
||||
self.invoice_model = self.env['account.invoice']
|
||||
self.invoice_line_model = self.env['account.invoice.line']
|
||||
self.acc_bank_stmt_model = self.env['account.bank.statement']
|
||||
self.acc_bank_stmt_line_model = self.env['account.bank.statement.line']
|
||||
|
||||
@@ -46,23 +44,17 @@ class TestPayment(AccountingTestCase):
|
||||
|
||||
def create_invoice(self, amount=100, type='out_invoice', currency_id=None, partner=None, account_id=None):
|
||||
""" Returns an open invoice """
|
||||
invoice = self.invoice_model.create({
|
||||
invoice = self.env['account.move'].create({
|
||||
'type': type,
|
||||
'partner_id': partner or self.partner_agrolait.id,
|
||||
'currency_id': currency_id or self.currency_eur_id,
|
||||
'name': type,
|
||||
'account_id': account_id or self.account_receivable.id,
|
||||
'type': type,
|
||||
'date_invoice': time.strftime('%Y') + '-06-26',
|
||||
'invoice_date': time.strftime('%Y') + '-06-26',
|
||||
'date': time.strftime('%Y') + '-06-26',
|
||||
'invoice_line_ids': [
|
||||
(0, 0, {'product_id': self.product.id, 'quantity': 1, 'price_unit': amount})
|
||||
],
|
||||
})
|
||||
self.invoice_line_model.create({
|
||||
'product_id': self.product.id,
|
||||
'quantity': 1,
|
||||
'price_unit': amount,
|
||||
'invoice_id': invoice.id,
|
||||
'name': 'something',
|
||||
'account_id': self.account_revenue.id,
|
||||
})
|
||||
invoice.action_invoice_open()
|
||||
invoice.post()
|
||||
return invoice
|
||||
|
||||
def reconcile(self, liquidity_aml, amount=0.0, amount_currency=0.0, currency_id=None):
|
||||
@@ -94,21 +86,21 @@ class TestPayment(AccountingTestCase):
|
||||
'journal_id': self.bank_journal_euro.id,
|
||||
'payment_method_id': self.payment_method_manual_in.id,
|
||||
})
|
||||
register_payments.create_payments()
|
||||
payment = self.payment_model.search([], order="id desc", limit=1)
|
||||
payment = self.payment_model.browse(register_payments.create_payments()['res_id'])
|
||||
|
||||
self.assertAlmostEquals(payment.amount, 300)
|
||||
self.assertEqual(payment.state, 'posted')
|
||||
self.assertEqual(payment.state, 'posted')
|
||||
self.assertEqual(inv_1.state, 'paid')
|
||||
self.assertEqual(inv_1.invoice_payment_state, 'paid')
|
||||
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
rec_line = payment.move_line_ids.filtered(lambda line: line.account_id.user_type_id.type in ('receivable', 'payable'))
|
||||
self.assertRecordValues(payment.move_line_ids.sorted('credit'), [
|
||||
{'account_id': self.account_eur.id, 'debit': 300.0, 'credit': 0.0, 'amount_currency': 0, 'currency_id': False},
|
||||
{'account_id': inv_1.account_id.id, 'debit': 0.0, 'credit': 300.0, 'amount_currency': 0, 'currency_id': False},
|
||||
{'account_id': rec_line.account_id.id, 'debit': 0.0, 'credit': 300.0, 'amount_currency': 0, 'currency_id': False},
|
||||
])
|
||||
self.assertTrue(payment.move_line_ids.filtered(lambda l: l.account_id == inv_1.account_id)[0].full_reconcile_id)
|
||||
self.assertTrue(rec_line.full_reconcile_id.exists())
|
||||
|
||||
liquidity_aml = payment.move_line_ids.filtered(lambda r: r.account_id == self.account_eur)
|
||||
liquidity_aml = payment.move_line_ids - rec_line
|
||||
bank_statement = self.reconcile(liquidity_aml, 300, 0, False)
|
||||
|
||||
self.assertEqual(liquidity_aml.statement_id, bank_statement)
|
||||
@@ -129,8 +121,8 @@ class TestPayment(AccountingTestCase):
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': self.account_usd.id, 'debit': 0.0, 'credit': 32.70, 'amount_currency': -50, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.transfer_account.id, 'debit': 32.70, 'credit': 0.0, 'amount_currency': 50, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_usd.id, 'debit': 0.0, 'credit': 32.70, 'amount_currency': -50, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.transfer_account.id, 'debit': 0.0, 'credit': 32.70, 'amount_currency': -50, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_eur.id, 'debit': 32.70, 'credit': 0.0, 'amount_currency': 0, 'currency_id': False},
|
||||
])
|
||||
@@ -149,118 +141,49 @@ class TestPayment(AccountingTestCase):
|
||||
payment.post()
|
||||
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': self.account_usd.id, 'debit': 0.0, 'credit': 38.21, 'amount_currency': -58.42, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.partner_china_exp.property_account_payable_id.id, 'debit': 38.21, 'credit': 0.0, 'amount_currency': 50, 'currency_id': self.currency_chf_id},
|
||||
{'account_id': self.account_usd.id, 'debit': 0.0, 'credit': 38.21, 'amount_currency': -58.42, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
|
||||
def test_multiple_payments_00(self):
|
||||
""" Create test to pay several vendor bills/invoices at once """
|
||||
# One payment for inv_1 and inv_2 (same partner)
|
||||
inv_1 = self.create_invoice(amount=100, partner=self.partner_agrolait.id)
|
||||
inv_2 = self.create_invoice(amount=500, partner=self.partner_agrolait.id)
|
||||
# One payment for inv_3 (different partner)
|
||||
inv_3 = self.create_invoice(amount=200, partner=self.partner_china_exp.id)
|
||||
# One payment for inv_4 (Vendor Bill)
|
||||
inv_4 = self.create_invoice(amount=50, partner=self.partner_agrolait.id, type='in_invoice')
|
||||
|
||||
ids_out = [inv_1.id, inv_2.id, inv_3.id]
|
||||
ids_in = [inv_4.id]
|
||||
for ids in [ids_out, ids_in]:
|
||||
register_payments = self.register_payments_model.with_context(active_ids=ids).create({
|
||||
'payment_date': time.strftime('%Y') + '-07-15',
|
||||
'journal_id': self.bank_journal_euro.id,
|
||||
'payment_method_id': self.payment_method_manual_in.id,
|
||||
})
|
||||
register_payments.create_payments()
|
||||
payment_ids = self.payment_model.search([('invoice_ids', 'in', ids_out + ids_in)], order="id desc")
|
||||
|
||||
self.assertEqual(len(payment_ids), 4)
|
||||
self.assertAlmostEquals(sum(payment_ids.filtered(lambda r: r.payment_type == 'inbound').mapped('amount')) - sum(payment_ids.filtered(lambda r: r.payment_type == 'outbound').mapped('amount')), 750)
|
||||
|
||||
inv_1_2_pay = self.env['account.payment']
|
||||
inv_3_pay = None
|
||||
inv_4_pay = None
|
||||
for payment_id in payment_ids:
|
||||
self.assertEqual('posted', payment_id.state)
|
||||
if payment_id.partner_id == self.partner_agrolait:
|
||||
if payment_id.partner_type == 'supplier':
|
||||
self.assertEqual(payment_id.amount, 50)
|
||||
inv_4_pay = payment_id
|
||||
else:
|
||||
self.assertTrue(payment_id.amount in (100, 500))
|
||||
inv_1_2_pay |= payment_id
|
||||
else:
|
||||
self.assertEqual(payment_id.amount, 200)
|
||||
inv_3_pay = payment_id
|
||||
|
||||
self.assertTrue(len(inv_1_2_pay) == 2)
|
||||
self.assertEqual(inv_1.state, 'paid')
|
||||
self.assertEqual(inv_2.state, 'paid')
|
||||
|
||||
self.assertIsNotNone(inv_3_pay)
|
||||
self.assertRecordValues(inv_3_pay.move_line_ids, [
|
||||
{'account_id': self.account_eur.id, 'debit': 200.0, 'credit': 0.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': inv_1.account_id.id, 'debit': 0.0, 'credit': 200.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
])
|
||||
self.assertEqual(inv_3.state, 'paid')
|
||||
|
||||
self.assertIsNotNone(inv_4_pay)
|
||||
self.assertRecordValues(inv_4_pay.move_line_ids, [
|
||||
{'account_id': self.account_eur.id, 'debit': 0.0, 'credit': 50.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': inv_1.account_id.id, 'debit': 50.0, 'credit': 0.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
])
|
||||
self.assertEqual(inv_4.state, 'paid')
|
||||
|
||||
def test_partial_payment(self):
|
||||
""" Create test to pay invoices (cust. inv + vendor bill) with partial payment """
|
||||
# Test Customer Invoice
|
||||
inv_1 = self.create_invoice(amount=600)
|
||||
ids = [inv_1.id]
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.invoice', active_ids=ids))
|
||||
with payment_register as pr:
|
||||
pr.payment_date = time.strftime('%Y') + '-07-15'
|
||||
pr.journal_id = self.bank_journal_euro
|
||||
pr.payment_method_id = self.payment_method_manual_in
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.move', active_ids=inv_1.ids))
|
||||
payment_register.payment_date = time.strftime('%Y') + '-07-15'
|
||||
payment_register.journal_id = self.bank_journal_euro
|
||||
payment_register.payment_method_id = self.payment_method_manual_in
|
||||
|
||||
# Perform the partial payment by setting the amount at 550 instead of 600
|
||||
pr.amount = 550
|
||||
# Perform the partial payment by setting the amount at 550 instead of 600
|
||||
payment_register.amount = 550
|
||||
|
||||
payment_ids = self.payment_model.search([('invoice_ids', 'in', ids)], order="id desc")
|
||||
payment = payment_register.save()
|
||||
|
||||
self.assertEqual(len(payment_ids), 1)
|
||||
|
||||
payment_id = payment_ids[0]
|
||||
|
||||
self.assertEqual(payment_id.invoice_ids[0].id, inv_1.id)
|
||||
self.assertAlmostEquals(payment_id.amount, 550)
|
||||
self.assertEqual(payment_id.payment_type, 'inbound')
|
||||
self.assertEqual(payment_id.partner_id, self.partner_agrolait)
|
||||
self.assertEqual(payment_id.partner_type, 'customer')
|
||||
self.assertEqual(len(payment), 1)
|
||||
self.assertEqual(payment.invoice_ids[0].id, inv_1.id)
|
||||
self.assertAlmostEquals(payment.amount, 550)
|
||||
self.assertEqual(payment.payment_type, 'inbound')
|
||||
self.assertEqual(payment.partner_id, self.partner_agrolait)
|
||||
self.assertEqual(payment.partner_type, 'customer')
|
||||
|
||||
# Test Vendor Bill
|
||||
inv_2 = self.create_invoice(amount=500, type='in_invoice', partner=self.partner_china_exp.id)
|
||||
ids = [inv_2.id]
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.invoice', active_ids=ids))
|
||||
with payment_register as pr:
|
||||
pr.payment_date = time.strftime('%Y') + '-07-15'
|
||||
pr.journal_id = self.bank_journal_euro
|
||||
pr.payment_method_id = self.payment_method_manual_in
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.move', active_ids=inv_2.ids))
|
||||
payment_register.payment_date = time.strftime('%Y') + '-07-15'
|
||||
payment_register.journal_id = self.bank_journal_euro
|
||||
payment_register.payment_method_id = self.payment_method_manual_in
|
||||
|
||||
# Perform the partial payment by setting the amount at 300 instead of 500
|
||||
pr.amount = 300
|
||||
# Perform the partial payment by setting the amount at 300 instead of 500
|
||||
payment_register.amount = 300
|
||||
|
||||
payment_register.save()
|
||||
payment_ids = self.payment_model.search([('invoice_ids', 'in', ids)], order="id desc")
|
||||
payment = payment_register.save()
|
||||
|
||||
self.assertEqual(len(payment_ids), 1)
|
||||
|
||||
payment_id = payment_ids[0]
|
||||
|
||||
self.assertEqual(payment_id.invoice_ids[0].id, inv_2.id)
|
||||
self.assertAlmostEquals(payment_id.amount, 300)
|
||||
self.assertEqual(payment_id.payment_type, 'outbound')
|
||||
self.assertEqual(payment_id.partner_id, self.partner_china_exp)
|
||||
self.assertEqual(payment_id.partner_type, 'supplier')
|
||||
self.assertEqual(len(payment), 1)
|
||||
self.assertEqual(payment.invoice_ids[0].id, inv_2.id)
|
||||
self.assertAlmostEquals(payment.amount, 300)
|
||||
self.assertEqual(payment.payment_type, 'outbound')
|
||||
self.assertEqual(payment.partner_id, self.partner_china_exp)
|
||||
self.assertEqual(payment.partner_type, 'supplier')
|
||||
|
||||
def test_payment_and_writeoff_in_other_currency_1(self):
|
||||
# Use case:
|
||||
@@ -268,6 +191,7 @@ class TestPayment(AccountingTestCase):
|
||||
# Mark invoice as fully paid with a write_off
|
||||
# Check that all the aml are correctly created.
|
||||
invoice = self.create_invoice(amount=25, type='out_invoice', currency_id=self.currency_eur_id, partner=self.partner_agrolait.id)
|
||||
receivable_line = invoice.line_ids.filtered(lambda l: l.account_id.user_type_id.type == 'receivable')
|
||||
# register payment on invoice
|
||||
payment = self.payment_model.create({'payment_type': 'inbound',
|
||||
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
|
||||
@@ -283,18 +207,19 @@ class TestPayment(AccountingTestCase):
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': receivable_line.account_id.id, 'debit': 0.0, 'credit': 25.0, 'amount_currency': -38.22, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_eur.id, 'debit': 16.35, 'credit': 0.0, 'amount_currency': 25.0, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_payable.id, 'debit': 8.65, 'credit': 0.0, 'amount_currency': 13.22, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_receivable.id, 'debit': 0.0, 'credit': 25.0, 'amount_currency': -38.22, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
self.assertTrue(payment.move_line_ids.filtered(lambda l: l.account_id == invoice.account_id)[0].full_reconcile_id)
|
||||
self.assertEqual(invoice.state, 'paid')
|
||||
self.assertTrue(receivable_line.full_reconcile_id)
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid')
|
||||
|
||||
# Use case:
|
||||
# Company is in EUR, create a vendor bill for 25 EUR and register payment of 25 USD.
|
||||
# Mark invoice as fully paid with a write_off
|
||||
# Check that all the aml are correctly created.
|
||||
invoice = self.create_invoice(amount=25, type='in_invoice', currency_id=self.currency_eur_id, partner=self.partner_agrolait.id)
|
||||
payable_line = invoice.line_ids.filtered(lambda l: l.account_id.user_type_id.type == 'payable')
|
||||
# register payment on invoice
|
||||
payment = self.payment_model.create({'payment_type': 'outbound',
|
||||
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
|
||||
@@ -304,18 +229,18 @@ class TestPayment(AccountingTestCase):
|
||||
'currency_id': self.currency_usd_id,
|
||||
'payment_date': time.strftime('%Y') + '-07-15',
|
||||
'payment_difference_handling': 'reconcile',
|
||||
'writeoff_account_id': self.account_payable.id,
|
||||
'writeoff_account_id': self.account_receivable.id,
|
||||
'journal_id': self.bank_journal_euro.id,
|
||||
'invoice_ids': [(4, invoice.id, None)]
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': payable_line.account_id.id, 'debit': 25.0, 'credit': 0.0, 'amount_currency': 38.22, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_eur.id, 'debit': 0.0, 'credit': 16.35, 'amount_currency': -25.0, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_payable.id, 'debit': 0.0, 'credit': 8.65, 'amount_currency': -13.22, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_receivable.id, 'debit': 25.0, 'credit': 0.0, 'amount_currency': 38.22, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_receivable.id, 'debit': 0.0, 'credit': 8.65, 'amount_currency': -13.22, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
self.assertTrue(payment.move_line_ids.filtered(lambda l: l.account_id == invoice.account_id)[0].full_reconcile_id)
|
||||
self.assertEqual(invoice.state, 'paid')
|
||||
self.assertTrue(payable_line.full_reconcile_id)
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid')
|
||||
|
||||
def test_payment_and_writeoff_out_refund(self):
|
||||
# Use case:
|
||||
@@ -323,6 +248,7 @@ class TestPayment(AccountingTestCase):
|
||||
# Mark invoice as fully paid with a write_off
|
||||
# Check that all the aml are correctly created.
|
||||
invoice = self.create_invoice(amount=100, type='out_refund', currency_id=self.currency_eur_id, partner=self.partner_agrolait.id)
|
||||
receivable_line = invoice.line_ids.filtered(lambda l: l.account_id.user_type_id.type == 'receivable')
|
||||
# register payment on invoice
|
||||
payment = self.payment_model.create({'payment_type': 'outbound',
|
||||
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
|
||||
@@ -337,11 +263,11 @@ class TestPayment(AccountingTestCase):
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': receivable_line.account_id.id, 'debit': 100.0, 'credit': 0.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': self.account_eur.id, 'debit': 0.0, 'credit': 90.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': self.account_payable.id, 'debit': 0.0, 'credit': 10.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': self.account_receivable.id, 'debit': 100.0, 'credit': 0.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
])
|
||||
self.assertEqual(invoice.state, 'paid')
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid')
|
||||
|
||||
def test_payment_and_writeoff_in_other_currency_2(self):
|
||||
# Use case:
|
||||
@@ -360,10 +286,8 @@ class TestPayment(AccountingTestCase):
|
||||
'name': time.strftime('%Y') + '-07-15'})
|
||||
|
||||
invoice = self.create_invoice(amount=5325.6, type='in_invoice', currency_id=self.currency_usd_id, partner=self.partner_agrolait.id)
|
||||
self.assertRecordValues(invoice.move_id.line_ids, [
|
||||
{'account_id': self.account_receivable.id, 'debit': 0.0, 'credit': 5950.39, 'amount_currency': -5325.6, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_revenue.id, 'debit': 5950.39, 'credit': 0.0, 'amount_currency': 5325.6, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
payable_line = invoice.line_ids.filtered(lambda l: l.account_id.user_type_id.type == 'payable')
|
||||
|
||||
# register payment on invoice
|
||||
payment = self.payment_model.create({'payment_type': 'outbound',
|
||||
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
|
||||
@@ -379,19 +303,18 @@ class TestPayment(AccountingTestCase):
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'debit': 6051.82, 'credit': 0.0, 'amount_currency': 5325.6, 'currency_id': self.currency_usd_id},
|
||||
{'debit': 0.0, 'credit': 6051.14, 'amount_currency': -5325.0, 'currency_id': self.currency_usd_id},
|
||||
{'debit': 0.0, 'credit': 0.68, 'amount_currency': -0.6, 'currency_id': self.currency_usd_id},
|
||||
{'debit': 6051.82, 'credit': 0.0, 'amount_currency': 5325.6, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
exchange_lines = payment.move_line_ids[-1].full_reconcile_id.exchange_move_id.line_ids
|
||||
exchange_lines = payable_line.full_reconcile_id.exchange_move_id.line_ids
|
||||
self.assertRecordValues(exchange_lines, [
|
||||
{'debit': 0.0, 'credit': 101.43, 'account_id': payable_line.account_id.id},
|
||||
{'debit': 101.43, 'credit': 0.0, 'account_id': self.diff_expense_account.id},
|
||||
{'debit': 0.0, 'credit': 101.43, 'account_id': self.account_receivable.id},
|
||||
])
|
||||
|
||||
#check the invoice status
|
||||
self.assertEqual(invoice.state, 'paid')
|
||||
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid')
|
||||
|
||||
def test_payment_and_writeoff_in_other_currency_3(self):
|
||||
# Use case related in revision 20935462a0cabeb45480ce70114ff2f4e91eaf79
|
||||
@@ -412,10 +335,8 @@ class TestPayment(AccountingTestCase):
|
||||
'name': time.strftime('%Y') + '-06-26'})
|
||||
|
||||
invoice = self.create_invoice(amount=247590.4, type='out_invoice', currency_id=self.currency_eur_id, partner=self.partner_agrolait.id)
|
||||
self.assertRecordValues(invoice.move_id.line_ids, [
|
||||
{'account_id': self.account_receivable.id, 'debit': 247590.4, 'credit': 0.0, 'amount_currency': 0.0, 'currency_id': False},
|
||||
{'account_id': self.account_revenue.id, 'debit': 0.0, 'credit': 247590.4, 'amount_currency': 0.0, 'currency_id': False},
|
||||
])
|
||||
receivable_line = invoice.line_ids.filtered(lambda l: l.account_id.user_type_id.type == 'receivable')
|
||||
|
||||
# register payment on invoice
|
||||
payment = self.payment_model.create({'payment_type': 'inbound',
|
||||
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
|
||||
@@ -432,19 +353,19 @@ class TestPayment(AccountingTestCase):
|
||||
})
|
||||
payment.post()
|
||||
self.assertRecordValues(payment.move_line_ids, [
|
||||
{'account_id': receivable_line.account_id.id, 'debit': 0.0, 'credit': 247589.16, 'amount_currency': -261.17, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_eur.id, 'debit': 253116.0, 'credit': 0.0, 'amount_currency': 267.0, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_revenue.id, 'debit': 0.0, 'credit': 5526.84, 'amount_currency': -5.83, 'currency_id': self.currency_usd_id},
|
||||
{'account_id': self.account_receivable.id, 'debit': 0.0, 'credit': 247589.16, 'amount_currency': -261.17, 'currency_id': self.currency_usd_id},
|
||||
])
|
||||
|
||||
# Check the invoice status and the full reconciliation: the difference on the receivable account
|
||||
# should have been completed by an exchange rate difference entry
|
||||
self.assertEqual(invoice.state, 'paid')
|
||||
self.assertTrue(invoice.move_id.line_ids.filtered(lambda l: l.account_id == self.account_receivable)[0].full_reconcile_id)
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid')
|
||||
self.assertTrue(receivable_line.full_reconcile_id)
|
||||
|
||||
def test_post_at_bank_reconciliation_payment(self):
|
||||
# Create two new payments in a journal requiring the journal entries to be posted at bank reconciliation
|
||||
post_at_bank_rec_journal = bank_journal_euro = self.env['account.journal'].create({
|
||||
post_at_bank_rec_journal = self.env['account.journal'].create({
|
||||
'name': 'Bank',
|
||||
'type': 'bank',
|
||||
'code': 'COUCOU',
|
||||
@@ -481,10 +402,9 @@ class TestPayment(AccountingTestCase):
|
||||
|
||||
# Reconcile the two payments with an invoice, whose full amount is equal to their sum
|
||||
invoice = self.create_invoice(amount=53, partner=self.partner_agrolait.id)
|
||||
(payment_one.move_line_ids + payment_two.move_line_ids + invoice.move_id.line_ids).filtered(lambda x: x.account_id.user_type_id.type == 'receivable').reconcile()
|
||||
(payment_one.move_line_ids + payment_two.move_line_ids + invoice.line_ids).filtered(lambda x: x.account_id.user_type_id.type == 'receivable').reconcile()
|
||||
|
||||
self.assertTrue(invoice.reconciled, "Invoice should have been reconciled with the payments")
|
||||
self.assertEqual(invoice.state, 'in_payment', "Invoice should be in 'in payment' state")
|
||||
self.assertEqual(invoice.invoice_payment_state, 'in_payment', "Invoice should be in 'in payment' state")
|
||||
|
||||
# Match the first payment with a bank statement line
|
||||
bank_statement_one = self.reconcile(payment_one.move_line_ids.filtered(lambda x: x.account_id.user_type_id.type == 'liquidity'), 42)
|
||||
@@ -493,7 +413,7 @@ class TestPayment(AccountingTestCase):
|
||||
self.assertEqual(payment_one.mapped('move_line_ids.move_id.state'), ['posted'], "After bank reconciliation, payment one's account.move should be posted.")
|
||||
self.assertEqual(payment_one.mapped('move_line_ids.move_id.date'), stmt_line_date_one, "After bank reconciliation, payment one's account.move should share the same date as the bank statement.")
|
||||
self.assertEqual([payment_one.payment_date], stmt_line_date_one, "After bank reconciliation, payment one should share the same date as the bank statement.")
|
||||
self.assertEqual(invoice.state, 'in_payment', "The invoice should still be 'in payment', not all its payments are reconciled with a statement")
|
||||
self.assertEqual(invoice.invoice_payment_state, 'in_payment', "The invoice should still be 'in payment', not all its payments are reconciled with a statement")
|
||||
|
||||
# Match the second payment with a bank statement line
|
||||
bank_statement_two = self.reconcile(payment_two.move_line_ids.filtered(lambda x: x.account_id.user_type_id.type == 'liquidity'), 42)
|
||||
@@ -504,4 +424,4 @@ class TestPayment(AccountingTestCase):
|
||||
self.assertEqual([payment_two.payment_date], stmt_line_date_two, "After bank reconciliation, payment two should share the same date as the bank statement.")
|
||||
|
||||
# The invoice should now be paid
|
||||
self.assertEqual(invoice.state, 'paid', "Invoice should be in 'paid' state after having reconciled the two payments with a bank statement")
|
||||
self.assertEqual(invoice.invoice_payment_state, 'paid', "Invoice should be in 'paid' state after having reconciled the two payments with a bank statement")
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
||||
from odoo.tests import tagged
|
||||
import time
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestProductIdChange(AccountingTestCase):
|
||||
"""Test that when an included tax is mapped by a fiscal position, the included tax must be
|
||||
subtracted to the price of the product.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestProductIdChange, self).setUp()
|
||||
self.invoice_model = self.env['account.invoice']
|
||||
self.fiscal_position_model = self.env['account.fiscal.position']
|
||||
self.fiscal_position_tax_model = self.env['account.fiscal.position.tax']
|
||||
self.tax_model = self.env['account.tax']
|
||||
self.pricelist_model = self.env['product.pricelist']
|
||||
self.res_partner_model = self.env['res.partner']
|
||||
self.product_tmpl_model = self.env['product.template']
|
||||
self.product_model = self.env['product.product']
|
||||
self.invoice_line_model = self.env['account.invoice.line']
|
||||
self.account_receivable = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
|
||||
self.account_revenue = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1)
|
||||
|
||||
def test_product_id_change(self):
|
||||
partner = self.res_partner_model.create(dict(name="George"))
|
||||
tax_include_sale = self.tax_model.create(dict(name="Include tax",
|
||||
type_tax_use='sale',
|
||||
amount='21.00',
|
||||
price_include=True))
|
||||
tax_include_purchase = self.tax_model.create(dict(name="Include tax",
|
||||
type_tax_use='purchase',
|
||||
amount='21.00',
|
||||
price_include=True))
|
||||
tax_exclude_sale = self.tax_model.create(dict(name="Exclude tax",
|
||||
type_tax_use='sale',
|
||||
amount='0.00'))
|
||||
tax_exclude_purchase = self.tax_model.create(dict(name="Exclude tax",
|
||||
type_tax_use='purchase',
|
||||
amount='0.00'))
|
||||
product_tmpl = self.product_tmpl_model.create(dict(name="Voiture",
|
||||
list_price='121',
|
||||
taxes_id=[(6, 0, [tax_include_sale.id])],
|
||||
supplier_taxes_id=[(6, 0, [tax_include_purchase.id])]))
|
||||
product = product_tmpl.product_variant_id
|
||||
product.standard_price = '242'
|
||||
fp = self.fiscal_position_model.create(dict(name="fiscal position", sequence=1))
|
||||
fp_tax_sale = self.fiscal_position_tax_model.create(dict(position_id=fp.id,
|
||||
tax_src_id=tax_include_sale.id,
|
||||
tax_dest_id=tax_exclude_sale.id))
|
||||
fp_tax_purchase = self.fiscal_position_tax_model.create(dict(position_id=fp.id,
|
||||
tax_src_id=tax_include_purchase.id,
|
||||
tax_dest_id=tax_exclude_purchase.id))
|
||||
|
||||
out_invoice = self.invoice_model.create({
|
||||
'partner_id': partner.id,
|
||||
'name': 'invoice to client',
|
||||
'account_id': self.account_receivable.id,
|
||||
'type': 'out_invoice',
|
||||
'date_invoice': time.strftime('%Y') + '-06-26',
|
||||
'fiscal_position_id': fp.id,
|
||||
})
|
||||
out_line = self.invoice_line_model.create({
|
||||
'product_id': product.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 121.0,
|
||||
'invoice_id': out_invoice.id,
|
||||
'name': 'something out',
|
||||
'account_id': self.account_revenue.id,
|
||||
})
|
||||
|
||||
in_invoice = self.invoice_model.create({
|
||||
'partner_id': partner.id,
|
||||
'name': 'invoice to supplier',
|
||||
'account_id': self.account_receivable.id,
|
||||
'type': 'in_invoice',
|
||||
'date_invoice': time.strftime('%Y') + '-06-26',
|
||||
'fiscal_position_id': fp.id,
|
||||
})
|
||||
in_line = self.invoice_line_model.create({
|
||||
'product_id': product.id,
|
||||
'quantity': 1,
|
||||
'price_unit': 242.0,
|
||||
'invoice_id': in_invoice.id,
|
||||
'name': 'something in',
|
||||
'account_id': self.account_revenue.id,
|
||||
})
|
||||
out_line._onchange_product_id()
|
||||
self.assertEquals(100, out_line.price_unit, "The included tax must be subtracted to the price")
|
||||
in_line._onchange_product_id()
|
||||
self.assertEquals(200, in_line.price_unit, "The included tax must be subtracted to the price")
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,21 +8,17 @@ from odoo.tests import tagged
|
||||
class TestReconciliationMatchingRules(AccountingTestCase):
|
||||
def _create_invoice_line(self, amount, partner, type):
|
||||
''' Create an invoice on the fly.'''
|
||||
self_ctx = self.env['account.invoice'].with_context(type=type)
|
||||
journal_id = self_ctx._default_journal().id
|
||||
self_ctx = self_ctx.with_context(journal_id=journal_id)
|
||||
view = type in ('in_invoice', 'in_refund') and 'account.invoice_supplier_form' or 'account.invoice_form'
|
||||
with Form(self_ctx, view=view) as invoice_form:
|
||||
invoice_form.partner_id = partner
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.name = 'xxxx'
|
||||
invoice_line_form.quantity = 1
|
||||
invoice_line_form.price_unit = amount
|
||||
invoice_line_form.invoice_line_tax_ids.clear()
|
||||
invoice_form = Form(self.env['account.move'].with_context(default_type=type))
|
||||
invoice_form.partner_id = partner
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
invoice_line_form.name = 'xxxx'
|
||||
invoice_line_form.quantity = 1
|
||||
invoice_line_form.price_unit = amount
|
||||
invoice_line_form.tax_ids.clear()
|
||||
invoice = invoice_form.save()
|
||||
invoice.action_invoice_open()
|
||||
lines = invoice.move_id.line_ids
|
||||
return lines.filtered(lambda l: l.account_id == invoice.account_id)
|
||||
invoice.post()
|
||||
lines = invoice.line_ids
|
||||
return lines.filtered(lambda l: l.account_id.user_type_id.type in ('receivable', 'payable'))
|
||||
|
||||
def _check_statement_matching(self, rules, expected_values, statements=None):
|
||||
if statements is None:
|
||||
@@ -293,15 +289,15 @@ class TestReconciliationMatchingRules(AccountingTestCase):
|
||||
|
||||
# Check first line has been well reconciled.
|
||||
self.assertRecordValues(self.bank_line_1.journal_entry_ids, [
|
||||
{'partner_id': self.partner_1.id, 'debit': 105.0, 'credit': 0.0},
|
||||
{'partner_id': self.partner_1.id, 'debit': 0.0, 'credit': 100.0},
|
||||
{'partner_id': self.partner_1.id, 'debit': 0.0, 'credit': 5.0},
|
||||
{'partner_id': self.partner_1.id, 'debit': 0.0, 'credit': 100.0},
|
||||
{'partner_id': self.partner_1.id, 'debit': 105.0, 'credit': 0.0},
|
||||
])
|
||||
|
||||
# Check second line has been well reconciled.
|
||||
self.assertRecordValues(self.cash_line_1.journal_entry_ids, [
|
||||
{'partner_id': self.partner_2.id, 'debit': 0.0, 'credit': 1000.0},
|
||||
{'partner_id': self.partner_2.id, 'debit': 1000.0, 'credit': 0.0},
|
||||
{'partner_id': self.partner_2.id, 'debit': 0.0, 'credit': 1000.0},
|
||||
])
|
||||
|
||||
def test_reverted_move_matching(self):
|
||||
@@ -329,7 +325,7 @@ class TestReconciliationMatchingRules(AccountingTestCase):
|
||||
})
|
||||
|
||||
move.post()
|
||||
move_reversed = AccountMove.browse(move.reverse_moves())
|
||||
move_reversed = move._reverse_moves()
|
||||
self.assertTrue(move_reversed.exists())
|
||||
|
||||
bank_st = self.env['account.bank.statement'].create({
|
||||
|
||||
@@ -41,7 +41,7 @@ class TestReconciliationWidget(TestReconciliation):
|
||||
bank_stmt = self.acc_bank_stmt_model.create({
|
||||
'journal_id': self.bank_journal_usd.id,
|
||||
'date': time.strftime('%Y-07-15'),
|
||||
'name': 'payment %s' % invoice.number,
|
||||
'name': 'payment %s' % invoice.name,
|
||||
})
|
||||
|
||||
bank_stmt_line = self.acc_bank_stmt_line_model.create({'name': 'payment',
|
||||
@@ -52,4 +52,4 @@ class TestReconciliationWidget(TestReconciliation):
|
||||
})
|
||||
|
||||
result = self.env['account.reconciliation.widget'].get_bank_statement_line_data(bank_stmt_line.ids)
|
||||
self.assertEqual(result['lines'][0]['reconciliation_proposition'][0]['amount_str'], '$ 50.00')
|
||||
self.assertEqual(result['lines'][0]['reconciliation_proposition'][0]['amount_str'], '$ 50.00')
|
||||
|
||||
@@ -1,946 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- Invoices -->
|
||||
<record id="view_invoice_line_calendar" model="ir.ui.view">
|
||||
<field name="name">account.invoice.calendar</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<calendar string="Invoices" date_start="date_invoice" color="journal_id">
|
||||
<field name="partner_id"/>
|
||||
<field name="amount_total_signed"/>
|
||||
</calendar>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_invoice_pivot">
|
||||
<field name="name">account.invoice.pivot</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Invoices" display_quantity="true">
|
||||
<field name="partner_id"/>
|
||||
<field name="amount_total_company_signed" type="measure"/>
|
||||
<field name="amount_total_signed" invisible="1"/>
|
||||
<field name="amount_total" invisible="1"/>
|
||||
<field name="residual_signed" invisible="1"/>
|
||||
<field name="residual" invisible="1"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_invoice_graph">
|
||||
<field name="name">account.invoice.graph</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Invoices">
|
||||
<field name="partner_id"/>
|
||||
<field name="amount_total_signed" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_invoice_view_activity" model="ir.ui.view">
|
||||
<field name="name">account.invoice.activity</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<activity string="Invoices">
|
||||
<templates>
|
||||
<div t-name="activity-box">
|
||||
<div>
|
||||
<field name="reference" display="full"/>
|
||||
<field name="partner_id" muted="1" display="full"/>
|
||||
</div>
|
||||
</div>
|
||||
</templates>
|
||||
</activity>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_line_tree" model="ir.ui.view">
|
||||
<field name="name">account.invoice.line.tree</field>
|
||||
<field name="model">account.invoice.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Invoice Line">
|
||||
<field name="name"/>
|
||||
<field name="account_id" groups="account.group_account_user"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id" groups="uom.group_uom"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="discount" groups="base.group_no_one"/>
|
||||
<field name="price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<field name="price_total" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
TODO: This view uses "parent" and will not work standalone.
|
||||
But for now we don't need it standalone.
|
||||
|
||||
The view will only work if it's called as the default view to display a one2many
|
||||
(showing invoice lines from inside the invoice form, where the invoice is the "parent").
|
||||
|
||||
If there is an action using this view directly (eg. showing all the invoice lines independently of their invoices) it will not work,
|
||||
because there is the use of parent. inside the view, which will not exist in that case.
|
||||
-->
|
||||
<record id="view_invoice_line_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.line.form</field>
|
||||
<field name="model">account.invoice.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<field name="display_type" invisible="1"/>
|
||||
<!--
|
||||
We need the sequence field to be here for new lines to be added at the correct position.
|
||||
TODO: at some point we want to fix this in the framework so that an invisible field is not required.
|
||||
-->
|
||||
<field name="sequence" invisible="1"/>
|
||||
<group attrs="{'invisible': [('display_type', '!=', False)]}">
|
||||
<group>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="invoice_type" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="product_id"
|
||||
context="{'partner_id': partner_id}"
|
||||
widget="many2one_barcode"
|
||||
/>
|
||||
<label for="quantity"/>
|
||||
<div class="o_row">
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id" groups="uom.group_uom"/>
|
||||
</div>
|
||||
<field name="price_unit"/>
|
||||
<field name="discount" groups="base.group_no_one"/>
|
||||
<field name="invoice_line_tax_ids" context="{'type': invoice_type}" domain="[('type_tax_use','!=','none'),('company_id', '=', company_id)]" widget="many2many_tags" options="{'no_create': True}"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
<group name="account_details">
|
||||
<field domain="[('company_id', '=', company_id)]" name="account_id" options="{'no_create': True}" groups="account.group_account_user"/>
|
||||
<field domain="[('company_id', '=', company_id)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<label for="name" string="Description" attrs="{'invisible': [('display_type', '!=', False)]}"/>
|
||||
<label for="name" string="Section" attrs="{'invisible': [('display_type', '!=', 'line_section')]}"/>
|
||||
<label for="name" string="Note" attrs="{'invisible': [('display_type', '!=', 'line_note')]}"/>
|
||||
<field name="name"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_tax_tree" model="ir.ui.view">
|
||||
<field name="name">account.invoice.tax.tree</field>
|
||||
<field name="model">account.invoice.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Manual Invoice Taxes">
|
||||
<field name="sequence"/>
|
||||
<field name="manual"/>
|
||||
<field name="name"/>
|
||||
<field name="account_id" groups="account.group_account_user"/>
|
||||
<field name="base"/>
|
||||
<field name="tax_ids"/>
|
||||
<field name="amount_total" string="Amount"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_tax_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.tax.form</field>
|
||||
<field name="model">account.invoice.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Manual Invoice Taxes">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
<field name="account_id" options="{'no_create': True}" groups="account.group_account_user"/>
|
||||
<field name="account_analytic_id" domain="[('company_id', '=', parent.company_id)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="manual"/>
|
||||
<field name="amount_total" string="Amount"/>
|
||||
<field name="base"/>
|
||||
<field name="tax_ids"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_tree" model="ir.ui.view">
|
||||
<field name="name">account.invoice.tree</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" decoration-muted="state == 'cancel'" string="Invoice" js_class="account_tree">
|
||||
<field name="partner_id" groups="base.group_user" string="Customer"/>
|
||||
<field name="date_invoice"/>
|
||||
<field name="number"/>
|
||||
<field name="commercial_partner_id" invisible="1"/>
|
||||
<field name="reference" invisible="1"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
<field name="user_id"/>
|
||||
<field name="date_due"/>
|
||||
<field name="origin"/>
|
||||
<field name="amount_untaxed_invoice_signed" string="Tax Excluded" sum="Total"/>
|
||||
<field name="amount_tax_signed" string="Tax" sum="Total"/>
|
||||
<field name="amount_total_signed" string="Total" sum="Total"/>
|
||||
<field name="residual_signed" string="Amount Due" sum="Amount Due"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="state"/>
|
||||
<field name="type" invisible="context.get('type',True)"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_tree_with_onboarding" model="ir.ui.view">
|
||||
<field name="name">account.invoice.tree.with.onboarding</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="invoice_tree"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//tree" position="attributes">
|
||||
<attribute name="banner_route">/account/account_invoice_onboarding</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="invoice_kanban">
|
||||
<field name="name">account.invoice.kanban</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="number"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="amount_total_signed"/>
|
||||
<field name="date_invoice"/>
|
||||
<field name="state"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="activity_state"/>
|
||||
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title"><span><t t-esc="record.partner_id.value"/></span></strong>
|
||||
</div>
|
||||
<strong><field name="amount_total_signed" widget="monetary"/></strong>
|
||||
</div>
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left text-muted">
|
||||
<span><t t-esc="record.number.value"/> <t t-esc="record.date_invoice.value"/></span>
|
||||
</div>
|
||||
<div class="oe_kanban_bottom_right">
|
||||
<span class="float-right text-right">
|
||||
<field name="state" widget="label_selection" options="{'classes': {'draft': 'default', 'cancel': 'default', 'none': 'danger', 'open': 'warning',
|
||||
'paid': 'success'}}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_supplier_tree" model="ir.ui.view">
|
||||
<field name="name">account.invoice.supplier.tree</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" decoration-muted="state == 'cancel'" decoration-bf="not partner_id" string="Vendor Bill" js_class="account_tree">
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="source_email" invisible="1"/>
|
||||
<field name="invoice_icon" string=" "/>
|
||||
<field name="vendor_display_name" groups="base.group_user" string="Vendor"/>
|
||||
<field name="date_invoice" string="Bill Date"/>
|
||||
<field name="number"/>
|
||||
<field name="reference"/>
|
||||
<field name="commercial_partner_id" invisible="1"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
<field name="date_due"/>
|
||||
<field name="origin"/>
|
||||
<field name="amount_untaxed_invoice_signed" string="Tax Excluded" sum="Total"/>
|
||||
<field name="amount_tax_signed" sum="Total"/>
|
||||
<field name="amount_total_signed" string="Total" sum="Total"/>
|
||||
<field name="residual_signed" string="To Pay" sum="To pay"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="state"/>
|
||||
<field name="type" invisible="context.get('type',True)"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_supplier_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.supplier.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="priority">2</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Vendor Bill">
|
||||
<header>
|
||||
<button name="action_invoice_open" type="object" states="draft" string="Validate" class="oe_highlight" groups="account.group_account_invoice"/>
|
||||
<button name="action_register_payment" type="object" states="open" string="Register Payment" groups="account.group_account_invoice" class="oe_highlight"/>
|
||||
<button name="%(action_account_invoice_refund)d" type='action' string='Ask for a Credit Note' groups="account.group_account_invoice" attrs="{'invisible': ['|',('type', 'in', ['in_refund','out_refund']),('state','not in',('open','in_payment','paid'))]}"/>
|
||||
<button name="action_invoice_draft" states="cancel" string="Set to Draft" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,paid" />
|
||||
</header>
|
||||
<div groups="account.group_account_invoice" class="alert alert-info" role="alert" style="margin-bottom:0px;" attrs="{'invisible': [('has_outstanding','=',False)]}">
|
||||
You have <bold><a class="alert-link" href="#outstanding" role="button">outstanding debits</a></bold> for this supplier. You can allocate them to mark this bill as paid.
|
||||
</div>
|
||||
<div groups="account.group_account_invoice" class="alert alert-info" role="alert" style="margin-bottom:0px;" attrs="{'invisible': [('edition_mode_available','=',False)]}">
|
||||
You have suspense account moves that match this invoice. <bold><button class="alert-link" type="object" name="action_reconcile_to_check" role="button" string="Check them" style="padding: 0;vertical-align: baseline;"/></bold> to mark this invoice as paid.
|
||||
</div>
|
||||
<field name="has_outstanding" invisible="1"/>
|
||||
<field name="edition_mode_available" invisible="1"/>
|
||||
<sheet string="Vendor Bill">
|
||||
<div>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_invoice')]}">Draft Bill</span>
|
||||
<span class="o_form_label" attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">- First Number:</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_refund')]}">Draft Credit Note</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_invoice')]}">Bill </span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_refund')]}">Credit Note </span>
|
||||
<h1 class="mt0">
|
||||
<field name="number" class="oe_inline" attrs="{'invisible': [('state', '=', 'draft')]}"/>
|
||||
<div attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">
|
||||
<field name="sequence_number_next_prefix" class="oe_inline"/>
|
||||
<field name="sequence_number_next" class="oe_inline"/>
|
||||
</div>
|
||||
</h1>
|
||||
</div>
|
||||
<field name="type" invisible="1"/>
|
||||
<group>
|
||||
<group>
|
||||
<field string="Vendor" name="partner_id"
|
||||
widget="res_partner_many2one"
|
||||
context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1, 'default_is_company': True, 'show_vat': True}"
|
||||
domain="[('supplier', '=', True)]"/>
|
||||
<field name="reference" string="Vendor Reference"/>
|
||||
<field name="vendor_bill_id" attrs="{'invisible': [('state','not in',['draft'])]}"
|
||||
domain="[('partner_id','child_of', [partner_id]), ('state','in',('open','in_payment','paid')), ('type','=','in_invoice')]"
|
||||
string="Auto-Complete" placeholder="Select an old vendor bill"
|
||||
options="{'no_create': True}" context="{'show_total_amount': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="origin" attrs="{'invisible': [('origin', '=', False)]}"/>
|
||||
<field name="source_email" widget="email" groups="base.group_no_one" attrs="{'invisible': [('source_email', '=', False)]}"/>
|
||||
<field name="date_invoice" string="Bill Date" options="{'datepicker': {'warn_future': true}}"/>
|
||||
<field name="date_due" attrs="{'readonly': ['|',('payment_term_id','!=',False), ('state', 'in', ['open', 'in_payment', 'paid'])]}" force_save="1"/>
|
||||
<field name="move_name" invisible="1"/>
|
||||
<field name="currency_id" options="{'no_create': True, 'no_open': True}" groups="base.group_multi_currency"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="commercial_partner_id" invisible="1"/>
|
||||
<field domain="[('partner_id', '=', commercial_partner_id)]" name="partner_bank_id" string="Bank Account" context="{'default_partner_id': commercial_partner_id}" attrs="{'invisible': [('type', '!=', 'in_invoice')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Bill">
|
||||
<field context="{'type': type, 'journal_id': journal_id}" name="invoice_line_ids">
|
||||
<tree string="Bill lines" editable="bottom">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="product_id"
|
||||
context="{'partner_id': parent.partner_id}" domain="[('purchase_ok','=',True)]"
|
||||
optional="show"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="account_id" options="{'no_create': True}" groups="account.group_account_user"
|
||||
domain="[('company_id', '=', parent.company_id), ('internal_type', '=', 'other'), ('deprecated', '=', False)]"/>
|
||||
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||
domain="[('company_id', '=', parent.company_id)]"
|
||||
context="{'default_partner_id': parent.partner_id}"
|
||||
optional="show"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id" string="UoM" groups="uom.group_uom" optional="show"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="discount" string="Disc.%" optional="hide"/>
|
||||
<field name="invoice_line_tax_ids" widget="many2many_tags" options="{'no_create': True}" context="{'type':parent.type, 'tree_view_ref': 'account.account_tax_view_tree', 'search_view_ref': 'account.account_tax_view_search'}"
|
||||
domain="[('type_tax_use','=','purchase'),('company_id', '=', parent.company_id)]"/>
|
||||
<field name="price_subtotal" string="Amount"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group>
|
||||
<group>
|
||||
<div class="oe_inline">
|
||||
<field name="tax_line_ids">
|
||||
<tree editable="bottom" string="Taxes" create="0" delete="0">
|
||||
<field name="name"/>
|
||||
<!--Need invisible fields for on_change to create all necessary info -->
|
||||
<field name="tax_id" invisible="1"/>
|
||||
<field name="tax_ids" invisible="1"/>
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="manual" invisible="1"/>
|
||||
<field name="account_id" groups="account.group_account_user"/>
|
||||
<field name="account_analytic_id" domain="[('company_id', '=', parent.company_id)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="amount"/>
|
||||
<field name="amount_rounding" invisible="1"/>
|
||||
<field name="amount_total" invisible="1"/>
|
||||
<field name="currency_id" invisible="1" force_save="1"/>
|
||||
<field name="tax_repartition_line_id" invisible="1"/> <!--Needed in order for the onchange computing the taxes to keep the repartition lines-->
|
||||
<field name="tag_ids" invisible="1"/> <!--Needed in order for the onchange computing the taxes to keep the tags-->
|
||||
<field name="base" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
</group>
|
||||
<group class="oe_subtotal_footer oe_right">
|
||||
<field name="amount_untaxed"/>
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total" class="oe_subtotal_footer_separator"/>
|
||||
<field name="payments_widget" colspan="2" nolabel="1" widget="payment"/>
|
||||
<field name="residual" class="oe_subtotal_footer_separator" attrs="{'invisible': [('state', '=', 'draft')]}"/>
|
||||
<field name="reconciled" invisible="1"/>
|
||||
<field name="outstanding_credits_debits_widget" colspan="2" nolabel="1" widget="payment" attrs="{'invisible': [('state', 'not in', 'open')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<div>
|
||||
<field name="comment" placeholder="Additional notes..."/>
|
||||
</div>
|
||||
</page>
|
||||
<page string="Other Info" name="other_info">
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id" string="Purchase Representative"/>
|
||||
<field name="journal_id" groups="account.group_account_user" options="{'no_create': True}"
|
||||
attrs="{'readonly':[('move_name','!=',False)]}"/>
|
||||
<field domain="[('company_id', '=', company_id), ('internal_type', '=', 'payable'), ('deprecated', '=', False)]"
|
||||
name="account_id" groups="account.group_account_user"/>
|
||||
<field name="date" groups="account.group_account_user"/>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="incoterm_id" options="{'no_create': True}"/>
|
||||
<field name="fiscal_position_id" options="{'no_create': True}" placeholder="Auto-detect"/>
|
||||
<field name="payment_term_id" options="{'no_create': True}"/>
|
||||
<field name="move_id" groups="account.group_account_user" attrs="{'invisible': [('move_id', '=', False)]}"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="o_attachment_preview"/>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Invoice" class="o_invoice_form">
|
||||
<header>
|
||||
<button name="action_invoice_sent" string="Send & Print" type="object" attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','in_payment','paid'))]}" class="oe_highlight" groups="base.group_user"/>
|
||||
<button name="action_invoice_sent" string="Send & Print" type="object" attrs="{'invisible':['|',('sent','=',False), ('state', 'not in', ('open','in_payment','paid'))]}" groups="base.group_user"/>
|
||||
<button name="action_register_payment" id="account_invoice_payment_btn" type="object"
|
||||
attrs="{'invisible': [('state', '!=', 'open')]}"
|
||||
string="Register Payment" groups="account.group_account_invoice" class="oe_highlight"/>
|
||||
<button name="action_invoice_open" type="object" states="draft" string="Validate" class="oe_highlight o_invoice_validate" groups="account.group_account_invoice"/>
|
||||
<button name="%(action_account_invoice_refund)d" type='action' string='Add Credit Note' groups="account.group_account_invoice" attrs="{'invisible': ['|',('type', '=', 'out_refund'), ('state', 'not in', ('open','in_payment','paid'))]}"/>
|
||||
<button name="preview_invoice" type="object" string="Preview"/>
|
||||
<button name="action_invoice_draft" states="cancel" string="Reset to Draft" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid"/>
|
||||
</header>
|
||||
<div groups="account.group_account_invoice" class="alert alert-info" role="alert" style="margin-bottom:0px;" attrs="{'invisible': [('has_outstanding','=',False)]}">
|
||||
You have <bold><a class="alert-link" href="#outstanding" role="button">outstanding payments</a></bold> for this customer. You can allocate them to mark this invoice as paid.
|
||||
</div>
|
||||
<div groups="account.group_account_invoice" class="alert alert-info" role="alert" style="margin-bottom:0px;" attrs="{'invisible': [('edition_mode_available','=',False)]}">
|
||||
You have suspense account moves that match this invoice. <bold><button class="alert-link" type="object" name="action_reconcile_to_check" role="button" string="Check them" style="padding: 0;vertical-align: baseline;"/></bold> to mark this invoice as paid.
|
||||
</div>
|
||||
<field name="has_outstanding" invisible="1"/>
|
||||
<field name="edition_mode_available" invisible="1"/>
|
||||
<sheet string="Invoice">
|
||||
<div class="oe_button_box" name="button_box">
|
||||
</div>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|',('state','=','draft'), ('type','!=','out_refund')]}">Credit Note</span>
|
||||
<h1 class="mt0">
|
||||
<div attrs="{'invisible': [('sequence_number_next_prefix','!=',False)]}">
|
||||
<label for="number" string="Draft Invoice" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_invoice')]}"/>
|
||||
<label for="number" string="Draft Credit Note" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_refund')]}"/>
|
||||
<field name="number" readonly="1" class="oe_inline" attrs="{'invisible': [('state','in',('draft',))]}"/>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">
|
||||
<label for="sequence_number_next_prefix" string="Invoice Number:"/><br/>
|
||||
<field name="sequence_number_next_prefix" class="oe_inline"/>
|
||||
<field name="sequence_number_next" class="oe_inline"/>
|
||||
</div>
|
||||
</h1>
|
||||
<field name="type" invisible="1"/>
|
||||
<group>
|
||||
<group>
|
||||
<field string="Customer" name="partner_id"
|
||||
widget="res_partner_many2one"
|
||||
context="{'search_default_customer':1, 'show_address': 1, 'default_is_company': True, 'show_vat': True}"
|
||||
options='{"always_reload": True, "no_quick_create": True}'
|
||||
domain="[('customer', '=', True)]"/>
|
||||
<field name="payment_term_id"/>
|
||||
<field name="cash_rounding_id" groups="account.group_cash_rounding"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_invoice" options="{'datepicker': {'warn_future': true}}"/>
|
||||
<field name="date_due" attrs="{'readonly': ['|',('payment_term_id','!=',False), ('state', 'in', ['open', 'in_payment', 'paid'])]}" force_save="1"/>
|
||||
<field name="move_name" invisible="1"/>
|
||||
<label for="currency_id" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="currency_id" options="{'no_create': True, 'no_open': True}" class="oe_inline"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<field name="sent" invisible="1"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Invoice Lines">
|
||||
<field
|
||||
name="invoice_line_ids"
|
||||
nolabel="1"
|
||||
widget="section_and_note_one2many"
|
||||
mode="tree,kanban"
|
||||
context="{'type': type, 'journal_id': journal_id, 'default_invoice_id': id}"
|
||||
>
|
||||
<tree string="Invoice Lines" editable="bottom">
|
||||
<control>
|
||||
<create name="add_line_control" string="Add a line"/>
|
||||
<create name="add_section_control" string="Add a section" context="{'default_display_type': 'line_section'}"/>
|
||||
<create name="add_note_control" string="Add a note" context="{'default_display_type': 'line_note'}"/>
|
||||
</control>
|
||||
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="product_id" domain="[('sale_ok','=',True)]" optional="show"/>
|
||||
<field name="origin" invisible="1"/>
|
||||
<field name="is_rounding_line" invisible="1"/>
|
||||
<field name="name" widget="section_and_note_text"/>
|
||||
<field name="display_type" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field
|
||||
name="account_id"
|
||||
options="{'no_create': True}"
|
||||
groups="account.group_account_user"
|
||||
domain="[('company_id', '=', parent.company_id), ('internal_type', '=', 'other'), ('deprecated', '=', False)]"
|
||||
attrs="{'required': [('display_type', '=', False)]}"
|
||||
/>
|
||||
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||
domain="[('company_id', '=', parent.company_id)]"
|
||||
context="{'default_partner_id': parent.partner_id}"
|
||||
optional="show"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags" options="{'color_field': 'color'}"
|
||||
optional="show"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id" string="UoM" groups="uom.group_uom" optional="show"/>
|
||||
<field name="price_unit" string="Price"/>
|
||||
<field name="discount" string="Disc.%" optional="hide"/>
|
||||
<field name="invoice_line_tax_ids" widget="many2many_tags" options="{'no_create': True}" context="{'type':parent.type, 'tree_view_ref': 'account.account_tax_view_tree', 'search_view_ref': 'account.account_tax_view_search'}"
|
||||
domain="[('type_tax_use','=','sale'),('company_id', '=', parent.company_id)]"/>
|
||||
<field name="price_subtotal" string="Subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<field name="price_total" string="Total" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="product_id"/>
|
||||
<field name="price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<field name="price_total" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id" groups="uom.group_uom"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="display_type"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click {{ record.display_type.raw_value ? 'o_is_' + record.display_type.raw_value : '' }}">
|
||||
<t t-if="!record.display_type.raw_value">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<strong>
|
||||
<span>
|
||||
<t t-esc="record.product_id.value"/>
|
||||
</span>
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<strong>
|
||||
<span class="float-right text-right">
|
||||
<t t-esc="record.price_subtotal.value" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<t t-esc="record.price_total.value" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
</span>
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 text-muted">
|
||||
<span>
|
||||
Quantity:
|
||||
<t t-esc="record.quantity.value"/>
|
||||
<t t-esc="record.uom_id.value"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 text-muted">
|
||||
<span>
|
||||
Unit Price:
|
||||
<t t-esc="record.price_unit.value"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-if="record.display_type.raw_value === 'line_section' || record.display_type.raw_value === 'line_note'">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<span>
|
||||
<t t-esc="record.name.value"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
<group class="oe_subtotal_footer oe_right">
|
||||
<field name="amount_untaxed"/>
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total" class="oe_subtotal_footer_separator"/>
|
||||
<field name="payments_widget" colspan="2" nolabel="1" widget="payment"/>
|
||||
<field name="residual" class="oe_subtotal_footer_separator" attrs="{'invisible': [('state', '=', 'draft')]}"/>
|
||||
<field name="reconciled" invisible="1"/>
|
||||
<field name="outstanding_credits_debits_widget" colspan="2" nolabel="1" widget="payment" attrs="{'invisible': [('state', 'not in', 'open')]}"/>
|
||||
</group>
|
||||
<field name="comment" placeholder="Terms and conditions..."/>
|
||||
</page>
|
||||
<page string="Other Info" name="other_info">
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="journal_id" groups="account.group_account_user"
|
||||
options="{'no_create': True}" attrs="{'readonly':[('move_name','!=',False)]}"/>
|
||||
<field domain="[('company_id', '=', company_id),('internal_type','=', 'receivable'), ('deprecated', '=', False)]"
|
||||
name="account_id" groups="account.group_account_user"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="move_id" groups="account.group_account_user" attrs="{'invisible': [('move_id', '=', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="incoterm_id" options="{'no_create': True}"/>
|
||||
<field name="fiscal_position_id" options="{'no_create': True}" />
|
||||
<field name="name"/>
|
||||
<field name="origin" groups="base.group_user" attrs="{'invisible': [('origin', '=', False)]}"/>
|
||||
<field name="reference" attrs="{'readonly':[('state','!=','draft')]}"/>
|
||||
<!-- Since the same form view is used for customer invoices and credit notes,
|
||||
we can't set a domain or a default value context on partner_bank_id. We must
|
||||
rely on the onchange -->
|
||||
<field name="partner_bank_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="tax_line_ids">
|
||||
<tree editable="bottom" string="Taxes" create="0">
|
||||
<field name="name"/>
|
||||
<!--Need invisible fields for on_change to create all necessary info -->
|
||||
<field name="tax_id" invisible="1"/>
|
||||
<field name="tax_ids" invisible="1"/>
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="manual" invisible="1"/>
|
||||
<field name="account_id" groups="account.group_account_user"/>
|
||||
<field name="amount" invisible="1"/>
|
||||
<field name="account_analytic_id" domain="[('company_id', '=', parent.company_id)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="amount_rounding" invisible="1"/>
|
||||
<field name="amount_total"/>
|
||||
<field name="currency_id" invisible="1" force_save="1"/>
|
||||
<field name="tax_repartition_line_id" invisible="1"/> <!--Needed in order for the onchange computing the taxes to keep the repartition lines-->
|
||||
<field name="tag_ids" invisible="1"/> <!--Needed in order for the onchange computing the taxes to keep the tags-->
|
||||
<field name="base" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="o_attachment_preview"/>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Custom reports (aka filters) -->
|
||||
<record id="filter_invoice_salespersons" model="ir.filters">
|
||||
<field name="name">By Salespersons</field>
|
||||
<field name="model_id">account.invoice</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date_invoice:month', 'user_id']}</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_invoice_filter" model="ir.ui.view">
|
||||
<field name="name">account.invoice.select</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Invoice">
|
||||
<field name="number" string="Invoice" filter_domain="['|','|','|', ('number','ilike',self), ('origin','ilike',self), ('reference', 'ilike', self), ('partner_id', 'child_of', self)]"/>
|
||||
<filter domain="[('user_id','=',uid)]" name="myinvoices" help="My Invoices"/>
|
||||
<field name="journal_id"/>
|
||||
<separator/>
|
||||
<filter name="draft" string="Draft" domain="[('state','=','draft')]"/>
|
||||
<filter name="unpaid" string="Open" domain="[('state', '=', 'open')]"/>
|
||||
<filter name="in_payment" string="In Payment" domain="[('state', '=', 'in_payment')]"/>
|
||||
<filter name="paid" string="Paid" domain="[('state', '=', 'paid')]"/>
|
||||
<filter name="late" string="Overdue" domain="['&', ('date_due', '<', time.strftime('%%Y-%%m-%%d')), ('state', '=', 'open')]" help="Overdue invoices, maturity date passed"/>
|
||||
<separator/>
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
<field name="user_id" string="Salesperson" domain="[('share','=', False)]"/>
|
||||
<field name="date" string="Period"/>
|
||||
<separator/>
|
||||
<filter string="My Activities" name="activities_my"
|
||||
domain="[('activity_ids.user_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
<filter string="Late Activities" name="activities_overdue"
|
||||
domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
||||
help="Show all records which has next action date is before today"/>
|
||||
<filter string="Today Activities" name="activities_today"
|
||||
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Future Activities" name="activities_upcoming_all"
|
||||
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))
|
||||
]"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter name="group_by_partner_id" string="Partner" context="{'group_by':'commercial_partner_id'}"/>
|
||||
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
|
||||
<filter name="status" string="Status" context="{'group_by':'state'}"/>
|
||||
<separator/>
|
||||
<filter string="Invoice Date" name="invoicedate" context="{'group_by':'date_invoice'}"/>
|
||||
<filter string="Due Date" name="duedate" context="{'group_by':'date_due'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree" model="ir.actions.act_window">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,form,calendar,graph</field>
|
||||
<field name="view_id" ref="invoice_tree"/>
|
||||
<field name="context">{'type':'out_invoice'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_refund_out_tree" model="ir.actions.act_window">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,form,kanban,calendar,graph,pivot</field>
|
||||
<field name="view_id" ref="invoice_tree"/>
|
||||
<field name="domain">[('type','in', ['out_invoice', 'out_refund']), ('state', 'not in', ['draft', 'cancel'])]</field>
|
||||
<field name="context">{'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_refund_out_tree_tree" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="invoice_tree"/>
|
||||
<field name="act_window_id" ref="action_invoice_refund_out_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_refund_out_tree_form" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_refund_out_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree_pending_invoice" model="ir.actions.act_window">
|
||||
<field name="name">Pending Invoices</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,form,calendar,graph</field>
|
||||
<field name="view_id" ref="invoice_tree"/>
|
||||
<field name="context">{'type':'out_invoice'}</field>
|
||||
<field name="domain">[('state','=','draft')]</field>
|
||||
<!-- <field name="search_view_id" ref="view_account_invoice_filter"/>-->
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree_view1" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="act_window_id" ref="action_invoice_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree_view2" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree1" model="ir.actions.act_window">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
||||
<field eval="False" name="view_id"/>
|
||||
<field name="domain">[('type','=','out_invoice')]</field>
|
||||
<field name="context">{'type':'out_invoice', 'journal_type': 'sale'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a customer invoice
|
||||
</p><p>
|
||||
Create invoices, register payments and keep track of the discussions with your customers.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree1_view1" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="invoice_tree_with_onboarding"/>
|
||||
<field name="act_window_id" ref="action_invoice_tree1"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree1_view2" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_tree1"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_invoice_tree1" id="menu_action_invoice_tree1" parent="account.menu_finance_receivables" sequence="1"/>
|
||||
|
||||
<record id="action_invoice_out_refund" model="ir.actions.act_window">
|
||||
<field name="name">Credit Notes</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
||||
<field eval="False" name="view_id"/>
|
||||
<field name="domain">[('type','=','out_refund')]</field>
|
||||
<field name="context">{'default_type': 'out_refund', 'type': 'out_refund', 'journal_type': 'sale'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a credit note
|
||||
</p><p>
|
||||
Note that the easiest way to create a credit note is to do it directly
|
||||
from the customer invoice.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_out_refund_tree" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="invoice_tree"/>
|
||||
<field name="act_window_id" ref="action_invoice_out_refund"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_out_refund_form" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_out_refund"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_invoice_out_refund"
|
||||
id="menu_action_invoice_out_refund"
|
||||
parent="account.menu_finance_receivables"
|
||||
sequence="1"/>
|
||||
|
||||
<record id="action_vendor_bill_template" model="ir.actions.act_window">
|
||||
<field name="name">Vendor Bills</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
||||
<field eval="False" name="view_id"/>
|
||||
<field name="domain">[('type','=','in_invoice')]</field>
|
||||
<field name="context">{'default_type': 'in_invoice', 'type': 'in_invoice', 'journal_type': 'purchase'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Record a new vendor bill
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<!--
|
||||
server action opening the vendor bills and returning the right help tooltip
|
||||
-->
|
||||
<record id="action_invoice_tree2" model="ir.actions.server">
|
||||
<field name="name">Bills</field>
|
||||
<field name="model_id" ref="model_account_invoice"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
action_values = env.ref('account.action_vendor_bill_template').read()[0]
|
||||
new_help = model.complete_empty_list_help()
|
||||
action_values.update({'help': action_values.get('help', '') + new_help})
|
||||
action = action_values
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_supplier_tree1_view1" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="invoice_supplier_tree"/>
|
||||
<field name="act_window_id" ref="action_vendor_bill_template"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice__supplier_tree1_view2" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_supplier_form"/>
|
||||
<field name="act_window_id" ref="action_vendor_bill_template"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_invoice_tree2" id="menu_action_invoice_tree2" parent="account.menu_finance_payables" sequence="1"/>
|
||||
|
||||
|
||||
<record id="action_invoice_in_refund" model="ir.actions.act_window">
|
||||
<field name="name">Refund</field>
|
||||
<field name="res_model">account.invoice</field>
|
||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
||||
<field eval="False" name="view_id"/>
|
||||
<field name="domain">[('type','=','in_refund')]</field>
|
||||
<field name="context">{'default_type': 'in_refund', 'type': 'in_refund', 'journal_type': 'purchase'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a vendor credit note
|
||||
</p><p>
|
||||
Note that the easiest way to create a vendor credit note it to do it directly from the vendor bill.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_in_refund_tree" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="invoice_supplier_tree"/>
|
||||
<field name="act_window_id" ref="action_invoice_in_refund"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_in_refund_form" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_supplier_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_in_refund"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_invoice_in_refund"
|
||||
id="menu_action_invoice_in_refund"
|
||||
parent="account.menu_finance_payables"
|
||||
sequence="5"/>
|
||||
|
||||
<act_window
|
||||
id="act_account_journal_2_account_invoice_opened"
|
||||
name="Unpaid Invoices"
|
||||
context="{'search_default_journal_id': [active_id], 'search_default_unpaid':1, 'default_journal_id': active_id}"
|
||||
domain="[('journal_id','=', active_id)]"
|
||||
res_model="account.invoice"
|
||||
binding_model="account.journal"
|
||||
binding_views="form"/>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -124,12 +124,12 @@
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'use_domain': [('type', '=', 'out_invoice')]}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'use_domain': [('type', '=', 'in_invoice')]}">Bills</a>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_invoice_type'}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_invoice_type'}">Bills</a>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'use_domain': [('type', '=', 'out_refund')], 'invoice_type': 'refund'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'use_domain': [('type', '=', 'in_refund')], 'invoice_type': 'refund'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_refund_type'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_refund_type'}">Credit Notes</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_open_reconcile">Payments Matching</a>
|
||||
@@ -175,10 +175,10 @@
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'view_no_maturity': 1}">Journal Entries</a>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line'}">Journal Entries</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1, 'view_no_maturity': 1}">Entries to Review</a>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1}">Entries to Review</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<!-- VIEWS -->
|
||||
|
||||
<!-- account.move.line (Journal items) -->
|
||||
|
||||
<record id="view_move_line_form" model="ir.ui.view">
|
||||
<field name="name">account.move.line.form</field>
|
||||
<field name="model">account.move.line</field>
|
||||
@@ -33,10 +32,9 @@
|
||||
<group string="Accounting Documents">
|
||||
<field name="move_id" attrs="{'readonly':[('parent_state','=','posted')]}"/>
|
||||
<field name="statement_id" readonly="True" attrs="{'invisible': [('statement_id','=',False)]}"/>
|
||||
<field name="invoice_id" attrs="{'invisible': [('invoice_id','=',False)]}"/>
|
||||
</group>
|
||||
<group string="Dates">
|
||||
<field name="date"/>
|
||||
<field name="date" groups="account.group_account_user"/>
|
||||
<field name="date_maturity"/>
|
||||
</group>
|
||||
|
||||
@@ -71,7 +69,6 @@
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="narration" colspan="4" nolabel="1" placeholder="Add an internal note..."/>
|
||||
</page>
|
||||
<page string="Analytic Lines" groups="analytic.group_analytic_accounting">
|
||||
<field name="date" invisible="1"/>
|
||||
@@ -153,8 +150,8 @@
|
||||
<field name="currency_id" readonly="True" invisible="1" />
|
||||
<field name="date_maturity"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="parent_state" invisible="1"/>
|
||||
</tree>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="parent_state" invisible="1"/></tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -337,20 +334,48 @@
|
||||
<field name="name">account.move.tree</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" string="Journal Entries">
|
||||
<tree decoration-info="state == 'draft'" string="Journal Entries" decoration-muted="state == 'cancel'">
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="amount" sum="Total Amount"/>
|
||||
<field name="amount_total_signed" sum="Total Amount"/>
|
||||
<field name="state"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_tree" model="ir.ui.view">
|
||||
<field name="name">account.invoice.tree</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" string="Invoices" decoration-muted="state == 'cancel'" js_class="account_tree">
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="invoice_source_email" invisible="1"/>
|
||||
<field name="invoice_vendor_icon" string=" "/>
|
||||
<field name="invoice_vendor_display_name" groups="base.group_user" string="Vendor"/>
|
||||
<field name="invoice_date"/>
|
||||
<field name="name"/>
|
||||
<field name="invoice_payment_ref"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
<field name="invoice_date_due"/>
|
||||
<field name="invoice_origin"/>
|
||||
<field name="amount_untaxed_signed" string="Tax Excluded" sum="Total"/>
|
||||
<field name="amount_tax_signed" string="Tax" sum="Total"/>
|
||||
<field name="amount_total_signed" string="Total" sum="Total"/>
|
||||
<field name="amount_residual_signed" string="Amount Due" sum="Amount Due"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="state"/>
|
||||
<field name="invoice_payment_state"/>
|
||||
<field name="type" invisible="context.get('default_type', True)"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_move_kanban" model="ir.ui.view">
|
||||
<field name="name">account.move.kanban</field>
|
||||
<field name="model">account.move</field>
|
||||
@@ -364,7 +389,7 @@
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="row mb4">
|
||||
<div class="col-6">
|
||||
<div class="col-6 o_kanban_record_headings">
|
||||
<strong><span><field name="journal_id"/></span></strong>
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
@@ -378,7 +403,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<span><field name="amount" widget='monetary'/></span>
|
||||
<span><field name="amount_total" widget='monetary'/></span>
|
||||
<span><field name="currency_id" invisible="1"/></span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
@@ -398,89 +423,396 @@
|
||||
<field name="name">account.move.form</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Entry" duplicate="false">
|
||||
<form string="Account Entry">
|
||||
<header>
|
||||
<button name="action_post" states="draft" string="Post" type="object" class="oe_highlight" groups="account.group_account_invoice"/>
|
||||
<button name="%(action_view_account_move_reversal)d" states="posted" string="Reverse Entry" type="action" groups="account.group_account_invoice"/>
|
||||
<button name="action_duplicate" string="Duplicate" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar"/>
|
||||
<!-- Post -->
|
||||
<button name="action_post" string="Post" class="oe_highlight"
|
||||
type="object" groups="account.group_account_invoice"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
<button name="action_post" string="Validate" class="oe_highlight"
|
||||
type="object" groups="account.group_account_invoice"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
<!-- Send (only invoices) -->
|
||||
<button name="action_invoice_sent"
|
||||
type="object"
|
||||
string="Send & Print"
|
||||
attrs="{'invisible':['|', '|', '|', ('state', '!=', 'posted'), ('invoice_sent', '=', True), ('invoice_payment_state', '!=', 'not_paid'), ('type', 'not in', ('out_invoice', 'out_refund'))]}"
|
||||
class="oe_highlight"
|
||||
groups="base.group_user"/>
|
||||
<button name="action_invoice_sent"
|
||||
type="object"
|
||||
string="Send & Print"
|
||||
attrs="{'invisible':['|', '|', '|', ('state', '!=', 'posted'), ('invoice_sent', '=', False), ('invoice_payment_state', '!=', 'not_paid'), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}"
|
||||
groups="base.group_user"/>
|
||||
<!-- Register Payment (only invoices / receipts) -->
|
||||
<button name="action_invoice_register_payment" id="account_invoice_payment_btn"
|
||||
type="object" class="oe_highlight"
|
||||
attrs="{'invisible': ['|', '|', ('state', '!=', 'posted'), ('invoice_payment_state', '!=', 'not_paid'), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"
|
||||
string="Register Payment"
|
||||
groups="account.group_account_invoice"/>
|
||||
<!-- Preview (only invoices) -->
|
||||
<button name="preview_invoice" type="object" string="Preview"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}"/>
|
||||
<!-- Reverse -->
|
||||
<button name="%(action_view_account_move_reversal)d" string="Reverse Entry"
|
||||
type="action" groups="account.group_account_invoice"
|
||||
attrs="{'invisible': ['|', ('type', '!=', 'entry'), ('state', '!=', 'posted')]}"/>
|
||||
<button name="action_reverse" string='Add Credit Note'
|
||||
type='object' groups="account.group_account_invoice"
|
||||
attrs="{'invisible': ['|', ('type', 'not in', ('out_invoice', 'in_invoice')), ('state', '!=', 'posted')]}"/>
|
||||
<!-- Duplicate -->
|
||||
<button name="action_duplicate" string="Duplicate" type="object" groups="account.group_account_invoice"
|
||||
attrs="{'invisible': [('type', '!=', 'entry')]}"/>
|
||||
<!-- Cancel -->
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,posted"/>
|
||||
</header>
|
||||
<!-- Invoice outstanding credits -->
|
||||
<div groups="account.group_account_invoice"
|
||||
class="alert alert-info" role="alert" style="margin-bottom:0px;"
|
||||
attrs="{'invisible': ['|', '|', ('type', 'not in', ('out_invoice', 'out_refund')), ('invoice_has_outstanding', '=', False), ('invoice_payment_state', '!=', 'not_paid')]}">
|
||||
You have <bold><a class="alert-link" href="#outstanding" role="button">outstanding payments</a></bold> for this customer. You can allocate them to mark this invoice as paid.
|
||||
</div>
|
||||
<div groups="account.group_account_invoice"
|
||||
class="alert alert-info" role="alert" style="margin-bottom:0px;"
|
||||
attrs="{'invisible': ['|', '|', ('type', 'not in', ('in_invoice', 'in_refund')), ('invoice_has_outstanding', '=', False), ('invoice_payment_state', '!=', 'not_paid')]}">
|
||||
You have <bold><a class="alert-link" href="#outstanding" role="button">outstanding debits</a></bold> for this supplier. You can allocate them to mark this bill as paid.
|
||||
</div>
|
||||
<!-- Invoice suspense accounts -->
|
||||
<div groups="account.group_account_invoice" class="alert alert-info" role="alert" style="margin-bottom:0px;"
|
||||
attrs="{'invisible': ['|', ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')), ('invoice_has_matching_supsense_amount','=',False)]}">
|
||||
You have suspense account moves that match this invoice. <bold><button class="alert-link" type="object" name="action_open_matching_suspense_moves" role="button" string="Check them" style="padding: 0;vertical-align: baseline;"/></bold> to mark this invoice as paid.
|
||||
</div>
|
||||
<sheet>
|
||||
<field name="tax_type_domain" invisible="1"/>
|
||||
<field name="id" invisible="1"/>
|
||||
<div class="oe_button_box">
|
||||
<button name="action_view_reverse_entry"
|
||||
type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-refresh"
|
||||
attrs="{'invisible': [('reverse_entry_id', '=', False)]}"
|
||||
string="Reversed entry">
|
||||
</button>
|
||||
<div name="button_box" class="oe_button_box">
|
||||
<button name="open_reconcile_view"
|
||||
class="oe_stat_button"
|
||||
icon="fa-bars"
|
||||
type="object"
|
||||
string="Reconciled entries">
|
||||
class="oe_stat_button"
|
||||
icon="fa-bars"
|
||||
type="object"
|
||||
attrs="{'invisible': ['|', ('type', '!=', 'entry'), ('id', '=', False)]}"
|
||||
string="Reconciled entries">
|
||||
</button>
|
||||
</div>
|
||||
<h1>
|
||||
<field name="name" readonly="True" attrs="{'invisible':[('name','=','/')]}"/>
|
||||
</h1>
|
||||
<group>
|
||||
|
||||
<!-- Payment status for invoices / receipts -->
|
||||
<div>
|
||||
<span class="pull-right badge badge-success"
|
||||
attrs="{'invisible': ['|', ('invoice_payment_state', '!=', 'paid'), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}">Paid</span>
|
||||
<span class="pull-right badge badge-success"
|
||||
attrs="{'invisible': ['|', ('invoice_payment_state', '!=', 'in_payment'), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}">In Payment</span>
|
||||
</div>
|
||||
|
||||
<!-- Invisible fields -->
|
||||
<field name="id" invisible="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="invoice_payment_state" invisible="1" force_save="1"/>
|
||||
<field name="invoice_filter_type_domain" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="commercial_partner_id" invisible="1"/>
|
||||
<field name="bank_partner_id" invisible="1"/>
|
||||
|
||||
<field name="invoice_has_outstanding" invisible="1"/>
|
||||
<field name="invoice_sent" invisible="1"/>
|
||||
<field name="invoice_sequence_number_next_prefix" invisible="1"/>
|
||||
<field name="invoice_sequence_number_next" invisible="1"/>
|
||||
<field name="invoice_has_matching_supsense_amount" invisible="1"/>
|
||||
|
||||
<div>
|
||||
<!-- Invoice draft header -->
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'out_invoice'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Invoice</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'out_refund'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Credit Note</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'in_invoice'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Bill</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'in_refund'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Refund</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'out_receipt'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Sales Receipt</span>
|
||||
<span class="o_form_label" attrs="{'invisible': ['|', '|', ('type', '!=', 'in_receipt'), ('state', '!=', 'draft'), ('name', '!=', '/')]}">Draft Purchase Receipt</span>
|
||||
|
||||
<!-- Select next number header (only invoices) -->
|
||||
<span class="o_form_label" attrs="{'invisible': [('invoice_sequence_number_next_prefix', '=', False)]}">- First Number:</span>
|
||||
|
||||
<!-- Number -->
|
||||
<h1 class="mt0">
|
||||
<field name="name" readonly="True" attrs="{'invisible':[('name', '=', '/')]}"/>
|
||||
|
||||
<!-- Select next number header (only invoices) -->
|
||||
<div attrs="{'invisible': [('invoice_sequence_number_next_prefix', '=', False)]}">
|
||||
<field name="invoice_sequence_number_next_prefix" class="oe_inline"/>
|
||||
<field name="invoice_sequence_number_next" class="oe_inline"/>
|
||||
</div>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<field name="date"/>
|
||||
<field name="ref" attrs="{'required': [('id', '==', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="journal_id" options="{'no_open': True, 'no_create': True}"/>
|
||||
<field name="company_id" required="1" groups="base.group_multi_company"/>
|
||||
<field name="amount" invisible="1" readonly="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Journal Items">
|
||||
<field name="line_ids" widget="one2many"
|
||||
context="{'line_ids': line_ids, 'journal_id': journal_id }">
|
||||
<tree editable="bottom" string="Journal Items">
|
||||
<field name="tax_line_id" invisible="1"/>
|
||||
<field name="account_id" options="{'no_create': True}" domain="[('company_id', '=', parent.company_id), ('deprecated', '=', False)]"/>
|
||||
<field name="partner_id"
|
||||
domain="['|', ('parent_id', '=', False), ('is_company', '=', True)]"/>
|
||||
<field name="name"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_tag_ids" groups="analytic.group_analytic_tags" widget="many2many_tags"/>
|
||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency"/>
|
||||
<field name="debit" sum="Total Debit"/>
|
||||
<field name="credit" sum="Total Credit"/>
|
||||
<field name="tax_ids" string="Taxes Applied" widget="many2many_tags"
|
||||
domain="[('type_tax_use', '=?', parent.tax_type_domain)]"
|
||||
context="{'append_type_to_tax_name': not parent.tax_type_domain}"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="date_maturity" required="0" invisible="context.get('view_no_maturity', False)"/>
|
||||
<field name="recompute_tax_line" invisible="1" readonly="1"/>
|
||||
<field name="tax_line_grouping_key" invisible="1" readonly="1"/>
|
||||
<field name="tax_repartition_line_id" invisible="1"/> <!--Not to be removed, we need it so that the call to new() takes it into account when autocompleting the lines of a tax-->
|
||||
<field name="tax_base_amount" invisible="1"/> <!--Not to be removed, we need it so that the call to new() takes it into account when autocompleting the lines of a tax-->
|
||||
<field name="tag_ids" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="narration" colspan="4" placeholder="Add an internal note..." nolabel="1" height="50"/>
|
||||
</page>
|
||||
<page string="Other Info">
|
||||
<group>
|
||||
<field name="auto_post" attrs="{'readonly':[('reverse_entry_id', '!=', False)]}"/>
|
||||
<field name="reverse_entry_id" attrs="{'invisible':True}"/>
|
||||
<field name="to_check"/>
|
||||
<group id="header_left_group">
|
||||
<div class="o_td_label">
|
||||
<label for="partner_id" string="Customer" style="font-weight:bold;"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'out_receipt'))]}"/>
|
||||
<label for="partner_id" string="Vendor" style="font-weight:bold;"
|
||||
attrs="{'invisible': [('type', 'not in', ('in_invoice', 'in_refund', 'in_receipt'))]}"/>
|
||||
</div>
|
||||
<field name="partner_id" widget="res_partner_many2one" nolabel="1"
|
||||
context="{
|
||||
'search_default_customer': context.get('type', 'entry') in ('out_invoice', 'out_refund', 'out_receipt'),
|
||||
'search_default_supplier': context.get('type', 'entry') in ('in_invoice', 'in_refund', 'in_receipt'),
|
||||
'default_customer': context.get('type', 'entry') in ('out_invoice', 'out_refund', 'out_receipt'),
|
||||
'default_supplier': context.get('type', 'entry') in ('in_invoice', 'in_refund', 'in_receipt'),
|
||||
'show_address': 1, 'default_is_company': True, 'show_vat': True}"
|
||||
options='{"always_reload": True, "no_quick_create": True}'
|
||||
attrs="{
|
||||
'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]
|
||||
}"/>
|
||||
|
||||
<!-- Invoice payment terms (only invoices) + due date (only invoices / receipts) -->
|
||||
<label for="invoice_payment_term_id"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
<div attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}">
|
||||
<field name="invoice_payment_term_id"
|
||||
class="oe_inline"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
<span class="o_form_label oe_edit_only"
|
||||
attrs="{'invisible': ['|', ('invoice_payment_term_id', '!=', False), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"> or </span>
|
||||
<field name="invoice_date_due" force_save="1"
|
||||
class="oe_inline"
|
||||
attrs="{'invisible': ['|', ('invoice_payment_term_id', '!=', False), ('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
</div>
|
||||
|
||||
<field name="ref"
|
||||
attrs="{'invisible': [('type', '=', 'out_invoice')]}"/>
|
||||
<field name="invoice_vendor_bill_id"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('type', '!=', 'in_invoice')]}"
|
||||
domain="[('company_id', '=', company_id), ('partner_id','child_of', [partner_id]), ('type','=','in_invoice')]"
|
||||
string="Auto-Complete" placeholder="Select an old vendor bill"
|
||||
options="{'no_create': True}" context="{'show_total_amount': True}"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
<group id="header_right_group">
|
||||
<field name="journal_id"
|
||||
invisible="context.get('default_journal_id') and context.get('type', 'entry') != 'entry'"
|
||||
groups="account.group_account_user"
|
||||
options="{'no_create': True}"
|
||||
domain="[('type', '=?', invoice_filter_type_domain)]"/>
|
||||
<field name="date" string="Accounting Date"
|
||||
attrs="{'invisible': [('type', 'in', ('out_invoice', 'out_refund', 'out_receipt')), ('state', '=', 'draft')]}"/>
|
||||
|
||||
<!-- Invoice date (only invoices / receipts) -->
|
||||
<div class="o_td_label">
|
||||
<label for="invoice_date" string="Invoice Date" style="font-weight:bold;"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'out_receipt'))]}"/>
|
||||
<label for="invoice_date" string="Bill Date" style="font-weight:bold;"
|
||||
attrs="{'invisible': [('type', 'not in', ('in_invoice', 'in_refund', 'in_receipt'))]}"/>
|
||||
</div>
|
||||
<field name="invoice_date" nolabel="1"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/>
|
||||
|
||||
<field name="currency_id"
|
||||
groups="base.group_multi_currency"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page id="invoice_tab"
|
||||
string="Invoice Lines"
|
||||
attrs="{'invisible': [('type', '=', 'entry')]}">
|
||||
<field name="invoice_line_ids"
|
||||
widget="section_and_note_one2many"
|
||||
mode="tree,kanban"
|
||||
context="{'journal_id': journal_id, 'default_partner_id': commercial_partner_id, 'default_currency_id': currency_id != company_currency_id and currency_id or False}">
|
||||
<tree editable="bottom" string="Journal Items">
|
||||
<control>
|
||||
<create name="add_line_control" string="Add a line"/>
|
||||
<create name="add_section_control" string="Add a section" context="{'default_display_type': 'line_section'}"/>
|
||||
<create name="add_note_control" string="Add a note" context="{'default_display_type': 'line_note'}"/>
|
||||
</control>
|
||||
|
||||
<!-- Displayed fields -->
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="product_id"/>
|
||||
<field name="name" widget="section_and_note_text"/>
|
||||
<field name="account_id"
|
||||
groups="account.group_account_user"
|
||||
domain="[('deprecated', '=', False), ('user_type_id.type', 'not in', ('receivable', 'payable'))]"
|
||||
attrs="{'required': [('display_type', '=', False)]}"/>
|
||||
<field name="analytic_account_id"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_tag_ids"
|
||||
groups="analytic.group_analytic_tags"
|
||||
widget="many2many_tags"/>
|
||||
<field name="quantity"/>
|
||||
<field name="product_uom_id" string="UoM" groups="uom.group_uom"/>
|
||||
<field name="price_unit" string="Price"/>
|
||||
<field name="discount" string="Disc.%" groups="base.group_no_one"/>
|
||||
<field name="tax_ids" widget="many2many_tags"
|
||||
domain="[('type_tax_use', '=?', parent.invoice_filter_type_domain)]"
|
||||
context="{'append_type_to_tax_name': not parent.invoice_filter_type_domain}"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="price_subtotal"
|
||||
string="Subtotal"
|
||||
groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<field name="price_total"
|
||||
string="Total"
|
||||
groups="account.group_show_line_subtotals_tax_included"/>
|
||||
|
||||
<!-- Others fields -->
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="amount_currency" invisible="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="debit" invisible="1"/>
|
||||
<field name="credit" invisible="1"/>
|
||||
<field name="date_maturity" invisible="1"/>
|
||||
|
||||
<field name="tax_line_id" invisible="1"/>
|
||||
<field name="tax_repartition_line_id" invisible="1"/>
|
||||
<field name="tag_ids" invisible="1"/>
|
||||
<field name="tax_base_amount" invisible="1"/>
|
||||
<field name="tax_exigible" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="recompute_tax_line" invisible="1" force_save="1"/>
|
||||
<field name="display_type" force_save="1" invisible="1"/>
|
||||
<field name="is_rounding_line" invisible="1"/>
|
||||
<field name="exclude_from_invoice_tab" invisible="1"/>
|
||||
<field name="account_internal_type" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
<!-- Totals (only invoices / receipts) -->
|
||||
<group class="oe_subtotal_footer oe_right"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}">
|
||||
<field name="amount_untaxed"/>
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total" class="oe_subtotal_footer_separator"/>
|
||||
<field name="invoice_payments_widget" colspan="2" nolabel="1" widget="payment"/>
|
||||
<field name="amount_residual" class="oe_subtotal_footer_separator"
|
||||
attrs="{'invisible': [('state', '=', 'draft')]}"/>
|
||||
<field name="invoice_outstanding_credits_debits_widget"
|
||||
colspan="2" nolabel="1" widget="payment"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'posted'), ('type', 'in', ('out_receipt', 'in_receipt'))]}"/>
|
||||
</group>
|
||||
|
||||
<!-- Internal note -->
|
||||
<field name="narration" placeholder="Add an internal note..." nolabel="1" height="50"/>
|
||||
</page>
|
||||
<page id="aml_tab" string="Journal Items" groups="account.group_account_user">
|
||||
<field name="line_ids" widget="one2many_list"
|
||||
context="{'line_ids': line_ids, 'journal_id': journal_id, 'default_partner_id': commercial_partner_id, 'default_currency_id': currency_id != company_currency_id and currency_id or False}">
|
||||
<tree editable="bottom" string="Journal Items" decoration-muted="display_type in ('line_section', 'line_note')">
|
||||
<!-- Displayed fields -->
|
||||
<field name="account_id"
|
||||
attrs="{
|
||||
'required': [('display_type', 'not in', ('line_section', 'line_note'))],
|
||||
'invisible': [('display_type', 'in', ('line_section', 'line_note'))],
|
||||
}"/>
|
||||
<field name="partner_id"
|
||||
domain="['|', ('parent_id', '=', False), ('is_company', '=', True)]"
|
||||
attrs="{'column_invisible': [('parent.type', '!=', 'entry')]}"/>
|
||||
<field name="name" widget="section_and_note_text"/>
|
||||
<field name="analytic_account_id"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
attrs="{'invisible': [('display_type', 'in', ('line_section', 'line_note'))]}"/>
|
||||
<field name="analytic_tag_ids"
|
||||
groups="analytic.group_analytic_tags"
|
||||
widget="many2many_tags"
|
||||
attrs="{'invisible': [('display_type', 'in', ('line_section', 'line_note'))]}"/>
|
||||
<field name="amount_currency"
|
||||
groups="base.group_multi_currency"/>
|
||||
<field name="currency_id" options="{'no_create': True}"
|
||||
groups="base.group_multi_currency"
|
||||
attrs="{'column_invisible': [('parent.type', '!=', 'entry')]}"/>
|
||||
<field name="debit"
|
||||
sum="Total Debit"
|
||||
attrs="{'invisible': [('display_type', 'in', ('line_section', 'line_note'))]}"/>
|
||||
<field name="credit"
|
||||
sum="Total Credit"
|
||||
attrs="{'invisible': [('display_type', 'in', ('line_section', 'line_note'))]}"/>
|
||||
<field name="tax_ids" string="Taxes Applied" widget="many2many_tags"
|
||||
domain="[('type_tax_use', '=?', parent.invoice_filter_type_domain)]"
|
||||
context="{'append_type_to_tax_name': not parent.invoice_filter_type_domain}"
|
||||
options="{'no_create': True}"
|
||||
force_save="1"
|
||||
attrs="{'readonly': [
|
||||
'|', '|',
|
||||
('display_type', 'in', ('line_section', 'line_note')),
|
||||
('tax_line_id', '!=', False),
|
||||
'&',
|
||||
('parent.type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')),
|
||||
('account_internal_type', 'in', ('receivable', 'payable')),
|
||||
]}"/>
|
||||
<field name="date_maturity"
|
||||
invisible="context.get('view_no_maturity')"
|
||||
attrs="{'invisible': [('display_type', 'in', ('line_section', 'line_note'))]}"/>
|
||||
|
||||
<!-- Others fields -->
|
||||
<field name="payment_id" invisible="1"/>
|
||||
|
||||
<field name="product_id" invisible="1"/>
|
||||
<field name="quantity" invisible="1"/>
|
||||
<field name="product_uom_id" invisible="1"/>
|
||||
<field name="price_unit" invisible="1"/>
|
||||
<field name="discount" invisible="1"/>
|
||||
<field name="price_subtotal" invisible="1"/>
|
||||
<field name="price_total" invisible="1"/>
|
||||
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="tax_line_id" invisible="1"/>
|
||||
<field name="tax_repartition_line_id" invisible="1"/>
|
||||
<field name="tag_ids" invisible="1"/>
|
||||
<field name="tax_base_amount" invisible="1"/>
|
||||
<field name="tax_exigible" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="recompute_tax_line" invisible="1" force_save="1"/>
|
||||
<field name="display_type" force_save="1" invisible="1"/>
|
||||
<field name="is_rounding_line" invisible="1"/>
|
||||
<field name="exclude_from_invoice_tab" invisible="1"/>
|
||||
<field name="account_internal_type" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page id="other_tab" string="Other Info" name="other_info"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}">
|
||||
<group id="other_tab_group">
|
||||
<group string="Sales Information"
|
||||
name="sale_info_group"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund'))]}">
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="invoice_user_id"/>
|
||||
</group>
|
||||
<group string="Accounting Information"
|
||||
name="accounting_info_group"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}">
|
||||
<field name="invoice_incoterm_id"/>
|
||||
<field name="fiscal_position_id"/>
|
||||
<field name="invoice_cash_rounding_id" groups="account.group_cash_rounding"/>
|
||||
<field name="invoice_source_email"
|
||||
widget="email"
|
||||
attrs="{'invisible': ['|', ('type', 'not in', ('in_invoice', 'in_refund')), ('invoice_source_email', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Payments Information"
|
||||
name="payments_info_group"
|
||||
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}">
|
||||
<field name="invoice_payment_ref"/>
|
||||
<field name="invoice_partner_bank_id"
|
||||
domain="[('partner_id', '=', bank_partner_id)]"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page id="other_tab_entry" string="Other Info" name="other_info"
|
||||
attrs="{'invisible': [('type', '!=', 'entry')]}">
|
||||
<group id="other_tab_entry_group">
|
||||
<group name="misc_group">
|
||||
<field name="auto_post"
|
||||
attrs="{'invisible': [('type', '!=', 'entry')], 'readonly': [('reversed_entry_id', '!=', False)]}"/>
|
||||
<field name="reversed_entry_id"
|
||||
attrs="{'invisible': [('type', '!=', 'entry')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<!-- Attachment preview -->
|
||||
<div class="o_attachment_preview"
|
||||
attrs="{'invisible': ['|', '|',
|
||||
('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')),
|
||||
('state', '!=', 'draft')]}" />
|
||||
<!-- Chatter -->
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
@@ -507,8 +839,6 @@
|
||||
<separator/>
|
||||
<field name="partner_id"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="dummy_account_id"/>
|
||||
<field name="reconcile_model_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Partner" name="partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Journal" name="journal" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
@@ -519,6 +849,49 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_invoice_filter" model="ir.ui.view">
|
||||
<field name="name">account.invoice.select</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Invoice">
|
||||
<field name="name" string="Invoice"
|
||||
filter_domain="['|','|','|', '|', ('name','ilike',self), ('invoice_origin','ilike',self), ('ref', 'ilike', self), ('invoice_payment_ref', 'ilike', self), ('partner_id', 'child_of', self)]"/>
|
||||
<filter domain="[('invoice_user_id','=',uid)]" name="myinvoices" help="My Invoices"/>
|
||||
<field name="journal_id"/>
|
||||
<separator/>
|
||||
<filter name="draft" string="Draft" domain="[('state','=','draft')]"/>
|
||||
<filter name="unpaid" string="Open" domain="[('state', '=', 'posted'), ('invoice_payment_state', '=', 'not_paid')]"/>
|
||||
<filter name="in_payment" string="In Payment" domain="[('invoice_payment_state', '=', 'in_payment')]"/>
|
||||
<filter name="paid" string="Paid" domain="[('invoice_payment_state', '=', 'paid')]"/>
|
||||
<filter name="late" string="Overdue" domain="['&', ('invoice_date_due', '<', time.strftime('%%Y-%%m-%%d')), ('state', '=', 'posted'), ('invoice_payment_state', '=', 'not_paid')]" help="Overdue invoices, maturity date passed"/>
|
||||
<separator/>
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
<field name="invoice_user_id" string="Salesperson" domain="[('share','=', False)]"/>
|
||||
<field name="date" string="Period"/>
|
||||
<separator/>
|
||||
<filter string="My Activities" name="activities_my"
|
||||
domain="[('activity_ids.user_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
<filter string="Late Activities" name="activities_overdue"
|
||||
domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
||||
help="Show all records which has next action date is before today"/>
|
||||
<filter string="Today Activities" name="activities_today"
|
||||
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Future Activities" name="activities_upcoming_all"
|
||||
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))
|
||||
]"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter name="group_by_partner_id" string="Partner" context="{'group_by':'commercial_partner_id'}"/>
|
||||
<filter string="Salesperson" name="salesperson" context="{'group_by':'invoice_user_id'}"/>
|
||||
<filter name="status" string="Status" context="{'group_by':'state'}"/>
|
||||
<separator/>
|
||||
<filter string="Invoice Date" name="invoicedate" context="{'group_by':'invoice_date'}"/>
|
||||
<filter string="Due Date" name="duedate" context="{'group_by':'invoice_date_due'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ACTIONS -->
|
||||
|
||||
<!-- account.move.line (Journal Items) -->
|
||||
@@ -558,9 +931,9 @@
|
||||
view_id="account.view_move_line_tax_audit_tree"/>
|
||||
|
||||
<record id="action_account_moves_all_a" model="ir.actions.act_window">
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_sales':1, 'name_groupby':1}</field>
|
||||
<field name="name">Journal Items</field>
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_sales':1, 'name_groupby':1}</field> <field name="name">Journal Items</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -569,6 +942,7 @@
|
||||
<field name="context">{'journal_type':'sales', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_sales':1, 'name_groupby':1}</field>
|
||||
<field name="name">Sales</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_sales_purchases"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -577,6 +951,7 @@
|
||||
<field name="context">{'journal_type':'purchase', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_purchases':1, 'name_groupby':1}</field>
|
||||
<field name="name">Purchase</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_sales_purchases"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -585,6 +960,7 @@
|
||||
<field name="context">{'journal_type':'bank', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_bank':1, 'search_default_cash':1, 'name_groupby':1}</field>
|
||||
<field name="name">Bank and Cash</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_bank_cash"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -593,6 +969,7 @@
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_misc_filter':1, 'name_groupby':1}</field>
|
||||
<field name="name">Miscellaneous</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_misc"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -601,6 +978,7 @@
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_account': 1, 'group_by':'account_id', 'search_default_posted':1}</field>
|
||||
<field name="name">General Ledger</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_general"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -609,13 +987,50 @@
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_partner': 1, 'group_by':'partner_id', 'search_default_posted':1, 'search_default_payable':1, 'search_default_receivable':1, 'search_default_unreconciled':1}</field>
|
||||
<field name="name">Partner Ledger</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_partner"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_moves_journal_bank_cash" model="ir.actions.act_window">
|
||||
<field name="context">{'journal_type':'bank', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_bank':1, 'search_default_cash':1, 'name_groupby':1}</field>
|
||||
<field name="name">Bank and Cash</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_bank_cash"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_moves_journal_misc" model="ir.actions.act_window">
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_move': 1, 'group_by':'move_id', 'search_default_posted':1, 'search_default_misc_filter':1, 'name_groupby':1}</field>
|
||||
<field name="name">Miscellaneous</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_misc"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_moves_ledger_general" model="ir.actions.act_window">
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_account': 1, 'group_by':'account_id', 'search_default_posted':1}</field>
|
||||
<field name="name">General Ledger</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_general"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_moves_ledger_partner" model="ir.actions.act_window">
|
||||
<field name="context">{'journal_type':'general', 'search_default_group_by_partner': 1, 'group_by':'partner_id', 'search_default_posted':1, 'search_default_payable':1, 'search_default_receivable':1, 'search_default_unreconciled':1}</field>
|
||||
<field name="name">Partner Ledger</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree_grouped_partner"/>
|
||||
</record>
|
||||
|
||||
<record id="action_account_moves_all_tree" model="ir.actions.act_window">
|
||||
<field name="name">Journal Items</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="context">{'search_default_partner_id': [active_id], 'default_partner_id': active_id, 'search_default_posted':1}</field>
|
||||
<field name="view_id" ref="view_move_line_tree"/>
|
||||
</record>
|
||||
@@ -624,6 +1039,7 @@
|
||||
<field name="context">{'journal_type':'general', 'search_default_posted':1}</field>
|
||||
<field name="name">Journal Items</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="view_id" ref="view_move_line_tree"/>
|
||||
<field name="view_mode">tree,pivot,graph,form,kanban</field>
|
||||
</record>
|
||||
@@ -632,6 +1048,7 @@
|
||||
<field name="name">Journal Items</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="view_id" ref="account_move_line_graph_date"/>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="context">{'search_default_account_id': [active_id]}</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
</record>
|
||||
@@ -640,6 +1057,7 @@
|
||||
<field name="name">Journal Items</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="view_id" ref="account_move_line_graph_date"/>
|
||||
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
|
||||
<field name="context">{'search_default_account_id': [active_id], 'search_default_posted': 1}</field>
|
||||
<field name="res_model">account.move.line</field>
|
||||
</record>
|
||||
@@ -652,7 +1070,7 @@
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_move_tree"/>
|
||||
<field name="search_view_id" ref="view_account_move_filter"/>
|
||||
<field name="context">{'type': 'misc', 'search_default_misc_filter':1, 'view_no_maturity': True}</field>
|
||||
<field name="context">{'default_type': 'entry', 'search_default_misc_filter':1, 'view_no_maturity': True}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a journal entry
|
||||
@@ -663,6 +1081,111 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_out_invoice_type" model="ir.actions.act_window">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'out_invoice')]</field>
|
||||
<field name="context">{'default_type': 'out_invoice'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a customer invoice
|
||||
</p><p>
|
||||
Create invoices, register payments and keep track of the discussions with your customers.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_out_refund_type" model="ir.actions.act_window">
|
||||
<field name="name">Credit Notes</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'out_refund')]</field>
|
||||
<field name="context">{'default_type': 'out_refund'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a credit note
|
||||
</p><p>
|
||||
Note that the easiest way to create a credit note is to do it directly
|
||||
from the customer invoice.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_in_invoice_type" model="ir.actions.act_window">
|
||||
<field name="name">Bills</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'in_invoice')]</field>
|
||||
<field name="context">{'default_type': 'in_invoice'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a vendor bill
|
||||
</p><p>
|
||||
Create invoices, register payments and keep track of the discussions with your vendors.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_in_refund_type" model="ir.actions.act_window">
|
||||
<field name="name">Refund</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'in_refund')]</field>
|
||||
<field name="context">{'default_type': 'in_refund'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a vendor credit note
|
||||
</p><p>
|
||||
Note that the easiest way to create a vendor credit note it to do it directly from the vendor bill.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_out_receipt_type" model="ir.actions.act_window">
|
||||
<field name="name">Receipts</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'out_receipt')]</field>
|
||||
<field name="context">{'default_type': 'out_receipt'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new sales receipt
|
||||
</p><p>
|
||||
When the sale receipt is confirmed, you can record the customer
|
||||
payment related to this sales receipt.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_in_receipt_type" model="ir.actions.act_window">
|
||||
<field name="name">Receipts</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_invoice_tree"/>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
<field name="domain">[('type', '=', 'in_receipt')]</field>
|
||||
<field name="context">{'default_type': 'in_receipt'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Register a new purchase receipt
|
||||
</p><p>
|
||||
When the purchase receipt is confirmed, you can record the
|
||||
vendor payment related to this purchase receipt.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_move_line_form" model="ir.actions.act_window">
|
||||
<field name="name">Entries</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
@@ -681,6 +1204,42 @@
|
||||
|
||||
<!-- MENUS -->
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_out_invoice_type"
|
||||
action="action_move_out_invoice_type"
|
||||
parent="account.menu_finance_receivables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_out_refund_type"
|
||||
action="action_move_out_refund_type"
|
||||
parent="account.menu_finance_receivables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_out_receipt_type"
|
||||
action="action_move_out_receipt_type"
|
||||
parent="account.menu_finance_receivables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_in_invoice_type"
|
||||
action="action_move_in_invoice_type"
|
||||
parent="account.menu_finance_payables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_in_refund_type"
|
||||
action="action_move_in_refund_type"
|
||||
parent="account.menu_finance_payables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_move_in_receipt_type"
|
||||
action="action_move_in_receipt_type"
|
||||
parent="account.menu_finance_payables"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_action_account_moves_all"
|
||||
action="action_account_moves_all"
|
||||
|
||||
@@ -135,6 +135,7 @@
|
||||
attrs="{'invisible':[('has_invoices','=',False)]}" icon="fa-bars"/>
|
||||
<button class="oe_stat_button" name="open_payment_matching_screen"
|
||||
string="Payment Matching" type="object"
|
||||
groups="account.group_account_user"
|
||||
attrs="{'invisible':[('move_reconciled','=',True)]}" icon="fa-university"/>
|
||||
<field name="has_invoices" invisible="1"/>
|
||||
<field name="move_reconciled" invisible="1"/>
|
||||
@@ -145,7 +146,7 @@
|
||||
</div>
|
||||
<group>
|
||||
<field name="invoice_ids" invisible="1"/>
|
||||
<group name="partner_group" invisible="context.get('active_model') == 'account.invoice'">
|
||||
<group name="partner_group" invisible="context.get('active_model') == 'account.move'">
|
||||
<field name="payment_type" widget="radio"/>
|
||||
<field name="partner_type" widget="selection" attrs="{'required': [('state', '=', 'draft'), ('payment_type', 'in', ('inbound', 'outbound'))], 'invisible': [('payment_type', 'not in', ('inbound', 'outbound'))]}"/>
|
||||
<field name="partner_id" attrs="{'required': [('state', '=', 'draft'), ('payment_type', 'in', ('inbound', 'outbound'))], 'invisible': [('payment_type', 'not in', ('inbound', 'outbound'))]}" context="{'default_is_company': True, 'default_supplier': payment_type == 'outbound', 'default_customer': payment_type == 'inbound'}"/>
|
||||
@@ -298,7 +299,7 @@
|
||||
<record id="action_account_invoice_from_list" model="ir.actions.server">
|
||||
<field name="name">Register Payment</field>
|
||||
<field name="model_id" ref="account.model_account_payment"/>
|
||||
<field name="binding_model_id" ref="account.model_account_invoice"/>
|
||||
<field name="binding_model_id" ref="account.model_account_move"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
action = model.action_register_payment()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<t t-else="">Invoices & Bills</t>
|
||||
</li>
|
||||
<li t-if="invoice" class="breadcrumb-item active">
|
||||
<t t-esc="invoice.number" t-if="invoice.number"/>
|
||||
<t t-esc="invoice.name" t-if="invoice.name"/>
|
||||
<t t-else=""><em>Draft Invoice</em></t>
|
||||
</li>
|
||||
</xpath>
|
||||
@@ -46,13 +46,13 @@
|
||||
<t t-foreach="invoices" t-as="invoice">
|
||||
<tr>
|
||||
<td>
|
||||
<a t-att-href="invoice.get_portal_url()" t-att-title="invoice.number">
|
||||
<t t-esc="invoice.number" t-if="invoice.number"/>
|
||||
<a t-att-href="invoice.get_portal_url()" t-att-title="invoice.name">
|
||||
<t t-esc="invoice.name" t-if="invoice.name"/>
|
||||
<em t-else="">Draft Invoice</em>
|
||||
</a>
|
||||
</td>
|
||||
<td><span t-field="invoice.date_invoice"/></td>
|
||||
<td class='d-none d-md-table-cell'><span t-field="invoice.date_due"/></td>
|
||||
<td><span t-field="invoice.invoice_date"/></td>
|
||||
<td class='d-none d-md-table-cell'><span t-field="invoice.invoice_date_due"/></td>
|
||||
<td class="tx_status">
|
||||
<t t-if="invoice.state == 'open'">
|
||||
<span class="badge badge-pill badge-info"><i class="fa fa-fw fa-clock-o" aria-label="Opened" title="Opened" role="img"></i><span class="d-none d-md-inline"> Waiting for Payment</span></span>
|
||||
@@ -64,7 +64,7 @@
|
||||
<span class="badge badge-pill badge-warning"><i class="fa fa-fw fa-remove" aria-label="Cancelled" title="Cancelled" role="img"></i><span class="d-none d-md-inline"> Cancelled</span></span>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-right"><span t-esc="-invoice.residual if invoice.type == 'out_refund' else invoice.residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
|
||||
<td class="text-right"><span t-esc="-invoice.amount_residual if invoice.type == 'out_refund' else invoice.amount_residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
|
||||
</tr>
|
||||
</t>
|
||||
</tbody>
|
||||
@@ -76,7 +76,7 @@
|
||||
<xpath expr="//div[hasclass('o_portal_sidebar')]" position="inside">
|
||||
<t t-set="o_portal_fullwidth_alert" groups="sales_team.group_sale_salesman">
|
||||
<t t-call="portal.portal_back_in_edit_mode">
|
||||
<t t-set="backend_url" t-value="'/web#return_label=Website&model=%s&id=%s&action=%s&view_type=form' % (invoice._name, invoice.id, invoice.env.ref('account.action_invoice_tree1').id)"/>
|
||||
<t t-set="backend_url" t-value="'/web#return_label=Website&model=%s&id=%s&action=%s&view_type=form' % (invoice._name, invoice.id, invoice.env.ref('account.action_move_out_invoice_type').id)"/>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
@@ -86,10 +86,10 @@
|
||||
<t t-set="classes" t-value="'col-lg-auto d-print-none'"/>
|
||||
<t t-set="title">
|
||||
<h2 class="mb-0">
|
||||
<b t-if="invoice.residual > 0" t-field="invoice.residual"/>
|
||||
<b t-if="invoice.amount_residual > 0" t-field="invoice.amount_residual"/>
|
||||
<b t-else="1" t-field="invoice.amount_total"/>
|
||||
</h2>
|
||||
<div class="small" t-if="invoice.state != 'paid' and invoice.type == 'out_invoice'"><i class="fa fa-clock-o"/><span class="o_portal_sidebar_timeago ml4" t-att-datetime="invoice.date_due"/></div>
|
||||
<div class="small" t-if="invoice.state != 'paid' and invoice.type == 'out_invoice'"><i class="fa fa-clock-o"/><span class="o_portal_sidebar_timeago ml4" t-att-datetime="invoice.invoice_date_due"/></div>
|
||||
</t>
|
||||
|
||||
<t t-set="entries">
|
||||
@@ -104,15 +104,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li t-if="invoice.user_id" class="list-group-item flex-grow-1">
|
||||
<li t-if="invoice.invoice_user_id" class="list-group-item flex-grow-1">
|
||||
<div class="small mb-1"><strong class="text-muted">Salesperson</strong></div>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-2">
|
||||
<img t-if="invoice.user_id.image" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(invoice.user_id.image)" alt="Contact"/>
|
||||
<img t-if="invoice.invoice_user_id.image" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(invoice.invoice_user_id.image)" alt="Contact"/>
|
||||
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact"/>
|
||||
</div>
|
||||
<div class="col pl-0">
|
||||
<span t-field="invoice.user_id" t-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True}'/>
|
||||
<span t-field="invoice.invoice_user_id" t-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True}'/>
|
||||
<a data-toggle="modal" href="#" data-target="#invoice_chatter" class="small"><i class="fa fa-fw fa-comments"/><b>Send message</b></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,24 +4,24 @@
|
||||
<!-- QWeb Reports -->
|
||||
<report
|
||||
id="account_invoices"
|
||||
model="account.invoice"
|
||||
model="account.move"
|
||||
string="Invoices"
|
||||
report_type="qweb-pdf"
|
||||
name="account.report_invoice_with_payments"
|
||||
file="account.report_invoice_with_payments"
|
||||
attachment="(object.state in ('open','in_payment','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
|
||||
attachment="(object.state == 'posted') and ('INV'+(object.name or '').replace('/','')+'.pdf')"
|
||||
print_report_name="(object._get_report_base_filename())"
|
||||
groups="account.group_account_invoice"
|
||||
/>
|
||||
|
||||
<report
|
||||
id="account_invoices_without_payment"
|
||||
model="account.invoice"
|
||||
model="account.move"
|
||||
string="Invoices without Payment"
|
||||
report_type="qweb-pdf"
|
||||
name="account.report_invoice"
|
||||
file="account.report_invoice"
|
||||
attachment="(object.state in ('open','in_payment','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
|
||||
attachment="(object.state == 'posted') and ('INV'+(object.name or '').replace('/','')+'.pdf')"
|
||||
print_report_name="(object._get_report_base_filename())"
|
||||
/>
|
||||
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
|
||||
<!-- Accounts -->
|
||||
|
||||
<record id="view_account_form" model="ir.ui.view">
|
||||
<field name="name">account.account.form</field>
|
||||
<field name="model">account.account</field>
|
||||
@@ -34,6 +30,7 @@
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_list" model="ir.ui.view">
|
||||
<field name="name">account.account.list</field>
|
||||
<field name="model">account.account</field>
|
||||
@@ -97,6 +94,7 @@
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_form" model="ir.actions.act_window">
|
||||
<field name="name">Chart of Accounts</field>
|
||||
<field name="res_model">account.account</field>
|
||||
@@ -225,7 +223,6 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="company_partner_id" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
@@ -287,7 +284,6 @@
|
||||
<group string="Accounting App Options" attrs="{'invisible': [('type', 'not in', ['bank', 'cash', 'sale', 'purchase'])]}">
|
||||
<field name="profit_account_id" options="{'no_create': True}" attrs="{'invisible': [('type', '!=', 'cash')]}"/>
|
||||
<field name="loss_account_id" options="{'no_create': True}" attrs="{'invisible': [('type', '!=', 'cash')]}"/>
|
||||
<field name="group_invoice_lines" attrs="{'invisible': [('type', 'not in', ['sale', 'purchase'])]}"/>
|
||||
<field name="post_at_bank_rec" attrs="{'invisible': [('type', 'not in', ['bank', 'cash'])]}"/>
|
||||
</group>
|
||||
<group name="group_alias" string="Email your Invoices/Bills" attrs="{'invisible': [('type', 'not in', ('sale' ,'purchase'))]}">
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
</t>
|
||||
<div class="page">
|
||||
<h2>
|
||||
<span t-if="o.type == 'out_invoice' and o.state in ('open', 'in_payment', 'paid')">Invoice</span>
|
||||
<span t-if="o.type == 'out_invoice' and o.state == 'posted'">Invoice</span>
|
||||
<span t-if="o.type == 'out_invoice' and o.state == 'draft'">Draft Invoice</span>
|
||||
<span t-if="o.type == 'out_invoice' and o.state == 'cancel'">Cancelled Invoice</span>
|
||||
<span t-if="o.type == 'out_refund'">Credit Note</span>
|
||||
<span t-if="o.type == 'in_refund'">Vendor Credit Note</span>
|
||||
<span t-if="o.type == 'in_invoice'">Vendor Bill</span>
|
||||
<span t-field="o.number"/>
|
||||
<span t-field="o.name"/>
|
||||
</h2>
|
||||
|
||||
<div id="informations" class="row mt32 mb32">
|
||||
@@ -24,17 +24,17 @@
|
||||
<strong>Description:</strong>
|
||||
<p class="m-0" t-field="o.name"/>
|
||||
</div>
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.date_invoice" name="invoice_date">
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.invoice_date" name="invoice_date">
|
||||
<strong>Invoice Date:</strong>
|
||||
<p class="m-0" t-field="o.date_invoice"/>
|
||||
<p class="m-0" t-field="o.invoice_date"/>
|
||||
</div>
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.date_due and o.type == 'out_invoice' and o.state in ('open', 'in_payment', 'paid')" name="due_date">
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.invoice_date_due and o.type == 'out_invoice' and o.state in ('open', 'in_payment', 'paid')" name="due_date">
|
||||
<strong>Due Date:</strong>
|
||||
<p class="m-0" t-field="o.date_due"/>
|
||||
<p class="m-0" t-field="o.invoice_date_due"/>
|
||||
</div>
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.origin" name="origin">
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.invoice_origin" name="origin">
|
||||
<strong>Source:</strong>
|
||||
<p class="m-0" t-field="o.origin"/>
|
||||
<p class="m-0" t-field="o.invoice_origin"/>
|
||||
</div>
|
||||
<div class="col-auto mw-100 mb-2" t-if="o.partner_id.ref" name="customer_code">
|
||||
<strong>Customer Code:</strong>
|
||||
@@ -76,10 +76,9 @@
|
||||
<tr t-att-class="'bg-200 font-weight-bold o_line_section' if line.display_type == 'line_section' else 'font-italic o_line_note' if line.display_type == 'line_note' else ''">
|
||||
<t t-if="not line.display_type" name="account_invoice_line_accountable">
|
||||
<td name="account_invoice_line_name"><span t-field="line.name"/></td>
|
||||
<td class="d-none"><span t-field="line.origin"/></td>
|
||||
<td class="text-right">
|
||||
<span t-field="line.quantity"/>
|
||||
<span t-field="line.uom_id" groups="uom.group_uom"/>
|
||||
<span t-field="line.product_uom_id" groups="uom.group_uom"/>
|
||||
</td>
|
||||
<td t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span t-field="line.price_unit"/>
|
||||
@@ -88,7 +87,7 @@
|
||||
<span t-field="line.discount"/>
|
||||
</td>
|
||||
<td t-attf-class="text-left {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span t-esc="', '.join(map(lambda x: (x.description or x.name), line.invoice_line_tax_ids))"/>
|
||||
<span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))"/>
|
||||
</td>
|
||||
<td class="text-right o_price_total">
|
||||
<span t-field="line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
@@ -136,7 +135,7 @@
|
||||
</tr>
|
||||
<t t-foreach="o.amount_by_group" t-as="amount_by_group">
|
||||
<tr style="">
|
||||
<t t-if="len(o.tax_line_ids) == 1 and o.amount_untaxed == amount_by_group[2]">
|
||||
<t t-if="len(o.line_ids.filtered(lambda line: line.tax_line_id)) == 1 and o.amount_untaxed == amount_by_group[2]">
|
||||
<td><span t-esc="amount_by_group[0]"/></td>
|
||||
<td class="text-right o_price_total">
|
||||
<span t-esc="amount_by_group[3]" />
|
||||
@@ -165,24 +164,24 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p t-if="o.reference">
|
||||
Please use the following communication for your payment : <b><span t-field="o.reference"/></b>
|
||||
<p>
|
||||
Please use the following communication for your payment : <b><span t-field="o.invoice_payment_ref"/></b>
|
||||
</p>
|
||||
<p t-if="o.comment" name="comment">
|
||||
<span t-field="o.comment"/>
|
||||
<p t-if="o.narration" name="comment">
|
||||
<span t-field="o.narration"/>
|
||||
</p>
|
||||
<p t-if="o.payment_term_id" name="payment_term">
|
||||
<span t-field="o.payment_term_id.note"/>
|
||||
<p t-if="o.invoice_payment_term_id" name="payment_term">
|
||||
<span t-field="o.invoice_payment_term_id.note"/>
|
||||
</p>
|
||||
<p t-if="o.fiscal_position_id.note" name="note">
|
||||
<span t-field="o.fiscal_position_id.note"/>
|
||||
</p>
|
||||
<div id="qrcode" t-if="(o.partner_id.country_id.code in ['BE', 'AT', 'DE', 'FI', 'NL']) and (o.company_id.qr_code) and (o.currency_id.name == 'EUR') and (o.partner_bank_id.acc_number != False)">
|
||||
<p t-if="(o.partner_bank_id.qr_code_valid)">
|
||||
<div id="qrcode" t-if="(o.partner_id.country_id.code in ['BE', 'AT', 'DE', 'FI', 'NL']) and (o.company_id.qr_code) and (o.currency_id.name == 'EUR') and (o.invoice_partner_bank_id.acc_number != False)">
|
||||
<p t-if="(o.invoice_partner_bank_id.qr_code_valid)">
|
||||
<strong class="text-center">Scan me with your banking app.</strong><br /><br />
|
||||
<img class="border border-dark rounded" t-att-src="o.partner_bank_id.build_qr_code_url(o.residual,(o.reference) if (o.reference) else o.number)"/>
|
||||
<img class="border border-dark rounded" t-att-src="o.invoice_partner_bank_id.build_qr_code_url(o.amount_residual,(o.ref) if (o.ref) else o.name)"/>
|
||||
</p>
|
||||
<p t-if="(o.partner_bank_id.qr_code_valid == False)">
|
||||
<p t-if="(o.invoice_partner_bank_id.qr_code_valid == False)">
|
||||
<strong class="text-center">The SEPA QR Code informations are not set correctly.</strong><br />
|
||||
</p>
|
||||
</div>
|
||||
@@ -192,7 +191,7 @@
|
||||
|
||||
<template id="report_invoice_document_with_payments" inherit_id="account.report_invoice_document" primary="True">
|
||||
<xpath expr="//div[@id='total']/div/table" position="inside">
|
||||
<t t-set="payments_vals" t-value="o._get_payments_vals()"/>
|
||||
<t t-set="payments_vals" t-value="o._get_reconciled_info_JSON_values()"/>
|
||||
<t t-foreach="payments_vals" t-as="payment_vals">
|
||||
<tr>
|
||||
<td>
|
||||
@@ -207,7 +206,7 @@
|
||||
<tr class="border-black">
|
||||
<td><strong>Amount Due</strong></td>
|
||||
<td class="text-right">
|
||||
<span t-field="o.residual"/>
|
||||
<span t-field="o.amount_residual"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
@@ -217,7 +216,7 @@
|
||||
<template id="report_invoice">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-set="lang" t-value="o.user_id.lang if o.type in ('in_invoice', 'in_refund') else o.partner_id.lang"/>
|
||||
<t t-set="lang" t-value="o.invoice_user_id.lang if o.type in ('in_invoice', 'in_refund') else o.partner_id.lang"/>
|
||||
<t t-call="account.report_invoice_document" t-lang="lang"/>
|
||||
</t>
|
||||
</t>
|
||||
@@ -226,7 +225,7 @@
|
||||
<template id="report_invoice_with_payments">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-set="lang" t-value="o.user_id.lang if o.type in ('in_invoice', 'in_refund') else o.partner_id.lang"/>
|
||||
<t t-set="lang" t-value="o.invoice_user_id.lang if o.type in ('in_invoice', 'in_refund') else o.partner_id.lang"/>
|
||||
<t t-call="account.report_invoice_document_with_payments" t-lang="lang"/>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr t-foreach="o.reconciled_invoice_ids" t-as="inv">
|
||||
<td><span t-field="inv.date_invoice"/></td>
|
||||
<td><span t-field="inv.invoice_date"/></td>
|
||||
<td><span t-field="inv.number"/></td>
|
||||
<td class="text-right"><span t-field="inv.amount_total"/></td>
|
||||
<td class="text-right"><span t-esc="o._get_invoice_payment_amount(inv)" t-options="{'widget': 'monetary', 'display_currency': inv.currency_id}"/></td>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
from . import account_unreconcile
|
||||
from . import account_invoice_import
|
||||
from . import account_invoice_refund
|
||||
from . import account_invoice_state
|
||||
from . import account_validate_account_move
|
||||
from . import pos_box
|
||||
from . import account_move_reversal
|
||||
|
||||
@@ -8,18 +8,12 @@ class ImportInvoiceImportWizard(models.TransientModel):
|
||||
_name = 'account.invoice.import.wizard'
|
||||
_description = 'Import Your Vendor Bills from Files.'
|
||||
|
||||
def _get_default_journal_id(self):
|
||||
return self.env['account.journal'].search([('type', '=', self.env.context.get('journal_type'))], limit=1)
|
||||
|
||||
attachment_ids = fields.Many2many('ir.attachment', string='Files')
|
||||
journal_id = fields.Many2one(string="Journal", comodel_name="account.journal", required=True, domain="[('type', 'in', ('sale', 'purchase'))]", default=_get_default_journal_id, help="Journal where to generate the bills")
|
||||
|
||||
@api.multi
|
||||
def _create_invoice_from_file(self, attachment):
|
||||
self = self.with_context(default_journal_id=self.journal_id.id)
|
||||
invoice_form = Form(self.env['account.invoice'], view='account.invoice_supplier_form')
|
||||
invoice = invoice_form.save()
|
||||
attachment.write({'res_model': 'account.invoice', 'res_id': invoice.id})
|
||||
invoice = self.env['account.move'].create({})
|
||||
attachment.write({'res_model': 'account.move', 'res_id': invoice.id})
|
||||
invoice.message_post(attachment_ids=[attachment.id])
|
||||
return invoice
|
||||
|
||||
@@ -35,18 +29,18 @@ class ImportInvoiceImportWizard(models.TransientModel):
|
||||
if not self.attachment_ids:
|
||||
raise UserError(_("No attachment was provided"))
|
||||
|
||||
invoices = self.env['account.invoice']
|
||||
invoices = self.env['account.move']
|
||||
for attachment in self.attachment_ids:
|
||||
invoices += self._create_invoice(attachment)
|
||||
|
||||
form_view = self.env.context.get('journal_type') == 'purchase' and self.env.ref('account.invoice_supplier_form').id or self.env.ref('account.invoice_form').id
|
||||
tree_view = self.env.context.get('journal_type') == 'purchase' and self.env.ref('account.invoice_supplier_tree').id or self.env.ref('account.invoice_tree').id
|
||||
action_vals = {
|
||||
'name': _('Generated Documents'),
|
||||
'domain': [('id', 'in', invoices.ids)],
|
||||
'res_model': 'account.invoice',
|
||||
'views': [[tree_view, "tree"], [form_view, "form"]],
|
||||
'view_type': 'form',
|
||||
'res_model': 'account.move',
|
||||
'views': [[False, "tree"], [False, "form"]],
|
||||
'type': 'ir.actions.act_window',
|
||||
'context': self.env.context,
|
||||
}
|
||||
if len(invoices) == 1:
|
||||
action_vals.update({'res_id': invoices[0].id, 'view_mode': 'form'})
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<field name="res_model">account.invoice.import.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'type': 'in_invoice', 'default_journal_id': active_id}</field>
|
||||
<field name="context">{'default_type': 'in_invoice', 'default_journal_id': active_id}</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class AccountInvoiceRefund(models.TransientModel):
|
||||
"""Credit Notes"""
|
||||
|
||||
_name = "account.invoice.refund"
|
||||
_description = "Credit Note"
|
||||
|
||||
@api.model
|
||||
def _get_reason(self):
|
||||
context = dict(self._context or {})
|
||||
active_id = context.get('active_id', False)
|
||||
if active_id:
|
||||
inv = self.env['account.invoice'].browse(active_id)
|
||||
return inv.name
|
||||
return ''
|
||||
|
||||
date_invoice = fields.Date(string='Credit Note Date', default=fields.Date.context_today, required=True)
|
||||
date = fields.Date(string='Accounting Date')
|
||||
description = fields.Char(string='Reason', required=True, default=lambda self: self._get_reason())
|
||||
refund_only = fields.Boolean(string='Technical field to hide filter_refund in case invoice is partially paid', compute='_get_refund_only')
|
||||
filter_refund = fields.Selection([('refund', 'Create a draft credit note (partial refunding)'), ('cancel', 'Cancel: create credit note and reconcile (full refunding)'), ('modify', 'Modify: create credit note, reconcile and create a new draft invoice')],
|
||||
default='refund', string='Credit Method', required=True, help='Choose how you want to credit this invoice. You cannot Modify and Cancel if the invoice is already reconciled')
|
||||
|
||||
@api.depends('date_invoice')
|
||||
@api.one
|
||||
def _get_refund_only(self):
|
||||
invoice_id = self.env['account.invoice'].browse(self._context.get('active_id',False))
|
||||
if len(invoice_id.payment_move_line_ids) != 0 and invoice_id.state != 'paid':
|
||||
self.refund_only = True
|
||||
else:
|
||||
self.refund_only = False
|
||||
|
||||
|
||||
@api.multi
|
||||
def compute_refund(self, mode='refund'):
|
||||
inv_obj = self.env['account.invoice']
|
||||
inv_tax_obj = self.env['account.invoice.tax']
|
||||
inv_line_obj = self.env['account.invoice.line']
|
||||
context = dict(self._context or {})
|
||||
xml_id = False
|
||||
|
||||
for form in self:
|
||||
created_inv = []
|
||||
date = False
|
||||
description = False
|
||||
for inv in inv_obj.browse(context.get('active_ids')):
|
||||
if inv.state in ['draft', 'cancel']:
|
||||
raise UserError(_('Cannot create credit note for the draft/cancelled invoice.'))
|
||||
if inv.reconciled and mode in ('cancel', 'modify'):
|
||||
raise UserError(_('The invoice is already paid or reconciled with a credit note so you cannot reconcile it with a new credit note. You should rather unreconcile the current invoice or create a draft credit note.'))
|
||||
|
||||
date = form.date or False
|
||||
description = form.description or inv.name
|
||||
refund = inv.refund(form.date_invoice, date, description, inv.journal_id.id)
|
||||
|
||||
created_inv.append(refund.id)
|
||||
if mode in ('cancel', 'modify'):
|
||||
movelines = inv.move_id.line_ids
|
||||
to_reconcile_ids = {}
|
||||
to_reconcile_lines = self.env['account.move.line']
|
||||
for line in movelines:
|
||||
if line.account_id.id == inv.account_id.id:
|
||||
to_reconcile_lines += line
|
||||
to_reconcile_ids.setdefault(line.account_id.id, []).append(line.id)
|
||||
if line.reconciled:
|
||||
line.remove_move_reconcile()
|
||||
refund.action_invoice_open()
|
||||
for tmpline in refund.move_id.line_ids:
|
||||
if tmpline.account_id.id == inv.account_id.id:
|
||||
to_reconcile_lines += tmpline
|
||||
to_reconcile_lines.filtered(lambda l: l.reconciled == False).reconcile()
|
||||
if mode == 'modify':
|
||||
invoice = inv.read(inv_obj._get_refund_modify_read_fields())
|
||||
invoice = invoice[0]
|
||||
del invoice['id']
|
||||
invoice_lines = inv_line_obj.browse(invoice['invoice_line_ids'])
|
||||
invoice_lines = inv_obj._refund_cleanup_lines(invoice_lines)
|
||||
tax_lines = inv_tax_obj.browse(invoice['tax_line_ids'])
|
||||
tax_lines = inv_obj._refund_cleanup_lines(tax_lines)
|
||||
invoice.update({
|
||||
'type': inv.type,
|
||||
'date_invoice': form.date_invoice,
|
||||
'state': 'draft',
|
||||
'number': False,
|
||||
'invoice_line_ids': invoice_lines,
|
||||
'tax_line_ids': tax_lines,
|
||||
'date': date,
|
||||
'origin': inv.origin,
|
||||
'fiscal_position_id': inv.fiscal_position_id.id,
|
||||
})
|
||||
for field in inv_obj._get_refund_common_fields():
|
||||
if inv_obj._fields[field].type == 'many2one':
|
||||
invoice[field] = invoice[field] and invoice[field][0]
|
||||
else:
|
||||
invoice[field] = invoice[field] or False
|
||||
inv_refund = inv_obj.create(invoice)
|
||||
body = _('Correction of <a href=# data-oe-model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s') % (inv.id, inv.number, description)
|
||||
inv_refund.message_post(body=body)
|
||||
if inv_refund.payment_term_id.id:
|
||||
inv_refund._onchange_payment_term_date_invoice()
|
||||
created_inv.append(inv_refund.id)
|
||||
xml_id = inv.type == 'out_invoice' and 'action_invoice_out_refund' or \
|
||||
inv.type == 'out_refund' and 'action_invoice_tree1' or \
|
||||
inv.type == 'in_invoice' and 'action_invoice_in_refund' or \
|
||||
inv.type == 'in_refund' and 'action_invoice_tree2'
|
||||
if xml_id:
|
||||
result = self.env.ref('account.%s' % (xml_id)).read()[0]
|
||||
if mode == 'modify':
|
||||
# When refund method is `modify` then it will directly open the new draft bill/invoice in form view
|
||||
if inv_refund.type == 'in_invoice':
|
||||
view_ref = self.env.ref('account.invoice_supplier_form')
|
||||
else:
|
||||
view_ref = self.env.ref('account.invoice_form')
|
||||
result['views'] = [(view_ref.id, 'form')]
|
||||
result['res_id'] = inv_refund.id
|
||||
else:
|
||||
invoice_domain = safe_eval(result['domain'])
|
||||
invoice_domain.append(('id', 'in', created_inv))
|
||||
result['domain'] = invoice_domain
|
||||
return result
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def invoice_refund(self):
|
||||
data_refund = self.read(['filter_refund'])[0]['filter_refund']
|
||||
return self.compute_refund(data_refund)
|
||||
@@ -1,60 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_account_invoice_refund" model="ir.ui.view">
|
||||
<field name="name">account.invoice.refund.form</field>
|
||||
<field name="model">account.invoice.refund</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Credit Note">
|
||||
<group>
|
||||
<group>
|
||||
<field name="refund_only" invisible="1"/>
|
||||
<field name="filter_refund" attrs="{'invisible': [('refund_only','=',True)]}" widget="radio"/>
|
||||
</group>
|
||||
<group>
|
||||
<div attrs="{'invisible':['|',('refund_only','=',True),('filter_refund','!=','refund')]}" class="oe_grey" colspan="4">
|
||||
You will be able to edit and validate this
|
||||
credit note directly or keep it draft,
|
||||
waiting for the document to be issued by
|
||||
your supplier/customer.
|
||||
</div>
|
||||
<div attrs="{'invisible':['|',('refund_only','=',True),('filter_refund','!=','cancel')]}" class="oe_grey" colspan="4">
|
||||
Use this option if you want to cancel an invoice you should not
|
||||
have issued. The credit note will be created, validated and reconciled
|
||||
with the invoice. You will not be able to modify the credit note.
|
||||
</div>
|
||||
<div attrs="{'invisible':['|',('refund_only','=',True),('filter_refund','!=','modify')]}" class="oe_grey" colspan="4">
|
||||
Use this option if you want to cancel an invoice and create a new
|
||||
one. The credit note will be created, validated and reconciled
|
||||
with the current invoice. A new draft invoice will be created
|
||||
so that you can edit it.
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<field name="description"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_invoice"/>
|
||||
<field name="date" groups="base.group_no_one"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button string='Add Credit Note' name="invoice_refund" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_invoice_refund" model="ir.actions.act_window">
|
||||
<field name="name">Credit Note</field>
|
||||
<field name="res_model">account.invoice.refund</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_account_invoice_refund"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.addons.mail.wizard.mail_compose_message import _reopen
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class AccountInvoiceSend(models.TransientModel):
|
||||
@@ -14,17 +15,22 @@ class AccountInvoiceSend(models.TransientModel):
|
||||
invoice_without_email = fields.Text(compute='_compute_invoice_without_email', string='invoice(s) that will not be sent')
|
||||
is_print = fields.Boolean('Print', default=lambda self: self.env.company.invoice_is_print)
|
||||
printed = fields.Boolean('Is Printed', default=False)
|
||||
invoice_ids = fields.Many2many('account.invoice', 'account_invoice_account_invoice_send_rel', string='Invoices')
|
||||
invoice_ids = fields.Many2many('account.move', 'account_move_account_invoice_send_rel', string='Invoices')
|
||||
composer_id = fields.Many2one('mail.compose.message', string='Composer', required=True, ondelete='cascade')
|
||||
template_id = fields.Many2one(
|
||||
'mail.template', 'Use template', index=True,
|
||||
domain="[('model', '=', 'account.invoice')]"
|
||||
domain="[('model', '=', 'account.move')]"
|
||||
)
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super(AccountInvoiceSend, self).default_get(fields)
|
||||
res_ids = self._context.get('active_ids')
|
||||
|
||||
invoices = self.env['account.move'].browse(res_ids).filtered(lambda move: move.is_invoice(include_receipts=True))
|
||||
if not invoices:
|
||||
raise UserError(_("You can only send invoices."))
|
||||
|
||||
composer = self.env['mail.compose.message'].create({
|
||||
'composition_mode': 'comment' if len(res_ids) == 1 else 'mass_mail',
|
||||
})
|
||||
@@ -38,7 +44,7 @@ class AccountInvoiceSend(models.TransientModel):
|
||||
@api.onchange('invoice_ids')
|
||||
def _compute_composition_mode(self):
|
||||
for wizard in self:
|
||||
wizard.composition_mode = 'comment' if len(wizard.invoice_ids) == 1 else 'mass_mail'
|
||||
wizard.composition_mode = 'comment' if len(wizard.invoice_ids) == 1 else 'mass_mail'
|
||||
|
||||
@api.onchange('template_id')
|
||||
def onchange_template_id(self):
|
||||
@@ -50,7 +56,7 @@ class AccountInvoiceSend(models.TransientModel):
|
||||
def _compute_invoice_without_email(self):
|
||||
for wizard in self:
|
||||
if wizard.is_email and len(wizard.invoice_ids) > 1:
|
||||
invoices = self.env['account.invoice'].search([
|
||||
invoices = self.env['account.move'].search([
|
||||
('id', 'in', self.env.context.get('active_ids')),
|
||||
('partner_id.email', '=', False)
|
||||
])
|
||||
@@ -67,13 +73,13 @@ class AccountInvoiceSend(models.TransientModel):
|
||||
if self.is_email:
|
||||
self.composer_id.send_mail()
|
||||
if self.env.context.get('mark_invoice_as_sent'):
|
||||
self.mapped('invoice_ids').write({'sent': True})
|
||||
self.mapped('invoice_ids').write({'invoice_sent': True})
|
||||
|
||||
@api.multi
|
||||
def _print_document(self):
|
||||
""" to override for each type of models that will use this composer."""
|
||||
self.ensure_one()
|
||||
action = self.invoice_ids.invoice_print()
|
||||
action = self.invoice_ids.action_invoice_print()
|
||||
action.update({'close_on_report_download': True})
|
||||
return action
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="account_invoice_send_wizard_form">
|
||||
<record id="account_invoice_send_wizard_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.send.form</field>
|
||||
<field name="model">account.invoice.send</field>
|
||||
<field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
|
||||
@@ -51,7 +51,7 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="template_id" options="{'no_create': True, 'no_edit': True}"
|
||||
context="{'default_model': 'account.invoice'}"/>
|
||||
context="{'default_model': 'account.move'}"/>
|
||||
</group>
|
||||
</group>
|
||||
</div>
|
||||
@@ -79,7 +79,7 @@
|
||||
name="Send"
|
||||
id="invoice_send"
|
||||
res_model="account.invoice.send"
|
||||
binding_model="account.invoice"
|
||||
binding_model="account.move"
|
||||
binding_views="list"
|
||||
view_mode="form"
|
||||
target="new"
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, api, _
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class AccountInvoiceConfirm(models.TransientModel):
|
||||
"""
|
||||
This wizard will confirm the all the selected draft invoices
|
||||
"""
|
||||
|
||||
_name = "account.invoice.confirm"
|
||||
_description = "Confirm the selected invoices"
|
||||
|
||||
@api.multi
|
||||
def invoice_confirm(self):
|
||||
context = dict(self._context or {})
|
||||
active_ids = context.get('active_ids', []) or []
|
||||
|
||||
for record in self.env['account.invoice'].browse(active_ids):
|
||||
if record.state != 'draft':
|
||||
raise UserError(_("Selected invoice(s) cannot be confirmed as they are not in 'Draft' state."))
|
||||
record.action_invoice_open()
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
@@ -1,30 +0,0 @@
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="account_invoice_confirm_view" model="ir.ui.view">
|
||||
<field name="name">account.invoice.confirm.form</field>
|
||||
<field name="model">account.invoice.confirm</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Confirm Draft Invoices">
|
||||
<p class="oe_grey">
|
||||
Once draft invoices are confirmed, you will not be able
|
||||
to modify them. The invoices will receive a unique
|
||||
number and journal items will be created in your chart
|
||||
of accounts.
|
||||
</p>
|
||||
<footer>
|
||||
<button string="Confirm Invoices" name="invoice_confirm" type="object" default_focus="1" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window id="action_account_invoice_confirm"
|
||||
name="Confirm Draft Invoices"
|
||||
res_model="account.invoice.confirm"
|
||||
binding_model="account.invoice" binding_views="list"
|
||||
view_mode="form" target="new"/>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,6 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, fields, api
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.translate import _
|
||||
|
||||
|
||||
class AccountMoveReversal(models.TransientModel):
|
||||
"""
|
||||
Account move reversal wizard, it cancel an account move by reversing it.
|
||||
@@ -8,19 +11,84 @@ class AccountMoveReversal(models.TransientModel):
|
||||
_name = 'account.move.reversal'
|
||||
_description = 'Account Move Reversal'
|
||||
|
||||
@api.model
|
||||
def _get_default_move(self):
|
||||
if self._context.get('active_id'):
|
||||
move = self.env['account.move'].browse(self._context['active_id'])
|
||||
if move.state != 'posted' or move.type in ('out_refund', 'in_refund'):
|
||||
raise UserError(_('Only posted journal entries being not already a refund can be reversed.'))
|
||||
return move
|
||||
return self.env['account.move']
|
||||
|
||||
@api.model
|
||||
def _get_default_reason(self):
|
||||
move = self._get_default_move()
|
||||
return move and move.invoice_payment_ref or False
|
||||
|
||||
move_id = fields.Many2one('account.move', string='Journal Entry',
|
||||
default=_get_default_move,
|
||||
domain=[('state', '=', 'posted'), ('type', 'not in', ('out_refund', 'in_refund'))])
|
||||
date = fields.Date(string='Reversal date', default=fields.Date.context_today, required=True)
|
||||
reason = fields.Char(string='Reason', default=_get_default_reason)
|
||||
refund_method = fields.Selection(selection=[
|
||||
('refund', 'Create a draft credit note (partial refunding)'),
|
||||
('cancel', 'Cancel: create credit note and reconcile (full refunding)'),
|
||||
('modify', 'Create credit note, reconcile and create a new draft invoice (cancel)')
|
||||
], default='refund', string='Credit Method', required=True,
|
||||
help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.')
|
||||
journal_id = fields.Many2one('account.journal', string='Use Specific Journal', help='If empty, uses the journal of the journal entry to be reversed.')
|
||||
|
||||
# related fields
|
||||
residual = fields.Monetary(related='move_id.amount_residual')
|
||||
currency_id = fields.Many2one(related='move_id.currency_id')
|
||||
move_type = fields.Selection(related='move_id.type')
|
||||
|
||||
@api.multi
|
||||
def reverse_moves(self):
|
||||
ac_move_ids = self._context.get('active_ids', False)
|
||||
res = self.env['account.move'].browse(ac_move_ids).reverse_moves(self.date, self.journal_id or False)
|
||||
if res:
|
||||
return {
|
||||
'name': _('Reverse Moves'),
|
||||
'type': 'ir.actions.act_window',
|
||||
moves = self.move_id or self.env['account.move'].browse(self._context['active_ids'])
|
||||
|
||||
# Create default values.
|
||||
default_values_list = []
|
||||
for move in moves:
|
||||
default_values_list.append({
|
||||
'ref': _('Reversal of: %s') % move.name,
|
||||
'invoice_payment_ref': self.reason,
|
||||
'date': self.date or move.date,
|
||||
'invoice_date': move.is_invoice(include_receipts=True) and (self.date or move.date) or False,
|
||||
'journal_id': self.journal_id and self.journal_id.id or move.journal_id.id,
|
||||
})
|
||||
|
||||
# Handle reverse method.
|
||||
if self.refund_method == 'cancel' or (moves and moves[0].type == 'entry'):
|
||||
new_moves = moves._reverse_moves(default_values_list, cancel=True)
|
||||
elif self.refund_method == 'modify':
|
||||
new_moves = moves._reverse_moves(default_values_list, cancel=True)
|
||||
moves_vals_list = []
|
||||
for move in moves.with_context(include_business_fields=True):
|
||||
moves_vals_list.append(move.copy_data({
|
||||
'invoice_payment_ref': move.name,
|
||||
'date': self.date or move.date,
|
||||
})[0])
|
||||
new_moves = moves.create(moves_vals_list)
|
||||
elif self.refund_method == 'refund':
|
||||
new_moves = moves._reverse_moves(default_values_list)
|
||||
else:
|
||||
return
|
||||
|
||||
# Create action.
|
||||
action = {
|
||||
'name': _('Reverse Moves'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'account.move',
|
||||
}
|
||||
if len(new_moves) == 1:
|
||||
action.update({
|
||||
'view_mode': 'form',
|
||||
'res_id': new_moves.id,
|
||||
})
|
||||
else:
|
||||
action.update({
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'account.move',
|
||||
'domain': [('id', 'in', res)],
|
||||
}
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
'domain': [('id', 'in', new_moves.ids)],
|
||||
})
|
||||
return action
|
||||
|
||||
@@ -1,18 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_account_move_reversal" model="ir.ui.view">
|
||||
<field name="name">account.move.reversal.form</field>
|
||||
<field name="model">account.move.reversal</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Move Reversal">
|
||||
<group col="4">
|
||||
<field name="date"/>
|
||||
<field name="journal_id"/>
|
||||
<form string="Reverse Journal Entry">
|
||||
<field name="residual" invisible="1"/>
|
||||
<field name="move_type" invisible="1"/>
|
||||
<group>
|
||||
<group attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'in_invoice'))]}">
|
||||
<field name="refund_method" widget="radio" attrs="{'readonly': [('residual', '=', 0)]}"/>
|
||||
</group>
|
||||
<group attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'in_invoice'))]}">
|
||||
<div attrs="{'invisible':[('refund_method', '!=', 'refund')]}" class="oe_grey" colspan="4">
|
||||
You will be able to edit and validate this
|
||||
credit note directly or keep it draft,
|
||||
waiting for the document to be issued by
|
||||
your supplier/customer.
|
||||
</div>
|
||||
<div attrs="{'invisible':[('refund_method', '!=', 'cancel')]}" class="oe_grey" colspan="4">
|
||||
Use this option if you want to cancel an invoice you should not
|
||||
have issued. The credit note will be created, validated and reconciled
|
||||
with the invoice. You will not be able to modify the credit note.
|
||||
</div>
|
||||
<div attrs="{'invisible':[('refund_method', '!=', 'modify')]}" class="oe_grey" colspan="4">
|
||||
Use this option if you want to cancel an invoice and create a new
|
||||
one. The credit note will be created, validated and reconciled
|
||||
with the current invoice. A new draft invoice will be created
|
||||
so that you can edit it.
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<field name="move_id" readonly="context.get('active_id')" invisible="context.get('active_id')" />
|
||||
<field name="reason" attrs="{'invisible': [('move_type', '==', 'entry')], 'reason': [('move_type', '==', 'entry')]}"/>
|
||||
<field name="date" string="Refund Date" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'in_invoice'))]}"/>
|
||||
<field name="date" attrs="{'invisible': [('move_type', 'in', ('out_invoice', 'in_invoice'))]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="journal_id" attrs="{'invisible': [('move_type', 'not in', ('entry'))]}" />
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Reverse Moves" name="reverse_moves" type="object" class="btn-primary"/>
|
||||
<button string='Reverse' name="reverse_moves" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
|
||||
@@ -65,45 +65,18 @@ class AccountAnalyticDefault(models.Model):
|
||||
return res
|
||||
|
||||
|
||||
class AccountInvoiceLine(models.Model):
|
||||
_inherit = "account.invoice.line"
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = 'account.move.line'
|
||||
|
||||
@api.onchange('product_id', 'account_id')
|
||||
def _onchange_product_id_account_id(self):
|
||||
rec = self.env['account.analytic.default'].account_get(
|
||||
product_id=self.product_id.id,
|
||||
partner_id=self.invoice_id.commercial_partner_id.id,
|
||||
partner_id=self.partner_id.id,
|
||||
account_id=self.account_id.id,
|
||||
user_id=self.invoice_id.user_id.id or self.env.uid,
|
||||
date=self.invoice_id.date_due,
|
||||
company_id=self.invoice_id.company_id.id,
|
||||
user_id=self.env.uid,
|
||||
date=self.date_maturity,
|
||||
company_id=self.move_id.company_id.id
|
||||
)
|
||||
self.account_analytic_id = rec.analytic_id.id
|
||||
self.analytic_tag_ids = rec.analytic_tag_ids.ids
|
||||
|
||||
def _set_additional_fields(self):
|
||||
if not self.account_analytic_id or not self.analytic_tag_ids:
|
||||
rec = self.env['account.analytic.default'].account_get(
|
||||
product_id=self.product_id.id,
|
||||
partner_id=self.invoice_id.commercial_partner_id.id,
|
||||
account_id=self.account_id.id,
|
||||
user_id=self.invoice_id.user_id.id or self.env.uid,
|
||||
date=self.invoice_id.date_due,
|
||||
company_id=self.invoice_id.company_id.id,
|
||||
)
|
||||
if rec:
|
||||
if not self.account_analytic_id:
|
||||
self.account_analytic_id = rec.analytic_id.id
|
||||
if not self.analytic_tag_ids:
|
||||
self.analytic_tag_ids = rec.analytic_tag_ids.ids
|
||||
super(AccountInvoiceLine, self)._set_additional_fields()
|
||||
|
||||
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = "account.move.line"
|
||||
|
||||
@api.onchange('account_id', 'partner_id', 'product_id')
|
||||
def _onchange_product_id_account_id_partner_id(self):
|
||||
rec = self.env['account.analytic.default'].account_get(product_id=self.product_id.id, partner_id=self.partner_id.id, account_id=self.account_id.id, user_id=self.env.uid, date=self.move_id.date, company_id=self.company_id.id)
|
||||
self.analytic_account_id = rec.analytic_id.id
|
||||
self.analytic_tag_ids = rec.analytic_tag_ids.ids
|
||||
|
||||
@@ -5,34 +5,12 @@
|
||||
<field name="model">account.journal</field>
|
||||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="group_invoice_lines" position="after">
|
||||
<field name="loss_account_id" position="after">
|
||||
<field name="update_posted" groups="base.group_no_one"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_form_cancel_inherit" model="ir.ui.view">
|
||||
<field name="name">invoice.form.cancel.inherit</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='action_invoice_draft']" position="before">
|
||||
<button name="action_invoice_cancel" type="object" states="draft,open,in_payment,paid" string="Cancel" groups="account.group_account_invoice"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="invoice_supplier_cancel_form_inherit" model="ir.ui.view">
|
||||
<field name="name">invoice.supplier.cancel.form.inherit</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_supplier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='action_invoice_draft']" position="before">
|
||||
<button name="action_invoice_cancel" type="object" states="draft,open,in_payment,paid" string="Cancel" groups="account.group_account_invoice"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="bank_statement_draft_form_inherit" model="ir.ui.view">
|
||||
<field name="name">bank.statement.draft.form.inherit</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
@@ -77,6 +55,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<field name="state" position="before">
|
||||
<button name="button_cancel" states="posted" string="Cancel Entry" type="object" groups="account.group_account_invoice"/>
|
||||
<button name="button_draft" states="cancel" string="Reset to Draft" type="object" groups="account.group_account_invoice"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -144,7 +144,7 @@ class AccountPayment(models.Model):
|
||||
|
||||
multi_stub = self.company_id.account_check_printing_multi_stub
|
||||
|
||||
invoices = self.reconciled_invoice_ids.sorted(key=lambda r: r.date_due)
|
||||
invoices = self.reconciled_invoice_ids.sorted(key=lambda r: r.invoice_date_due)
|
||||
debits = invoices.filtered(lambda r: r.type == 'in_invoice')
|
||||
credits = invoices.filtered(lambda r: r.type == 'in_refund')
|
||||
|
||||
@@ -182,21 +182,21 @@ class AccountPayment(models.Model):
|
||||
# Find the account.partial.reconcile which are common to the invoice and the payment
|
||||
if invoice.type in ['in_invoice', 'out_refund']:
|
||||
invoice_sign = 1
|
||||
invoice_payment_reconcile = invoice.move_id.line_ids.mapped('matched_debit_ids').filtered(lambda r: r.debit_move_id in self.move_line_ids)
|
||||
invoice_payment_reconcile = invoice.line_ids.mapped('matched_debit_ids').filtered(lambda r: r.debit_move_id in self.move_line_ids)
|
||||
else:
|
||||
invoice_sign = -1
|
||||
invoice_payment_reconcile = invoice.move_id.line_ids.mapped('matched_credit_ids').filtered(lambda r: r.credit_move_id in self.move_line_ids)
|
||||
invoice_payment_reconcile = invoice.line_ids.mapped('matched_credit_ids').filtered(lambda r: r.credit_move_id in self.move_line_ids)
|
||||
|
||||
if self.currency_id != self.journal_id.company_id.currency_id:
|
||||
amount_paid = abs(sum(invoice_payment_reconcile.mapped('amount_currency')))
|
||||
else:
|
||||
amount_paid = abs(sum(invoice_payment_reconcile.mapped('amount')))
|
||||
|
||||
amount_residual = invoice_sign * invoice.residual
|
||||
amount_residual = invoice_sign * invoice.amount_residual
|
||||
|
||||
return {
|
||||
'due_date': format_date(self.env, invoice.date_due),
|
||||
'number': invoice.reference and invoice.number + ' - ' + invoice.reference or invoice.number,
|
||||
'due_date': format_date(self.env, invoice.invoice_date_due),
|
||||
'number': invoice.ref and invoice.name + ' - ' + invoice.ref or invoice.name,
|
||||
'amount_total': formatLang(self.env, invoice_sign * invoice.amount_total, currency_obj=invoice.currency_id),
|
||||
'amount_residual': formatLang(self.env, amount_residual, currency_obj=invoice.currency_id) if amount_residual * 10**4 != 0 else '-',
|
||||
'amount_paid': formatLang(self.env, invoice_sign * amount_paid, currency_obj=invoice.currency_id),
|
||||
|
||||
@@ -16,8 +16,8 @@ class TestPrintCheck(AccountingTestCase):
|
||||
def setUp(self):
|
||||
super(TestPrintCheck, self).setUp()
|
||||
|
||||
self.invoice_model = self.env['account.invoice']
|
||||
self.invoice_line_model = self.env['account.invoice.line']
|
||||
self.invoice_model = self.env['account.move']
|
||||
self.invoice_line_model = self.env['account.move.line']
|
||||
self.payment_model = self.env['account.payment']
|
||||
|
||||
self.partner_axelor = self.env.ref("base.res_partner_2")
|
||||
@@ -31,26 +31,23 @@ class TestPrintCheck(AccountingTestCase):
|
||||
self.bank_journal.check_manual_sequencing = True
|
||||
|
||||
def create_invoice(self, amount=100, is_refund=False):
|
||||
invoice = self.invoice_model.create({
|
||||
invoice = self.env['account.move'].with_context(default_type=is_refund and 'out_refund' or 'in_invoice').create({
|
||||
'partner_id': self.partner_axelor.id,
|
||||
'name': is_refund and "Supplier Refund" or "Supplier Invoice",
|
||||
'type': is_refund and "out_refund" or "in_invoice",
|
||||
'account_id': self.account_payable.id,
|
||||
'date_invoice': time.strftime('%Y') + '-06-26',
|
||||
'invoice_date': time.strftime('%Y') + '-06-26',
|
||||
'date': time.strftime('%Y') + '-06-26',
|
||||
'invoice_line_ids': [
|
||||
(0, 0, {
|
||||
'product_id': self.product.id,
|
||||
'quantity': 1,
|
||||
'price_unit': is_refund and amount / 4 or amount,
|
||||
})
|
||||
]
|
||||
})
|
||||
self.invoice_line_model.create({
|
||||
'product_id': self.product.id,
|
||||
'quantity': 1,
|
||||
'price_unit': is_refund and amount / 4 or amount,
|
||||
'invoice_id': invoice.id,
|
||||
'name': 'something',
|
||||
'account_id': self.account_expenses.id,
|
||||
})
|
||||
invoice.action_invoice_open()
|
||||
invoice.post()
|
||||
return invoice
|
||||
|
||||
def create_payment(self, invoices):
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.invoice', active_ids=invoices.ids))
|
||||
payment_register = Form(self.env['account.payment'].with_context(active_model='account.move', active_ids=invoices.ids))
|
||||
payment_register.payment_date = time.strftime('%Y') + '-07-15'
|
||||
payment_register.journal_id = self.bank_journal
|
||||
payment_register.payment_method_id = self.payment_method_check
|
||||
@@ -60,8 +57,8 @@ class TestPrintCheck(AccountingTestCase):
|
||||
|
||||
def test_print_check(self):
|
||||
# Make a payment for 10 invoices and 5 credit notes
|
||||
invoices = self.env['account.invoice']
|
||||
for i in range(0, 42):
|
||||
invoices = self.env['account.move']
|
||||
for i in range(0, 15):
|
||||
invoices |= self.create_invoice(is_refund=(i % 3 == 0))
|
||||
payment = self.create_payment(invoices)
|
||||
self.assertEqual(all(payment.mapped('check_amount_in_words')), True, 'The amount in words is not set on all the payments')
|
||||
@@ -76,7 +73,7 @@ class TestPrintCheck(AccountingTestCase):
|
||||
self.assertEqual(len(report_pages), 1)
|
||||
|
||||
def test_from_register(self):
|
||||
invoices = self.env['account.invoice']
|
||||
invoices = self.env['account.move']
|
||||
for i in range(0, 3):
|
||||
invoices |= self.create_invoice(is_refund=(i % 3 == 0))
|
||||
payment = self.create_payment(invoices)
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
<!-- Amounts. -->
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<t t-set="taxes"
|
||||
t-value="line.invoice_line_tax_ids.compute_all(
|
||||
t-value="line.tax_ids.compute_all(
|
||||
line.price_unit,
|
||||
currency=line.currency_id,
|
||||
quantity=line.quantity,
|
||||
product=line.product_id,
|
||||
partner=record.partner_id,
|
||||
is_refund=line.invoice_id.type in ('in_refund', 'out_refund'))"/>
|
||||
is_refund=line.move_id.type in ('in_refund', 'out_refund'))"/>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount
|
||||
t-att-currencyID="currency.name"
|
||||
@@ -55,7 +55,7 @@
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<t t-foreach="line.invoice_line_tax_ids" t-as="tax">
|
||||
<t t-foreach="line.tax_ids" t-as="tax">
|
||||
<ram:ApplicableTradeTax t-if="tax.amount_type == 'percent'">
|
||||
<ram:RateApplicablePercent t-esc="tax.amount"/>
|
||||
</ram:ApplicableTradeTax>
|
||||
@@ -118,13 +118,13 @@
|
||||
|
||||
<!-- Document Headers. -->
|
||||
<rsm:ExchangedDocument>
|
||||
<ram:ID t-esc="record.reference"/>
|
||||
<ram:ID t-esc="record.ref"/>
|
||||
<ram:TypeCode t-esc="'381' if 'refund' in record.type else '380'"/>
|
||||
<ram:IssueDateTime>
|
||||
<udt:DateTimeString format="102" t-esc="format_date(record.date_invoice)"/>
|
||||
<udt:DateTimeString format="102" t-esc="format_date(record.invoice_date)"/>
|
||||
</ram:IssueDateTime>
|
||||
<ram:IncludedNote t-if="record.comment">
|
||||
<ram:Content t-esc="record.comment"/>
|
||||
<ram:IncludedNote t-if="record.narration">
|
||||
<ram:Content t-esc="record.narration"/>
|
||||
</ram:IncludedNote>
|
||||
</rsm:ExchangedDocument>
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
<!-- Reference. -->
|
||||
<ram:BuyerOrderReferencedDocument>
|
||||
<ram:IssuerAssignedID t-esc="'%s: %s' % (record.number, record.name) if record.name else record.number"/>
|
||||
<ram:IssuerAssignedID t-esc="'%s: %s' % (record.name, record.invoice_payment_ref) if record.invoice_payment_ref else record.name"/>
|
||||
</ram:BuyerOrderReferencedDocument>
|
||||
</ram:ApplicableHeaderTradeAgreement>
|
||||
|
||||
@@ -184,32 +184,32 @@
|
||||
<ram:ApplicableHeaderTradeSettlement>
|
||||
|
||||
<!-- Bank account. -->
|
||||
<ram:SpecifiedTradeSettlementPaymentMeans t-if="record.partner_bank_id.acc_type == 'iban'">
|
||||
<ram:SpecifiedTradeSettlementPaymentMeans t-if="record.invoice_partner_bank_id.acc_type == 'iban'">
|
||||
<ram:PayeePartyCreditorFinancialAccount>
|
||||
<ram:IBANID t-esc="record.partner_bank_id.sanitized_acc_number"/>
|
||||
<ram:IBANID t-esc="record.invoice_partner_bank_id.sanitized_acc_number"/>
|
||||
</ram:PayeePartyCreditorFinancialAccount>
|
||||
</ram:SpecifiedTradeSettlementPaymentMeans>
|
||||
|
||||
<!-- Tax Summary. -->
|
||||
<t t-foreach="record.tax_line_ids" t-as="tax_line">
|
||||
<t t-foreach="record.line_ids.filtered(lambda line: line.tax_line_id)" t-as="tax_line">
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:CalculatedAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(tax_line.amount, currency)"/>
|
||||
t-esc="format_monetary(tax_line.price_unit, currency)"/>
|
||||
<ram:BasisAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(tax_line.base, currency)"/>
|
||||
t-esc="format_monetary(tax_line.tax_base_amount, currency)"/>
|
||||
<ram:RateApplicablePercent
|
||||
t-if="tax_line.tax_id.amount_type == 'percent'"
|
||||
t-esc="tax_line.tax_id.amount"/>
|
||||
t-if="tax_line.tax_line_id.amount_type == 'percent'"
|
||||
t-esc="tax_line.tax_line_id.amount"/>
|
||||
</ram:ApplicableTradeTax>
|
||||
</t>
|
||||
|
||||
<!-- Payment Term. -->
|
||||
<ram:SpecifiedTradePaymentTerms>
|
||||
<ram:Description t-if="record.payment_term_id" t-esc="record.payment_term_id.name"/>
|
||||
<ram:DueDateDateTime t-if="record.date_due">
|
||||
<udt:DateTimeString t-esc="format_date(record.date_due)"/>
|
||||
<ram:Description t-if="record.invoice_payment_term_id" t-esc="record.invoice_payment_term_id.name"/>
|
||||
<ram:DueDateDateTime t-if="record.invoice_date_due">
|
||||
<udt:DateTimeString t-esc="format_date(record.invoice_date_due)"/>
|
||||
</ram:DueDateDateTime>
|
||||
</ram:SpecifiedTradePaymentTerms>
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
t-esc="format_monetary(record.amount_untaxed, currency)"/>
|
||||
<ram:TaxBasisTotalAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(sum(record.tax_line_ids.mapped('base')), currency)"/>
|
||||
t-esc="format_monetary(sum(record.line_ids.filtered(lambda line: line.tax_line_id).mapped('price_unit')), currency)"/>
|
||||
<ram:TaxTotalAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(record.amount_tax, currency)"/>
|
||||
@@ -229,10 +229,10 @@
|
||||
t-esc="format_monetary(record.amount_total, currency)"/>
|
||||
<ram:TotalPrepaidAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(record.amount_total - record.residual, currency)"/>
|
||||
t-esc="format_monetary(record.amount_total - record.amount_residual, currency)"/>
|
||||
<ram:DuePayableAmount
|
||||
t-att-currencyID="currency.name"
|
||||
t-esc="format_monetary(record.residual, currency)"/>
|
||||
t-esc="format_monetary(record.amount_residual, currency)"/>
|
||||
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
|
||||
</ram:ApplicableHeaderTradeSettlement>
|
||||
</rsm:SupplyChainTradeTransaction>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
from . import account_invoice
|
||||
from . import account_move
|
||||
from . import ir_actions_report
|
||||
|
||||
+47
-45
@@ -3,12 +3,11 @@
|
||||
from odoo import api, models, fields, tools, _
|
||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, float_repr
|
||||
from odoo.tests.common import Form
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.exceptions import UserError, except_orm
|
||||
|
||||
from datetime import datetime
|
||||
from lxml import etree
|
||||
from PyPDF2 import PdfFileReader
|
||||
from collections import namedtuple
|
||||
|
||||
import io
|
||||
import base64
|
||||
@@ -20,9 +19,8 @@ _logger = logging.getLogger(__name__)
|
||||
DEFAULT_FACTURX_DATE_FORMAT = '%Y%m%d'
|
||||
|
||||
|
||||
class AccountInvoice(models.Model):
|
||||
_inherit = 'account.invoice'
|
||||
_name = 'account.invoice'
|
||||
class AccountMove(models.Model):
|
||||
_inherit = 'account.move'
|
||||
|
||||
@api.multi
|
||||
def _export_as_facturx_xml(self):
|
||||
@@ -58,17 +56,42 @@ class AccountInvoice(models.Model):
|
||||
'''
|
||||
amount_total_import = None
|
||||
|
||||
# type must be present in the context to get the right behavior of the _default_journal method (account.invoice).
|
||||
# journal_id must be present in the context to get the right behavior of the _default_account method (account.invoice.line).
|
||||
journal_id = self._default_journal()
|
||||
self_ctx = self.with_context(journal_id=journal_id.id)
|
||||
if self._context.get('default_journal_id'):
|
||||
journal = self.env['account.journal'].browse(self.env.context['default_journal_id'])
|
||||
default_type = 'out_invoice' if journal.type == 'sale' else 'in_invoice'
|
||||
elif self._context.get('default_type'):
|
||||
default_type = self._context['default_type']
|
||||
else:
|
||||
raise UserError(_("No information about the journal or the type of invoice is passed"))
|
||||
|
||||
# Total amount.
|
||||
elements = tree.xpath('//ram:GrandTotalAmount', namespaces=tree.nsmap)
|
||||
total_amount = elements and float(elements[0].text) or 0.0
|
||||
|
||||
# Refund type.
|
||||
# There is two modes to handle refund in Factur-X:
|
||||
# a) type_code == 380 for invoice, type_code == 381 for refund, all positive amounts.
|
||||
# b) type_code == 380, negative amounts in case of refund.
|
||||
# To handle both, we consider the 'a' mode and switch to 'b' if a negative amount is encountered.
|
||||
elements = tree.xpath('//rsm:ExchangedDocument/ram:TypeCode', namespaces=tree.nsmap)
|
||||
type_code = elements[0].text
|
||||
|
||||
if type_code == '381':
|
||||
default_type = 'out_refund' if default_type == 'out_invoice' else 'in_refund'
|
||||
refund_sign = -1
|
||||
else:
|
||||
# Handle 'b' refund mode.
|
||||
if total_amount < 0:
|
||||
default_type = 'out_refund' if default_type == 'out_invoice' else 'in_refund'
|
||||
refund_sign = -1 if 'refund' in default_type else 1
|
||||
|
||||
# Write the type as the journal entry is already created.
|
||||
self.type = default_type
|
||||
|
||||
# self could be a single record (editing) or be empty (new).
|
||||
view = journal_id.type == 'purchase' and 'account.invoice_supplier_form' or 'account.invoice_form'
|
||||
with Form(self_ctx, view=view) as invoice_form:
|
||||
|
||||
with Form(self.with_context(default_type=default_type)) as invoice_form:
|
||||
# Partner (first step to avoid warning 'Warning! You must first select a partner.').
|
||||
partner_type = journal_id.type == 'purchase' and 'SellerTradeParty' or 'BuyerTradeParty'
|
||||
partner_type = invoice_form.journal_id.type == 'purchase' and 'SellerTradeParty' or 'BuyerTradeParty'
|
||||
elements = tree.xpath('//ram:'+partner_type+'/ram:SpecifiedTaxRegistration/ram:ID', namespaces=tree.nsmap)
|
||||
partner = elements and self.env['res.partner'].search([('vat', '=', elements[0].text)], limit=1)
|
||||
if not partner:
|
||||
@@ -84,35 +107,21 @@ class AccountInvoice(models.Model):
|
||||
# Reference.
|
||||
elements = tree.xpath('//rsm:ExchangedDocument/ram:ID', namespaces=tree.nsmap)
|
||||
if elements:
|
||||
invoice_form.reference = elements[0].text
|
||||
invoice_form.ref = elements[0].text
|
||||
|
||||
# Name.
|
||||
elements = tree.xpath('//ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', namespaces=tree.nsmap)
|
||||
if elements:
|
||||
invoice_form.name = elements[0].text
|
||||
invoice_form.invoice_payment_ref = elements[0].text
|
||||
|
||||
# Comment.
|
||||
elements = tree.xpath('//ram:IncludedNote/ram:Content', namespaces=tree.nsmap)
|
||||
if elements:
|
||||
invoice_form.comment = elements[0].text
|
||||
|
||||
# Refund type.
|
||||
# There is two modes to handle refund in Factur-X:
|
||||
# a) type_code == 380 for invoice, type_code == 381 for refund, all positive amounts.
|
||||
# b) type_code == 380, negative amounts in case of refund.
|
||||
# To handle both, we consider the 'a' mode and switch to 'b' if a negative amount is encountered.
|
||||
elements = tree.xpath('//rsm:ExchangedDocument/ram:TypeCode', namespaces=tree.nsmap)
|
||||
type_code = elements[0].text
|
||||
refund_sign = type_code == '380' and 1 or -1
|
||||
invoice_form.narration = elements[0].text
|
||||
|
||||
# Total amount.
|
||||
elements = tree.xpath('//ram:GrandTotalAmount', namespaces=tree.nsmap)
|
||||
if elements:
|
||||
total_amount = float(elements[0].text)
|
||||
|
||||
# Handle 'b' refund mode.
|
||||
if total_amount < 0 and type_code == '380':
|
||||
refund_sign = -1
|
||||
|
||||
# Currency.
|
||||
if elements[0].attrib.get('currencyID'):
|
||||
@@ -129,16 +138,14 @@ class AccountInvoice(models.Model):
|
||||
if elements:
|
||||
date_str = elements[0].text
|
||||
date_obj = datetime.strptime(date_str, DEFAULT_FACTURX_DATE_FORMAT)
|
||||
invoice_form.date_invoice = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
invoice_form.invoice_date = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
# Due date.
|
||||
elements = tree.xpath('//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', namespaces=tree.nsmap)
|
||||
if elements:
|
||||
date_str = elements[0].text
|
||||
date_obj = datetime.strptime(date_str, DEFAULT_FACTURX_DATE_FORMAT)
|
||||
# Set to empty record set to avoid readonly on date_due, can not set to False or None in a Form
|
||||
invoice_form.payment_term_id = self.env['account.payment.term']
|
||||
invoice_form.date_due = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
invoice_form.invoice_date_due = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
# Invoice lines.
|
||||
elements = tree.xpath('//ram:IncludedSupplyChainTradeLineItem', namespaces=tree.nsmap)
|
||||
@@ -188,19 +195,19 @@ class AccountInvoice(models.Model):
|
||||
|
||||
# Taxes
|
||||
line_elements = element.xpath('.//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', namespaces=tree.nsmap)
|
||||
invoice_line_form.invoice_line_tax_ids.clear()
|
||||
invoice_line_form.tax_ids.clear()
|
||||
for tax_element in line_elements:
|
||||
percentage = float(tax_element.text)
|
||||
|
||||
tax = self.env['account.tax'].search([
|
||||
('company_id', '=', invoice_form.company_id.id),
|
||||
('amount_type', '=', 'percent'),
|
||||
('type_tax_use', '=', journal_id.type),
|
||||
('type_tax_use', '=', invoice_form.journal_id.type),
|
||||
('amount', '=', percentage),
|
||||
], limit=1)
|
||||
|
||||
if tax:
|
||||
invoice_line_form.invoice_line_tax_ids.add(tax)
|
||||
invoice_line_form.tax_ids.add(tax)
|
||||
elif amount_total_import:
|
||||
# No lines in BASICWL.
|
||||
with invoice_form.invoice_line_ids.new() as invoice_line_form:
|
||||
@@ -208,12 +215,6 @@ class AccountInvoice(models.Model):
|
||||
invoice_line_form.quantity = 1
|
||||
invoice_line_form.price_unit = amount_total_import
|
||||
|
||||
# Refund.
|
||||
if self_ctx.env.context['journal_type'] == 'purchase':
|
||||
invoice_form.type = 'in_refund' if refund_sign == -1 else 'in_invoice'
|
||||
else:
|
||||
invoice_form.type = 'out_refund' if refund_sign == -1 else 'out_invoice'
|
||||
|
||||
return invoice_form.save()
|
||||
|
||||
@api.multi
|
||||
@@ -221,7 +222,7 @@ class AccountInvoice(models.Model):
|
||||
def message_post(self, **kwargs):
|
||||
# OVERRIDE
|
||||
# /!\ 'default_res_id' in self._context is used to don't process attachment when using a form view.
|
||||
res = super(AccountInvoice, self).message_post(**kwargs)
|
||||
res = super(AccountMove, self).message_post(**kwargs)
|
||||
|
||||
if 'no_new_invoice' not in self.env.context and len(self) == 1 and self.state == 'draft':
|
||||
# Get attachments.
|
||||
@@ -280,7 +281,8 @@ class AccountInvoice(models.Model):
|
||||
|
||||
self._import_facturx_invoice(tree)
|
||||
buffer.close()
|
||||
|
||||
except except_orm as e:
|
||||
raise e
|
||||
except Exception as e:
|
||||
# Malformed pdf
|
||||
_logger.exception(e)
|
||||
@@ -13,9 +13,9 @@ class IrActionsReport(models.Model):
|
||||
@api.multi
|
||||
def _post_pdf(self, save_in_attachment, pdf_content=None, res_ids=None):
|
||||
# OVERRIDE
|
||||
if self.model == 'account.invoice' and res_ids and len(res_ids) == 1:
|
||||
invoice = self.env['account.invoice'].browse(res_ids)
|
||||
if invoice.type in ('out_invoice', 'out_refund') and invoice.state != 'draft':
|
||||
if self.model == 'account.move' and res_ids and len(res_ids) == 1:
|
||||
invoice = self.env['account.move'].browse(res_ids)
|
||||
if invoice.is_sale_document() and invoice.state != 'draft':
|
||||
xml_content = invoice._export_as_facturx_xml()
|
||||
|
||||
# Add attachment.
|
||||
|
||||
@@ -19,7 +19,7 @@ class PaymentPortal(http.Controller):
|
||||
|
||||
:return html: form containing all values related to the acquirer to
|
||||
redirect customers to the acquirer website """
|
||||
invoice_sudo = request.env['account.invoice'].sudo().browse(invoice_id)
|
||||
invoice_sudo = request.env['account.move'].sudo().browse(invoice_id)
|
||||
if not invoice_sudo:
|
||||
return False
|
||||
|
||||
@@ -63,7 +63,7 @@ class PaymentPortal(http.Controller):
|
||||
if access_token:
|
||||
params['access_token'] = access_token
|
||||
|
||||
invoice_sudo = request.env['account.invoice'].sudo().browse(invoice_id).exists()
|
||||
invoice_sudo = request.env['account.move'].sudo().browse(invoice_id).exists()
|
||||
if not invoice_sudo:
|
||||
params['error'] = 'pay_invoice_invalid_doc'
|
||||
return request.redirect(_build_url_w_params(error_url, params))
|
||||
|
||||
@@ -36,7 +36,7 @@ class AccountTaxPython(models.Model):
|
||||
return super(AccountTaxPython, self)._compute_amount(base_amount, price_unit, quantity, product, partner)
|
||||
|
||||
@api.multi
|
||||
def compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False):
|
||||
def compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True):
|
||||
taxes = self.filtered(lambda r: r.amount_type != 'code')
|
||||
company = self.env.company
|
||||
for tax in self.filtered(lambda r: r.amount_type == 'code'):
|
||||
@@ -45,7 +45,7 @@ class AccountTaxPython(models.Model):
|
||||
safe_eval(tax.python_applicable, localdict, mode="exec", nocopy=True)
|
||||
if localdict.get('result', False):
|
||||
taxes += tax
|
||||
return super(AccountTaxPython, taxes).compute_all(price_unit, currency, quantity, product, partner, is_refund=is_refund)
|
||||
return super(AccountTaxPython, taxes).compute_all(price_unit, currency, quantity, product, partner, is_refund=is_refund, handle_price_include=handle_price_include)
|
||||
|
||||
|
||||
class AccountTaxTemplatePython(models.Model):
|
||||
|
||||
@@ -19,7 +19,7 @@ class ReportAssertAccount(models.AbstractModel):
|
||||
"""
|
||||
returns the list of invoices that are set as reconciled = True
|
||||
"""
|
||||
return self.env['account.invoice'].search([('reconciled', '=', True)]).ids
|
||||
return self.env['account.move'].search([('reconciled', '=', True)]).ids
|
||||
|
||||
def order_columns(item, cols=None):
|
||||
"""
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
Odoo Invoicing
|
||||
--------------
|
||||
|
||||
Send professional invoices & get paid online with the Odoo
|
||||
<a href="https://www.odoo.com/page/billing">billing software</a>.
|
||||
|
||||
Create and send professional looking invoices & get paid online. It
|
||||
automatically integrates with other apps to bill automatically based on your
|
||||
activities.
|
||||
|
||||
Send Invoices With No Effort
|
||||
----------------------------
|
||||
|
||||
Send invoices directly to your clients in just a click. The invoice is
|
||||
automatically attached to the email as a PDF file.
|
||||
|
||||
Get Paid Faster with Electronic invoicing
|
||||
-----------------------------------------
|
||||
|
||||
Get paid online with paypal or other payment processing service. Get rid of the
|
||||
stress of having to constantly remind your debtors. Simply set-up and automate
|
||||
follow-ups to get paid quickly.
|
||||
|
||||
Connect Your Bank Accounts
|
||||
--------------------------
|
||||
|
||||
Import your bank statements and reconcile them in just a few clicks. Prepare
|
||||
payment orders based on your supplier invoices and payment terms.
|
||||
|
||||
Analyse Your Sales & Costs
|
||||
--------------------------
|
||||
|
||||
Get direct access to key information with dynamic and customizable dashboards.
|
||||
Analyse your invoicing by product, customer, salesperson, etc.
|
||||
|
||||
Integration With Other Apps
|
||||
---------------------------
|
||||
|
||||
Bill automatically based on sales orders, delivery orders, contracts or on time
|
||||
and material. Define recurrencies to produce recurring invoice automatically.
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
@@ -1,23 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name' : 'Sales & Purchases Receipts',
|
||||
'version' : '1.0',
|
||||
'summary': 'Manage your debts and credits thanks to simple sale/purchase receipts',
|
||||
'description': """
|
||||
This module allows you recording sales and purchases receipts. Receipts are useful when the payment is done directly. Thanks to the receipts, no need to encode an invoice and a payment, the receipt is enough.
|
||||
""",
|
||||
'category': 'Accounting',
|
||||
'sequence': 20,
|
||||
'depends' : ['account'],
|
||||
'demo' : [],
|
||||
'data' : [
|
||||
'security/ir.model.access.csv',
|
||||
'views/account_voucher_views.xml',
|
||||
'security/account_voucher_security.xml',
|
||||
'data/account_voucher_data.xml',
|
||||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- Voucher-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_voucher_state_change" model="mail.message.subtype">
|
||||
<field name="name">Status Change</field>
|
||||
<field name="res_model">account.voucher</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Status changed</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,676 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-09-21 13:17+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid " * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
|
||||
@@ -1,556 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux <mat@odoo.com>, 2017
|
||||
# Andre de Kock <adekock11@gmail.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.saas~18\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-09-20 09:52+0000\n"
|
||||
"PO-Revision-Date: 2017-09-20 09:52+0000\n"
|
||||
"Last-Translator: Andre de Kock <adekock11@gmail.com>, 2017\n"
|
||||
"Language-Team: Afrikaans (https://www.transifex.com/odoo/teams/41243/af/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: af\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Bedrag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Kanselleer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Gekanselleer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:159
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Click to create a sale receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Click to register a purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company"
|
||||
msgstr "Maatskappy"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Geskep deur"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_date
|
||||
msgid "Created on"
|
||||
msgstr "Geskep op"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Geldeenheid"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Klient"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_name
|
||||
msgid "Description"
|
||||
msgstr "Beskrywing"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Vertoningsnaam"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Groepeer deur"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher___last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line___last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Laas Gewysig op"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Laas Opgedateer deur"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Laas Opgedateer op"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Vennoot"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_name
|
||||
msgid "Payment Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:195
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:198
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_product_id
|
||||
msgid "Product"
|
||||
msgstr "Produk"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
msgid "Purchase Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Hoeveelheid"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Sales Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Volgorde"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Stand"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_amount
|
||||
msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Soort"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Bevestig"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:97
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:377
|
||||
#, python-format
|
||||
msgid "You must first select a partner!"
|
||||
msgstr ""
|
||||
@@ -1,555 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux <mat@odoo.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.saas~18\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-09-20 09:52+0000\n"
|
||||
"PO-Revision-Date: 2017-09-20 09:52+0000\n"
|
||||
"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
|
||||
"Language-Team: Amharic (https://www.transifex.com/odoo/teams/41243/am/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: am\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "መሰረዝ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "ተሰርዟል"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:159
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Click to create a sale receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Click to register a purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company"
|
||||
msgstr "ድርጅት"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_currency_id
|
||||
msgid "Currency"
|
||||
msgstr "ገንዘብ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "ተባባሪ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_name
|
||||
msgid "Description"
|
||||
msgstr "ማብራርያ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "በመደብ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher___last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line___last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "ተባባሪ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_name
|
||||
msgid "Payment Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:195
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:198
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_product_id
|
||||
msgid "Product"
|
||||
msgstr "እቃ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
msgid "Purchase Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_quantity
|
||||
msgid "Quantity"
|
||||
msgstr "ብዛት"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Sales Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Sequence"
|
||||
msgstr "ቅደም ተከተል"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "ሁኔታው"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_amount
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_voucher_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "የአንዱ ዋጋ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:97
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:377
|
||||
#, python-format
|
||||
msgid "You must first select a partner!"
|
||||
msgstr ""
|
||||
@@ -1,708 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Mustafa Rawi <mustafa@cubexco.com>, 2018
|
||||
# Mustafa J. Kadhem <safi2266@gmail.com>, 2018
|
||||
# Sadig Adam <sadig41@gmail.com>, 2018
|
||||
# amrnegm <amrnegm.01@gmail.com>, 2018
|
||||
# Martin Trigaux, 2018
|
||||
# hoxhe Aits <hoxhe0@gmail.com>, 2018
|
||||
# hamza tayseer atieh <hamza.atieh@minervadata.com>, 2018
|
||||
# Osoul <baruni@osoul.ly>, 2018
|
||||
# Mohammed Albasha <m.albasha.ma@gmail.com>, 2018
|
||||
# Mohammed Ibrahim <m.ibrahim@mussder.com>, 2018
|
||||
# Ghaith Gammar <g.gammar@saharaifs.net>, 2018
|
||||
# Osama Ahmaro <osamaahmaro@gmail.com>, 2018
|
||||
# amal ahmed <amalalhashemy88@hotmail.com>, 2018
|
||||
# Abd El-Rahman Ali <abdelrahman.ali.242@gmail.com>, 2018
|
||||
# Shaima Safar <shaima.safar@open-inside.com>, 2018
|
||||
# Ahmed Yousif <ahmed.yousif@outlook.com>, 2018
|
||||
# Husam Migdadi <samwatson18@gmail.com>, 2018
|
||||
# Mostafa Hanafy <mostafa.s.hanafy@gmail.com>, 2018
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-08-24 09:15+0000\n"
|
||||
"Last-Translator: Mostafa Hanafy <mostafa.s.hanafy@gmail.com>, 2018\n"
|
||||
"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: ar\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
"* تستخدم الحالة `مسودة` عندما يشفر المستخدم قسيمة جديدة.\n"
|
||||
"* تستخدم الحالة Pro-forma عندما لاتحوي القسيمة رقما\n"
|
||||
"* تستخدم الحالة `مرسل` عند انشاء المستخدم لقسيمة، ويولد رقم للقسيمة ويتم انشاء مدخلات القسيمة في حساب\n"
|
||||
"* تستخدم الحالة `ملغاة عندما يلغي المستخدم القسيمة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "الحساب"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "تاريخ القيد"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "تاريخ المحاسبة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "السند المحاسبي"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "الإجراء المطلوب"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "القيمة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "الحساب التحليلي"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "الوسوم التحليلية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "هل ترغب حقاً في إلغاء هذا الإيصال؟"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "عدد المرفقات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "تاريخ الفاتورة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "بيانات الوثيقة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "مرجع الفاتورة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "إلغاء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "إلغاء الإيصال"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "ملغي"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "لا يمكن حذف قسيمة (s) التي تم فتحها بالفعل أو المدفوعة."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "المؤسسة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "الشركات المرتبطة بهذه اليومية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "أنشئ بواسطة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "أنشئ في"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "العملة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "العميل"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "التاريخ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "الوصف"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "اسم العرض"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "مسودة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "القسائم الإفتراضية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "تاريخ الاستحقاق"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "تاريخ فعال للمدخلات المحاسبية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "المتابعون"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "المتابعون (القنوات)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "المتابعون (الشركاء)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr "يعطي تسلسل لهذا السطر عندما يتم عرض الايصال"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "تجميع حسب"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "المعرف"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "إذا حددته، سيتم إخطارك بالرسائل الجديدة."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "إذا حددته، سيتم إخطارك بالرسائل الجديدة."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "إذا تم تحديده ، فإن بعض الرسائل بها خطأ في التسليم."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr "في حالة وجود مشكلة بالتقريب للضريبة استخدم هذا الحقل لتصحيحه"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "ملاحظات داخلية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "متابع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "دفتر اليومية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "قيد يومية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "عناصر اليومية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "آخر تعديل في"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "آخر تحديث بواسطة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "آخر تحديث في"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "المرفق الرئيسي"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "خطأ في تسليم الرسائل"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "الرسائل"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "ملاحظات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "الرقم"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "عدد الإجراءات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr "عدد الاخطاء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "عدد الرسائل التي تتطلب اجراء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "عدد الرسائل مع خطأ في التسليم"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "عدد الرسائل الجديدة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr "السعر لا يشمل الضريبة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "مدفوع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "الشريك"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "الدفع مباشرة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr "الدفع لاحقاً"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "دفع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "طرق السداد"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "الرجاء تفعيل التسلسل لليومية المختارة!"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "من فضلك حدد تسلسل في دفتر اليومية."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "تم"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "نشر القسيمة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "أولى"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "المنتج"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "الشراء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "ايصال الشراء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "قسائم الشراء"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "الكمية"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "الإيصالات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "المبيعات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "بيانات المبيعات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "استلام المبيعات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "بحث الإيصالات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "التسلسل"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "تعيين كمسودة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "الحالة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "تغيير الحالة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "الحالة تغيرت"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "الضريبة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "قيمة الضريبة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr "تصحيح الضريبة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "لقد تم دفع القسيمة بالكامل"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "حساب الايراد أو حساب المصروف مرتبط بالمنتج المُختار."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr "مرجع الشريك لهذا المستند"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "للمراجعة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "الإجمالي"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "إجمالي المبلغ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "النوع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "سعر الوحدة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "الرسائل الجديدة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "عدد الرسائل الجديدة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "اعتماد"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "المورّد"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr "ايصال المجهز"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "قيد"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "قيود الإيصال"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "خطوط القسيمة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "احصائيات القسيمة"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "قيود الإيصالات"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "رسائل الموقع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "سجل تواصل الموقع"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
"عند تاكييد وصل الشراء يمكنك تسجيل\n"
|
||||
"دفعة المجهز المتعلقة بوصل الشراء هذا."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
"عند تأكييد وصل البيع يمكنك تسجيل دفعة العميل \n"
|
||||
"المتعلقة بوصل البيع هذا."
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,679 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-08-24 09:15+0000\n"
|
||||
"Language-Team: Azerbaijani (https://www.transifex.com/odoo/teams/41243/az/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: az\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,555 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux <mat@odoo.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.saas~18\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-09-20 09:52+0000\n"
|
||||
"PO-Revision-Date: 2017-09-20 09:52+0000\n"
|
||||
"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
|
||||
"Language-Team: Bulgarian (https://www.transifex.com/odoo/teams/41243/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: bg\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Аналитична сметка"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Откажи"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Отказанa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:159
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Click to create a sale receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Click to register a purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company"
|
||||
msgstr "Фирма"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Създадено от"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_date
|
||||
msgid "Created on"
|
||||
msgstr "Създадено на"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Валута"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Клиент"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_name
|
||||
msgid "Description"
|
||||
msgstr "Описание"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Име за показване"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Групиране по"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher___last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line___last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Последно променено на"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Последно обновено от"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Последно обновено на"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Партньор"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_name
|
||||
msgid "Payment Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:195
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:198
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_product_id
|
||||
msgid "Product"
|
||||
msgstr "Продукт"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
msgid "Purchase Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Количество"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Sales Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Последователност"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Състояние"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_amount
|
||||
msgid "Total"
|
||||
msgstr "Общо"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_voucher_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Единична цена"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:97
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:377
|
||||
#, python-format
|
||||
msgid "You must first select a partner!"
|
||||
msgstr ""
|
||||
@@ -1,684 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux, 2018
|
||||
# Boško Stojaković <bluesoft83@gmail.com>, 2018
|
||||
# Bole <bole@dajmi5.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-09-21 13:17+0000\n"
|
||||
"Last-Translator: Bole <bole@dajmi5.com>, 2018\n"
|
||||
"Language-Team: Bosnian (https://www.transifex.com/odoo/teams/41243/bs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: bs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Datum knjiženja"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Račun knjigovodstva"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Potrebna akcija"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Iznos"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Analitički konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Analitičke oznake"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Jeste li sigurni da želite otkazati ovu potvrdu?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Broj zakački"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Datum računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Informacije računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "Referenca računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Otkaži račun"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Otkazan"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "Otvorene ili plaćene račune nije moguće izbrisati."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Kompanija"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Kompanija za koju se vodi ovaj dnevnik"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Kreirao"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Kreirano"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Kupac"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Opis"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Prikazani naziv"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "U pripremi"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Računi u pripremi"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Datum dospijeća"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "Efektivni datum za računovodstvene zapise"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Pratioci"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Pratioci (Kanali)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Pratioci (Partneri)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Grupiši po"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Ako je označeno nove poruke će zahtjevati vašu pažnju."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Ako je zakačeno, nove poruke će zahtjevati vašu pažnju"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Interne zabilješke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Je pratilac"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Dnevnik knjiženja"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Dnevnički zapis"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Stavke dnevnika"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Zadnje mijenjano"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Zadnji ažurirao"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Zadnje ažurirano"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Glavna zakačka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Poruke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Zabilješke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Broj"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Broj akcija"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Broj poruka koje zahtjevaju neku akciju"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Broj nepročitanih poruka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr "Samo za porez koji nije u cijeni"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Plaćeno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Plati direktno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Plaćanje"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Metoda plaćanja"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Molimo aktivirajte sekvencu odabrnog dnevnika!"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Molimo definišite sekvencu na dnevniku."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Proknjižen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "Knjiženi računi"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Pro-forma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Proizvod"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Nabava"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Računi nabavke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "Račun nabavke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Količina"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Prijemi"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Prodaja"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Informacije o prodaji"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Račun prodaje"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "Pretraži račune"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Sekvenca"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Postavi u pripremu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Promjena statusa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Promijenjen status"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Porez"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Iznos poreza"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "Račun je plaćen u potpunosti."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "Račun prihoda ili troškova vezan za odabrani proizvod."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Za provjeru"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "Ukupno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Ukupan iznos"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Tip"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Jedinična cijena"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Nepročitane poruke"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Brojač nepročitanih poruka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Odobri"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Dobavljač"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "Račun"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "Stavke računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "Stavke računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "Statistika računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "Zapisi računa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Poruke sa website-a"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,699 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Manel Fernandez <manelfera@outlook.com>, 2019
|
||||
# Martin Trigaux, 2019
|
||||
# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2019
|
||||
# RGB Consulting <odoo@rgbconsulting.com>, 2019
|
||||
# Quim - eccit <quim@eccit.com>, 2019
|
||||
# Sandra Franch <sandra.franch@upc.edu>, 2019
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2016-08-05 12:55+0000\n"
|
||||
"Last-Translator: Sandra Franch <sandra.franch@upc.edu>, 2019\n"
|
||||
"Language-Team: Catalan (https://www.transifex.com/odoo/teams/41243/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: ca\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
"* L'estat 'Esborrany' s'utilitza quan un usuari està introduint un nou i no confirmat comprovant.\n"
|
||||
"* 'Proforma' s'estableix quan el comprovant està en estat proforma. El comprovant encara no té un número de comprovant.\n"
|
||||
"* L'estat 'Assegut' s'utilitza quan l'usuari confirma el comprovant, assignant un número de comprovant i creant-li els assentaments comptables.\n"
|
||||
"* L'estat 'Cancel·lat' s'utilitza quan l'usuari cancel·la el comprovant."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Compte"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "Data del compte"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Data comptable"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Comprovants comptables"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Cal fer alguna acció"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Import"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Compte analític"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Etiquetes analítiques"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Està segur que desitja cancel·lar aquest rebut?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Nombre d'adjunts"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Data de factura"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Informació de la factura"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "Referència de factura"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Cancel·lar rebut"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancel·lat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "No es pot esborrar comprovants que ja estan oberts o pagats."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Companyia"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Empresa relacionada amb aquest diari"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creat per"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creat el"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Client"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Descripció"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Mostrar Nom"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "Esborrany"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Comprovant esborrany"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Data de venciment"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "Data efectiva per entrades comptables."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguidors"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Seguidors (Canals)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguidors (Clients)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr "Dona la seqüència d'aquesta línia quan es visualitza al comprovant."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Agrupar per"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Si està marcat, els nous missatges requereixen la vostra atenció"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Si està marcat, els nous missatges requereixen la vostra atenció"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Si està marcat, alguns missatges tenen un error d'entrega."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
"En cas de tenir un problema d'arrodoniment a l'impost, utilitzi aquest camp "
|
||||
"per corregir-lo."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Notes internes"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "És seguidor"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Diari"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Assentament comptable"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Apunts comptables"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última modificació el "
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última actualització per"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última actualització el"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Adjunt principal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Error d'entrega del missatge"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Missatges"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Número"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Nombre d'accions"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr "Nombre d'errors"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Nombre de missatges que requereixen una acció"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Nombre de missatges amb error d'entrega"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Nombre de missatges no llegits"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr "Només per impostos exclosos del preu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Pagat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Empresa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Paga directament"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr "Paga més tard"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Pagament"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Mètode de pagament"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Activi, si us plau, la seqüència del diari seleccionat!"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Defineixi si us plau una seqüència al diari."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Fixat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "Comprovant assentats"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Pro-forma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Producte"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Compra"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Rebut de compra"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "Comprovant de compra"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Quantitat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Recepcions"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Venda"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Informació de vendes"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Rebut de vendes"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "Cerca comprovants"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Seqüència"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Canvia a esborrany"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Estat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Canvi d'estat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Estat canviat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Impost"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Import de l'impost"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr "Correcció de l'impost"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "El comprovant ha estat totalment pagat"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
"El compte d'ingressos o despeses relacionada amb el producte seleccionat."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr "La referència externa d'aquest document."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Per revisa"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Import total"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Tipus"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Preu un."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Missatges pendents de llegir"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Comptador de missatges no llegits"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Validar"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Proveïdor "
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr "Comprovant del venedor"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "Comprovant"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "Comprovants"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "Línies de comprovant"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "Estadístiques de comprovants"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "Comprovants"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Missatges de la pàgina web"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Historial de comunicacions del lloc web"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
"Quan un rebut de compra està confirmat, vostè pot registrar el pagament al "
|
||||
"proveïdor relacionat amb aquest rebut de compra"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
"Quan el rebut de venda és confirmat, vostè pot registrar el pagament del "
|
||||
"client relacionat amb aquest rebut de venda."
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,694 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux, 2018
|
||||
# Jaroslav Helemik Nemec <nemec@helemik.cz>, 2018
|
||||
# Jakub Lohnisky <jakub@lepremier.cz>, 2018
|
||||
# Ladislav Tomm <tomm@helemik.cz>, 2018
|
||||
# Jan Horzinka <jan.horzinka@centrum.cz>, 2018
|
||||
# Michal Veselý <michal@veselyberanek.net>, 2018
|
||||
# milda dvorak <milda.dvorak@optimal4.cz>, 2018
|
||||
# trendspotter <j.podhorecky@volny.cz>, 2018
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-08-24 09:15+0000\n"
|
||||
"Last-Translator: trendspotter <j.podhorecky@volny.cz>, 2018\n"
|
||||
"Language-Team: Czech (https://www.transifex.com/odoo/teams/41243/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
" * Stav 'Koncept' se používá, když uživatel zadá nový a nepotvrzený poukaz\n"
|
||||
" * 'Proforma' je použita, pokud poukaz nemá vygenerováno číslo poukázky.\n"
|
||||
" * Stav 'Odeslané' se používá, když uživatel vytvoří poukaz, vygeneruje se číslo poukázky a na účtu jsou vytvořeny položky poukazu.\n"
|
||||
" * Stav 'Zrušeno' se používá, když uživatel zruší poukaz."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Účet"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "Datum účtu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Datum účtování"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Vyžaduje akci"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Částka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Analytický účet"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Analytické značky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Opravdu chcete zrušit tuto účtenku?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Počet příloh"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Datum dokladu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Údaje dokladu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Zrušit účtenku"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Zrušeno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "Nelze smazat poukázku(y), které již byly otevřeny nebo zaplaceny."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Firma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Společnost vztažená k této knize"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Vytvořil(a)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Vytvořeno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Měna"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Zákazník"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Popis"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Zobrazovaný název"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "Návrh"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Koncepty účtenek"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Termín splnění"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Sledující"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Seskupit podle"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Pokud je zaškrtnuto, nové zprávy vyžadují vaši pozornost."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Pokud je zaškrtnuto, nové zprávy vyžadují vaši pozornost."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Pokud je zaškrtnuto, některé zprávy mají chybu při doručení."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Interní poznámky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Deník"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Položka deníku"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Položky deníku"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Naposled změněno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Naposledy upraveno od"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Naposled upraveno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Hlavní příloha"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Chyba při doručování zpráv"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Zprávy"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr "Chybějící společnost"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Poznámky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Číslo"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Počet akcí"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr "Počet chyb"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Počet zpráv, které vyžadují akci"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Počet zpráv s chybou při doručení"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Počet nepřečtených zpráv"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Uhrazeno"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Kontakt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Uhrazeno přímo"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Platba"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Způsob platby"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Prosím aktivujte posloupnost zvoleného deníku!"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Prosím určete posloupnost deníku."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Vloženo"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Proforma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Výrobek"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Nákup"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Nákupní účtenka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Množství"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Účtenky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Prodej"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Údaje prodeje"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Účtenka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Číselná řada"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Uložit jako koncept"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Stav"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Změna stavu"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Stav změněn"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Daň"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Výše daně"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "Příjmový a výdajový účet vztažený k vybranému výrobku."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Ke kontrole"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "Celkem"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Celková částka"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Jednotková cena"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Nepřečtené zprávy"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Počítadlo nepřečtených zpráv"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Schválit"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Dodavatel"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Zprávy Webové stránky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Historie komunikace Webové stránky"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr "Nejprve musíte vybrat partnera."
|
||||
@@ -1,699 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# peso <peer.sommerlund@gmail.com>, 2018
|
||||
# Martin Trigaux, 2018
|
||||
# Hans Henrik Gabelgaard <hhg@gabelgaard.org>, 2018
|
||||
# Morten Schou <ms@msteknik.dk>, 2018
|
||||
# Jesper Carstensen <jc@danodoo.dk>, 2018
|
||||
# Jesper Carstensen <info@danodoo.dk>, 2018
|
||||
# Ronni Poulsen <rp@flexonet.dk>, 2018
|
||||
# Pernille Kristensen <pernillekristensen1994@gmail.com>, 2018
|
||||
# Sanne Kristensen <sanne@vkdata.dk>, 2018
|
||||
# Ejner Sønniksen <ejner@vkdata.dk>, 2018
|
||||
# lhmflexerp <lhm@flexerp.dk>, 2018
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-08-24 09:15+0000\n"
|
||||
"Last-Translator: lhmflexerp <lhm@flexerp.dk>, 2018\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/odoo/teams/41243/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: da\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "Konto dato"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Bogføringsdato"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Bogføringsbilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Handling påkrævet"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Beløb"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Analyse konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Analytiske tags"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Er du sikker på du vil annullere dette bilag?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Antal vedhæftninger"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Bilagsdato"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Bilagsinformation"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "Bilagsreference"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Annuller"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Annuller bilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Annulleret"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "Kan ikke slette bilag der er åbne eller betalt."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Virksomhed"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Virksomhed knyttet til denne konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Oprettet af"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Oprettet den"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Kunde"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Beskrivelse"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Vis navn"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "Udkast"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Kladdebilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Forfaldsdato"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "Bogføringsdato for regnskabs transaktioner"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Følgere"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Følgere (kanaler)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Følgere (partnere)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Sortér efter"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Hvis afmærket, kræver nye beskeder din opmærksomhed"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Hvis afmærket, kræver nye beskeder din opmærksomhed "
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Hvis afkrydset har nogle beskeder en leveringsfejl"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
"Hvis der er et afrundingsproblem med momsen, brug dette felt for at rette "
|
||||
"det"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Interne noter"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Er følger"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Postering"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Journalposter"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Sidst ændret den"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Sidst opdateret af"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Sidst opdateret den"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Primær vedhæftning"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Besked leveringsfejl"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Beskeder"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Noter"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Nummer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Antal handlinger"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr "Antal fejl"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Antal meddelser der kræver handling"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Antal beskeder med leveringsfejl"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Antal ulæste beskeder"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Betalt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Kontakt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Betal direkte"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr "Betal senere"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Betaling"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Betalingsmetode"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Vælg en bilagsserie på journalen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Bogført"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "Bogførte bilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Proforma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Produkt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Indkøb"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Indkøbskvittering"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "Købsbilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Antal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Varemodtagelse"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Salg"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Salgsinformation"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Salgs kvittering"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "Søg bilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Sekvens"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Sæt til kladde"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Status ændring"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Status ændret"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Moms"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Momsbeløb"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr "Momskorrektion"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "Bilaget er betalt fuldt ud."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "Indtægts- eller udgiftskontoen relateret til det valgte produkt."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr "Partner referencen for dette dokument."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Til gennemgang"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "I alt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Beløb i alt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Enhedspris"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Ulæste beskeder"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Ulæste besked tæller"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Validér"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Leverandør"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr "Leverandørbilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "Bilag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "Bilagsposteringer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "Bilagslinjer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "Bilagsstatistik"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "Bilagsposteringer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Website beskeder"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Website kommunikations historik"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
"Når indkøbet er bekræftet, kan du indtaste\n"
|
||||
" leverandørbetalingen relateret til dette indkøb."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
"Når salget er bekræftet, kan du indtaste\n"
|
||||
" kundebetalingen relateret til dette salg."
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,695 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux, 2018
|
||||
# Johannes Croe <jcr@odoo.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-09-21 13:17+0000\n"
|
||||
"Last-Translator: Johannes Croe <jcr@odoo.com>, 2018\n"
|
||||
"Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
" * Ein Zahlungsbeleg befindet sich nach der Erstellung zunächst im \"Entwurf\".\n"
|
||||
"* Durch Änderung auf den Status \"Pro-Forma\", wird der Status geändert, aber keine Belegnummer vergeben.\n"
|
||||
"* Der Status \"Gebucht\" wird angewendet, wenn ein Benutzer einen Zahlungsbeleg mitsamt Belegnummer vollständig gebucht hat.\n"
|
||||
"* Der Zustand \"Abgebrochen\" kennzeichnet den Abbruch eines Zahlungsbelegs."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "Buchungsdatum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Buchungsdatum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Buchung Zahlungsbelege"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Aktion notwendig"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Betrag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Analysekonto"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Kostenstellen Tags"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Sind Sie sicher, dass Sie diesen Beleg löschen wollen ?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "# Anhänge"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Rechnungsdatum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Rechnungsinformationen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "Belegreferenz"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Zahlungseinzug abbrechen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Abgebrochen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr "Offene oder bezahlte Belege können nicht storniert werden"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Unternehmen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Unternehmen für dieses Journal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Erstellt von"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Erstellt am"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Währung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Kunde"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Anzeigename"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "Entwurf"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Belegentwurf"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Fälligkeit"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "Tatsächliches Buchungsdatum"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Abonnenten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Abonnenten (Kanäle)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Abonnenten (Partner)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr "Liefert die Reihenfolge dieser Position bei Anzeige des Belegs."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Gruppieren nach"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Falls markiert, benötigen neue Nachrichten Ihre Kenntnisnahme."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Falls markiert, benötigen neue Nachrichten Ihre Kenntnisnahme."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
"Das Senden mancher Nachrichten ist fehlgeschlagen wenn dieses Fenster "
|
||||
"angekreuzt ist."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
"Nutzen Sie dieses Feld zur Korrektur von Rundungsdifferenzen bei der "
|
||||
"Steuerermittelung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Interne Notizen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Ist ein Abonnent"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Buchungssatz"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Buchungszeilen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Zuletzt geändert am"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Zuletzt aktualisiert durch"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Zuletzt aktualisiert am"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Hauptanhänge"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Error beim senden der Nachricht"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Nachrichten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Notizen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Nummer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Anzahl der Aktionen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr "Fehlernummer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Anzahl der Nachrichten, die eine Aktion erfordern"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Anzahl der Nachrichten mit einem Fehler beim Senden."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Anzahl ungelesener Nachrichten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr "Nur für Steuern ohne Preis"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Bezahlt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Einzahlung sofort buchen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr "Später zahlen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Zahlung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Zahlungsmethode"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Bitte aktivieren Sie die Nummernfolge für das gewählte Journal !"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Definieren Sie eine Nummernfolge für das Journal."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Gebucht"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "Verbuchte Belege"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Proforma"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Produkt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Einkauf"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Einkauf Bestätigung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "Einkaufsbelege"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Menge"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Anlieferungen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Verkauf"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Information Umsatz"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Buchen von Einnahmen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "Zahlungsbelege suchen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Reihenfolge"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Auf Entwurf setzen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Statusänderung"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Status geändert"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Steuer"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Steuerbetrag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr "Steuerkorrektur"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "Der Beleg wurde vollständig bezahlt"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "Aufwand- und Erlöskonto des gewählten Produktes"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr "Referenz des Partners zu diesem Dokument."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Zu Prüfen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Gesamtbetrag"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Preis pro ME"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Ungelesene Nachrichten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Zähler der ungelesenen Nachrichten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Bestätigen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Lieferant"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr "Lieferantenbelege"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "Zahlungsbeleg"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "Zahlungsbeleg Buchungen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "Zahlungspositionen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "Statistik Zahlungsbelege"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "Zahlungsbuchungen"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Website-Nachrichten"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Website-Kommunikationshistorie"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
"Wenn der Einkaufsbeleg bestätigt wird, können Sie den Zahlungsausgang zu "
|
||||
"diesem Beleg erfassen."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
"Wenn der Verkaufsbeleg bestätigt wird, können Sie den Zahlungseingang zu "
|
||||
"diesem Beleg erfassen."
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,691 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux, 2018
|
||||
# Kostas Goutoudis <goutoudis@gmail.com>, 2018
|
||||
# Stefanos Nikou <stefanos.nikou@gmail.com>, 2018
|
||||
# George Tarasidis <george_tarasidis@yahoo.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~11.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-09-21 13:17+0000\n"
|
||||
"PO-Revision-Date: 2018-09-21 13:17+0000\n"
|
||||
"Last-Translator: George Tarasidis <george_tarasidis@yahoo.com>, 2018\n"
|
||||
"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: el\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "Account"
|
||||
msgstr "Λογαριασμός"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr "Λογαριασμού Ημερομηνία "
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__account_date
|
||||
msgid "Accounting Date"
|
||||
msgstr "Ημερ. Λογιστικής"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Παραστατικό Λογιστικής"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
msgid "Accounting Voucher Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Απαιτείται ενέργεια"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Ποσό"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Αναλυτικός Λογαριασμός"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__analytic_tag_ids
|
||||
msgid "Analytic Tags"
|
||||
msgstr "Ετικέτες Αναλυτικής"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr "Σίγουρα θέλετε να καταργήσετε αυτή την απόδειξη;"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Bill Date"
|
||||
msgstr "Ημερ. Χρέωσης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr "Πληροφορίες Λογαριασμού"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__reference
|
||||
msgid "Bill Reference"
|
||||
msgstr "Αναφορά Χρέωσης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Ακύρωση"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr "Ακύρωση Απόδειξης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Ακυρώθηκε"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:172
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
"Δεν είναι δυνατή η διαγραφή των παραστατικών που είναι ήδη ανοιχτά ή "
|
||||
"εξοφλημένα."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company"
|
||||
msgstr "Εταιρία"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr "Η εταιρία που σχετίζεται με το ημερολόγιο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Create a new sale receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Δημιουργήθηκε από"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Δημιουργήθηκε στις"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Νόμισμα"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr "Πελάτης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Date"
|
||||
msgstr "Ημερομηνία"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__name
|
||||
msgid "Description"
|
||||
msgstr "Περιγραφή"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Εμφάνιση Ονόματος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr "Προσχέδιο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr "Πρόχειρα Παραστατικά"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__date_due
|
||||
msgid "Due Date"
|
||||
msgstr "Ημερ. Λήξης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__account_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr "Ημερομηνία έναρξης ισχύος για λογιστικές εγγραφές"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Ακόλουθοι"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Ακόλουθοι (Κανάλια)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Ακόλουθοι (Συνεργάτες)"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr "Ομαδοποίηση κατά"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__id
|
||||
msgid "ID"
|
||||
msgstr "Κωδικός"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Εάν επιλεγεί τα νέα μηνύματα χρειάζονται την προσοχή σας"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Εάν επιλεγεί τα νέα μηνύματα χρειάζονται την προσοχή σας."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr "Εσωτερικά Σημειώματα"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Είναι Ακόλουθος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr "Ημερολόγιο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr "Εγγραφή Ημερολογίου"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr "Εγγραφές Ημερολογίων"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher____last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Τελευταία τροποποίηση στις"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Τελευταία Ενημέρωση από"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Τελευταία Ενημέρωση στις"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Μηνύματα"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:109
|
||||
#, python-format
|
||||
msgid "Missing Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:111
|
||||
#, python-format
|
||||
msgid "Missing Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
|
||||
msgid "Notes"
|
||||
msgstr "Σημειώσεις"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__number
|
||||
msgid "Number"
|
||||
msgstr "Αριθμός"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Πλήθος ενεργειών"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Πλήθος μηνυμάτων που απαιτούν ενέργεια"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Πλήθος μη αναγνωσμένων μηνυμάτων"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr "Μόνο για φόρους εξαιρούμενους από την τιμή"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__paid
|
||||
msgid "Paid"
|
||||
msgstr "Εξοφλημένη"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr "Συναλλασόμενος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr "Απευθείας Πληρωμή"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__pay_now
|
||||
msgid "Payment"
|
||||
msgstr "Πληρωμή"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__name
|
||||
msgid "Payment Memo"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__payment_journal_id
|
||||
msgid "Payment Method"
|
||||
msgstr "Μέθοδος Πληρωμής"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:208
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Παρακαλώ ενεργοποιήστε την ακολουθία του επιλεγμένου ημερολογίου !"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:211
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Παρακαλώ ορίστε μια αλληλουχία στο ημερολόγιο."
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr "Καταχωρημένη"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr "Καταχωρημένα Παραστατικά"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr "Προτιμολόγιο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Είδος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr "Αγορά"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr "Απόδειξη Αγοράς"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr "Παραστατικό Αγοράς"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Ποσότητα"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Receipts"
|
||||
msgstr "Παραλαβή"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Register a new purchase receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr "Πώληση"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr "Πληροφορίες Πώλησης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr "Απόδειξη Πώλησης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr "Αναζήτηση Παραστατικών"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Ακολουθία"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr "Ορισμός σε Πρόχειρη"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr "Κατάσταση"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr "Αλλαγή Κατάστασης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr "Αλλαγή κατάστασης"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__tax_ids
|
||||
msgid "Tax"
|
||||
msgstr "Φόρος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_amount
|
||||
msgid "Tax Amount"
|
||||
msgstr "Ποσό Φόρου"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__tax_correction
|
||||
msgid "Tax Correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr "Το Παραστατικό έχει πλήρως εξοφληθεί. "
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line__account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr "Ο λογαριασμός εσόδων ή εξόδων που σχετίζεται με το επιλεγμένο είδος."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr "Για Επισκόπηση"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__amount
|
||||
msgid "Total"
|
||||
msgstr "Σύνολο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr "Σύνολο"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__voucher_type
|
||||
msgid "Type"
|
||||
msgstr "Τύπος"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr "Τιμή Μονάδας"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Μη αναγνωσμένα μηνύματα"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Μετρητής μη αναγνωσμένων μηνυμάτων"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr "Επικύρωση"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr "Προμηθευτής"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:116
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line__voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr "Παραστατικό"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr "Εγγραφές Παραστατικών"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr "Γραμμές Παραστατικού"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr "Στατιστικά Παραστατικού"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr "Καταχωρήσεις Παραστατικού"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Μηνύματα Ιστότοπου"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Ιστορικό επικοινωνίας ιστότοπου"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
"Όταν επιβεβαιωθεί η απόδειξη αγοράς, μπορείτε να καταγράψετε την\n"
|
||||
" πληρωμή προμηθευτή σχετικά με αυτήν την απόδειξη αγοράς."
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
"Όταν επιβεβαιωθεί η απόδειξη πώλησης, μπορείτε να καταγράψετε την πληρωμή πελατών\n"
|
||||
" που σχετίζεται με αυτήν την απόδειξη πώλησης."
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/models/account_voucher.py:457
|
||||
#, python-format
|
||||
msgid "You must first select a partner."
|
||||
msgstr ""
|
||||
@@ -1,553 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_voucher
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo 9.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-18 14:06+0000\n"
|
||||
"PO-Revision-Date: 2015-09-19 08:18+0000\n"
|
||||
"Last-Translator: Martin Trigaux\n"
|
||||
"Language-Team: English (Australia) (http://www.transifex.com/odoo/odoo-9/"
|
||||
"language/en_AU/)\n"
|
||||
"Language: en_AU\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_state
|
||||
msgid ""
|
||||
" * The 'Draft' status is used when a user is encoding a new and unconfirmed "
|
||||
"Voucher.\n"
|
||||
" * The 'Pro-forma' status is used when the voucher does not have a voucher "
|
||||
"number.\n"
|
||||
" * The 'Posted' status is used when user create voucher,a voucher number is "
|
||||
"generated and voucher entries are created in account.\n"
|
||||
" * The 'Cancelled' status is used when user cancel voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_account_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
msgid "Account Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_subtotal
|
||||
msgid "Amount"
|
||||
msgstr "Import"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_account_analytic_id
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Are you sure you want to cancel this receipt?"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Bill Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_reference
|
||||
msgid "Bill Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Cancel Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:147
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid "Click to create a sale receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid "Click to register a purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_company_id
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_company_id
|
||||
msgid "Company related to this journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Created by"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_create_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_create_date
|
||||
msgid "Created on"
|
||||
msgstr "Created on"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_currency_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_currency_id
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
msgid "Customer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_name
|
||||
msgid "Description"
|
||||
msgstr "Description"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_display_name
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Display Name"
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Draft Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_date_due
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_date
|
||||
msgid "Effective date for accounting entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Gives the sequence of this line when displaying the voucher."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Group By"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_id
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_tax_correction
|
||||
msgid ""
|
||||
"In case we have a rounding problem in the tax, use this field to correct it"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_journal_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_move_id
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher___last_update
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line___last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Last Modified on"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_uid
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Last Updated by"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_write_date
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Last Updated on"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_narration
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_number
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Only for tax excluded from price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_paid
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,pay_now:0
|
||||
msgid "Pay Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_pay_now
|
||||
msgid "Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_name
|
||||
msgid "Payment Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:183
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:186
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Posted Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,state:0
|
||||
msgid "Pro-forma"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_product_id
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt
|
||||
msgid "Purchase Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Purchase Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_quantity
|
||||
msgid "Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: selection:account.voucher,voucher_type:0
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Sales Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
|
||||
msgid "Sales Receipts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Search Vouchers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_sequence
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_state
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,name:account_voucher.mt_voucher_state_change
|
||||
msgid "Status Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:mail.message.subtype,description:account_voucher.mt_voucher_state_change
|
||||
msgid "Status changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_tax_ids
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_amount
|
||||
msgid "Tax amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_tax_correction
|
||||
msgid "Tax correction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_paid
|
||||
msgid "The Voucher has been totally paid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_line_account_id
|
||||
msgid "The income or expense account related to the selected product."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,help:account_voucher.field_account_voucher_reference
|
||||
msgid "The partner reference of this document."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
msgid "To Review"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_amount
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_voucher_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_price_unit
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Vendor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
msgid "Vendor Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:31
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_voucher_id
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_sale
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_filter_vendor
|
||||
#, python-format
|
||||
msgid "Voucher"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_tree_purchase
|
||||
msgid "Voucher Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.model,name:account_voucher.model_account_voucher_line
|
||||
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_purchase_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_sale_receipt_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_form
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.view_voucher_line_tree
|
||||
msgid "Voucher Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.ui.view,arch_db:account_voucher.account_cash_statement_graph
|
||||
msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list
|
||||
msgid "Vouchers Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_purchase_receipt
|
||||
msgid ""
|
||||
"When the purchase receipt is confirmed, you can record the\n"
|
||||
" vendor payment related to this purchase receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: model_terms:ir.actions.act_window,help:account_voucher.action_sale_receipt
|
||||
msgid ""
|
||||
"When the sale receipt is confirmed, you can record the customer\n"
|
||||
" payment related to this sales receipt."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:348
|
||||
#, python-format
|
||||
msgid "You must first select a partner!"
|
||||
msgstr "You must first select a partner!"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user