19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:30:07 +01:00
parent ba20ce7443
commit 768b70e05e
2357 changed files with 1057103 additions and 712486 deletions

View file

@ -1,78 +1,34 @@
# Invoicing (Account)
# Invoicing
Productionready Odoo 16 Invoicing module packaged as a standard Python distribution. Provides invoicing, payments, reconciliation, journals, taxes, and analytics integration.
## Features
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.
- Core: customer/vendor invoices, credit notes, journals, taxes
- Payments: registration, reconciliation, bank statements
- Analytics: analytic accounts, distributions, reporting
- Web UI: dashboards, portals, email templates, reports
- Packaging: install via pip/uv, wheel distribution
You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
## Installation
```bash
pip install odoo-bringout-oca-ocb-account
# or
uv pip install odoo-bringout-oca-ocb-account
```
## Quick Start
Using this repositorys helper (from repo root):
```bash
python3 scripts/odoo_web_server.py \
--db-name mydb \
--addon account
# then open http://localhost:8069 (admin / developer101)
```
Notes:
- The server always includes base addons (base, web, mail, base_setup).
- Add more addons with repeated `--addon` flags.
## Dependencies
Functional dependencies (from manifest): base_setup, product, analytic, portal, digest.
Python packages satisfied by this monorepo:
- odoo-bringout-oca-ocb-base_setup
- odoo-bringout-oca-ocb-product
- odoo-bringout-oca-ocb-analytic
- odoo-bringout-oca-ocb-portal
- odoo-bringout-oca-ocb-digest
## Compatibility
- Odoo: 16.0 (OCA/OCB)
- Python: 3.113.12
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md
## Troubleshooting
If you hit errors about payment provider icons/files during installation, see:
packages/odoo-bringout-oca-ocb-payment/doc/PATCH_REMOVE_PAYMENT_PROVIDERS.md
- base_setup
- onboarding
- product
- analytic
- portal
- digest
## Source
Based on OCA/OCB 16.0, addon `account`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/account
## License
LGPL3, preserved from upstream Odoo.
This package preserves the original LGPL-3 license.

View file

@ -1,18 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import controllers
from . import models
from . import demo
from . import wizard
from . import report
from . import populate
from . import tools
from odoo import api, SUPERUSER_ID
SYSCOHADA_LIST = ['BJ', 'BF', 'CM', 'CF', 'KM', 'CG', 'CI', 'GA', 'GN', 'GW', 'GQ', 'ML', 'NE', 'CD', 'SN', 'TD', 'TG']
def _set_fiscal_country(env):
""" Sets the fiscal country on existing companies when installing the module.
That field is an editable computed field. It doesn't automatically get computed
@ -22,48 +10,14 @@ def _set_fiscal_country(env):
env['res.company'].search([]).compute_account_tax_fiscal_country()
def _auto_install_l10n(env):
#check the country of the main company (only) and eventually load some module needed in that country
country_code = env.company.country_id.code
if country_code:
#auto install localization module(s) if available
to_install_l10n = env['ir.module.module'].search_count([
('category_id', '=', env.ref('base.module_category_accounting_localizations_account_charts').id),
('state', '=', 'to install'),
])
module_list = []
if to_install_l10n:
# We don't install a CoA if one was passed in the command line
# or has been selected to install
pass
elif country_code in SYSCOHADA_LIST:
#countries using OHADA Chart of Accounts
module_list.append('l10n_syscohada')
elif country_code == 'GB':
module_list.extend(('l10n_uk', 'account_bacs'))
elif country_code == 'DE':
module_list.append('l10n_de_skr03')
module_list.append('l10n_de_skr04')
elif country_code == 'MC':
module_list.append('l10n_fr')
else:
if env['ir.module.module'].search([('name', '=', 'l10n_%s_oca' % country_code.lower())]):
module_list.append('l10n_%s_oca' % country_code.lower())
elif env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]):
module_list.append('l10n_' + country_code.lower())
else:
module_list.append('l10n_generic_coa')
if country_code in SYSCOHADA_LIST + [
'AT', 'BE', 'CA', 'CO', 'DE', 'EC', 'ES', 'ET', 'FR', 'GR', 'IT', 'LU', 'MX', 'NL', 'NO',
'PL', 'PT', 'RO', 'SI', 'TR', 'GB', 'VE', 'VN'
]:
module_list.append('base_vat')
module_ids = env['ir.module.module'].search([('name', 'in', module_list), ('state', '=', 'uninstalled')])
if module_ids:
module_ids.sudo().button_install()
def _account_post_init(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
_auto_install_l10n(env)
def _account_post_init(env):
_set_fiscal_country(env)
# imported here to avoid dependency cycle issues
# pylint: disable=wrong-import-position
from . import controllers
from . import models
from . import demo
from . import wizard
from . import report
from . import tools

View file

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name' : 'Invoicing',
'version' : '1.2',
'name': 'Invoicing',
'version': '1.4',
'summary': 'Invoices & Payments',
'sequence': 10,
'description': """
@ -14,8 +14,7 @@ You could use this simplified accounting in case you work with an (external) acc
""",
'category': 'Accounting/Accounting',
'website': 'https://www.odoo.com/app/invoicing',
'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'],
'depends' : ['base_setup', 'product', 'analytic', 'portal', 'digest'],
'depends': ['base_setup', 'onboarding', 'product', 'analytic', 'portal', 'digest'],
'data': [
'security/account_security.xml',
'security/ir.model.access.csv',
@ -23,8 +22,13 @@ You could use this simplified accounting in case you work with an (external) acc
'data/digest_data.xml',
'views/account_report.xml',
'data/mail_template_data.xml',
'data/onboarding_data.xml',
'data/account_tour.xml',
'data/ir_sequence.xml',
'data/res_country_group.xml',
'views/account_payment_view.xml',
'wizard/account_automatic_entry_wizard_views.xml',
'wizard/account_autopost_bills_wizard.xml',
'wizard/account_unreconcile_view.xml',
'wizard/account_move_reversal_view.xml',
'wizard/account_resequence_views.xml',
@ -40,7 +44,7 @@ You could use this simplified accounting in case you work with an (external) acc
'views/account_tax_views.xml',
'views/account_full_reconcile_views.xml',
'views/account_payment_term_views.xml',
'views/account_chart_template_views.xml',
'views/account_payment_method.xml',
'views/res_partner_bank_views.xml',
'views/report_statement.xml',
'views/terms_template.xml',
@ -54,25 +58,35 @@ You could use this simplified accounting in case you work with an (external) acc
'views/report_invoice.xml',
'report/account_invoice_report_view.xml',
'views/account_cash_rounding_view.xml',
'views/ir_actions_views.xml',
'views/ir_module_views.xml',
'views/base_document_layout_views.xml',
'views/res_config_settings_views.xml',
'views/partner_view.xml',
'views/account_journal_dashboard_view.xml',
'views/account_portal_templates.xml',
'views/report_payment_receipt_templates.xml',
'views/account_onboarding_templates.xml',
'data/service_cron.xml',
'views/account_incoterms_view.xml',
'data/account_incoterms_data.xml',
'views/digest_views.xml',
'wizard/account_invoice_send_views.xml',
'wizard/account_move_send_wizard.xml',
'wizard/account_move_send_batch_wizard.xml',
'report/account_hash_integrity_templates.xml',
'views/res_currency.xml',
'views/res_country_group_view.xml',
'views/account_menuitem.xml',
'wizard/account_tour_upload_bill.xml',
'wizard/account_secure_entries_wizard.xml',
'views/mail_message_views.xml',
'wizard/accrued_orders.xml',
'views/bill_preview_template.xml',
'data/account_reports_data.xml',
'views/uom_uom_views.xml',
'views/product_views.xml',
'views/tests_shared_js_python.xml',
'views/account_lock_exception_views.xml',
'views/report_templates.xml',
'wizard/account_merge_wizard_views.xml',
],
'demo': [
'demo/account_demo.xml',
@ -87,30 +101,41 @@ You could use this simplified accounting in case you work with an (external) acc
'web.assets_backend': [
'account/static/src/css/account_bank_and_cash.css',
'account/static/src/css/account.css',
'account/static/src/css/account_payment.scss',
'account/static/src/scss/account.scss',
'account/static/src/scss/account_journal_dashboard.scss',
'account/static/src/scss/account_dashboard.scss',
'account/static/src/scss/account_searchpanel.scss',
'account/static/src/scss/legacy_account_activity.scss',
'account/static/src/js/legacy_account_payment_field.js',
'account/static/src/js/legacy_mail_activity.js',
'account/static/src/js/legacy_tax_totals.js',
'account/static/src/js/legacy_section_and_note_fields_backend.js',
'account/static/src/js/legacy_account_selection.js',
'account/static/src/js/legacy_open_move_widget.js',
'account/static/src/scss/account_payment_term.scss',
'account/static/src/scss/account_reconcile_model.scss',
'account/static/src/scss/account_multi_ledger.scss',
'account/static/src/scss/account_move_send_wizard.scss',
'account/static/src/components/**/*',
'account/static/src/js/tours/account.js',
'account/static/src/xml/**/*',
'account/static/src/services/*.js',
'account/static/src/views/**/*',
'account/static/src/js/tours/*',
'account/static/src/js/search/search_bar/search_bar.js',
'account/static/src/helpers/*.js',
],
# Unit test files
'web.assets_unit_tests': [
'account/static/tests/**/*',
('remove', 'account/static/tests/tours/**/*'),
],
'web.assets_frontend': [
'account/static/src/js/account_portal_sidebar.js',
'account/static/src/js/account_portal.js',
'account/static/src/interactions/**/*',
'account/static/src/components/tests_shared_js_python/*',
'account/static/src/helpers/*.js',
],
'web.assets_tests': [
'account/static/tests/tours/**/*',
],
'web.qunit_suite_tests': [
'account/static/tests/*.js',
'web.report_assets_common': [
'account/static/src/css/report_invoice.css',
],
'web.report_assets_pdf': [
'account/static/src/css/report_invoice.css',
],
},
'author': 'Odoo S.A.',
'license': 'LGPL-3',
}

View file

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import onboarding
from . import portal
from . import terms
from . import download_docs
from . import tests_shared_js_python
from . import catalog

View file

@ -0,0 +1,67 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.http import request, route
from odoo.addons.product.controllers.catalog import ProductCatalogController
class ProductCatalogAccountController(ProductCatalogController):
@route('/product/catalog/get_sections', auth='user', type='jsonrpc', readonly=True)
def product_catalog_get_sections(self, res_model, order_id, child_field, **kwargs):
"""Return the sections which are in given order to be shown in the product catalog.
:param string res_model: The order model.
:param int order_id: The order id.
:param string child_field: The field name of the lines in the order model.
:rtype: list
:return: A list of dictionaries containing section information with following structure:
[
{
'id': int,
'name': string,
'sequence': int,
'line_count': int,
},
]
"""
order = request.env[res_model].browse(order_id)
return order.with_company(order.company_id)._get_sections(child_field, **kwargs)
@route('/product/catalog/create_section', auth='user', type='jsonrpc')
def product_catalog_create_section(
self, res_model, order_id, child_field, name, position, **kwargs,
):
"""Create a new section on the given order.
:param string res_model: The order model.
:param int order_id: The order id.
:param string child_field: The field name of the lines in the order model.
:param string name: The name of the section to create.
:param str position: The position of the section where it should be created, either 'top'
or 'bottom'.
:return: A dictionary with newly created section's 'id' and 'sequence'.
:rtype: dict
"""
order = request.env[res_model].browse(order_id)
return order.with_company(order.company_id)._create_section(
child_field, name, position, **kwargs,
)
@route('/product/catalog/resequence_sections', auth='user', type='jsonrpc')
def product_catalog_resequence_sections(
self, res_model, order_id, sections, child_field, **kwargs,
):
"""Reorder the sections of a given order.
param string res_model: The order model.
:param int order_id: The order id.
:param list sections: A list of section dictionaries with their sequence.
:param string child_field: The field name of the lines in the order model.
:return: A dictionary with new sequences of the sections.
:rtype: dict
"""
order = request.env[res_model].browse(order_id)
return order.with_company(order.company_id)._resequence_sections(
sections, child_field, **kwargs,
)

View file

@ -0,0 +1,92 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import io
import zipfile
from itertools import chain
from odoo import http, _
from odoo.exceptions import UserError
from odoo.http import request, content_disposition
def _get_headers(filename, filetype, content):
return [
('Content-Type', filetype),
('Content-Length', len(content)),
('Content-Disposition', content_disposition(filename)),
('X-Content-Type-Options', 'nosniff'),
]
def _build_zip_from_data(docs_data):
buffer = io.BytesIO()
with zipfile.ZipFile(buffer, 'w', compression=zipfile.ZIP_DEFLATED) as zipfile_obj:
for doc_data in docs_data:
zipfile_obj.writestr(doc_data['filename'], doc_data['content'])
return buffer.getvalue()
class AccountDocumentDownloadController(http.Controller):
@http.route('/account/download_invoice_attachments/<models("ir.attachment"):attachments>', type='http', auth='user')
def download_invoice_attachments(self, attachments):
attachments.check_access('read')
assert all(attachment.res_id and attachment.res_model == 'account.move' for attachment in attachments)
if len(attachments) == 1:
headers = _get_headers(attachments.name, attachments.mimetype, attachments.raw)
return request.make_response(attachments.raw, headers)
else:
inv_ids = attachments.mapped('res_id')
if len(set(inv_ids)) == 1:
invoice = request.env['account.move'].browse(inv_ids[0])
filename = invoice._get_invoice_report_filename(extension='zip')
else:
filename = _('invoices') + '.zip'
content = attachments._build_zip_from_attachments()
headers = _get_headers(filename, 'zip', content)
return request.make_response(content, headers)
@http.route('/account/download_invoice_documents/<models("account.move"):invoices>/<string:filetype>', type='http', auth='user')
def download_invoice_documents_filetype(self, invoices, filetype, allow_fallback=True):
invoices.check_access('read')
invoices.line_ids.check_access('read')
docs_data = []
for invoice in invoices:
if filetype == 'all' and (doc_data := invoice._get_invoice_legal_documents_all(allow_fallback=allow_fallback)):
docs_data += doc_data
elif doc_data := invoice._get_invoice_legal_documents(filetype, allow_fallback=allow_fallback):
if (errors := doc_data.get('errors')) and len(invoices) == 1:
raise UserError(_("Error while creating XML:\n- %s", '\n- '.join(errors)))
docs_data.append(doc_data)
if len(docs_data) == 1:
doc_data = docs_data[0]
headers = _get_headers(doc_data['filename'], doc_data['filetype'], doc_data['content'])
return request.make_response(doc_data['content'], headers)
if len(docs_data) > 1:
zip_content = _build_zip_from_data(docs_data)
headers = _get_headers(_('invoices') + '.zip', 'zip', zip_content)
return request.make_response(zip_content, headers)
@http.route('/account/download_move_attachments/<models("account.move"):moves>', type='http', auth='user')
def download_move_attachments(self, moves):
def rename_duplicates(docs):
seen = {}
for doc in docs:
name = doc["filename"]
if name not in seen:
seen[name] = 0
else:
seen[name] += 1
base, *ext = name.rsplit('.', 1)
new_name = f"{base} ({seen[name]})" + (f".{ext[0]}" if ext else "")
doc["filename"] = new_name
seen[new_name] = 0
return docs
if docs_data := list(chain.from_iterable(move._get_move_zip_export_docs() for move in moves)):
docs_data = rename_duplicates(docs_data)
zip_content = _build_zip_from_data(docs_data)
headers = _get_headers(request.env._("Invoices") + '.zip', 'zip', zip_content)
return request.make_response(zip_content, headers)

View file

@ -1,41 +0,0 @@
from odoo import http
from odoo.http import request
class OnboardingController(http.Controller):
@http.route('/account/account_invoice_onboarding', auth='user', type='json')
def account_invoice_onboarding(self):
""" Returns the `banner` for the account invoice onboarding panel.
It can be empty if the user has closed it or if he doesn't have
the permission to see it. """
company = request.env.company
if not request.env.is_admin() or \
company.account_invoice_onboarding_state == 'closed':
return {}
return {
'html': request.env['ir.qweb']._render('account.account_invoice_onboarding_panel', {
'company': company,
'state': company.get_and_update_account_invoice_onboarding_state()
})
}
@http.route('/account/account_dashboard_onboarding', auth='user', type='json')
def account_dashboard_onboarding(self):
""" Returns the `banner` for the account dashboard onboarding panel.
It can be empty if the user has closed it or if he doesn't have
the permission to see it. """
company = request.env.company
if not request.env.is_admin() or \
company.account_dashboard_onboarding_state == 'closed':
return {}
return {
'html': request.env['ir.qweb']._render('account.account_dashboard_onboarding_panel', {
'company': company,
'state': company.get_and_update_account_dashboard_onboarding_state()
})
}

View file

@ -1,37 +1,69 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import http, _
from odoo.osv import expression
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
from odoo.exceptions import AccessError, MissingError
from collections import OrderedDict
from odoo import _, fields, http
from odoo.exceptions import AccessError, MissingError
from odoo.fields import Domain
from odoo.http import request
from odoo.tools import email_normalize, email_normalize_all
from odoo.tools.misc import verify_hash_signed
from odoo.addons.account.controllers.download_docs import _build_zip_from_data, _get_headers
from odoo.addons.portal.controllers.portal import CustomerPortal
from odoo.addons.portal.controllers.portal import pager as portal_pager
class PortalAccount(CustomerPortal):
def _prepare_home_portal_values(self, counters):
values = super()._prepare_home_portal_values(counters)
if 'overdue_invoice_count' in counters:
values['overdue_invoice_count'] = self._get_overdue_invoice_count()
if 'invoice_count' in counters:
invoice_count = request.env['account.move'].search_count(self._get_invoices_domain()) \
if request.env['account.move'].check_access_rights('read', raise_exception=False) else 0
invoice_count = request.env['account.move'].search_count(self._get_invoices_domain('out'), limit=1) \
if request.env['account.move'].has_access('read') else 0
values['invoice_count'] = invoice_count
if 'bill_count' in counters:
bill_count = request.env['account.move'].search_count(self._get_invoices_domain('in'), limit=1) \
if request.env['account.move'].has_access('read') else 0
values['bill_count'] = bill_count
return values
# ------------------------------------------------------------
# My Invoices
# ------------------------------------------------------------
def _get_overdue_invoice_count(self):
overdue_invoice_count = request.env['account.move'].search_count(self._get_overdue_invoices_domain()) \
if request.env['account.move'].has_access('read') else 0
return overdue_invoice_count
def _invoice_get_page_view_values(self, invoice, access_token, **kwargs):
custom_amount = None
if kwargs.get('amount'):
custom_amount = float(kwargs['amount'])
values = {
'page_name': 'invoice',
'invoice': invoice,
**invoice._get_invoice_portal_extra_values(custom_amount=custom_amount),
}
return self._get_page_view_values(invoice, access_token, values, 'my_invoices_history', False, **kwargs)
def _get_invoices_domain(self):
return [('state', 'not in', ('cancel', 'draft')), ('move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]
def _get_invoices_domain(self, m_type=None):
if m_type in ['in', 'out']:
move_type = [m_type+move for move in ('_invoice', '_refund', '_receipt')]
else:
move_type = ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')
return Domain('state', 'not in', ('cancel', 'draft')) & Domain('move_type', 'in', move_type)
def _get_overdue_invoices_domain(self, partner_id=None):
return [
('state', 'not in', ('cancel', 'draft')),
('move_type', 'in', ('out_invoice', 'out_receipt')),
('payment_state', 'not in', ('in_payment', 'paid', 'reversed', 'blocked', 'invoicing_legacy')),
('invoice_date_due', '<', fields.Date.today()),
('partner_id', '=', partner_id or request.env.user.partner_id.id),
]
def _get_account_searchbar_sortings(self):
return {
@ -44,8 +76,9 @@ class PortalAccount(CustomerPortal):
def _get_account_searchbar_filters(self):
return {
'all': {'label': _('All'), 'domain': []},
'invoices': {'label': _('Invoices'), 'domain': [('move_type', 'in', ('out_invoice', 'out_refund'))]},
'bills': {'label': _('Bills'), 'domain': [('move_type', 'in', ('in_invoice', 'in_refund'))]},
'overdue_invoices': {'label': _('Overdue invoices'), 'domain': self._get_overdue_invoices_domain()},
'invoices': {'label': _('Invoices'), 'domain': [('move_type', 'in', ('out_invoice', 'out_refund', 'out_receipt'))]},
'bills': {'label': _('Bills'), 'domain': [('move_type', 'in', ('in_invoice', 'in_refund', 'in_receipt'))]},
}
@http.route(['/my/invoices', '/my/invoices/page/<int:page>'], type='http', auth="user", website=True)
@ -57,7 +90,7 @@ class PortalAccount(CustomerPortal):
# content according to pager and archive selected
invoices = values['invoices'](pager['offset'])
request.session['my_invoices_history'] = invoices.ids[:100]
request.session['my_invoices_history'] = [i['invoice'].id for i in invoices][:100]
values.update({
'invoices': invoices,
@ -69,10 +102,7 @@ class PortalAccount(CustomerPortal):
values = self._prepare_portal_layout_values()
AccountInvoice = request.env['account.move']
domain = expression.AND([
domain or [],
self._get_invoices_domain(),
])
domain = Domain(domain or Domain.TRUE) & self._get_invoices_domain()
searchbar_sortings = self._get_account_searchbar_sortings()
# default sort by order
@ -94,15 +124,20 @@ class PortalAccount(CustomerPortal):
# content according to pager and archive selected
# lambda function to get the invoices recordset when the pager will be defined in the main method of a route
'invoices': lambda pager_offset: (
AccountInvoice.search(domain, order=order, limit=self._items_per_page, offset=pager_offset)
if AccountInvoice.check_access_rights('read', raise_exception=False) else
[
invoice._get_invoice_portal_extra_values()
for invoice in AccountInvoice.search(
domain, order=order, limit=self._items_per_page, offset=pager_offset
)
]
if AccountInvoice.has_access('read') else
AccountInvoice
),
'page_name': 'invoice',
'pager': { # vals to define the pager.
"url": url,
"url_args": {'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby},
"total": AccountInvoice.search_count(domain) if AccountInvoice.check_access_rights('read', raise_exception=False) else 0,
"url_args": {'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby, 'filterby': filterby},
"total": AccountInvoice.search_count(domain) if AccountInvoice.has_access('read') else 0,
"page": page,
"step": self._items_per_page,
},
@ -111,6 +146,7 @@ class PortalAccount(CustomerPortal):
'sortby': sortby,
'searchbar_filters': OrderedDict(sorted(searchbar_filters.items())),
'filterby': filterby,
'overdue_invoice_count': self._get_overdue_invoice_count(),
})
return values
@ -121,37 +157,81 @@ class PortalAccount(CustomerPortal):
except (AccessError, MissingError):
return request.redirect('/my')
if report_type in ('html', 'pdf', 'text'):
return self._show_report(model=invoice_sudo, report_type=report_type, report_ref='account.account_invoices', download=download)
if report_type == 'pdf' and download and invoice_sudo.state == 'posted':
# Download the official attachment(s) or a Pro Forma invoice
docs_data = invoice_sudo._get_invoice_legal_documents_all(allow_fallback=True)
if len(docs_data) == 1:
headers = self._get_http_headers(invoice_sudo, report_type, docs_data[0]['content'], download)
return request.make_response(docs_data[0]['content'], list(headers.items()))
else:
filename = invoice_sudo._get_invoice_report_filename(extension='zip')
zip_content = _build_zip_from_data(docs_data)
headers = _get_headers(filename, 'zip', zip_content)
return request.make_response(zip_content, headers)
elif report_type in ('html', 'pdf', 'text'):
has_generated_invoice = bool(invoice_sudo.invoice_pdf_report_id)
request.update_context(proforma_invoice=not has_generated_invoice)
# Use the template set on the related partner if there is.
# This is not perfect as the invoice can still have been computed with another template, but it's a slight fix/imp for stable.
pdf_report_name = invoice_sudo.partner_id.invoice_template_pdf_report_id.report_name or 'account.account_invoices'
return self._show_report(model=invoice_sudo, report_type=report_type, report_ref=pdf_report_name, download=download)
values = self._invoice_get_page_view_values(invoice_sudo, access_token, **kw)
return request.render("account.portal_invoice_page", values)
@http.route(['/my/journal/<int:journal_id>/unsubscribe'], type='http', auth="public", methods=['GET', 'POST'], website=True)
def portal_my_journal_unsubscribe(self, journal_id, **kw):
def _render(ctx, status=200):
return request.render('account.portal_my_journal_mail_notifications', ctx, status=status)
if access_token := kw.get('token'):
try:
token_data = verify_hash_signed(request.env(su=True), request.env['account.journal']._get_journal_notification_unsubscribe_scope(), access_token)
except ValueError:
return _render({'error': _('Invalid token')}, 403)
if not token_data or token_data.get('journal_id') != journal_id:
return _render({'error': _('Invalid token')}, 403)
journal = request.env['account.journal'].sudo().browse(journal_id)
else:
# Legacy link for authenticated user trying to unsubscribe (needs access rights on journal)
journal = request.env['account.journal'].browse(journal_id)
if access_token:
email_to_unsubscribe = email_normalize(token_data.get('email_to_unsubscribe'), strict=False)
else:
emails = email_normalize_all(journal.incoming_einvoice_notification_email or '')
if len(emails) != 1:
return _render({'error': _('Deprecated link')}, 410)
email_to_unsubscribe = emails[0]
if not journal.exists() or not email_to_unsubscribe:
return _render({'error': _('Already unsubscribed')}, 404)
if not journal.has_access('write'):
return _render({'error': _('Invalid token')}, 403)
journal = journal.with_company(journal.sudo().company_id.id)
all_recipients = email_normalize_all(journal.incoming_einvoice_notification_email or '')
email_found = any(r == email_to_unsubscribe for r in all_recipients)
if not email_found:
return _render({'error': _('Already unsubscribed')}, 404)
if request.httprequest.method == 'POST':
journal._unsubscribe_invoice_notification_email(email_to_unsubscribe)
return _render({'journal': journal, 'email': email_to_unsubscribe, 'completed': True})
return _render({'journal': journal, 'email': email_to_unsubscribe})
# ------------------------------------------------------------
# My Home
# ------------------------------------------------------------
def details_form_validate(self, data, partner_creation=False):
error, error_message = super(PortalAccount, self).details_form_validate(data)
# prevent VAT/name change if invoices exist
partner = request.env['res.users'].browse(request.uid).partner_id
# Skip this test if we're creating a new partner as we won't ever block him from filling values.
if not partner_creation and not partner.can_edit_vat():
if 'vat' in data and (data['vat'] or False) != (partner.vat or False):
error['vat'] = 'error'
error_message.append(_('Changing VAT number is not allowed once invoices have been issued for your account. Please contact us directly for this operation.'))
if 'name' in data and (data['name'] or False) != (partner.name or False):
error['name'] = 'error'
error_message.append(_('Changing your name is not allowed once invoices have been issued for your account. Please contact us directly for this operation.'))
if 'company_name' in data and (data['company_name'] or False) != (partner.company_name or False):
error['company_name'] = 'error'
error_message.append(_('Changing your company name is not allowed once invoices have been issued for your account. Please contact us directly for this operation.'))
return error, error_message
def extra_details_form_validate(self, data, additional_required_fields, error, error_message):
""" Ensure that all additional required fields have a value in the data """
for field in additional_required_fields:
if field.name not in data or not data[field.name]:
error[field.name] = 'error'
error_message.append(_('The field %s must be filled.', field.field_description.lower()))
return error, error_message
def _prepare_my_account_rendering_values(self, *args, **kwargs):
rendering_values = super()._prepare_my_account_rendering_values(*args, **kwargs)
rendering_values.update({
'invoice_sending_methods': {'email': _("by Email")},
'invoice_edi_formats': dict(request.env['res.partner']._fields['invoice_edi_format'].selection),
})
return rendering_values

View file

@ -0,0 +1,16 @@
import json
from odoo import http
from odoo.http import request
class TestsSharedJsPython(http.Controller):
@http.route('/account/init_tests_shared_js_python', type='http', auth='user', website=True)
def route_init_tests_shared_js_python(self):
tests = json.loads(request.env['ir.config_parameter'].get_param('account.tests_shared_js_python', '[]'))
return request.render('account.tests_shared_js_python', {'props': {'tests': tests}})
@http.route('/account/post_tests_shared_js_python', type='jsonrpc', auth='user')
def route_post_tests_shared_js_python(self, results):
request.env['ir.config_parameter'].set_param('account.tests_shared_js_python', json.dumps(results or []))

View file

@ -12,8 +12,7 @@
<field name="name">Settings</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context" eval="{'module': 'general_settings', 'bin_size': False}"/>
<field name="context">{'module': 'general_settings', 'bin_size': False}</field>
</record>
<!-- TAGS FOR CASH FLOW STATEMENT DIRECT METHOD -->
@ -37,49 +36,43 @@
<record id="account_payment_term_immediate" model="account.payment.term">
<field name="name">Immediate Payment</field>
<field name="note">Payment terms: Immediate Payment</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 0})]"/>
</record>
<record id="account_payment_term_15days" model="account.payment.term">
<field name="name">15 Days</field>
<field name="note">Payment terms: 15 Days</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'days': 15})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 15})]"/>
</record>
<record id="account_payment_term_21days" model="account.payment.term">
<field name="name">21 Days</field>
<field name="note">Payment terms: 21 Days</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'days': 21})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 21})]"/>
</record>
<record id="account_payment_term_30days" model="account.payment.term">
<field name="name">30 Days</field>
<field name="note">Payment terms: 30 Days</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'days': 30})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 30})]"/>
</record>
<record id="account_payment_term_45days" model="account.payment.term">
<field name="name">45 Days</field>
<field name="note">Payment terms: 45 Days</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'days': 45})]"/>
</record>
<record id="account_payment_term_2months" model="account.payment.term">
<field name="name">2 Months</field>
<field name="note">Payment terms: 2 Months</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'months': 2})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 45})]"/>
</record>
<record id="account_payment_term_end_following_month" model="account.payment.term">
<field name="name">End of Following Month</field>
<field name="note">Payment terms: End of Following Month</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'months': 1, 'end_month': True})]"/>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'delay_type':'days_after_end_of_next_month', 'nb_days': 0})]"/>
</record>
<record id="account_payment_term_30_days_end_month_the_10" model="account.payment.term">
<field name="name">30 days End of Month on the 10th</field>
<field name="note">Payment terms: 30 days End of Month on the 10th</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'balance', 'value_amount': 0.0, 'months': 1, 'end_month': True, 'days_after': 10})]"/>
<field name="name">10 Days after End of Next Month</field>
<field name="note">Payment terms: 10 Days after End of Next Month</field>
<field name="line_ids" eval="[Command.clear(), Command.create({'value': 'percent', 'value_amount': 100.0, 'delay_type':'days_after_end_of_next_month', 'nb_days': 10})]"/>
</record>
<record id="account_payment_term_advance_60days" model="account.payment.term">
@ -87,29 +80,28 @@
<field name="note">Payment terms: 30% Now, Balance 60 Days</field>
<field name="line_ids" eval="[
Command.clear(),
Command.create({'value': 'percent', 'value_amount': 30.0, 'days': 0}),
Command.create({'value': 'balance', 'value_amount': 0.0, 'days': 60})]"/>
Command.create({'value': 'percent', 'value_amount': 30.0, 'nb_days': 0}),
Command.create({'value': 'percent', 'value_amount': 70.0, 'nb_days': 60})]"/>
</record>
<record id="account_payment_term_30days_early_discount" model="account.payment.term">
<field name="name">2/7 Net 30</field>
<field name="note">Payment terms: 30 Days, 2% Early Payment Discount under 7 days</field>
<field name="display_on_invoice">True</field>
<field name="early_discount">True</field>
<field name="discount_percentage">2</field>
<field name="discount_days">7</field>
<field name="line_ids" eval="[
Command.clear(),
Command.create({'value': 'balance', 'days': 30, 'discount_percentage': 2, 'discount_days': 7})]"/>
Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 30})]"/>
</record>
<!--
Account Statement Sequences
-->
<record id="sequence_reconcile_seq" model="ir.sequence">
<field name="name">Account reconcile sequence</field>
<field name="code">account.reconcile</field>
<field name="prefix">A</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="False" name="company_id"/>
<record id="account_payment_term_90days_on_the_10th" model="account.payment.term">
<field name="name">90 days, on the 10th</field>
<field name="note">Payment terms: 90 days, on the 10th</field>
<field name="line_ids" eval="[
Command.clear(),
Command.create({'value': 'percent', 'value_amount': 100.0, 'delay_type': 'days_end_of_month_on_the','nb_days': 90, 'days_next_month': 10})]"/>
</record>
<!-- Account-related subtypes for messaging / Chatter -->
@ -135,29 +127,18 @@
<!-- Payment methods -->
<record id="account_payment_method_manual_in" model="account.payment.method">
<field name="name">Manual</field>
<field name="name">Manual Payment</field>
<field name="code">manual</field>
<field name="payment_type">inbound</field>
</record>
<record id="account_payment_method_manual_out" model="account.payment.method">
<field name="name">Manual</field>
<field name="name">Manual Payment</field>
<field name="code">manual</field>
<field name="payment_type">outbound</field>
</record>
<!-- Account Tax Group -->
<record id="tax_group_taxes" model="account.tax.group">
<field name="name">Taxes</field>
<field name="sequence">0</field>
</record>
<!-- Partner Trust Property -->
<record forcecreate="True" id="default_followup_trust" model="ir.property">
<field name="name">Followup Trust Property</field>
<field name="fields_id" search="[('model', '=', 'res.partner'), ('name', '=', 'trust')]"/>
<field name="value">normal</field>
<field name="type">selection</field>
</record>
<function model="ir.default" name="set" eval="('res.partner', 'trust', 'normal')"/>
<!-- Share Button in action menu -->
<record id="model_account_move_action_share" model="ir.actions.server">

View file

@ -6,17 +6,19 @@
<record id="generic_tax_report" model="account.report">
<field name="name">Generic Tax report</field>
<field name="filter_multi_company">tax_units</field>
<field name="filter_fiscal_position" eval="1"/>
<field name="default_opening_date_filter">last_month</field>
<field name="allow_foreign_vat" eval="1"/>
<field name="default_opening_date_filter">previous_return_period</field>
<field name="only_tax_exigible" eval="True"/>
<field name="column_ids">
<record id="generic_tax_report_column_net" model="account.report.column">
<field name="name">NET</field>
<field name="name">Net</field>
<field name="expression_label">net</field>
<field name="figure_type">monetary</field>
</record>
<record id="generic_tax_report_column_tax" model="account.report.column">
<field name="name">TAX</field>
<field name="name">Tax</field>
<field name="expression_label">tax</field>
<field name="figure_type">monetary</field>
</record>
</field>
</record>
@ -27,12 +29,14 @@
<field name="availability_condition">always</field>
<field name="column_ids">
<record id="generic_tax_report_account_tax_column_net" model="account.report.column">
<field name="name">NET</field>
<field name="name">Net</field>
<field name="expression_label">net</field>
<field name="figure_type">monetary</field>
</record>
<record id="generic_tax_report_account_tax_column_tax" model="account.report.column">
<field name="name">TAX</field>
<field name="name">Tax</field>
<field name="expression_label">tax</field>
<field name="figure_type">monetary</field>
</record>
</field>
</record>
@ -43,12 +47,14 @@
<field name="availability_condition">always</field>
<field name="column_ids">
<record id="generic_tax_report_tax_account_column_net" model="account.report.column">
<field name="name">NET</field>
<field name="name">Net</field>
<field name="expression_label">net</field>
<field name="figure_type">monetary</field>
</record>
<record id="generic_tax_report_tax_account_column_tax" model="account.report.column">
<field name="name">TAX</field>
<field name="name">Tax</field>
<field name="expression_label">tax</field>
<field name="figure_type">monetary</field>
</record>
</field>
</record>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="account_tour" model="web_tour.tour">
<field name="name">account_tour</field>
<field name="sequence">50</field>
</record>
</odoo>

View file

@ -15,7 +15,20 @@
<div>
<p class="tip_title">Tip: No need to print, put in an envelop and post your invoices</p>
<p class="tip_content">Use the “<i>Send by Post</i>” option to post invoices automatically. For the cost of a local stamp, we do all the manual work: your invoice will be printed in the right country, put in an envelop and sent by snail mail. Use this feature from the list view to post hundreds of invoices in bulk.</p>
<img src="https://download.odoocdn.com/digests/account/static/src/img/invoice-stamps.png" class="illustration_border" />
<img src="https://download.odoocdn.com/digests/account/static/src/img/invoice-stamps.png" width="540" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_account_1" model="digest.tip">
<field name="name">Tip: Stop chasing the Documents you need</field>
<field name="sequence">3100</field>
<field name="group_id" ref="account.group_account_invoice"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Stop chasing the Documents you need</p>
<p class="tip_content">Missing a document for a banking statement? Use the Documents apps to request it and let the owner upload it at the right place.</p>
<img src="https://download.odoocdn.com/digests/account/static/src/img/18-invoice-request-document.gif" width="540" class="illustration_border"/>
</div>
</field>
</record>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="seq_account_payment" model="ir.sequence">
<field name="name">Payment</field>
<field name="code">account.payment</field>
<field name="prefix">PAY</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</odoo>

View file

@ -9,7 +9,8 @@
<field name="name">Invoice: Sending</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="email_from">{{ (object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="subject">{{ object.company_id.name }} Invoice (Ref {{ object.name or 'n/a' }})</field>
<field name="description">Sent to customers with their invoices in attachment</field>
<field name="body_html" type="html">
@ -17,7 +18,12 @@
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Dear
<t t-if="object.partner_id.parent_id">
<t t-out="object.partner_id.name or ''">Brandon Freeman</t> (<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>),
<t t-if="object.partner_id.name">
<t t-out="object.partner_id.name">Brandon Freeman</t> (<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>),
</t>
<t t-else="">
<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>,
</t>
</t>
<t t-else="">
<t t-out="object.partner_id.name or ''">Brandon Freeman</t>,
@ -42,21 +48,27 @@
Please remit payment at your earliest convenience.
<t t-if="object.payment_reference">
<br /><br />
Please use the following communication for your payment: <span style="font-weight:bold;" t-out="object.payment_reference or ''">INV/2021/05/0005</span>.
Please use the following communication for your payment: <strong t-out="object.payment_reference or ''">INV/2021/05/0005</strong>
<t t-if="object.partner_bank_id">
on the account <strong t-out="object.partner_bank_id.acc_number"/>
</t>
.
</t>
</t>
<t t-if="hasattr(object, 'timesheet_count') and object.timesheet_count">
<br /><br />
PS: you can review your timesheets <a t-att-href="'/my/timesheets?search_in=invoice&amp;search=%s' % object.name">from the portal.</a>
</t>
<br /><br />
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.invoice_user_id.signature)">
<br /><br />
<t t-out="object.invoice_user_id.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="object.invoice_user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template" ref="account_invoices"/>
<field name="report_name">{{ object._get_report_mail_attachment_filename() }}</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[]"/>
<field name="auto_delete" eval="True"/>
</record>
@ -64,7 +76,8 @@
<field name="name">Payment: Payment Receipt</field>
<field name="model_id" ref="account.model_account_payment"/>
<field name="subject">{{ object.company_id.name }} Payment Receipt (Ref {{ object.name or 'n/a' }})</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent manually to customer when clicking on 'Send receipt by email' in payment action</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
@ -79,14 +92,12 @@
Best regards,
<t t-if="not is_html_empty(user.signature)">
<br/><br/>
<t t-out="user.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="user.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template" ref="account.action_report_payment_receipt"/>
<field name="report_name">{{ (object.name or '').replace('/','-') }}</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[(4, ref('account.action_report_payment_receipt'))]"/>
<field name="auto_delete" eval="True"/>
</record>
<!-- Credit note template -->
@ -94,7 +105,8 @@
<field name="name">Credit Note: Sending</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="email_from">{{ (object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="subject">{{ object.company_id.name }} Credit Note (Ref {{ object.name or 'n/a' }})</field>
<field name="description">Sent to customers with the credit note in attachment</field>
<field name="body_html" type="html">
@ -124,15 +136,390 @@
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.invoice_user_id.signature)">
<br /><br />
<t t-out="object.invoice_user_id.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="object.invoice_user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template" ref="account_invoices"/>
<field name="report_name">Credit_note_{{ (object.name or '').replace('/','_') }}{{ object.state == 'draft' and '_draft' or '' }}</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[]"/>
<field name="auto_delete" eval="True"/>
</record>
<!-- Self billing invoice template -->
<record id="email_template_edi_self_billing_invoice" model="mail.template">
<field name="name">Self-billing invoice: Sending</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="email_from">{{ (object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="subject">{{ object.company_id.name }} Self-billing invoice (Ref {{ object.name or 'n/a' }})</field>
<field name="description">Sent to customers with their self-billing invoices in attachment</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Dear
<t t-if="object.partner_id.parent_id">
<t t-if="object.partner_id.name">
<t t-out="object.partner_id.name">Brandon Freeman</t> (<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>),
</t>
<t t-else="">
<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>,
</t>
</t>
<t t-else="">
<t t-out="object.partner_id.name or ''">Brandon Freeman</t>,
</t>
<br /><br />
Here is your
<t t-if="object.name">
self-billing invoice <span style="font-weight:bold;" t-out="object.name or ''">INV/2021/05/0005</span>
</t>
<t t-else="">
self-billing invoice
</t>
<t t-if="object.invoice_origin">
(with reference: <t t-out="object.invoice_origin or ''">SUB003</t>)
</t>
amounting in <span style="font-weight:bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 143,750.00</span>
from <t t-out="object.company_id.name or ''">YourCompany</t>.
<t t-if="object.payment_state in ('paid', 'in_payment')">
This self-billing invoice has already been paid.
</t>
<t t-if="hasattr(object, 'timesheet_count') and object.timesheet_count">
<br /><br />
PS: you can review your timesheets <a t-att-href="'/my/timesheets?search_in=invoice&amp;search=%s' % object.name">from the portal.</a>
</t>
<br /><br />
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.invoice_user_id.signature)">
<br /><br />
<div>--<br/><t t-out="object.invoice_user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template_ids" eval="[]"/>
<field name="auto_delete" eval="True"/>
</record>
<!-- Self billing credit note template -->
<record id="email_template_edi_self_billing_credit_note" model="mail.template">
<field name="name">Self-billing credit note: Sending</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="email_from">{{ (object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="subject">{{ object.company_id.name }} Self-billing credit note (Ref {{ object.name or 'n/a' }})</field>
<field name="description">Sent to customers with the self-billing credit note in attachment</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Dear
<t t-if="object.partner_id.parent_id">
<t t-out="object.partner_id.name or ''">Brandon Freeman</t> (<t t-out="object.partner_id.parent_id.name or ''">Azure Interior</t>),
</t>
<t t-else="">
<t t-out="object.partner_id.name or ''">Brandon Freeman</t>,
</t>
<br /><br />
Here is your
<t t-if="object.name">
self-billing credit note <span style="font-weight:bold;" t-out="object.name or ''">RINV/2021/05/0001</span>
</t>
<t t-else="">
self-billing credit note
</t>
<t t-if="object.invoice_origin">
(with reference: <t t-out="object.invoice_origin or ''">SUB003</t>)
</t>
amounting in <span style="font-weight:bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 143,750.00</span>
from <t t-out="object.company_id.name or ''">YourCompany</t>.
<br /><br />
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.invoice_user_id.signature)">
<br /><br />
<div>--<br/><t t-out="object.invoice_user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template_ids" eval="[]"/>
<field name="auto_delete" eval="True"/>
</record>
<!-- Invoice mail gateway failed -->
<template id="email_template_mail_gateway_failed">
<p>
Hi,
<br/><br/>
Your email has been discarded. the e-mail address you have used only accepts new invoices:
<ul>
<li>For new invoices, please ensure a PDF or electronic invoice file is attached</li>
<li>To add information to a previously sent invoice, reply to your "sent" email</li>
</ul>
For any other question, write to <t t-esc="company_email"/>.
<br/>
--
<br/>
<t t-esc="company_name"/>
</p>
</template>
<record id="mail_template_einvoice_notification" model="mail.template">
<field name="name">New eInvoices Notification</field>
<field name="subject">New Electronic Invoices Received</field>
<field name="email_from">{{ object.company_id.email_formatted }}</field>
<field name="email_to">{{ object.incoming_einvoice_notification_email }}</field>
<field name="use_default_to" eval="False"/>
<field name="model_id" ref="account.model_account_journal"/>
<field name="auto_delete" eval="True"/>
<field name="description">Notification email for newly received eInvoices</field>
<field name="body_html" type="html">
<t t-set="invoices" t-value="ctx.get('einvoices', [])"/>
<t t-set="invoice_preview_ids" t-value="','.join([str(i) for i in invoices.ids]) if invoices else ''"/>
<t t-set="invoice_count" t-value="len(invoices)"/>
<t t-set="MAX_INVOICES_TO_DISPLAY" t-value="5"/>
<div style="margin: 0px; padding: 0px; font-family:Verdana, Arial,sans-serif; color: #454748;">
<table border="0" cellpadding="0" cellspacing="0"
style="padding-top: 16px; background-color: #F1F1F1; width: 100%; border-collapse:separate;">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="590"
style="background-color: white; border-collapse:separate;">
<!-- HEADER -->
<tr>
<td align="center">
<table width="100%" cellpadding="0" cellspacing="0"
style="background-color: #875A7B; color: #FFFFFF; font-size: 14px; padding: 14px 0; border-radius: 3px;">
<tr>
<td align="left" style="padding-left: 16px;">
You have received <t t-if="invoice_count > 1">new electronic invoices!</t><t t-else="">a new electronic invoice!</t>
</td>
<td align="right" style="padding-right: 16px;">
<img alt="Odoo" src="/web/static/img/logo_inverse_white_206px.png" style="height: 2em; object-fit: contain;" class="align-baseline w-auto"/>
</td>
</tr>
</table>
</td>
</tr>
<!-- BODY -->
<tr>
<td align="center">
<table width="590" cellpadding="0" cellspacing="0"
style="padding: 16px 32px; background-color: white; border-collapse:separate;">
<tr>
<td style="font-size: 14px;">
<h3 style="font-size: 20px; margin-bottom: 20px;">
<t t-if="object.company_id.name">
Hi <t t-out="object.company_id.name"/>,
</t>
<t t-else="">
Hi,
</t>
</h3>
<p style="margin-top: 12px;">
You have recieved <t t-if="invoice_count > 1">new electronic invoices</t><t t-else="">a new electronic invoice</t>!
</p>
<t t-set="MAX_INVOICES_TO_DISPLAY" t-value="5"/>
<t t-foreach="invoices[:MAX_INVOICES_TO_DISPLAY]" t-as="inv">
<t t-if="not inv_first">
<div style="background-color:#EEEEEE; height:1px; width: 60%; margin: 16px auto; border:none;"></div>
</t>
<p style="line-height: 1.7em; padding-top: 16px;">
<t t-if="inv.name or inv.ref">
<span style="font-weight:bold;">Invoice Ref:</span> <t t-out="inv.name or inv.ref"/><br/>
</t>
<t t-if="inv.partner_id.name">
<span style="font-weight:bold;">Vendor:</span> <t t-out="inv.partner_id.name"/><br/>
</t>
<t t-if="inv.amount_total">
<span style="font-weight:bold;">Amount:</span> <t t-out="inv.amount_total" t-options="{'widget': 'monetary', 'display_currency': inv.currency_id or object.company_id.currency_id}"/><br/>
</t>
<t t-if="inv.invoice_date_due">
<span style="font-weight:bold;">Due date:</span> <t t-out="inv.invoice_date_due"/>
</t>
</p>
</t>
<div style="text-align: center; padding-top: 24px;">
<a t-if="invoice_count != 1" t-attf-href="/odoo/accounting/action-account.action_account_moves_email_preview?active_ids={{ invoice_preview_ids }}"
target="_blank"
t-attf-style="padding: 12px 24px; font-size: 14px; font-weight: bold; color: #FFFFFF; text-decoration: none !important; background-color: #008384; border-radius:3px; display: inline-block;">
Consult Invoices
</a>
<a t-else="" t-attf-href="/odoo/accounting/{{ object.id }}/account.move/{{ invoices.id }}"
target="_blank"
t-attf-style="padding: 12px 24px; font-size: 14px; font-weight: bold; color: #FFFFFF; text-decoration: none !important; background-color: #008384; border-radius:3px; display: inline-block;">
Consult Invoice
</a>
<p style="font-size: 11px; margin-top: 8px; color: #777;">Time to crunch some numbers</p>
</div>
<br/>
<p style="text-align: center; margin-top: 16px;">
If you'd like to unsubscribe from receiving emails for incoming invoices click <a t-attf-href="/my/journal/{{ object.id }}/unsubscribe">here</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</field>
</record>
<record id="mail_template_invoice_subscriber" model="mail.template" forcecreate="1">
<field name="name">Journal Notification</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="subject">{{ object.company_id.name }} - New invoice in {{ object.journal_id.display_name or 'Invoices' }} journal</field>
<field name="email_from">{{ object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted }}</field>
<field name="use_default_to" eval="False"/>
<field name="auto_delete" eval="True"/>
<field name="body_html" type="html">
<t t-set="portal_url" t-value="object.get_portal_url()"/>
<t t-set="unsubscribe_url" t-value="ctx.get('unsubscribe_url', False)"/>
<div style="margin:0; padding:0; color:#2c2431;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%; background:#f7f4f8; padding:40px 0;">
<tr>
<td align="center">
<table cellpadding="0" cellspacing="0" border="0" width="640" style="width:100%; max-width:640px; background:#ffffff; border-radius:16px; overflow:hidden; box-shadow:0 20px 45px rgba(56, 37, 60, 0.12);">
<tr>
<td colspan="2" style="background:linear-gradient(140deg,#714B67 0%,#8a6381 55%,#bfa8c2 100%); color:#ffffff; padding:38px;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%;">
<tr>
<td style="font-size:13px; letter-spacing:0.3px; text-transform:uppercase; opacity:0.78;">
<t t-if="object.is_sale_document(include_receipts=True)">Outbound Invoice</t>
<t t-else="">Incoming Bill</t>
</td>
<td align="right">
<img alt="Odoo" src="/web/static/img/logo_inverse_white_206px.png" style="height:30px; width:92px; object-fit:contain;"/>
</td>
</tr>
<tr>
<td colspan="2" style="padding-top:22px; font-size:26px; line-height:1.45; font-weight:600; color:#ffffff;">
New invoice in <t t-out="object.journal_id.display_name"/>
</td>
</tr>
<tr>
<td colspan="2" style="padding-top:18px; font-size:14px; opacity:0.85; line-height:1.6; color:#ffffff;">
A new invoice was created in <t t-out="object.journal_id.display_name"/> journal of <t t-out="object.company_id.name"/>!
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2" style="padding:34px 38px;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%; border-collapse:separate; border-spacing:0 16px;">
<tr>
<td colspan="2" style="padding:0;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%; background:#fbf7fc; border-radius:16px;">
<tr>
<td style="padding:24px 26px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Document</div>
<div style="margin-top:8px; font-size:20px; font-weight:600; color:#2c2431; word-break:break-word;">
<t t-out="object._get_move_display_name()"/>
</div>
<t t-if="object.ref">
<div style="margin-top:6px; color:#7f6c84;">Ref: <t t-out="object.ref"/></div>
</t>
</td>
<t t-if="not object.currency_id.is_zero(object.amount_total)">
<td style="padding:24px 26px; border-left:1px solid #efe6f3;" align="right">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Total</div>
<div style="margin-top:8px; font-size:22px; font-weight:600; color:#2c2431;">
<t t-out="format_amount(object.amount_total, object.currency_id)"/>
</div>
</td>
</t>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2" style="padding:0;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%; margin-top:18px;">
<tr>
<td style="padding:0;">
<div style="display:flex; flex-wrap:wrap; gap:12px; justify-content:flex-start;">
<t t-if="object.partner_id">
<div style="flex:0 1 180px; min-width:160px; background:#fff; border:1px solid #efe6f3; border-radius:12px; padding:12px 16px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Partner</div>
<div style="margin-top:6px; font-size:15px; font-weight:500; color:#2c2431; word-break:break-word;">
<t t-out="object.partner_id.display_name"/>
</div>
</div>
</t>
<div style="flex:0 1 150px; min-width:140px; background:#fff; border:1px solid #efe6f3; border-radius:12px; padding:12px 16px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Invoice Date</div>
<div style="margin-top:6px; font-size:15px; color:#2c2431;">
<t t-out="format_date(object.invoice_date or object.date)"/>
</div>
</div>
<t t-if="object.invoice_date_due">
<div style="flex:0 1 150px; min-width:140px; background:#fff; border:1px solid #efe6f3; border-radius:12px; padding:12px 16px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Due Date</div>
<div style="margin-top:6px; font-size:15px; color:#2c2431;">
<t t-out="format_date(object.invoice_date_due)"/>
</div>
</div>
</t>
<t t-if="object.payment_state in ('paid', 'in_payment')">
<div style="flex:0 1 180px; min-width:160px; background:#fff; border:1px solid #efe6f3; border-radius:12px; padding:12px 16px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Payment Status</div>
<div style="margin-top:6px; font-size:15px; color:#2c2431; text-transform:capitalize;">
This invoice is already paid
</div>
</div>
</t>
<t t-if="object.currency_id != object.company_currency_id">
<div style="flex:0 1 150px; min-width:140px; background:#fff; border:1px solid #efe6f3; border-radius:12px; padding:12px 16px;">
<div style="font-size:12px; color:#8d7a92; text-transform:uppercase; letter-spacing:0.45px;">Currency</div>
<div style="margin-top:6px; font-size:15px; color:#2c2431;">
<t t-out="object.currency_id.display_name"/>
</div>
</div>
</t>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<div style="margin:18px 0 0; padding:18px 22px; background:#f9f2f9; border-radius:12px; border:1px solid #eadff0; font-size:13px; color:#6f5c73; line-height:1.6;">
<strong style="color:#2c2431;">Files included:</strong> the original document(s) are attached for your convenience.
</div>
<div style="margin-top:32px; text-align:center;" t-if="object.move_type != 'in_invoice'">
<a t-if="portal_url" t-attf-href="{{ portal_url }}"
style="display:inline-block; margin:0 10px 14px; padding:13px 30px; min-width:210px; background:linear-gradient(135deg,#714B67 0%,#9b77a3 100%); color:#FFFFFF; text-decoration:none; border-radius:12px; font-weight:600; font-size:14px;"
target="_blank">
View on Portal
</a>
</div>
<p style="margin:28px 0 0; font-size:12px; color:#8f8596; text-align:center;">
You receive this message because you are listed as a watcher on
<strong t-out="object.journal_id.display_name or 'this journal'"/>.
<span style="display:block; margin:18px auto; height:1px; max-width:420px; background:#ece3ed;"></span>
<t t-if="unsubscribe_url">
Prefer to stop receiving these? <a t-attf-href="{{ unsubscribe_url }}" style="color:#8f8596; text-decoration:underline;" target="_blank">Unsubscribe here</a>.
</t>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- ONBOARDING STEPS -->
<!-- INVOICING -->
<record id="onboarding_onboarding_step_company_data" model="onboarding.onboarding.step">
<field name="title">Set Company Data</field>
<field name="description">Set your company's data for documents header/footer.</field>
<field name="button_text">Let's start!</field>
<field name="done_text">Looks great!</field>
<field name="panel_step_open_action_name">action_open_step_company_data</field>
<field name="step_image" type="base64" file="base/static/img/onboarding_company-data.png"></field>
<field name="step_image_filename">onboarding_company-data.png</field>
<field name="step_image_alt">Onboarding Company Data</field>
<field name="sequence">1</field>
</record>
<record id="onboarding_onboarding_step_base_document_layout" model="onboarding.onboarding.step">
<field name="title">Documents Layout</field>
<field name="description">Customize the look of your documents.</field>
<field name="button_text">Customize</field>
<field name="done_text">Looks great!</field>
<field name="panel_step_open_action_name">action_open_step_base_document_layout</field>
<field name="step_image" type="base64" file="base/static/img/onboarding_quotation-layout.png"></field>
<field name="step_image_filename">onboarding_quotation-layout.png</field>
<field name="step_image_alt">Onboarding Documents Layout</field>
<field name="sequence">3</field>
</record>
<!-- DASHBOARD -->
<record id="onboarding_onboarding_step_fiscal_year" model="onboarding.onboarding.step">
<field name="title">Set Periods</field>
<field name="description">Define your fiscal years &amp; tax returns periodicity.</field>
<field name="button_text">Configure</field>
<field name="done_text">Step completed!</field>
<field name="panel_step_open_action_name">action_open_step_fiscal_year</field>
<field name="step_image" type="base64" file="base/static/img/onboarding_accounting-periods.png"></field>
<field name="step_image_filename">onboarding_accounting-periods.png</field>
<field name="step_image_alt">Onboarding Accounting Periods</field>
<field name="sequence">1</field>
</record>
<record id="onboarding_onboarding_step_chart_of_accounts" model="onboarding.onboarding.step">
<field name="title">Review Chart of Accounts</field>
<field name="description">Set up your chart of accounts and record initial balances.</field>
<field name="button_text">Review Accounts</field>
<field name="done_text">Chart of accounts set!</field>
<field name="panel_step_open_action_name">action_open_step_chart_of_accounts</field>
<field name="step_image" type="base64" file="base/static/img/onboarding_chart-of-accounts.png"></field>
<field name="step_image_filename">onboarding_chart-of-accounts.png</field>
<field name="step_image_alt">Onboarding Bank Account</field>
<field name="sequence">4</field>
</record>
<!-- WITHOUT PANEL -->
<record id="onboarding_onboarding_step_sales_tax" model="onboarding.onboarding.step">
<field name="title">Taxes</field>
<!-- Fields values used if/when added in a panel within other modules -->
<field name="description">Choose a default sales tax for your products.</field>
<field name="button_text">Set taxes</field>
<field name="done_text">Step Completed!</field>
<field name="panel_step_open_action_name">action_open_step_sales_tax</field>
<field name="step_image" type="base64" file="base/static/img/onboarding_puzzle.png"></field>
<field name="step_image_filename">onboarding_puzzle.png</field>
<field name="step_image_alt">Onboarding Bank Account</field>
<field name="sequence">100</field> <!-- after "Online Payment" -->
</record>
<record id="onboarding_onboarding_account_dashboard" model="onboarding.onboarding">
<field name="name">Account Dashboard Onboarding</field>
<field name="step_ids" eval="[
Command.link(ref('account.onboarding_onboarding_step_company_data')),
Command.link(ref('account.onboarding_onboarding_step_fiscal_year')),
Command.link(ref('account.onboarding_onboarding_step_chart_of_accounts')),
]"/>
<field name="route_name">account_dashboard</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<record id="europe_vat" model="res.country.group">
<field name="name">European Union VAT</field>
<field name="code">EU-VAT</field>
<field name="country_ids" eval="[Command.set([
ref('base.at'),ref('base.be'),ref('base.bg'),ref('base.hr'),ref('base.cy'),
ref('base.cz'),ref('base.dk'),ref('base.ee'),ref('base.fi'),ref('base.fr'),
ref('base.de'),ref('base.gr'),ref('base.hu'),ref('base.ie'),ref('base.it'),
ref('base.lv'),ref('base.lt'),ref('base.lu'),ref('base.mt'),ref('base.nl'),
ref('base.pl'),ref('base.pt'),ref('base.ro'),ref('base.sk'),ref('base.si'),
ref('base.es'),ref('base.se')])]"/>
<field name="exclude_state_ids" eval="[Command.set([
ref('base.state_es_ce'), ref('base.state_es_ml'),
ref('base.state_es_tf'), ref('base.state_es_gc'),
ref('base.state_nl_bq1'), ref('base.state_nl_bq2'),
ref('base.state_nl_bq3'),
])]"/>
</record>
<record id="intrastat" model="res.country.group">
<field name="name">Intrastat</field>
<field name="code">INTRASTAT</field>
<field name="country_ids" eval="[Command.set([
ref('base.at'),ref('base.be'),ref('base.bg'),ref('base.hr'),ref('base.cy'),
ref('base.cz'),ref('base.dk'),ref('base.ee'),ref('base.fi'),ref('base.fr'),
ref('base.de'),ref('base.gr'),ref('base.hu'),ref('base.ie'),ref('base.it'),
ref('base.lv'),ref('base.lt'),ref('base.lu'),ref('base.mt'),ref('base.nl'),
ref('base.pl'),ref('base.pt'),ref('base.ro'),ref('base.sk'),ref('base.si'),
ref('base.es'),ref('base.se'),ref('base.uk'),ref('base.xi'),
])]"/>
</record>
</data>
</odoo>

View file

@ -4,11 +4,19 @@
<field name="name">Account: Post draft entries with auto_post enabled and accounting date up to today</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<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._autopost_draft_entries()</field>
<field name="state">code</field>
</record>
<record id="ir_cron_account_move_send" model="ir.cron">
<field name="name">Send invoices automatically</field>
<field name="model_id" ref="model_account_move"/>
<field name="state">code</field>
<field name="code">model._cron_account_move_send()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
</record>
</odoo>

View file

@ -0,0 +1,45 @@
"id","name","code","account_type","tag_ids","reconcile","non_trade"
"current_assets","Current Assets","1010","asset_current","","False","False"
"stock_valuation","Stock Valuation","1101","asset_current","","False","False"
"cost_of_production","Cost of Production","1104","asset_current","","True","False"
"wip","Work in Progress","1105","asset_current","","True","False"
"receivable","Account Receivable","1210","asset_receivable","","True","False"
"to_receive_rec","Products to receive","1211","asset_current","","True","False"
"owner_current_account","Owner's Current Account","1220","asset_receivable","","True","True"
"prepaid_expenses","Prepaid Expenses","1280","asset_current","","False","False"
"tax_paid","Tax Paid","1310","asset_current","","False","False"
"tax_receivable","Tax Receivable","1320","asset_receivable","","True","True"
"prepayments","Prepayments","1410","asset_prepayments","","False","False"
"fixed_assets","Fixed Asset","1510","asset_fixed","","False","False"
"non_current_assets","Non-current assets","1910","asset_non_current","","False","False"
"current_liabilities","Current Liabilities","2010","liability_current","","False","False"
"payable","Account Payable","2110","liability_payable","","True","False"
"to_receive_pay","Bills to receive","2111","liability_current","","True","False"
"deferred_revenue","Deferred Revenue","2120","liability_current","","False","False"
"salary_payable","Salary Payable","2300","liability_current","","True","False"
"employee_payroll_taxes","Employee Payroll Taxes","2301","liability_current","","True","False"
"employer_payroll_taxes","Employer Payroll Taxes","2302","liability_current","","True","False"
"tax_received","Tax Received","2510","liability_current","","False","False"
"tax_payable","Tax Payable","2520","liability_payable","","True","True"
"non_current_liabilities","Non-current Liabilities","2910","liability_non_current","","False","False"
"capital","Capital","3010","equity","","False","False"
"dividends","Dividends","3020","equity","","False","False"
"income","Product Sales","4000","income","account.account_tag_operating","False","False"
"income_currency_exchange","Foreign Exchange Gain","4410","income","account.account_tag_financing","False","False"
"cash_diff_income","Cash Difference Gain","4420","income","account.account_tag_investing","False","False"
"cash_discount_loss","Cash Discount Loss","4430","expense","","False","False"
"other_income","Other Income","4500","income_other","","False","False"
"cost_of_goods_sold","Cost of Goods Sold","5000","expense_direct_cost","account.account_tag_operating","False","False"
"expense","Expenses","6000","expense","account.account_tag_operating","False","False"
"stock_variation","Stock Variation","6100","expense","","False","False"
"expense_invest","Purchase of Equipments","6110","expense","account.account_tag_investing","False","False"
"expense_rent","Rent","6120","expense","account.account_tag_investing","False","False"
"expense_finance","Bank Fees","6200","expense","account.account_tag_financing","False","False"
"expense_salary","Salary Expenses","6300","expense","account.account_tag_operating","False","False"
"expense_currency_exchange","Foreign Exchange Loss","6410","expense","account.account_tag_financing","False","False"
"cash_diff_expense","Cash Difference Loss","6420","expense","account.account_tag_investing","False","False"
"cash_discount_gain","Cash Discount Gain","6430","income","","False","False"
"expense_rd","RD Expenses","9610","expense","account.account_tag_investing","False","False"
"expense_sales","Sales Expenses","9620","expense","account.account_tag_investing","False","False"
"pos_receivable","Account Receivable (PoS)","1013","asset_receivable","","True","False"
"credit_card","Credit Card","201100","liability_credit_card","","False","False"
1 id name code account_type tag_ids reconcile non_trade
2 current_assets Current Assets 1010 asset_current False False
3 stock_valuation Stock Valuation 1101 asset_current False False
4 cost_of_production Cost of Production 1104 asset_current True False
5 wip Work in Progress 1105 asset_current True False
6 receivable Account Receivable 1210 asset_receivable True False
7 to_receive_rec Products to receive 1211 asset_current True False
8 owner_current_account Owner's Current Account 1220 asset_receivable True True
9 prepaid_expenses Prepaid Expenses 1280 asset_current False False
10 tax_paid Tax Paid 1310 asset_current False False
11 tax_receivable Tax Receivable 1320 asset_receivable True True
12 prepayments Prepayments 1410 asset_prepayments False False
13 fixed_assets Fixed Asset 1510 asset_fixed False False
14 non_current_assets Non-current assets 1910 asset_non_current False False
15 current_liabilities Current Liabilities 2010 liability_current False False
16 payable Account Payable 2110 liability_payable True False
17 to_receive_pay Bills to receive 2111 liability_current True False
18 deferred_revenue Deferred Revenue 2120 liability_current False False
19 salary_payable Salary Payable 2300 liability_current True False
20 employee_payroll_taxes Employee Payroll Taxes 2301 liability_current True False
21 employer_payroll_taxes Employer Payroll Taxes 2302 liability_current True False
22 tax_received Tax Received 2510 liability_current False False
23 tax_payable Tax Payable 2520 liability_payable True True
24 non_current_liabilities Non-current Liabilities 2910 liability_non_current False False
25 capital Capital 3010 equity False False
26 dividends Dividends 3020 equity False False
27 income Product Sales 4000 income account.account_tag_operating False False
28 income_currency_exchange Foreign Exchange Gain 4410 income account.account_tag_financing False False
29 cash_diff_income Cash Difference Gain 4420 income account.account_tag_investing False False
30 cash_discount_loss Cash Discount Loss 4430 expense False False
31 other_income Other Income 4500 income_other False False
32 cost_of_goods_sold Cost of Goods Sold 5000 expense_direct_cost account.account_tag_operating False False
33 expense Expenses 6000 expense account.account_tag_operating False False
34 stock_variation Stock Variation 6100 expense False False
35 expense_invest Purchase of Equipments 6110 expense account.account_tag_investing False False
36 expense_rent Rent 6120 expense account.account_tag_investing False False
37 expense_finance Bank Fees 6200 expense account.account_tag_financing False False
38 expense_salary Salary Expenses 6300 expense account.account_tag_operating False False
39 expense_currency_exchange Foreign Exchange Loss 6410 expense account.account_tag_financing False False
40 cash_diff_expense Cash Difference Loss 6420 expense account.account_tag_investing False False
41 cash_discount_gain Cash Discount Gain 6430 income False False
42 expense_rd RD Expenses 9610 expense account.account_tag_investing False False
43 expense_sales Sales Expenses 9620 expense account.account_tag_investing False False
44 pos_receivable Account Receivable (PoS) 1013 asset_receivable True False
45 credit_card Credit Card 201100 liability_credit_card False False

View file

@ -0,0 +1,3 @@
"id","name","country_id","auto_apply","sequence"
"template_generic_domestic_fiscal_position","Domestic","base.us","True",10
"template_generic_export_fiscal_position","Foreign Trade","","True",20
1 id name country_id auto_apply sequence
2 template_generic_domestic_fiscal_position Domestic base.us True 10
3 template_generic_export_fiscal_position Foreign Trade True 20

View file

@ -0,0 +1,17 @@
"id","name","description","invoice_label","amount","type_tax_use","tax_group_id","repartition_line_ids/document_type","repartition_line_ids/factor_percent","repartition_line_ids/repartition_type","repartition_line_ids/account_id","fiscal_position_ids","original_tax_ids"
"sale_tax_template","15%","","","15","sale","tax_group_15","invoice","100","base","","template_generic_domestic_fiscal_position",""
"","","","","","","","invoice","100","tax","tax_received","",""
"","","","","","","","refund","100","base","","",""
"","","","","","","","refund","100","tax","tax_received","",""
"purchase_tax_template","15%","","","15","purchase","tax_group_15","invoice","100","base","","template_generic_domestic_fiscal_position",""
"","","","","","","","invoice","100","tax","tax_paid","",""
"","","","","","","","refund","100","base","","",""
"","","","","","","","refund","100","tax","tax_paid","",""
"sale_export_tax_template","0% Exports","","","0","sale","tax_group_0","invoice","100","base","","template_generic_export_fiscal_position","sale_tax_template"
"","","","","","","","invoice","100","tax","","",""
"","","","","","","","refund","100","base","","",""
"","","","","","","","refund","100","tax","","",""
"purchase_import_tax_template","0% Imports","","","0","purchase","tax_group_0","invoice","100","base","","template_generic_export_fiscal_position","purchase_tax_template"
"","","","","","","","invoice","100","tax","","",""
"","","","","","","","refund","100","base","","",""
"","","","","","","","refund","100","tax","","",""
1 id name description invoice_label amount type_tax_use tax_group_id repartition_line_ids/document_type repartition_line_ids/factor_percent repartition_line_ids/repartition_type repartition_line_ids/account_id fiscal_position_ids original_tax_ids
2 sale_tax_template 15% 15 sale tax_group_15 invoice 100 base template_generic_domestic_fiscal_position
3 invoice 100 tax tax_received
4 refund 100 base
5 refund 100 tax tax_received
6 purchase_tax_template 15% 15 purchase tax_group_15 invoice 100 base template_generic_domestic_fiscal_position
7 invoice 100 tax tax_paid
8 refund 100 base
9 refund 100 tax tax_paid
10 sale_export_tax_template 0% Exports 0 sale tax_group_0 invoice 100 base template_generic_export_fiscal_position sale_tax_template
11 invoice 100 tax
12 refund 100 base
13 refund 100 tax
14 purchase_import_tax_template 0% Imports 0 purchase tax_group_0 invoice 100 base template_generic_export_fiscal_position purchase_tax_template
15 invoice 100 tax
16 refund 100 base
17 refund 100 tax

View file

@ -0,0 +1,3 @@
id,name,country_id,tax_payable_account_id,tax_receivable_account_id
tax_group_15,Tax 15%,base.us,tax_payable,tax_receivable
tax_group_0,Tax 0%,base.us,tax_payable,tax_receivable
1 id name country_id tax_payable_account_id tax_receivable_account_id
2 tax_group_15 Tax 15% base.us tax_payable tax_receivable
3 tax_group_0 Tax 0% base.us tax_payable tax_receivable

View file

@ -6,186 +6,481 @@ from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, Command
from odoo.tools.misc import file_open, formatLang
from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
class AccountChartTemplate(models.Model):
class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
def _get_demo_data(self):
def _get_demo_data(self, company=False):
"""Generate the demo data related to accounting."""
# This is a generator because data created here might be referenced by xml_id to data
# created later but defined in this same function.
yield self._get_demo_data_move()
yield self._get_demo_data_statement()
yield self._get_demo_data_transactions()
yield self._get_demo_data_reconcile_model()
yield self._get_demo_data_attachment()
yield self._get_demo_data_mail_message()
yield self._get_demo_data_mail_activity()
return {
**self._get_demo_data_products(company),
'account.move': self._get_demo_data_move(company),
'account.bank.statement': self._get_demo_data_statement(company),
'account.bank.statement.line': self._get_demo_data_transactions(company),
'account.reconcile.model': self._get_demo_data_reconcile_model(company),
'ir.attachment': self._get_demo_data_attachment(company),
'mail.message': self._get_demo_data_mail_message(company),
'mail.activity': self._get_demo_data_mail_activity(company),
'product.product': self._get_demo_data_product(),
'res.partner.bank': self._get_demo_data_bank(company),
'res.partner': self._get_demo_data_partner(),
'res.users': self._get_demo_data_user(),
'account.journal': self._get_demo_data_journal(company),
}
def _get_demo_exception_product_template_xml_ids(self):
""" Return demo product template xml ids to not put taxes on"""
return []
def _get_demo_exception_product_variant_xml_ids(self):
""" Return demo product variant xml ids to not put taxes on"""
return ['product.office_combo']
def _get_demo_data_products(self, company):
# Only needed for the first company
if company != self.env.ref('base.main_company', raise_if_not_found=False):
return {}
taxes = {}
if company.account_sale_tax_id:
taxes.update({'taxes_id': [Command.link(company.account_sale_tax_id.id)]})
if company.account_purchase_tax_id:
taxes.update({'supplier_taxes_id': [Command.link(company.account_purchase_tax_id.id)]})
if not taxes:
return {}
IMD = self.env['ir.model.data'].sudo()
product_templates = sorted(
set(IMD.search([('model', '=', 'product.template')]).mapped('complete_name'))
- set(self._get_demo_exception_product_template_xml_ids())
)
product_variants = sorted(
set(IMD.search([('model', '=', 'product.product')]).mapped('complete_name'))
- set(self._get_demo_exception_product_variant_xml_ids())
)
return {
'product.template': {d: taxes for d in product_templates},
'product.product': {d: taxes for d in product_variants},
}
def _post_load_demo_data(self, company=False):
invoices = (
self.ref('demo_invoice_1')
+ self.ref('demo_invoice_2')
+ self.ref('demo_invoice_3')
+ self.ref('demo_invoice_followup')
+ self.ref('demo_invoice_5')
+ self.ref('demo_invoice_6')
+ self.ref('demo_invoice_7')
+ self.ref('demo_invoice_8')
+ self.ref('demo_invoice_equipment_purchase')
+ self.ref('demo_invoice_9')
+ self.ref('demo_invoice_10')
+ self.ref('demo_move_auto_reconcile_1')
+ self.ref('demo_move_auto_reconcile_2')
+ self.ref('demo_move_auto_reconcile_3')
+ self.ref('demo_move_auto_reconcile_4')
+ self.ref('demo_move_auto_reconcile_5')
+ self.ref('demo_move_auto_reconcile_6')
+ self.ref('demo_move_auto_reconcile_7')
)
# the invoice_extract acts like a placeholder for the OCR to be ran and doesn't contain
# any lines yet
for move in invoices:
try:
move.action_post()
except (UserError, ValidationError):
_logger.exception('Error while posting demo data')
@api.model
def _get_demo_data_move(self):
cid = self.env.company.id
ref = self.env.ref
return ('account.move', {
f'{cid}_demo_invoice_1': {
'move_type': 'out_invoice',
'partner_id': ref('base.res_partner_12').id,
'invoice_user_id': ref('base.user_demo').id,
'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
'invoice_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': ref('product.consu_delivery_02').id, 'quantity': 5}),
Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
],
def _get_demo_data_bank(self, company=False):
if company.root_id.partner_id.bank_ids:
return {}
return {
'demo_bank_1': {
'acc_number': f'BANK{company.id}34567890',
'partner_id': company.root_id.partner_id.id,
'journal_id': 'bank',
'allow_out_payment': True,
},
f'{cid}_demo_invoice_2': {
'move_type': 'out_invoice',
'partner_id': ref('base.res_partner_2').id,
'invoice_user_id': False,
'invoice_date': time.strftime('%Y-%m-08'),
'invoice_line_ids': [
Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
Command.create({'product_id': ref('product.consu_delivery_01').id, 'quantity': 20}),
],
},
f'{cid}_demo_invoice_3': {
'move_type': 'out_invoice',
'partner_id': ref('base.res_partner_2').id,
'invoice_user_id': False,
'invoice_date': time.strftime('%Y-%m-08'),
'invoice_line_ids': [
Command.create({'product_id': ref('product.consu_delivery_01').id, 'quantity': 5}),
Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
],
},
f'{cid}_demo_invoice_followup': {
'move_type': 'out_invoice',
'partner_id': ref('base.res_partner_2').id,
'invoice_user_id': ref('base.user_demo').id,
'invoice_payment_term_id': ref('account.account_payment_term_immediate').id,
'invoice_date': (fields.Date.today() + timedelta(days=-15)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': ref('product.consu_delivery_02').id, 'quantity': 5}),
Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
],
},
f'{cid}_demo_invoice_5': {
'move_type': 'in_invoice',
'partner_id': ref('base.res_partner_12').id,
'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
'invoice_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 10.0, 'quantity': 1}),
Command.create({'product_id': ref('product.product_order_01').id, 'price_unit': 4.0, 'quantity': 5}),
],
},
f'{cid}_demo_invoice_extract': {
'move_type': 'in_invoice',
},
f'{cid}_demo_invoice_equipment_purchase': {
'move_type': 'in_invoice',
'ref': 'INV/2018/0057',
'partner_id': ref('base.res_partner_12').id,
'invoice_user_id': False,
'invoice_date': '2018-09-17',
'invoice_line_ids': [
Command.create({'name': 'Redeem Reference Number: PO02529', 'quantity': 1, 'price_unit': 541.10}),
],
},
})
}
@api.model
def _get_demo_data_statement(self):
cid = self.env.company.id
ref = self.env.ref
bnk_journal = self.env['account.journal'].search(
domain=[('type', '=', 'bank'), ('company_id', '=', cid)],
def _get_demo_data_partner(self):
if self.env.ref('base.res_partner_2', raise_if_not_found=False):
return {}
return {
'base.res_partner_2': {'name': 'Demo Partner 2'},
'base.res_partner_3': {'name': 'Demo Partner 3'},
'base.res_partner_4': {'name': 'Demo Partner 4'},
'base.res_partner_5': {'name': 'Demo Partner 5'},
'base.res_partner_6': {'name': 'Demo Partner 6'},
'base.res_partner_12': {'name': 'Demo Partner 12'},
'base.partner_demo': {'name': 'Marc Demo'},
}
@api.model
def _get_demo_data_user(self):
if self.env.ref('base.user_demo', raise_if_not_found=False):
return {}
return {
'base.user_demo': {'name': 'Marc Demo', 'login': 'demo'}
}
@api.model
def _get_demo_data_product(self):
if self.env.ref('product.product_delivery_01', raise_if_not_found=False):
return {}
return {
'product.product_delivery_01': {'name': 'product_delivery_01', 'type': 'consu'},
'product.product_delivery_02': {'name': 'product_delivery_02', 'type': 'consu'},
'product.consu_delivery_01': {'name': 'consu_delivery_01', 'type': 'consu'},
'product.consu_delivery_02': {'name': 'consu_delivery_02', 'type': 'consu'},
'product.consu_delivery_03': {'name': 'consu_delivery_03', 'type': 'consu'},
'product.product_order_01': {'name': 'product_order_01', 'type': 'consu'},
}
@api.model
def _get_demo_data_journal(self, company=False):
if company.partner_id.bank_ids:
# if a bank is created in xml, link it to the journal
return {
'bank': {
'bank_account_id': company.partner_id.bank_ids[0].id,
}
}
return {}
@api.model
def _get_demo_data_move(self, company=False):
one_month_ago = fields.Date.today() + relativedelta(months=-1)
cid = company.id or self.env.company.id
misc_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'general'),
],
limit=1,
)
return ('account.bank.statement', {
f'{cid}_demo_bank_statement_0': {
'name': f'{bnk_journal.name} - {time.strftime("%Y")}-01-01/1',
'balance_end_real': 6378.0,
'balance_start': 0.0,
bank_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'bank'),
],
limit=1,
)
default_receivable = self.env.company.partner_id.with_company(company or self.env.company).property_account_receivable_id
income_account = self.env['account.account'].with_company(company or self.env.company).search([
*self.env['account.account']._check_company_domain(cid),
('account_type', '=', 'income'),
('id', '!=', (company or self.env.company).account_journal_early_pay_discount_gain_account_id.id)
], limit=1)
return {
self.company_xmlid('demo_invoice_1'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_12',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'delivery_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_invoice_2'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_2',
'invoice_user_id': False,
'invoice_date': (fields.Date.today() + timedelta(days=-2)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-2)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_01', 'quantity': 20}),
],
},
self.company_xmlid('demo_invoice_3'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_2',
'invoice_user_id': False,
'invoice_date': (fields.Date.today() + timedelta(days=-3)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-3)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_01', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_invoice_followup'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_2',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_immediate',
'invoice_date': (fields.Date.today() + timedelta(days=-15)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-15)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_invoice_5'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_5',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': (fields.Date.today() + timedelta(days=-40)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-40)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_order_01', 'price_unit': 200, 'quantity': 10}),
],
},
self.company_xmlid('demo_invoice_6'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_5',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': (fields.Date.today() + timedelta(days=-35)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-35)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_order_01', 'price_unit': 100.0, 'quantity': 10}),
],
},
self.company_xmlid('demo_invoice_7'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_5',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': (fields.Date.today() + relativedelta(months=-1)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + relativedelta(months=-1)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_order_01', 'price_unit': 275, 'quantity': 1}),
],
},
self.company_xmlid('demo_invoice_8'): {
'move_type': 'in_invoice',
'partner_id': 'base.res_partner_4',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'delivery_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_order_01', 'price_unit': 10.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_delivery_01', 'price_unit': 4, 'quantity': 5}),
],
'message_main_attachment_id': 'ir_attachment_in_invoice_1',
},
self.company_xmlid('demo_invoice_equipment_purchase'): {
'move_type': 'in_invoice',
'ref': f'INV/{(fields.Date.today() + timedelta(days=-20)).year}/0057',
'partner_id': 'base.res_partner_3',
'invoice_user_id': False,
'invoice_date': (fields.Date.today() + timedelta(days=-20)).strftime("%Y-%m-%d"),
'delivery_date': (fields.Date.today() + timedelta(days=-20)).strftime("%Y-%m-%d"),
'invoice_line_ids': [
Command.create({'name': 'Redeem Reference Number: PO02529', 'quantity': 1, 'price_unit': 622.27}),
],
'message_main_attachment_id': 'ir_attachment_in_invoice_2',
},
self.company_xmlid('demo_invoice_9'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_6',
'invoice_user_id': False,
'invoice_date': time.strftime('%Y-%m-%d'),
'delivery_date': time.strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 50.00, 'quantity': 15}),
],
},
self.company_xmlid('demo_invoice_10'): {
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_5',
'invoice_user_id': False,
'invoice_date': (fields.Date.today() + timedelta(days=-5)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-5)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_03', 'price_unit': 1799, 'quantity': 1}),
],
},
self.company_xmlid('demo_move_auto_reconcile_1'): {
'move_type': 'out_refund',
'partner_id': 'base.res_partner_12',
'invoice_date': one_month_ago.strftime("%Y-%m-02"),
'delivery_date': one_month_ago.strftime("%Y-%m-02"),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_move_auto_reconcile_2'): {
'move_type': 'out_refund',
'partner_id': 'base.res_partner_12',
'invoice_date': one_month_ago.strftime("%Y-%m-03"),
'delivery_date': one_month_ago.strftime("%Y-%m-03"),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
],
},
self.company_xmlid('demo_move_auto_reconcile_3'): {
'move_type': 'in_refund',
'partner_id': 'base.res_partner_4',
'invoice_date': time.strftime('%Y-%m-01'),
'delivery_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_delivery_01', 'price_unit': 10.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_order_01', 'price_unit': 4.0, 'quantity': 5}),
],
'message_main_attachment_id': 'ir_attachment_in_invoice_1',
},
self.company_xmlid('demo_move_auto_reconcile_4'): {
'move_type': 'out_refund',
'partner_id': 'base.res_partner_2',
'invoice_date': (fields.Date.today() + timedelta(days=-10)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-10)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_move_auto_reconcile_5'): {
'move_type': 'out_refund',
'partner_id': 'base.res_partner_2',
'invoice_date': (fields.Date.today() + timedelta(days=-2)).strftime('%Y-%m-%d'),
'delivery_date': (fields.Date.today() + timedelta(days=-2)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_01', 'quantity': 5}),
Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
self.company_xmlid('demo_move_auto_reconcile_6'): {
'move_type': 'entry',
'partner_id': 'base.res_partner_2',
'date': (fields.Date.today() + timedelta(days=-20)).strftime('%Y-%m-%d'),
'journal_id': misc_journal.id,
'line_ids': [
Command.create({'debit': 0.0, 'credit': 2500.0, 'account_id': default_receivable.id}),
Command.create({'debit': 2500.0, 'credit': 0.0, 'account_id': bank_journal.default_account_id.id}),
],
},
self.company_xmlid('demo_move_auto_reconcile_7'): {
'move_type': 'entry',
'partner_id': 'base.res_partner_2',
'date': (fields.Date.today() + timedelta(days=-20)).strftime('%Y-%m-%d'),
'journal_id': misc_journal.id,
'line_ids': [
Command.create({'debit': 2500.0, 'credit': 0.0, 'account_id': default_receivable.id}),
Command.create({'debit': 0.0, 'credit': 2500.0, 'account_id': income_account.id}),
],
},
}
@api.model
def _get_demo_data_statement(self, company=False):
cid = company.id or self.env.company.id
bnk_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'bank'),
],
limit=1,
)
return {
'demo_bank_statement_1': {
'name': "Opening Statement: First Synchronization",
'balance_end_real': 4253.0,
'balance_start': 5103.0,
'attachment_ids': [Command.set(['ir_attachment_bank_statement_1'])],
'line_ids': [
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': 'Initial balance',
'amount': 5103.0,
'date': time.strftime('%Y-01-01'),
}),
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': time.strftime('INV/%Y/00002 and INV/%Y/00003'),
'amount': 1275.0,
'date': time.strftime('%Y-01-01'),
'partner_id': ref('base.res_partner_12').id
'payment_ref': 'Office rent',
'amount': -850.0,
'date': (fields.Date.today() + relativedelta(months=-2)).strftime('%Y-%m-%d'),
}),
]
},
})
'demo_bank_statement_2': {
'name': f'{bnk_journal.name} - {(fields.Date.today() + relativedelta(months=-1)).strftime("%Y-%m-%d")}',
'balance_end_real': 6678.0,
'balance_start': 4253.0,
'attachment_ids': [Command.set(['ir_attachment_bank_statement_2'])],
'line_ids': [
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': 'Office rent',
'amount': -850.0,
'date': (fields.Date.today() + relativedelta(months=-1)).strftime('%Y-%m-%d'),
}),
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': time.strftime('INV/%Y/00006 and INV/%Y/00007'),
'amount': 1275.0,
'date': (fields.Date.today() + relativedelta(months=-1)).strftime('%Y-%m-%d'),
'partner_name': 'Open Wood Inc.',
}),
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': 'Payment of your invoice #5',
'amount': 2000.0,
'date': (fields.Date.today() + timedelta(days=-40)).strftime('%Y-%m-%d'),
'partner_name': 'Open Wood Inc.',
}),
],
},
}
@api.model
def _get_demo_data_transactions(self):
cid = self.env.company.id
ref = self.env.ref
def _get_demo_data_transactions(self, company=False):
cid = company.id or self.env.company.id
bnk_journal = self.env['account.journal'].search(
domain=[('type', '=', 'bank'), ('company_id', '=', cid)],
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'bank'),
],
limit=1,
)
return ('account.bank.statement.line', {
f'{cid}_demo_bank_statement_line_0': {
return {
'demo_bank_statement_line_0': {
'journal_id': bnk_journal.id,
'payment_ref': 'Bank Fees',
'amount': -32.58,
'date': time.strftime('%Y-01-01'),
'payment_ref': 'BILL/2024/01/0001',
'amount': -622.27,
'partner_id': 'base.res_partner_3',
},
f'{cid}_demo_bank_statement_line_1': {
'demo_bank_statement_line_1': {
'journal_id': bnk_journal.id,
'payment_ref': 'Prepayment',
'amount': 650,
'date': time.strftime('%Y-01-01'),
'partner_id': ref('base.res_partner_12').id
'payment_ref': 'Office rent',
'amount': -850.0,
},
f'{cid}_demo_bank_statement_line_2': {
'demo_bank_statement_line_2': {
'journal_id': bnk_journal.id,
'payment_ref': time.strftime(f'First {formatLang(self.env, 2000, currency_obj=self.env.company.currency_id)} of invoice %Y/00001'),
'amount': 2000,
'date': time.strftime('%Y-01-01'),
'partner_id': ref('base.res_partner_12').id
'payment_ref': 'Prepayment for invoice #9',
'amount': 650.0,
'partner_name': 'Open Wood Inc.',
},
f'{cid}_demo_bank_statement_line_3': {
'demo_bank_statement_line_3': {
'journal_id': bnk_journal.id,
'payment_ref': 'Last Year Interests',
'amount': 102.78,
'date': time.strftime('%Y-01-01'),
},
f'{cid}_demo_bank_statement_line_4': {
'demo_bank_statement_line_4': {
'journal_id': bnk_journal.id,
'payment_ref': time.strftime('INV/%Y/00002'),
'amount': 750,
'date': time.strftime('%Y-01-01'),
'partner_id': ref('base.res_partner_2').id
'payment_ref': time.strftime('INV/%Y/00008'),
'amount': 738.75,
'partner_id': 'base.res_partner_6',
},
f'{cid}_demo_bank_statement_line_5': {
'demo_bank_statement_line_5': {
'journal_id': bnk_journal.id,
'payment_ref': f'R:9772938 10/07 AX 9415116318 T:5 BRT: {formatLang(self.env, 100.0, digits=2)} C/ croip',
'amount': 96.67,
'date': time.strftime('%Y-01-01'),
},
})
}
@api.model
def _get_demo_data_reconcile_model(self):
cid = self.env.company.id
return ('account.reconcile.model', {
f'{cid}_reconcile_from_label': {
def _get_demo_data_reconcile_model(self, company=False):
return {
'reconcile_from_label': {
'name': 'Line with Bank Fees',
'rule_type': 'writeoff_suggestion',
'match_label': 'contains',
'match_label_param': 'BRT',
'line_ids': [
@ -202,8 +497,8 @@ class AccountChartTemplate(models.Model):
Command.create({
'label': 'Bank Fees',
'account_id': self._get_demo_account(
'cost_of_goods_sold',
'expense_direct_cost',
'expense_finance',
'expense',
self.env.company,
).id,
'amount_type': 'percentage',
@ -211,132 +506,171 @@ class AccountChartTemplate(models.Model):
}),
]
},
})
'owner_current_account_model': {
'name': "Owner's Current Account",
'line_ids': [
Command.create({
'label': "Owner's Current Account",
'account_id': self._get_demo_account(
'owner_current_account',
'asset_receivable',
self.env.company,
).id,
'amount_type': 'percentage',
'amount_string': '100',
}),
]
},
}
@api.model
def _get_demo_data_attachment(self):
cid = self.env.company.id
ref = self.env.ref
return ('ir.attachment', {
f'{cid}_ir_attachment_in_invoice_1': {
def _get_demo_data_attachment(self, company=False):
return {
'ir_attachment_in_invoice_1': {
'type': 'binary',
'name': 'in_invoice_yourcompany_demo.pdf',
'res_model': 'account.move',
'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
'res_id': 'demo_invoice_8',
'res_field': 'invoice_pdf_report_file',
'raw': file_open(
'account/static/demo/in_invoice_yourcompany_demo_1.pdf', 'rb'
).read()
},
f'{cid}_ir_attachment_in_invoice_2': {
'ir_attachment_in_invoice_2': {
'type': 'binary',
'name': 'in_invoice_yourcompany_demo.pdf',
'res_model': 'account.move',
'res_id': ref(f'account.{cid}_demo_invoice_equipment_purchase').id,
'res_id': 'demo_invoice_equipment_purchase',
'res_field': 'invoice_pdf_report_file',
'raw': file_open(
'account/static/demo/in_invoice_yourcompany_demo_2.pdf', 'rb'
).read()
},
})
'ir_attachment_bank_statement_1': {
'type': 'binary',
'name': 'bank_opening_statement.pdf',
'res_model': 'account.bank.statement',
'res_id': 'demo_bank_statement_1',
'raw': file_open(
'account/static/demo/bank_opening_statement.pdf', 'rb'
).read()
},
'ir_attachment_bank_statement_2': {
'type': 'binary',
'name': 'bank_statement_one_month_old.pdf',
'res_model': 'account.bank.statement',
'res_id': 'demo_bank_statement_2',
'raw': file_open(
'account/static/demo/bank_statement_one_month_old.pdf', 'rb'
).read()
},
}
@api.model
def _get_demo_data_mail_message(self):
cid = self.env.company.id
ref = self.env.ref
return ('mail.message', {
f'{cid}_mail_message_in_invoice_1': {
def _get_demo_data_mail_message(self, company=False):
return {
'mail_message_in_invoice_1': {
'model': 'account.move',
'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
'res_id': 'demo_invoice_8',
'body': 'Vendor Bill attachment',
'message_type': 'comment',
'author_id': ref('base.partner_demo').id,
'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
ref(f'account.{cid}_ir_attachment_in_invoice_1').id
'ir_attachment_in_invoice_1',
])]
},
f'{cid}_mail_message_in_invoice_2': {
'mail_message_in_invoice_2': {
'model': 'account.move',
'res_id': ref(f'account.{cid}_demo_invoice_equipment_purchase').id,
'res_id': 'demo_invoice_equipment_purchase',
'body': 'Vendor Bill attachment',
'message_type': 'comment',
'author_id': ref('base.partner_demo').id,
'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
ref(f'account.{cid}_ir_attachment_in_invoice_2').id
'ir_attachment_in_invoice_2',
])]
},
})
'mail_message_bank_statement_1': {
'model': 'account.bank.statement',
'res_id': 'demo_bank_statement_1',
'body': 'Bank Statement attachment',
'message_type': 'comment',
'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
'ir_attachment_bank_statement_1',
])]
},
'mail_message_bank_statement_2': {
'model': 'account.bank.statement',
'res_id': 'demo_bank_statement_2',
'body': 'Bank Statement attachment',
'message_type': 'comment',
'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
'ir_attachment_bank_statement_2',
])]
},
}
@api.model
def _get_demo_data_mail_activity(self):
cid = self.env.company.id
ref = self.env.ref
return ('mail.activity', {
f'{cid}_invoice_activity_1': {
'res_id': ref(f'account.{cid}_demo_invoice_3').id,
'res_model_id': ref('account.model_account_move').id,
'activity_type_id': ref('mail.mail_activity_data_todo').id,
def _get_demo_data_mail_activity(self, company=False):
return {
'invoice_activity_1': {
'res_id': 'demo_invoice_3',
'res_model_id': 'account.model_account_move',
'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Follow-up on payment',
'create_uid': ref('base.user_admin').id,
'user_id': ref('base.user_admin').id,
'create_uid': 'base.user_admin',
'user_id': 'base.user_admin',
},
f'{cid}_invoice_activity_2': {
'res_id': ref(f'account.{cid}_demo_invoice_2').id,
'res_model_id': ref('account.model_account_move').id,
'activity_type_id': ref('mail.mail_activity_data_call').id,
'invoice_activity_2': {
'res_id': 'demo_invoice_2',
'res_model_id': 'account.model_account_move',
'activity_type_id': 'mail.mail_activity_data_call',
'date_deadline': fields.Datetime.today().strftime('%Y-%m-%d %H:%M'),
'create_uid': ref('base.user_admin').id,
'user_id': ref('base.user_admin').id,
'summary': 'Follow up on missed call',
'create_uid': 'base.user_admin',
'user_id': 'base.user_admin',
},
f'{cid}_invoice_activity_3': {
'res_id': ref(f'account.{cid}_demo_invoice_1').id,
'res_model_id': ref('account.model_account_move').id,
'activity_type_id': ref('mail.mail_activity_data_todo').id,
'invoice_activity_3': {
'res_id': 'demo_invoice_1',
'res_model_id': 'account.model_account_move',
'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Include upsell',
'create_uid': ref('base.user_admin').id,
'user_id': ref('base.user_admin').id,
'create_uid': 'base.user_admin',
'user_id': 'base.user_admin',
},
f'{cid}_invoice_activity_4': {
'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
'res_model_id': ref('account.model_account_move').id,
'activity_type_id': ref('mail.mail_activity_data_todo').id,
'invoice_activity_4': {
'res_id': 'demo_invoice_8',
'res_model_id': 'account.model_account_move',
'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Update address',
'create_uid': ref('base.user_admin').id,
'user_id': ref('base.user_admin').id,
'create_uid': 'base.user_admin',
'user_id': 'base.user_admin',
},
})
@api.model
def _post_create_demo_data(self, created):
cid = self.env.company.id
if created._name == 'account.move':
# the invoice_extract acts like a placeholder for the OCR to be ran and doesn't contain
# any lines yet
for move in created - self.env.ref(f'account.{cid}_demo_invoice_extract'):
try:
move.action_post()
except Exception:
_logger.exception('Error while posting demo data')
}
@api.model
def _get_demo_account(self, xml_id, account_type, company):
"""Find the most appropriate account possible for demo data creation.
:param xml_id (str): the xml_id of the account template in the generic coa
:param account_type (str): the full xml_id of the account type wanted
:param company (Model<res.company>): the company for which we search the account
:return (Model<account.account>): the most appropriate record found
:param str xml_id: the xml_id of the account template in the generic coa
:param str account_type: the full xml_id of the account type wanted
:param company: the company for which we search the account
:return: the most appropriate ``account.account`` record found
"""
return (
self.env['account.account'].browse(self.env['ir.model.data'].sudo().search([
('name', '=', '%d_%s' % (company.id, xml_id)),
('model', '=', 'account.account'),
('module', '=like', 'l10n%')
], limit=1).res_id)
or self.env['account.account'].search([
or self.env['account.account'].with_company(company).search([
*self.env['account.account']._check_company_domain(company),
('account_type', '=', account_type),
('company_id', '=', company.id)
], limit=1)
or self.env['account.account'].search([('company_id', '=', company.id)], limit=1)
or self.env['account.account'].with_company(company).search([
*self.env['account.account']._check_company_domain(company),
], limit=1)
)

View file

@ -1,9 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="base.user_demo" model="res.users">
<field name="group_ids" eval="[(3, ref('account.group_account_manager'))]"/>
</record>
<record id="base.default_user_group" model="res.groups">
<field name="implied_ids" eval="[(4, ref('account.group_account_manager'))]"/>
</record>
</data>
<data>
<!-- TAGS FOR RETRIEVING THE DEMO ACCOUNTS -->
<record id="demo_capital_account" model="account.account.tag">
<field name="name">Demo Capital Account</field>
</record>
@ -19,6 +26,26 @@
<record id="demo_office_furniture_account" model="account.account.tag">
<field name="name">Office Furniture</field>
</record>
<!-- Install the demo if demo installation is triggered manually after install without demo -->
<function model="account.chart.template" name="_install_demo">
<value model="res.company" search="[('chart_template', '!=', False)]"/>
</function>
<function model="account.chart.template" name="try_loading">
<value eval="[]"/>
<value>generic_coa</value>
<value model="res.company" search="[('partner_id.country_id.code', '=', False)]"/>
<value name="install_demo" eval="True"/>
</function>
<function model="account.chart.template" name="try_loading">
<value eval="[]"/>
<value>generic_coa</value>
<value model="res.company" eval="obj().env.ref('base.main_company')"/>
<value name="install_demo" eval="True"/>
</function>
<!-- Payment Terms -->
<record id="account_payment_term_advance" model="account.payment.term">
@ -26,12 +53,8 @@
<field name="note">Payment terms: 30% Advance End of Following Month</field>
<field name="line_ids" eval="[
Command.clear(),
Command.create({'value': 'percent', 'value_amount': 30.0, 'days': 0}),
Command.create({'value': 'balance', 'value_amount': 0.0, 'months': 1, 'end_month': True})]"/>
</record>
<record id="base.user_demo" model="res.users">
<field name="groups_id" eval="[(4,ref('account.group_account_invoice'))]"/>
Command.create({'value': 'percent', 'value_amount': 30.0, 'nb_days': 0}),
Command.create({'value': 'percent', 'value_amount': 70.0, 'delay_type': 'days_after_end_of_next_month','nb_days': 0})]"/>
</record>
<!-- Add Payment terms on some demo partners -->

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,272 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account
#
# Translators:
# Martin Trigaux <mat@odoo.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-16 08:08+0000\n"
"PO-Revision-Date: 2017-11-16 08:08+0000\n"
"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
"Language-Team: Spanish (Bolivia) (https://www.transifex.com/odoo/teams/41243/"
"es_BO/)\n"
"Language: es_BO\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
#: model:ir.model.fields,field_description:account.field_account_account__create_date
#: model:ir.model.fields,field_description:account.field_account_account_tag__create_date
#: model:ir.model.fields,field_description:account.field_account_account_template__create_date
#: model:ir.model.fields,field_description:account.field_account_account_type__create_date
#: model:ir.model.fields,field_description:account.field_account_accrual_accounting_wizard__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_cashbox__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_closebalance__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__create_date
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__create_date
#: model:ir.model.fields,field_description:account.field_account_cashbox_line__create_date
#: model:ir.model.fields,field_description:account.field_account_chart_template__create_date
#: model:ir.model.fields,field_description:account.field_account_common_journal_report__create_date
#: model:ir.model.fields,field_description:account.field_account_common_report__create_date
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_year__create_date
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__create_date
#: model:ir.model.fields,field_description:account.field_account_group__create_date
#: model:ir.model.fields,field_description:account.field_account_incoterms__create_date
#: model:ir.model.fields,field_description:account.field_account_invoice_send__create_date
#: model:ir.model.fields,field_description:account.field_account_journal__create_date
#: model:ir.model.fields,field_description:account.field_account_journal_group__create_date
#: model:ir.model.fields,field_description:account.field_account_move__create_date
#: model:ir.model.fields,field_description:account.field_account_move_line__create_date
#: model:ir.model.fields,field_description:account.field_account_move_reversal__create_date
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__create_date
#: model:ir.model.fields,field_description:account.field_account_payment__create_date
#: model:ir.model.fields,field_description:account.field_account_payment_method__create_date
#: model:ir.model.fields,field_description:account.field_account_payment_register__create_date
#: model:ir.model.fields,field_description:account.field_account_payment_term__create_date
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__create_date
#: model:ir.model.fields,field_description:account.field_account_print_journal__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__create_date
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__create_date
#: model:ir.model.fields,field_description:account.field_account_tax__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_group__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_report_line__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_template__create_date
#: model:ir.model.fields,field_description:account.field_account_unreconcile__create_date
#: model:ir.model.fields,field_description:account.field_cash_box_out__create_date
#: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__create_date
#: model:ir.model.fields,field_description:account.field_validate_account_move__create_date
msgid "Created on"
msgstr "Creado en"
#. module: account
#: model:account.account.type,name:account.data_account_type_current_assets
msgid "Current Assets"
msgstr "Activos Corrientes"
#. module: account
#: model:account.account.type,name:account.data_account_type_current_liabilities
msgid "Current Liabilities"
msgstr "Pasivos Corrientes"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_accrual_accounting_wizard__company_currency_id
#: model:ir.model.fields,field_description:account.field_account_bank_statement__currency_id
#: model:ir.model.fields,field_description:account.field_account_bank_statement_cashbox__currency_id
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__currency_id
#: model:ir.model.fields,field_description:account.field_account_cashbox_line__currency_id
#: model:ir.model.fields,field_description:account.field_account_chart_template__currency_id
#: model:ir.model.fields,field_description:account.field_account_invoice_report__currency_id
#: model:ir.model.fields,field_description:account.field_account_journal__currency_id
#: model:ir.model.fields,field_description:account.field_account_move__currency_id
#: model:ir.model.fields,field_description:account.field_account_move_line__currency_id
#: model:ir.model.fields,field_description:account.field_account_move_reversal__currency_id
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__currency_id
#: model:ir.model.fields,field_description:account.field_account_payment__currency_id
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__currency_id
#: model:ir.model.fields,field_description:account.field_res_config_settings__currency_id
#: model:ir.model.fields,field_description:account.field_res_partner__currency_id
#: model:ir.model.fields,field_description:account.field_res_users__currency_id
#: model_terms:ir.ui.view,arch_db:account.report_journal
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_search
#: model_terms:ir.ui.view,arch_db:account.view_move_line_form
msgid "Currency"
msgstr "Divisa"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice_report__state
msgid "Invoice Status"
msgstr "Estado de factura"
#. module: account
#: model:ir.ui.menu,name:account.account_invoicing_menu
#: model:ir.ui.menu,name:account.menu_finance
#: model_terms:ir.ui.view,arch_db:account.digest_digest_view_form
#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:account.view_partner_property_form
msgid "Invoicing"
msgstr "Contabilidad"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__write_uid
#: model:ir.model.fields,field_description:account.field_account_account_tag__write_uid
#: model:ir.model.fields,field_description:account.field_account_account_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_account_type__write_uid
#: model:ir.model.fields,field_description:account.field_account_accrual_accounting_wizard__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement_cashbox__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement_closebalance__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__write_uid
#: model:ir.model.fields,field_description:account.field_account_cashbox_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_chart_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_common_journal_report__write_uid
#: model:ir.model.fields,field_description:account.field_account_common_report__write_uid
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_year__write_uid
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__write_uid
#: model:ir.model.fields,field_description:account.field_account_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_incoterms__write_uid
#: model:ir.model.fields,field_description:account.field_account_invoice_send__write_uid
#: model:ir.model.fields,field_description:account.field_account_journal__write_uid
#: model:ir.model.fields,field_description:account.field_account_journal_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_move__write_uid
#: model:ir.model.fields,field_description:account.field_account_move_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_move_reversal__write_uid
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment_method__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment_register__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment_term__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_print_journal__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_report_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_unreconcile__write_uid
#: model:ir.model.fields,field_description:account.field_cash_box_out__write_uid
#: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__write_uid
#: model:ir.model.fields,field_description:account.field_validate_account_move__write_uid
msgid "Last Updated by"
msgstr "Última actualización de"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__write_date
#: model:ir.model.fields,field_description:account.field_account_account_tag__write_date
#: model:ir.model.fields,field_description:account.field_account_account_template__write_date
#: model:ir.model.fields,field_description:account.field_account_account_type__write_date
#: model:ir.model.fields,field_description:account.field_account_accrual_accounting_wizard__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_cashbox__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_closebalance__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__write_date
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__write_date
#: model:ir.model.fields,field_description:account.field_account_cashbox_line__write_date
#: model:ir.model.fields,field_description:account.field_account_chart_template__write_date
#: model:ir.model.fields,field_description:account.field_account_common_journal_report__write_date
#: model:ir.model.fields,field_description:account.field_account_common_report__write_date
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_year__write_date
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__write_date
#: model:ir.model.fields,field_description:account.field_account_group__write_date
#: model:ir.model.fields,field_description:account.field_account_incoterms__write_date
#: model:ir.model.fields,field_description:account.field_account_invoice_send__write_date
#: model:ir.model.fields,field_description:account.field_account_journal__write_date
#: model:ir.model.fields,field_description:account.field_account_journal_group__write_date
#: model:ir.model.fields,field_description:account.field_account_move__write_date
#: model:ir.model.fields,field_description:account.field_account_move_line__write_date
#: model:ir.model.fields,field_description:account.field_account_move_reversal__write_date
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__write_date
#: model:ir.model.fields,field_description:account.field_account_payment__write_date
#: model:ir.model.fields,field_description:account.field_account_payment_method__write_date
#: model:ir.model.fields,field_description:account.field_account_payment_register__write_date
#: model:ir.model.fields,field_description:account.field_account_payment_term__write_date
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__write_date
#: model:ir.model.fields,field_description:account.field_account_print_journal__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__write_date
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__write_date
#: model:ir.model.fields,field_description:account.field_account_tax__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_group__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_report_line__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_template__write_date
#: model:ir.model.fields,field_description:account.field_account_unreconcile__write_date
#: model:ir.model.fields,field_description:account.field_cash_box_out__write_date
#: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__write_date
#: model:ir.model.fields,field_description:account.field_validate_account_move__write_date
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: account
#: model:account.account.type,name:account.data_account_type_non_current_assets
msgid "Non-current Assets"
msgstr "Activos no-corrientes"
#. module: account
#: model:account.account.type,name:account.data_account_type_non_current_liabilities
msgid "Non-current Liabilities"
msgstr "Pasivos no-corrientes"
#. module: account
#: model:account.account.type,name:account.data_account_type_prepayments
msgid "Prepayments"
msgstr "Anticipos"
#. module: account
#: model:ir.ui.menu,name:account.account_report_folder
#: model:ir.ui.menu,name:account.menu_finance_reports
msgid "Reporting"
msgstr "Informe"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice_report__invoice_user_id
#: model:ir.model.fields,field_description:account.field_account_move__invoice_user_id
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
msgid "Salesperson"
msgstr "Vendedor"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.report_invoice_document
msgid "Tax ID"
msgstr "NIT"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_move_line__price_unit
msgid "Unit Price"
msgstr "Precio unidad"

View file

@ -7,9 +7,9 @@
# Daniel Santibáñez Polanco <dansanti@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-02 10:33+0000\n"
"POT-Creation-Date: 2024-02-07 10:22+0000\n"
"PO-Revision-Date: 2017-11-16 08:08+0000\n"
"Last-Translator: Daniel Santibáñez Polanco <dansanti@gmail.com>, 2017\n"
"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/"
@ -22,7 +22,8 @@ msgstr ""
#. module: account
#: model_terms:ir.ui.view,arch_db:account.bill_preview
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals_company_currency_template
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals_template
msgid "<strong>Total</strong>"
msgstr "<strong>Total</strong>"
@ -33,17 +34,15 @@ msgstr "Cuenta analítica"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.account_automatic_entry_wizard_form
#: model_terms:ir.ui.view,arch_db:account.account_invoice_onboarding_sale_tax_form
#: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form
#: model_terms:ir.ui.view,arch_db:account.account_move_send_form
#: model_terms:ir.ui.view,arch_db:account.account_resequence_view
#: model_terms:ir.ui.view,arch_db:account.account_unreconcile_view
#: model_terms:ir.ui.view,arch_db:account.res_company_form_view_onboarding_sale_tax
#: model_terms:ir.ui.view,arch_db:account.setup_bank_account_wizard
#: model_terms:ir.ui.view,arch_db:account.setup_financial_year_opening_form
#: model_terms:ir.ui.view,arch_db:account.validate_account_move_view
#: model_terms:ir.ui.view,arch_db:account.view_account_accrued_orders_wizard
#: model_terms:ir.ui.view,arch_db:account.view_account_move_reversal
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_form
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_register_form
#: model_terms:ir.ui.view,arch_db:account.view_move_form
msgid "Cancel"
msgstr "Cancelar"
@ -59,6 +58,7 @@ msgstr "Cancelado"
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__commercial_partner_id
#: model:ir.model.fields,field_description:account.field_account_move__commercial_partner_id
#: model:ir.model.fields,field_description:account.field_account_payment__commercial_partner_id
#: model_terms:ir.ui.view,arch_db:account.account_move_view_activity
msgid "Commercial Entity"
msgstr "Entidad comercial"
@ -85,6 +85,7 @@ msgstr "Compañías"
#: model:ir.model.fields,field_description:account.field_account_move__company_id
#: model:ir.model.fields,field_description:account.field_account_move_line__company_id
#: model:ir.model.fields,field_description:account.field_account_move_reversal__company_id
#: model:ir.model.fields,field_description:account.field_account_move_send__company_id
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__company_id
#: model:ir.model.fields,field_description:account.field_account_payment__company_id
#: model:ir.model.fields,field_description:account.field_account_payment_method_line__company_id
@ -92,10 +93,12 @@ msgstr "Compañías"
#: model:ir.model.fields,field_description:account.field_account_payment_term__company_id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__company_id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__company_id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__company_id
#: model:ir.model.fields,field_description:account.field_account_report_external_value__company_id
#: model:ir.model.fields,field_description:account.field_account_root__company_id
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__company_id
#: model:ir.model.fields,field_description:account.field_account_tax__company_id
#: model:ir.model.fields,field_description:account.field_account_tax_group__company_id
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__company_id
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter
@ -107,30 +110,24 @@ msgstr "Compañía"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__create_uid
#: model:ir.model.fields,field_description:account.field_account_account_tag__create_uid
#: model:ir.model.fields,field_description:account.field_account_account_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__create_uid
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__create_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement__create_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__create_uid
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__create_uid
#: model:ir.model.fields,field_description:account.field_account_chart_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__create_uid
#: model:ir.model.fields,field_description:account.field_account_group__create_uid
#: model:ir.model.fields,field_description:account.field_account_group_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_incoterms__create_uid
#: model:ir.model.fields,field_description:account.field_account_invoice_send__create_uid
#: model:ir.model.fields,field_description:account.field_account_journal__create_uid
#: model:ir.model.fields,field_description:account.field_account_journal_group__create_uid
#: model:ir.model.fields,field_description:account.field_account_move__create_uid
#: model:ir.model.fields,field_description:account.field_account_move_line__create_uid
#: model:ir.model.fields,field_description:account.field_account_move_reversal__create_uid
#: model:ir.model.fields,field_description:account.field_account_move_send__create_uid
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__create_uid
#: model:ir.model.fields,field_description:account.field_account_payment__create_uid
#: model:ir.model.fields,field_description:account.field_account_payment_method__create_uid
@ -140,9 +137,7 @@ msgstr "Compañía"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__create_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__create_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__create_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__create_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_report__create_uid
#: model:ir.model.fields,field_description:account.field_account_report_column__create_uid
#: model:ir.model.fields,field_description:account.field_account_report_expression__create_uid
@ -153,8 +148,6 @@ msgstr "Compañía"
#: model:ir.model.fields,field_description:account.field_account_tax__create_uid
#: model:ir.model.fields,field_description:account.field_account_tax_group__create_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__create_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_tax_template__create_uid
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__create_uid
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__create_uid
#: model:ir.model.fields,field_description:account.field_account_unreconcile__create_uid
@ -165,30 +158,24 @@ msgstr "Creado por"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__create_date
#: model:ir.model.fields,field_description:account.field_account_account_tag__create_date
#: model:ir.model.fields,field_description:account.field_account_account_template__create_date
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__create_date
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement__create_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__create_date
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__create_date
#: model:ir.model.fields,field_description:account.field_account_chart_template__create_date
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__create_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__create_date
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__create_date
#: model:ir.model.fields,field_description:account.field_account_group__create_date
#: model:ir.model.fields,field_description:account.field_account_group_template__create_date
#: model:ir.model.fields,field_description:account.field_account_incoterms__create_date
#: model:ir.model.fields,field_description:account.field_account_invoice_send__create_date
#: model:ir.model.fields,field_description:account.field_account_journal__create_date
#: model:ir.model.fields,field_description:account.field_account_journal_group__create_date
#: model:ir.model.fields,field_description:account.field_account_move__create_date
#: model:ir.model.fields,field_description:account.field_account_move_line__create_date
#: model:ir.model.fields,field_description:account.field_account_move_reversal__create_date
#: model:ir.model.fields,field_description:account.field_account_move_send__create_date
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__create_date
#: model:ir.model.fields,field_description:account.field_account_payment__create_date
#: model:ir.model.fields,field_description:account.field_account_payment_method__create_date
@ -198,9 +185,7 @@ msgstr "Creado por"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__create_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__create_date
#: model:ir.model.fields,field_description:account.field_account_report__create_date
#: model:ir.model.fields,field_description:account.field_account_report_column__create_date
#: model:ir.model.fields,field_description:account.field_account_report_expression__create_date
@ -211,8 +196,6 @@ msgstr "Creado por"
#: model:ir.model.fields,field_description:account.field_account_tax__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_group__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__create_date
#: model:ir.model.fields,field_description:account.field_account_tax_template__create_date
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__create_date
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__create_date
#: model:ir.model.fields,field_description:account.field_account_unreconcile__create_date
@ -224,7 +207,6 @@ msgstr "Creado en"
#: model:ir.model,name:account.model_res_currency
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__company_currency_id
#: model:ir.model.fields,field_description:account.field_account_bank_statement__currency_id
#: model:ir.model.fields,field_description:account.field_account_chart_template__currency_id
#: model:ir.model.fields,field_description:account.field_account_invoice_report__currency_id
#: model:ir.model.fields,field_description:account.field_account_journal__currency_id
#: model:ir.model.fields,field_description:account.field_account_move__currency_id
@ -232,13 +214,16 @@ msgstr "Creado en"
#: model:ir.model.fields,field_description:account.field_account_move_reversal__currency_id
#: model:ir.model.fields,field_description:account.field_account_payment__currency_id
#: model:ir.model.fields,field_description:account.field_account_payment_register__currency_id
#: model:ir.model.fields,field_description:account.field_account_payment_term__currency_id
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__currency_id
#: model:ir.model.fields,field_description:account.field_res_config_settings__currency_id
#: model:ir.model.fields,field_description:account.field_res_partner__currency_id
#: model:ir.model.fields,field_description:account.field_res_partner_bank__currency_id
#: model:ir.model.fields,field_description:account.field_res_users__currency_id
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_payment_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_search
#: model_terms:ir.ui.view,arch_db:account.view_move_line_form
#: model_terms:ir.ui.view,arch_db:account.view_move_line_payment_tree
#: model_terms:ir.ui.view,arch_db:account.view_move_line_tree
msgid "Currency"
msgstr "Moneda"
@ -260,6 +245,7 @@ msgid "Customer Taxes"
msgstr "Impuestos de cliente"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_tax__description
#: model_terms:ir.ui.view,arch_db:account.view_move_form
msgid "Description"
msgstr "Descripción"
@ -272,31 +258,25 @@ msgstr "Descuento (%)"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__display_name
#: model:ir.model.fields,field_description:account.field_account_account_tag__display_name
#: model:ir.model.fields,field_description:account.field_account_account_template__display_name
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__display_name
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__display_name
#: model:ir.model.fields,field_description:account.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__display_name
#: model:ir.model.fields,field_description:account.field_account_chart_template__display_name
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__display_name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__display_name
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__display_name
#: model:ir.model.fields,field_description:account.field_account_group__display_name
#: model:ir.model.fields,field_description:account.field_account_group_template__display_name
#: model:ir.model.fields,field_description:account.field_account_incoterms__display_name
#: model:ir.model.fields,field_description:account.field_account_invoice_report__display_name
#: model:ir.model.fields,field_description:account.field_account_invoice_send__display_name
#: model:ir.model.fields,field_description:account.field_account_journal__display_name
#: model:ir.model.fields,field_description:account.field_account_journal_group__display_name
#: model:ir.model.fields,field_description:account.field_account_move__display_name
#: model:ir.model.fields,field_description:account.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account.field_account_move_reversal__display_name
#: model:ir.model.fields,field_description:account.field_account_move_send__display_name
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__display_name
#: model:ir.model.fields,field_description:account.field_account_payment__display_name
#: model:ir.model.fields,field_description:account.field_account_payment_method__display_name
@ -306,9 +286,7 @@ msgstr "Descuento (%)"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__display_name
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__display_name
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__display_name
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__display_name
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__display_name
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__display_name
#: model:ir.model.fields,field_description:account.field_account_report__display_name
#: model:ir.model.fields,field_description:account.field_account_report_column__display_name
#: model:ir.model.fields,field_description:account.field_account_report_expression__display_name
@ -320,8 +298,6 @@ msgstr "Descuento (%)"
#: model:ir.model.fields,field_description:account.field_account_tax__display_name
#: model:ir.model.fields,field_description:account.field_account_tax_group__display_name
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__display_name
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__display_name
#: model:ir.model.fields,field_description:account.field_account_tax_template__display_name
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__display_name
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__display_name
#: model:ir.model.fields,field_description:account.field_account_unreconcile__display_name
@ -335,7 +311,6 @@ msgstr "Nombre mostrado"
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__name
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__position_id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__position_id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__position_id
#: model:ir.model.fields,field_description:account.field_account_invoice_report__fiscal_position_id
#: model:ir.model.fields,field_description:account.field_account_move__fiscal_position_id
#: model:ir.model.fields,field_description:account.field_account_payment__fiscal_position_id
@ -344,8 +319,6 @@ msgstr "Nombre mostrado"
#: model:ir.model.fields,field_description:account.field_res_users__property_account_position_id
#: model_terms:ir.ui.view,arch_db:account.view_account_position_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_position_form
#: model_terms:ir.ui.view,arch_db:account.view_account_position_template_search
#: model_terms:ir.ui.view,arch_db:account.view_account_position_template_tree
#: model_terms:ir.ui.view,arch_db:account.view_account_position_tree
msgid "Fiscal Position"
msgstr "Posición fiscal"
@ -357,41 +330,37 @@ msgstr "Posición fiscal"
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_payment_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_search
#: model_terms:ir.ui.view,arch_db:account.view_account_search
#: model_terms:ir.ui.view,arch_db:account.view_account_tax_search
#: model_terms:ir.ui.view,arch_db:account.view_bank_statement_search
#: model_terms:ir.ui.view,arch_db:account.view_partner_bank_search_inherit
msgid "Group By"
msgstr "Agrupar por"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__id
#: model:ir.model.fields,field_description:account.field_account_account_tag__id
#: model:ir.model.fields,field_description:account.field_account_account_template__id
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__id
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__id
#: model:ir.model.fields,field_description:account.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__id
#: model:ir.model.fields,field_description:account.field_account_chart_template__id
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__id
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__id
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__id
#: model:ir.model.fields,field_description:account.field_account_group__id
#: model:ir.model.fields,field_description:account.field_account_group_template__id
#: model:ir.model.fields,field_description:account.field_account_incoterms__id
#: model:ir.model.fields,field_description:account.field_account_invoice_report__id
#: model:ir.model.fields,field_description:account.field_account_invoice_send__id
#: model:ir.model.fields,field_description:account.field_account_journal__id
#: model:ir.model.fields,field_description:account.field_account_journal_group__id
#: model:ir.model.fields,field_description:account.field_account_move__id
#: model:ir.model.fields,field_description:account.field_account_move_line__id
#: model:ir.model.fields,field_description:account.field_account_move_reversal__id
#: model:ir.model.fields,field_description:account.field_account_move_send__id
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__id
#: model:ir.model.fields,field_description:account.field_account_payment__id
#: model:ir.model.fields,field_description:account.field_account_payment_method__id
@ -401,9 +370,7 @@ msgstr "Agrupar por"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__id
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__id
#: model:ir.model.fields,field_description:account.field_account_report__id
#: model:ir.model.fields,field_description:account.field_account_report_column__id
#: model:ir.model.fields,field_description:account.field_account_report_expression__id
@ -415,8 +382,6 @@ msgstr "Agrupar por"
#: model:ir.model.fields,field_description:account.field_account_tax__id
#: model:ir.model.fields,field_description:account.field_account_tax_group__id
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__id
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__id
#: model:ir.model.fields,field_description:account.field_account_tax_template__id
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__id
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__id
#: model:ir.model.fields,field_description:account.field_account_unreconcile__id
@ -433,7 +398,7 @@ msgid ""
msgstr ""
"Si se establece, este valor se utilizará como la etiqueta de un subtotal sin "
"incluir este grupo de impuestos antes de mostrarlo. Si no se establece, el "
"grupo de impuestos se mostrará después del subtotal \"total neto\"."
"grupo de impuestos se mostrará después del subtotal \"monto neto\"."
#. module: account
#: model:ir.model.fields,field_description:account.field_product_category__property_account_income_categ_id
@ -454,10 +419,14 @@ msgstr "Cuenta de ingresos"
#: model_terms:ir.ui.view,arch_db:account.report_invoice_document
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter
#: model_terms:ir.ui.view,arch_db:account.view_move_form
#, python-format
msgid "Invoice"
msgstr "Factura"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter
msgid "Invoice Line"
msgstr "Línea factura"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.view_move_form
msgid "Invoice Lines"
@ -478,7 +447,6 @@ msgstr "Facturado"
#: code:addons/account/controllers/portal.py:0
#: model:ir.actions.act_window,name:account.action_move_out_invoice_type
#: model:ir.actions.report,name:account.account_invoices
#: model:ir.model.fields,field_description:account.field_account_invoice_send__invoice_ids
#: model:ir.model.fields,field_description:account.field_res_partner__invoice_ids
#: model:ir.model.fields,field_description:account.field_res_users__invoice_ids
#: model:ir.ui.menu,name:account.menu_action_move_out_invoice_type
@ -487,7 +455,6 @@ msgstr "Facturado"
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_graph
#: model_terms:ir.ui.view,arch_db:account.view_invoice_tree
#, python-format
msgid "Invoices"
msgstr "Facturas"
@ -516,93 +483,27 @@ msgstr "Estadísticas de facturas"
msgid "Invoicing"
msgstr "Facturando"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account____last_update
#: model:ir.model.fields,field_description:account.field_account_account_tag____last_update
#: model:ir.model.fields,field_description:account.field_account_account_template____last_update
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard____last_update
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard____last_update
#: model:ir.model.fields,field_description:account.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account.field_account_cash_rounding____last_update
#: model:ir.model.fields,field_description:account.field_account_chart_template____last_update
#: model:ir.model.fields,field_description:account.field_account_financial_year_op____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template____last_update
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template____last_update
#: model:ir.model.fields,field_description:account.field_account_full_reconcile____last_update
#: model:ir.model.fields,field_description:account.field_account_group____last_update
#: model:ir.model.fields,field_description:account.field_account_group_template____last_update
#: model:ir.model.fields,field_description:account.field_account_incoterms____last_update
#: model:ir.model.fields,field_description:account.field_account_invoice_report____last_update
#: model:ir.model.fields,field_description:account.field_account_invoice_send____last_update
#: model:ir.model.fields,field_description:account.field_account_journal____last_update
#: model:ir.model.fields,field_description:account.field_account_journal_group____last_update
#: model:ir.model.fields,field_description:account.field_account_move____last_update
#: model:ir.model.fields,field_description:account.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account.field_account_move_reversal____last_update
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile____last_update
#: model:ir.model.fields,field_description:account.field_account_payment____last_update
#: model:ir.model.fields,field_description:account.field_account_payment_method____last_update
#: model:ir.model.fields,field_description:account.field_account_payment_method_line____last_update
#: model:ir.model.fields,field_description:account.field_account_payment_register____last_update
#: model:ir.model.fields,field_description:account.field_account_payment_term____last_update
#: model:ir.model.fields,field_description:account.field_account_payment_term_line____last_update
#: model:ir.model.fields,field_description:account.field_account_reconcile_model____last_update
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line____last_update
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template____last_update
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping____last_update
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template____last_update
#: model:ir.model.fields,field_description:account.field_account_report____last_update
#: model:ir.model.fields,field_description:account.field_account_report_column____last_update
#: model:ir.model.fields,field_description:account.field_account_report_expression____last_update
#: model:ir.model.fields,field_description:account.field_account_report_external_value____last_update
#: model:ir.model.fields,field_description:account.field_account_report_line____last_update
#: model:ir.model.fields,field_description:account.field_account_resequence_wizard____last_update
#: model:ir.model.fields,field_description:account.field_account_root____last_update
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config____last_update
#: model:ir.model.fields,field_description:account.field_account_tax____last_update
#: model:ir.model.fields,field_description:account.field_account_tax_group____last_update
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line____last_update
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template____last_update
#: model:ir.model.fields,field_description:account.field_account_tax_template____last_update
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill____last_update
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm____last_update
#: model:ir.model.fields,field_description:account.field_account_unreconcile____last_update
#: model:ir.model.fields,field_description:account.field_validate_account_move____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__write_uid
#: model:ir.model.fields,field_description:account.field_account_account_tag__write_uid
#: model:ir.model.fields,field_description:account.field_account_account_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__write_uid
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement__write_uid
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__write_uid
#: model:ir.model.fields,field_description:account.field_account_chart_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__write_uid
#: model:ir.model.fields,field_description:account.field_account_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_group_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_incoterms__write_uid
#: model:ir.model.fields,field_description:account.field_account_invoice_send__write_uid
#: model:ir.model.fields,field_description:account.field_account_journal__write_uid
#: model:ir.model.fields,field_description:account.field_account_journal_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_move__write_uid
#: model:ir.model.fields,field_description:account.field_account_move_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_move_reversal__write_uid
#: model:ir.model.fields,field_description:account.field_account_move_send__write_uid
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment__write_uid
#: model:ir.model.fields,field_description:account.field_account_payment_method__write_uid
@ -612,9 +513,7 @@ msgstr "Última modificación en"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__write_uid
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_report__write_uid
#: model:ir.model.fields,field_description:account.field_account_report_column__write_uid
#: model:ir.model.fields,field_description:account.field_account_report_expression__write_uid
@ -625,8 +524,6 @@ msgstr "Última modificación en"
#: model:ir.model.fields,field_description:account.field_account_tax__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_group__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_tax_template__write_uid
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__write_uid
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__write_uid
#: model:ir.model.fields,field_description:account.field_account_unreconcile__write_uid
@ -637,30 +534,24 @@ msgstr "Última actualización de"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__write_date
#: model:ir.model.fields,field_description:account.field_account_account_tag__write_date
#: model:ir.model.fields,field_description:account.field_account_account_template__write_date
#: model:ir.model.fields,field_description:account.field_account_accrued_orders_wizard__write_date
#: model:ir.model.fields,field_description:account.field_account_automatic_entry_wizard__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement__write_date
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__write_date
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__write_date
#: model:ir.model.fields,field_description:account.field_account_chart_template__write_date
#: model:ir.model.fields,field_description:account.field_account_financial_year_op__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_tax_template__write_date
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__write_date
#: model:ir.model.fields,field_description:account.field_account_full_reconcile__write_date
#: model:ir.model.fields,field_description:account.field_account_group__write_date
#: model:ir.model.fields,field_description:account.field_account_group_template__write_date
#: model:ir.model.fields,field_description:account.field_account_incoterms__write_date
#: model:ir.model.fields,field_description:account.field_account_invoice_send__write_date
#: model:ir.model.fields,field_description:account.field_account_journal__write_date
#: model:ir.model.fields,field_description:account.field_account_journal_group__write_date
#: model:ir.model.fields,field_description:account.field_account_move__write_date
#: model:ir.model.fields,field_description:account.field_account_move_line__write_date
#: model:ir.model.fields,field_description:account.field_account_move_reversal__write_date
#: model:ir.model.fields,field_description:account.field_account_move_send__write_date
#: model:ir.model.fields,field_description:account.field_account_partial_reconcile__write_date
#: model:ir.model.fields,field_description:account.field_account_payment__write_date
#: model:ir.model.fields,field_description:account.field_account_payment_method__write_date
@ -670,9 +561,7 @@ msgstr "Última actualización de"
#: model:ir.model.fields,field_description:account.field_account_payment_term_line__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_partner_mapping__write_date
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__write_date
#: model:ir.model.fields,field_description:account.field_account_report__write_date
#: model:ir.model.fields,field_description:account.field_account_report_column__write_date
#: model:ir.model.fields,field_description:account.field_account_report_expression__write_date
@ -683,8 +572,6 @@ msgstr "Última actualización de"
#: model:ir.model.fields,field_description:account.field_account_tax__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_group__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line_template__write_date
#: model:ir.model.fields,field_description:account.field_account_tax_template__write_date
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill__write_date
#: model:ir.model.fields,field_description:account.field_account_tour_upload_bill_email_confirm__write_date
#: model:ir.model.fields,field_description:account.field_account_unreconcile__write_date
@ -705,15 +592,12 @@ msgstr "Última actualización en"
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_payment_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_various_payment_tree
#, python-format
msgid "Partner"
msgstr "Empresa"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice_send__is_print
#: model:ir.model.fields,field_description:account.field_res_config_settings__invoice_is_print
#: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form
#: model_terms:ir.ui.view,arch_db:account.portal_invoice_page
msgid "Print"
msgstr "Imprimir"
@ -762,7 +646,6 @@ msgstr "Informes"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.view_account_tax_search
#: model_terms:ir.ui.view,arch_db:account.view_account_tax_template_search
msgid "Sale"
msgstr "Venta"
@ -770,10 +653,10 @@ msgstr "Venta"
#: model:ir.actions.act_window,name:account.action_account_moves_journal_sales
#: model:ir.model.fields.selection,name:account.selection__account_journal__type__sale
#: model:ir.model.fields.selection,name:account.selection__account_tax__type_tax_use__sale
#: model:ir.model.fields.selection,name:account.selection__account_tax_template__type_tax_use__sale
#: model_terms:ir.ui.view,arch_db:account.view_account_journal_search
#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_payment_filter
msgid "Sales"
msgstr "Ventas"
@ -792,7 +675,6 @@ msgstr "Vendedor"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__sequence
#: model:ir.model.fields,field_description:account.field_account_fiscal_position__sequence
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_template__sequence
#: model:ir.model.fields,field_description:account.field_account_journal__sequence
#: model:ir.model.fields,field_description:account.field_account_journal_group__sequence
#: model:ir.model.fields,field_description:account.field_account_move_line__sequence
@ -800,15 +682,13 @@ msgstr "Vendedor"
#: model:ir.model.fields,field_description:account.field_account_payment_term__sequence
#: model:ir.model.fields,field_description:account.field_account_reconcile_model__sequence
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__sequence
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__sequence
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__sequence
#: model:ir.model.fields,field_description:account.field_account_report__sequence
#: model:ir.model.fields,field_description:account.field_account_report_column__sequence
#: model:ir.model.fields,field_description:account.field_account_report_line__sequence
#: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__sequence
#: model:ir.model.fields,field_description:account.field_account_tax__sequence
#: model:ir.model.fields,field_description:account.field_account_tax_group__sequence
#: model:ir.model.fields,field_description:account.field_account_tax_repartition_line__sequence
#: model:ir.model.fields,field_description:account.field_account_tax_template__sequence
msgid "Sequence"
msgstr "Secuencia"
@ -830,33 +710,29 @@ msgstr "Documento origen"
#: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search
#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_search
#, python-format
msgid "Status"
msgstr "Estado"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_move_line__price_subtotal
#: model_terms:ir.ui.view,arch_db:account.view_move_form
msgid "Subtotal"
msgstr "Subtotal"
#. module: account
#. odoo-python
#: code:addons/account/models/account_account.py:0
#: code:addons/account/models/company.py:0
#: model:account.tax.group,name:account.tax_group_taxes
#: code:addons/account/models/onboarding_onboarding_step.py:0
#: model:ir.actions.act_window,name:account.action_tax_form
#: model:ir.model.fields,field_description:account.field_account_move_line__tax_ids
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line__tax_ids
#: model:ir.model.fields,field_description:account.field_account_reconcile_model_line_template__tax_ids
#: model:ir.model.fields.selection,name:account.selection__account_account_tag__applicability__taxes
#: model:ir.ui.menu,name:account.menu_action_tax_form
#: model_terms:ir.ui.view,arch_db:account.onboarding_sale_tax_step
#: model_terms:ir.ui.view,arch_db:account.onboarding_taxes_step
#: model:onboarding.onboarding.step,title:account.onboarding_onboarding_step_default_taxes
#: model:onboarding.onboarding.step,title:account.onboarding_onboarding_step_sales_tax
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals_company_currency_template
#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:account.view_account_move_line_filter
#: model_terms:ir.ui.view,arch_db:account.view_move_line_form
#, python-format
msgid "Taxes"
msgstr "Impuestos"
@ -868,7 +744,6 @@ msgstr "Para facturar"
#. module: account
#. odoo-javascript
#: code:addons/account/static/src/components/tax_totals/tax_totals.xml:0
#: code:addons/account/static/src/xml/legacy_tax_totals.xml:0
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount_total
#: model:ir.model.fields,field_description:account.field_account_move__amount_total
#: model:ir.model.fields,field_description:account.field_account_move_line__price_total
@ -876,9 +751,7 @@ msgstr "Para facturar"
#: model_terms:ir.ui.view,arch_db:account.account_invoice_report_view_tree
#: model_terms:ir.ui.view,arch_db:account.view_account_payment_tree
#: model_terms:ir.ui.view,arch_db:account.view_invoice_tree
#: model_terms:ir.ui.view,arch_db:account.view_move_form
#: model_terms:ir.ui.view,arch_db:account.view_move_tree
#, python-format
msgid "Total"
msgstr "Total"
@ -900,13 +773,18 @@ msgstr "Unidad de medida"
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount_untaxed
#: model:ir.model.fields,field_description:account.field_account_move__amount_untaxed
#: model:ir.model.fields,field_description:account.field_account_payment__amount_untaxed
#, python-format
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals_template
msgid "Untaxed Amount"
msgstr "Total neto"
msgstr "Monto neto"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount_untaxed_signed
#: model:ir.model.fields,field_description:account.field_account_move__amount_untaxed_signed
#: model:ir.model.fields,field_description:account.field_account_payment__amount_untaxed_signed
msgid "Untaxed Amount Signed"
msgstr "Total neto firmado"
msgstr "Monto neto firmado"
#. module: account
#: model_terms:ir.ui.view,arch_db:account.document_tax_totals_company_currency_template
msgid "Untaxed amount"
msgstr "Monto neto"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more