mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-18 05:22:01 +02:00
19.0 vanilla
This commit is contained in:
parent
ba20ce7443
commit
768b70e05e
2357 changed files with 1057103 additions and 712486 deletions
|
|
@ -1,78 +1,34 @@
|
|||
# Invoicing (Account)
|
||||
# Invoicing
|
||||
|
||||
Production‑ready 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 repository’s 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.11–3.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
|
||||
|
||||
LGPL‑3, preserved from upstream Odoo.
|
||||
This package preserves the original LGPL-3 license.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
67
odoo-bringout-oca-ocb-account/account/controllers/catalog.py
Normal file
67
odoo-bringout-oca-ocb-account/account/controllers/catalog.py
Normal 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,
|
||||
)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 []))
|
||||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
12
odoo-bringout-oca-ocb-account/account/data/ir_sequence.xml
Normal file
12
odoo-bringout-oca-ocb-account/account/data/ir_sequence.xml
Normal 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>
|
||||
|
|
@ -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&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&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>
|
||||
|
|
|
|||
|
|
@ -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 & 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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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","","",""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
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
|
|
@ -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"
|
||||
|
|
@ -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
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
Loading…
Add table
Add a link
Reference in a new issue