diff --git a/l10n_it_asset_management/README.rst b/l10n_it_asset_management/README.rst new file mode 100644 index 000000000000..7a1f0c5a2bc7 --- /dev/null +++ b/l10n_it_asset_management/README.rst @@ -0,0 +1,119 @@ +====================== +ITA - Gestione Cespiti +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:77394f3b624996a29dc573870e706e6e6e1ce35fa07f90a222d9d5f20b1a7bc5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--italy-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-italy/tree/16.0/l10n_it_asset_management + :alt: OCA/l10n-italy +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-italy-16-0/l10n-italy-16-0-l10n_it_asset_management + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-italy&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This modules allows account management of companies' assets. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +**English** + +You can create and manage assets from accounting section of Odoo. + +Configuration must be done from Assets -> Assets Configuration, where +depreciation types, modes and assets categories can be found. + +Assets can both be created manually or via invoices and journal entries. +Depreciations can be generated by using the related wizard found in +Assets -> Assets Management -> Generate Depreciations, or by triggering +the same wizard from a single asset form view. + +**Italiano** + +È possibile creare e gestire cespiti dalla sezione contabilità di Odoo. + +La configurazione dei cespiti dev'essere fatta andando in Cespiti -> +Configurazione Cespiti, dove si trovano le categorie dei beni, i tipi e +le modalità di ammortamento. + +I cespiti possono essere creati manualmente o da fatture e registrazioni +contabili. Gli ammortamenti possono essere generati utilizzando +l'apposito wizard in Cespiti -> Gestione Cestpiti -> Genera +Ammortamenti, o aprendo quello stesso wizard dalla scheda del cespite. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Openforce + +Contributors +------------ + +- Alessandro Camilli +- Silvio Gregorini +- Stefano Pezzini +- Lorenzo Battistini +- `TAKOBI `__: + + - Simone Rubino + +- `Aion Tech `__: + + - Simone Rubino + +- Nextev Srl + +Base icon made by `surang `__ +from `www.flaticon.com `__. + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/l10n-italy `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_it_asset_management/__init__.py b/l10n_it_asset_management/__init__.py new file mode 100644 index 000000000000..038f9de86e76 --- /dev/null +++ b/l10n_it_asset_management/__init__.py @@ -0,0 +1,8 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import report +from . import wizard +from .hooks import pre_absorb_old_module diff --git a/l10n_it_asset_management/__manifest__.py b/l10n_it_asset_management/__manifest__.py new file mode 100644 index 000000000000..12aa1da94dc9 --- /dev/null +++ b/l10n_it_asset_management/__manifest__.py @@ -0,0 +1,61 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "ITA - Gestione Cespiti", + "version": "16.0.1.0.0", + "category": "Localization/Italy", + "summary": "Gestione Cespiti", + "author": "Openforce, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/l10n-italy", + "license": "AGPL-3", + "depends": [ + "account", + "account_financial_report", + "account_fiscal_year", + "mail", + ], + "data": [ + "security/res_groups.xml", + "security/ir.model.access.csv", + "security/rules.xml", + "data/ir_cron.xml", + "data/asset_data.xml", + "report/layout.xml", + "report/paperformat.xml", + "report/templates/asset_journal.xml", + "report/templates/asset_previsional.xml", + "report/reports.xml", + "views/asset_menuitems.xml", + "views/account_move.xml", + "views/asset.xml", + "views/asset_accounting_info.xml", + "views/asset_category.xml", + "views/asset_depreciation.xml", + "views/asset_depreciation_line.xml", + "views/asset_depreciation_line_type.xml", + "views/asset_depreciation_mode.xml", + "views/asset_depreciation_type.xml", + "views/asset_tag.xml", + "wizard/account_move_manage_asset_view.xml", + "wizard/asset_generate_depreciation_view.xml", + "wizard/asset_journal_report_view.xml", + "wizard/asset_previsional_report_view.xml", + ], + "assets": { + "web.assets_backend": [ + "l10n_it_asset_management/static/src/js/*", + "l10n_it_asset_management/static/src/xml/*", + ], + }, + "development_status": "Beta", + "installable": True, + "external_dependencies": { + "python": [ + "openupgradelib", + ], + }, + "pre_init_hook": "pre_absorb_old_module", +} diff --git a/l10n_it_asset_management/data/asset_data.xml b/l10n_it_asset_management/data/asset_data.xml new file mode 100644 index 000000000000..44305f64ea84 --- /dev/null +++ b/l10n_it_asset_management/data/asset_data.xml @@ -0,0 +1,45 @@ + + + + + + Civilistico + 1 + 1 + + + Fiscale + 0 + 1 + + + + + Rivalutazione + RIV + in + + + + Svalutazione + SVA + out + + + + + IMMATERIALE + 1 + + + MATERIALE + 1 + + + + 1 + 1 + 0.5 + + + diff --git a/l10n_it_asset_management/data/ir_cron.xml b/l10n_it_asset_management/data/ir_cron.xml new file mode 100644 index 000000000000..c16b18077771 --- /dev/null +++ b/l10n_it_asset_management/data/ir_cron.xml @@ -0,0 +1,17 @@ + + + + + Vacuum Empty Asset Accounting Info + + + 5 + minutes + -1 + + + code + model.cron_vacuum_table() + + + diff --git a/l10n_it_asset_management/hooks.py b/l10n_it_asset_management/hooks.py new file mode 100644 index 000000000000..70bc59b3a7c4 --- /dev/null +++ b/l10n_it_asset_management/hooks.py @@ -0,0 +1,37 @@ +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + +NEW_MODULE_NAME = "l10n_it_asset_management" +OLD_MODULE_NAME = "assets_management" + +RENAMED_MODELS = [ + ( + "report.assets_management.report_asset_journal_xlsx", + "report.l10n_it_asset_management.report_asset_journal_xlsx", + ), + ( + "report.assets_management.report_asset_previsional_xlsx", + "report.l10n_it_asset_management.report_asset_previsional_xlsx", + ), +] + + +def migrate_old_module(cr): + openupgrade.rename_models( + cr, + RENAMED_MODELS, + ) + + +def pre_absorb_old_module(cr): + if openupgrade.is_module_installed(cr, OLD_MODULE_NAME): + openupgrade.update_module_names( + cr, + [ + (OLD_MODULE_NAME, NEW_MODULE_NAME), + ], + merge_modules=True, + ) + migrate_old_module(cr) diff --git a/l10n_it_asset_management/i18n/assets_management.pot b/l10n_it_asset_management/i18n/assets_management.pot new file mode 100644 index 000000000000..dbdd9e395068 --- /dev/null +++ b/l10n_it_asset_management/i18n/assets_management.pot @@ -0,0 +1,3072 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_it_asset_management +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_body +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_body +msgid "" +"\n" +" Totals\n" +" " +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_category_data +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_category_data +msgid "Asset Category: " +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_title +msgid "Asset: " +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Code" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Curr. Year Dep. Fund" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Dep. Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Dep. Percentage (%)" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciable Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciation Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Document Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Document Nr" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Gain / Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "In Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Out Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Partner" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Prev. Year Dep. Fund" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Pro Rata Temporis" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Purchase Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Purchased as New / Used" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Ref" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Residual" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Starting From" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Status" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_category_totals +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_category_totals +msgid "Totals for: " +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "VAT" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +msgid "Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_warning +msgid "Access warning" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_account +msgid "Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__asset_accounting_info_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Accounting Info" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_ids +msgid "Activities" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_state +msgid "Activity State" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__amount +#, python-format +msgid "Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciable +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciable +msgid "Amount Depreciable" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciable_updated +msgid "Amount Depreciable Updated" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciated +msgid "Amount Depreciated" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciation_fund_curr_year +msgid "Amount Depreciation Fund Curr Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciation_fund_prev_year +msgid "Amount Depreciation Fund Prev Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_gain +msgid "Amount Gain" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_gain_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_gain_total +msgid "Amount Gain Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_historical +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_historical +msgid "Amount Historical" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in +msgid "Amount In" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in_detail +msgid "Amount In Detail" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_in_total +msgid "Amount In Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_loss +msgid "Amount Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_loss_total +msgid "Amount Loss Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out +msgid "Amount Out" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out_detail +msgid "Amount Out Detail" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_out_total +msgid "Amount Out Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_residual +msgid "Amount Residual" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__application +msgid "Application by" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__asset_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#, python-format +msgid "Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__asset_account_id +msgid "Asset Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_accounting_info +msgid "Asset Accounting Relations" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_category +msgid "Asset Category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_category_depreciation_type +msgid "Asset Category - Depreciation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_code +msgid "Asset Code" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_configuration +msgid "Asset Configuration" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__create +msgid "Asset Creation" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Asset Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_mode +msgid "Asset Depreciation Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_mode_line +msgid "Asset Depreciation Mode Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_type +msgid "Asset Depreciation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__dismiss +msgid "Asset Dismissal" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_journal_report +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_journal_report +#, python-format +msgid "Asset Journal" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.client,name:l10n_it_asset_management.act_client_asset_journal_report +msgid "Asset Journal Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_name +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Asset Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__asset_order_fname +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__asset_order_fname +msgid "Asset Order Fname" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__partial_dismiss +msgid "Asset Partial Dismissal" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_previsional_report +#: model:ir.actions.client,name:l10n_it_asset_management.act_client_asset_previsional_report +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_previsional_report +msgid "Asset Previsional Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_html +msgid "Asset Previsional Report HTML" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_pdf +msgid "Asset Previsional Report PDF" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_xlsx +msgid "Asset Previsional Report XLSX" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__asset_order_fname +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__asset_order_fname +msgid "Asset Print Order" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_purchase_amount +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_purchase_amount +msgid "Asset Purchase Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_html +msgid "Asset Report HTML" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_pdf +msgid "Asset Report PDF" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_xlsx +msgid "Asset Report XLSX" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_reports +msgid "Asset Reports" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_state +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_state +msgid "Asset State" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_tag +msgid "Asset Tags" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__update +msgid "Asset Update" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_used +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_used +msgid "Asset Used" +msgstr "" + +#. module: l10n_it_asset_management +#: model:res.groups,name:l10n_it_asset_management.group_asset_user +msgid "Asset Users" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_id +msgid "Asset depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_type_id +msgid "Asset depreciation type" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Asset dismissal: " +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Asset: " +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset +#: model:ir.model,name:l10n_it_asset_management.model_asset_asset +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__asset_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_asset +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_form_inherit +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Assets" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_accounting_info +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__asset_accounting_info_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_accounting_info +msgid "Assets Accounting Info" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_mode +msgid "Assets Depreciation Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_type +msgid "Assets Depreciation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation +msgid "Assets Depreciations" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#, python-format +msgid "Assets Depreciations " +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_line +msgid "Assets Depreciations Lines" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_management +msgid "Assets Management" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "Assets Previsional Depreciations " +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Assets asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_category +msgid "Assets category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_tag +msgid "Assets tag" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to create a new asset!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to dismiss an asset!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to update an asset!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Attention! You cannot create an asset from accounting moves related to sale " +"documents." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Attention! You cannot dismiss an asset from accounting moves related to " +"purchase documents." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__balance +msgid "Balance" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__base +msgid "Base" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_category.py:0 +#, python-format +msgid "" +"Before creating new categories, please complete the assets' configuration " +"for both depreciation types and modes." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_wizard_asset_journal_report__show_sold_assets +#: model:ir.model.fields,help:l10n_it_asset_management.field_wizard_asset_previsional_report__show_sold_assets +msgid "" +"By default, only unsold or assets sold in the selected year are printed.\n" +"By selecting this flag, the report will show all assets, ignoring the sold check." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Cancel" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "Cannot change category for an asset that's already been depreciated." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot compute pro rata temporis for unknown date." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot create a depreciation line without a date" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `Historical`" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `In`" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `Out`" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines: no method is specified." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot create any depreciation according to current settings." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Cannot create asset if move lines come from different account moves!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_account.py:0 +#, python-format +msgid "Cannot delete accounts while they're still used by asset categories." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_category.py:0 +#, python-format +msgid "Cannot delete categories while they're still linked to an asset." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "" +"Cannot delete depreciation modes while they're still linked to categories." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "" +"Cannot delete depreciation modes while they're still linked to " +"depreciations." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_type.py:0 +#, python-format +msgid "" +"Cannot delete depreciation types while they're still used by categories." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Cannot delete depreciations if there is any depreciation line linked to it." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_journal.py:0 +#, python-format +msgid "Cannot delete journals while they're still used by asset categories." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Cannot dismiss an asset earlier than the last depreciation date.\n" +"(Dismiss date: {}, last depreciation date: {})." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Cannot dismiss asset if move lines come from different account moves!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot get pro rata temporis multiplier for mode `{}`" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot get pro rata temporis multiplier for unspecified mode" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line_type.py:0 +#, python-format +msgid "Cannot remove type {}: there is some depreciation line linked to it." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Cannot update the following assets which contain draft depreciation for the chosen date and types:\n" +"{}" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_gain +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__gain +msgid "Capital Gain" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__gain_account_id +msgid "Capital Gain Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_loss +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__loss +msgid "Capital Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__loss_account_id +msgid "Capital Loss Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__category_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_category +msgid "Categories" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__category_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +#, python-format +msgid "Category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__category_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__category_name +msgid "Category Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Choose Your Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__code +#, python-format +msgid "Code" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_depreciation__base_coeff +msgid "Coeff to compute amount depreciable from purchase amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_category_depreciation_type__base_coeff +msgid "Coeff to compute depreciable amount from purchase amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__coefficient +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_mode_line__application__coefficient +msgid "Coefficient" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__comment +msgid "Comment" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__company_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Company" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Could not determine how to link move lines to asset in mode `{}`." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Could not retrieve depreciation line type from move `{}` (type `{}`)." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Could not update `{}`: not enough residual amount to write off move `{}`.\n" +"(Amount to write off: {}; residual amount: {}.)\n" +"Maybe you should try to dismiss this asset instead?" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Could not update `{}`: not enough residual amount to write off.\n" +"(Amount to write off: {}; residual amount: {}.)\n" +"Maybe you should try to dismiss this asset instead?" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Couldn't determine which action should be done." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Create Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Create Asset and Show" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__create +msgid "Create New" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__create_date +msgid "Created on" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Curr. Year Dep. Fund" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__currency_id +msgid "Currency" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "" +"Current asset has already been depreciated. Changes upon its purchase value " +"will not be automatically reflected upon depreciation lines, which will have" +" to be updated manually." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__customer_id +msgid "Customer" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__out_refund +msgid "Customer Credit Note" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__out_invoice +msgid "Customer Invoice" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__access_url +msgid "Customer Portal URL" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__date +msgid "Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__date_start +msgid "Date Start" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__default +msgid "Default Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_category__print_by_default +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_depreciation_type__print_by_default +msgid "" +"Defines whether a category should be added by default when printing assets' " +"reports." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_amount_depreciable +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_amount_depreciable +msgid "Dep Amount Depreciable" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__base_coeff +msgid "Dep Base Coeff" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_date_start +msgid "Dep Date Start" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__dep_line_ids +msgid "Dep Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__mode_id +msgid "Dep Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_percentage +msgid "Dep Percentage" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_pro_rata_temporis +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_pro_rata_temporis +msgid "Dep Pro Rata Temporis" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_nr +msgid "Dep. Num" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Dep. Percentage (%)" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__base_coeff +msgid "Depreciable Base Coeff" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__totally_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__totally_depreciated +msgid "Depreciated" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciated +msgid "Depreciated Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__depreciated_fund_amount +msgid "Depreciated Fund Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__depreciation_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__depreciation_id +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__depreciated +#, python-format +msgid "Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__percentage +msgid "Depreciation %" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__percentage +msgid "Depreciation (%)" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__depreciation_account_id +msgid "Depreciation Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +msgid "Depreciation Data" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__date_dep +msgid "Depreciation Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__dep_line_id +msgid "Depreciation Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_line_type +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_line_type +msgid "Depreciation Line Amount Types" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_line_type +msgid "Depreciation Line Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_dep_line +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__dep_line_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_dep_line +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +msgid "Depreciation Lines" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Depreciation Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_mode +msgid "Depreciation Modes" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_line_type_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#, python-format +msgid "Depreciation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__depreciation_type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__type_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_type +msgid "Depreciation Types" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Depreciation number can't be a negative number." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__depreciation_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Depreciations" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Depreciations cannot start before {}." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Direct dismiss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__dismiss +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Dismiss Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__dismiss_asset_without_sale +msgid "Dismiss Asset Without Sale" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Dismiss Asset and Show" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Dismiss Asset without Sale" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_move_manage_asset +msgid "Dismiss Assets" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__dismiss_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__dismiss_date +msgid "Dismiss Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__dismiss_move_id +msgid "Dismiss Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__dismissed +msgid "Dismissed" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_title +msgid "Dismissed assets: show" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__document_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__document_date +#, python-format +msgid "Document Date" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__document_nr +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__document_nr +#, python-format +msgid "Document Nr" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move.py:0 +#, python-format +msgid "Every line is already linked to an asset." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Every move line must share the same account!" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "Export Journal Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Export Previsional Report" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Fields `Force All Dep. Num` and `Force First Dep. Num` cannot be both " +"active." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Filters" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__first_dep_nr +msgid "First Dep. Num" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_fiscal_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__fiscal_year_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__fiscal_year_id +msgid "Fiscal Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "" +"Following lines are linked to posted account moves, and cannot be deleted:\n" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Following lines are linked to posted account moves, and cannot be deleted:\n" +"{}" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__force_all_dep_nr +msgid "Force All Dep. Num" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__force_dep_nr +msgid "Force Dep. Num" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__force_first_dep_nr +msgid "Force First Dep. Num" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__from_nr +msgid "From Nr" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "From move(s) " +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__fund_account_id +msgid "Fund Account" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Gain" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Gain / Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__gain_loss +msgid "Gain Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__gain_loss_total +msgid "Gain Loss Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +msgid "General Info" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "General Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +msgid "Generate" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_generate_depreciation +msgid "Generate Asset Depreciations" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_generate_depreciation +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_generate_depreciation +msgid "Generate Depreciations" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Generate Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Generate depreciations" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Group By" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__has_amount_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__has_amount_detail +msgid "Has Amount Detail" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__hidden +msgid "Hidden" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__hide_link_asset_button +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__hide_link_asset_button +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__hide_link_asset_button +msgid "Hide Asset Button" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__historical +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Historical" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_historical +msgid "Historical Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__id +msgid "ID" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_needaction +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__in +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line_type__type__in +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "In" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_in +#, python-format +msgid "In Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "In Amount - Detail" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_tree_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +msgid "In/Out Amount Type" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent asset data." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent company data." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent move data." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciable +#, python-format +msgid "Initial Depreciable Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Invalid search operator!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_journal +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__journal_id +msgid "Journal" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__last_depreciation_date +msgid "Last Dep." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report____last_update +msgid "Last Modified on" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__line_ids +msgid "Lines" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_form_inherit +msgid "Link to Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_account_move_manage_asset +msgid "Link to Assets" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Loss" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_account_move_manage_asset +msgid "Manage Assets from Account Moves" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__management_type +msgid "Management Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_ids +msgid "Messages" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__general +msgid "Miscellaneous" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__mode_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__mode_id +msgid "Mode" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__mode_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__mode_name +msgid "Mode Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__move_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +msgid "Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_line_id +msgid "Move Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_line_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Move Lines" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__is_move_state_ok +msgid "Move State" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_type +msgid "Move Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_ids +msgid "Moves" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Multiple partners found in move lines!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__name +msgid "Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__needs_previsional +msgid "Needs Previsional" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "New" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_fiscal_year.py:0 +#, python-format +msgid "No fiscal year defined for date " +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "No fiscal year defined for date {}" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "No report has been defined for type `{}`." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "No report type has been declared for current print." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__non_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__non_depreciated +msgid "Non Depreciated" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Only posted moves can be used to create, update or dismiss assets!
\n" +" Please select posted moves only." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Options" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__out +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line_type__type__out +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Out" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_out +#, python-format +msgid "Out Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Out Amount - Detail" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__partial_dismiss +msgid "Partial Dismiss" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Partial Dismiss Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Partial Dismiss Asset and Show" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__partial_dismissal +msgid "Partial Dismissal" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Partial dismissal from move(s) {}" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__partially_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__partially_depreciated +msgid "Partially Depreciated" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Partner" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_name +msgid "Partner Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_ref +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_ref +msgid "Partner Ref" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_vat +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_vat +msgid "Partner Vat" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__percentage +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_mode_line__application__percentage +msgid "Percentage" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Please choose an asset before continuing!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Please choose at least one depreciation type!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_url +msgid "Portal Access URL" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Prev. Year Dep. Fund" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__previsional_line_ids +msgid "Previsional Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__print_by_default +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__print_by_default +msgid "Print By Default" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "Print Journal Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Print Previsional Report" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Pro Rata Temporis" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__pro_rata_temporis +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__pro_rata_temporis +msgid "Pro-rata Temporis" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__purchase +msgid "Purchase" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__asset_purchase_amount +#, python-format +msgid "Purchase Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__purchase_date +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Purchase Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Purchase Info" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_move_id +msgid "Purchase Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_amount +msgid "Purchase Value" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Purchased as New / Used" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Regenerate Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__relation_type +msgid "Relation Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Remove" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Remove Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__report_id +msgid "Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_accounting_doc_ids +msgid "Report Accounting Doc" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_asset_id +msgid "Report Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal +msgid "Report Asset Journal" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_accounting_doc +msgid "Report Asset Journal Accounting Doc" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_asset +msgid "Report Asset Journal Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_category +msgid "Report Asset Journal Category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_depreciation +msgid "Report Asset Journal Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_depreciation_line_year +msgid "Report Asset Journal Depreciation Line Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_totals +msgid "Report Asset Journal Totals" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_l10n_it_asset_management_report_asset_journal_xlsx +msgid "Report Asset Journal Xlsx" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional +msgid "Report Asset Previsional" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_accounting_doc +msgid "Report Asset Previsional Accounting Doc" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_asset +msgid "Report Asset Previsional Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_category +msgid "Report Asset Previsional Category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_depreciation +msgid "Report Asset Previsional Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_depreciation_line_year +msgid "Report Asset Previsional Depreciation Line Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_totals +msgid "Report Asset Previsional Totals" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_l10n_it_asset_management_report_asset_previsional_xlsx +msgid "Report Asset Previsional Xlsx" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__report_category_id +msgid "Report Category" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_depreciation_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__report_depreciation_id +msgid "Report Depreciation" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_depreciation_line_year_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_depreciation_line_year_ids +msgid "Report Depreciation Line Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_depreciation_year_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_depreciation_year_line_ids +msgid "Report Depreciation Year Line" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__report_footer_year +msgid "Report Footer Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_name +msgid "Report Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_purchase_doc_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_purchase_doc_id +msgid "Report Purchase Doc" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_sale_doc_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_sale_doc_id +msgid "Report Sale Doc" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_total_ids +msgid "Report Total" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__requires_account_move +msgid "Required Account Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__requires_account_move +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__requires_account_move +msgid "Requires Account Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__requires_depreciation_nr +msgid "Requires Dep Num" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__res_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__res_id +msgid "Res" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__res_model +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__res_model +msgid "Res Model" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Residual" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_residual +msgid "Residual Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__sale +msgid "Sale" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_date +msgid "Sale Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Sale Info" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_move_id +msgid "Sale Move" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_amount +msgid "Sale Value" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_token +msgid "Security Token" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__sequence +msgid "Sequence" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_category_totals +msgid "Show Category Totals" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_dismissed_assets +msgid "Show Dismissed Assets" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_sold_assets +msgid "Show Sold Assets" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_totals +msgid "Show Totals" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sold +msgid "Sold" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_title +msgid "Sold assets: show" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Starting From" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__state +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__state +msgid "State" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Status" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__supplier_id +msgid "Supplier" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Supplier Ref" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__supplier_ref +msgid "Supplier Ref." +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__tag_ids +msgid "Tag" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_tag +msgid "Tags" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_technical_data +msgid "Technical Data" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_accounting_info__move_id +msgid "The move of this entry line." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "" +"There can be no more than 1 default depreciation mode for each company." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.actions.act_window,help:l10n_it_asset_management.action_asset_accounting_info +msgid "There is no archive about assets, invoices and account moves... yet!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "There is nothing to print according to current settings!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__date +msgid "To Date" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__to_nr +msgid "To Nr" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Total" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__depreciation_type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__move_type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__type_id +#, python-format +msgid "Type" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__type_name +msgid "Type Name" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "Unknown" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Unknown Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Update Asset" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Update Asset and Show" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__update +msgid "Update Existing" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciable_updated +msgid "Updated Depreciable Amount" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__used +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__used +#, python-format +msgid "Used" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__used_asset_coeff +msgid "Used Asset Coeff." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "VAT" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.actions.server,name:l10n_it_asset_management.clean_asset_accounting_info_cron_ir_actions_server +#: model:ir.cron,cron_name:l10n_it_asset_management.clean_asset_accounting_info_cron +#: model:ir.cron,name:l10n_it_asset_management.clean_asset_accounting_info_cron +msgid "Vacuum Empty Asset Accounting Info" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__in_invoice +msgid "Vendor Bill" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__in_refund +msgid "Vendor Credit Note" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "View Journal Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "View Previsional Report" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_journal_report +msgid "Wizard Asset Journal Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_previsional_report +msgid "Wizard Asset Previsional Report" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__wrong +msgid "Wrong" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__year +#, python-format +msgid "Year" +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "" +"You confirm the removal of the current line? Depreciation line amounts will " +"not be affected and will have to be updated manually." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to create " +"an asset for category `{}`!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to dismiss " +"asset `{}`!" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to update " +"asset `{}`!" +msgstr "" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__zero_depreciation_until +msgid "Zero Depreciation Up To" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "" +"`{}`: cannot change asset's company once it's already related to accounting " +"info." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "" +"`{}`: cannot change depreciation line's company once it's already related to" +" an asset." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move_line.py:0 +#, python-format +msgid "" +"`{}`: cannot change move line's company once it's already related to an " +"asset." +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move.py:0 +#, python-format +msgid "" +"`{}`: cannot change move's company once it's already related to an asset." +msgstr "" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "or" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "to date {}" +msgstr "" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "{} - Depreciation" +msgstr "" diff --git a/l10n_it_asset_management/i18n/it.po b/l10n_it_asset_management/i18n/it.po new file mode 100644 index 000000000000..858485279fb8 --- /dev/null +++ b/l10n_it_asset_management/i18n/it.po @@ -0,0 +1,3188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_it_asset_management +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-23 08:16+0000\n" +"PO-Revision-Date: 2023-10-11 10:39+0000\n" +"Last-Translator: mymage \n" +"Language-Team: \n" +"Language: it\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" +"X-Generator: Weblate 4.17\n" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_body +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_body +msgid "" +"\n" +" Totals\n" +" " +msgstr "" +"\n" +" Totali\n" +" " + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_category_data +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_category_data +msgid "Asset Category: " +msgstr "Categoria: " + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_title +msgid "Asset: " +msgstr "Cespite: " + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Code" +msgstr "Codice" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Curr. Year Dep. Fund" +msgstr "Fondo Amm.to anno corrente" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Dep. Amount" +msgstr "Valore ammortizzabile" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Dep. Percentage (%)" +msgstr "Amm.to (%)" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciable Amount" +msgstr "Valore ammortizzabile" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciation Mode" +msgstr "Metodo" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Depreciation Type" +msgstr "Natura" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Depreciation" +msgstr "Amm." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Document Date" +msgstr "Data Documento" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Document Nr" +msgstr "N. Documento" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Gain / Loss" +msgstr "Plusvalenza / Minusvalenza" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "In Amount" +msgstr "Rettifica positiva" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Out Amount" +msgstr "Rettifica negativa" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Partner" +msgstr "Partner" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Prev. Year Dep. Fund" +msgstr "Fondo Amm.to anno precedente" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Pro Rata Temporis" +msgstr "Pro Rata Temporis" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Purchase Amount" +msgstr "Valore acquisto" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Purchased as New / Used" +msgstr "Acquistato Nuovo / Usato" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "Ref" +msgstr "Rif." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Residual" +msgstr "Residuo da ammortizzare" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_depreciation_table_header +msgid "Starting From" +msgstr "Data inizio amm.to" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_table_header +msgid "Status" +msgstr "Stato" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_category_totals +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_category_totals +msgid "Totals for: " +msgstr "Totali per: " + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_totals_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_totals_header +msgid "Type" +msgstr "Tipo" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_accounting_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_accounting_table_header +msgid "VAT" +msgstr "P.IVA" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_asset_year_depreciation_table_header +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_asset_year_depreciation_table_header +msgid "Year" +msgstr "Anno" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_warning +msgid "Access warning" +msgstr "Avviso accesso" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_account +msgid "Account" +msgstr "Conto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__asset_accounting_info_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Accounting Info" +msgstr "Info contabili" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_ids +msgid "Activities" +msgstr "Attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decorazione eccezione attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_state +msgid "Activity State" +msgstr "Stato attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icona tipo attività" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__amount +#, python-format +msgid "Amount" +msgstr "Importo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciable +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciable +msgid "Amount Depreciable" +msgstr "Valore ammortizzabile" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciable_updated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciable_updated +msgid "Amount Depreciable Updated" +msgstr "Valore ammortizzabile aggiornato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciated +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciated +msgid "Amount Depreciated" +msgstr "Valore ammortizzato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciation_fund_curr_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciation_fund_curr_year +msgid "Amount Depreciation Fund Curr Year" +msgstr "F.do amm.to Anno Corrente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_depreciation_fund_prev_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_depreciation_fund_prev_year +msgid "Amount Depreciation Fund Prev Year" +msgstr "F.do amm.to Anno Precedente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_gain +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_gain +msgid "Amount Gain" +msgstr "Plusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_gain_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_gain_total +msgid "Amount Gain Total" +msgstr "Totale Plusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_historical +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_historical +msgid "Amount Historical" +msgstr "Valore Storico" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in +msgid "Amount In" +msgstr "Rettifica positiva" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in_detail +msgid "Amount In Detail" +msgstr "Dettaglio Rettifica positiva" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_in_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_in_total +msgid "Amount In Total" +msgstr "Totale Rettifica positiva" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_loss +msgid "Amount Loss" +msgstr "Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_loss_total +msgid "Amount Loss Total" +msgstr "Totale Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out +msgid "Amount Out" +msgstr "Rettifica negativa" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out_detail +msgid "Amount Out Detail" +msgstr "Dettaglio Rettifica negativa" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_out_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_out_total +msgid "Amount Out Total" +msgstr "Totale Rettifica negativa" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__amount_residual +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__amount_residual +msgid "Amount Residual" +msgstr "Importo residuo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__application +msgid "Application by" +msgstr "Applica su" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__asset_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#, python-format +msgid "Asset" +msgstr "Cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__asset_account_id +msgid "Asset Account" +msgstr "Conto Cespite" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_accounting_info +msgid "Asset Accounting Relations" +msgstr "Collegamenti contabili" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_category +msgid "Asset Category" +msgstr "Categoria cespite" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_category_depreciation_type +msgid "Asset Category - Depreciation Type" +msgstr "Categorie beni ammortizzabili - Natura ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_code +msgid "Asset Code" +msgstr "Codice" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_configuration +msgid "Asset Configuration" +msgstr "Configurazione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__create +msgid "Asset Creation" +msgstr "Creazione Cespite" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Asset Depreciation" +msgstr "Ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_mode +msgid "Asset Depreciation Mode" +msgstr "Metodi ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_mode_line +msgid "Asset Depreciation Mode Line" +msgstr "Riga metodo Amm. Cespite" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_type +msgid "Asset Depreciation Type" +msgstr "Natura ammortameno" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__dismiss +msgid "Asset Dismissal" +msgstr "Dismissione Cespite" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_journal_report +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_journal_report +#, python-format +msgid "Asset Journal" +msgstr "Registro cespiti" + +#. module: l10n_it_asset_management +#: model:ir.actions.client,name:l10n_it_asset_management.act_client_asset_journal_report +msgid "Asset Journal Report" +msgstr "Resoconto libro cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_name +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Asset Name" +msgstr "Nome Cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__asset_order_fname +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__asset_order_fname +msgid "Asset Order Fname" +msgstr "Codice cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__partial_dismiss +msgid "Asset Partial Dismissal" +msgstr "Dismissione parziale Cespite" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_previsional_report +#: model:ir.actions.client,name:l10n_it_asset_management.act_client_asset_previsional_report +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_previsional_report +msgid "Asset Previsional Report" +msgstr "Registro Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_html +msgid "Asset Previsional Report HTML" +msgstr "Registro Previsionale HTML" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_pdf +msgid "Asset Previsional Report PDF" +msgstr "Registro Previsionale PDF" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_previsional_xlsx +msgid "Asset Previsional Report XLSX" +msgstr "Registro Previsionale XLSX" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__asset_order_fname +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__asset_order_fname +msgid "Asset Print Order" +msgstr "Ordine stampa beni ammortizzabili" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_purchase_amount +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_purchase_amount +msgid "Asset Purchase Amount" +msgstr "Valore Acquisto" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_html +msgid "Asset Report HTML" +msgstr "Registro beni ammortizzabili - HTML" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_pdf +msgid "Asset Report PDF" +msgstr "Registro beni ammortizzabili - PDF" + +#. module: l10n_it_asset_management +#: model:ir.actions.report,name:l10n_it_asset_management.report_asset_journal_xlsx +msgid "Asset Report XLSX" +msgstr "Registro beni ammortizzabili - XLSX" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_reports +msgid "Asset Reports" +msgstr "Registro beni ammortizzabili" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_state +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_state +msgid "Asset State" +msgstr "Stato" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_tag +msgid "Asset Tags" +msgstr "Tag" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_accounting_info__relation_type__update +msgid "Asset Update" +msgstr "Aggiornamento Cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__asset_used +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__asset_used +msgid "Asset Used" +msgstr "Cespite usato" + +#. module: l10n_it_asset_management +#: model:res.groups,name:l10n_it_asset_management.group_asset_user +msgid "Asset Users" +msgstr "Utenti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_id +msgid "Asset depreciation" +msgstr "Ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_type_id +msgid "Asset depreciation type" +msgstr "Tipo Amm. Cespite" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Asset dismissal: " +msgstr "Dismissione cespite: " + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Asset: " +msgstr "Cespite: " + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset +#: model:ir.model,name:l10n_it_asset_management.model_asset_asset +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__asset_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_asset +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_form_inherit +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Assets" +msgstr "Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_accounting_info +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__asset_accounting_info_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__asset_accounting_info_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_accounting_info +msgid "Assets Accounting Info" +msgstr "Info contabili" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_mode +msgid "Assets Depreciation Mode" +msgstr "Metodi ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_type +msgid "Assets Depreciation Type" +msgstr "Natura ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation +msgid "Assets Depreciations" +msgstr "Ammortamenti" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#, python-format +msgid "Assets Depreciations " +msgstr "Amm.ti Cespiti " + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_line +msgid "Assets Depreciations Lines" +msgstr "Linee ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_management +msgid "Assets Management" +msgstr "Gestione" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "Assets Previsional Depreciations " +msgstr "Previsione Amm.ti Cespiti " + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Assets asset" +msgstr "Beni ammortizzabili" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_category +msgid "Assets category" +msgstr "Categoria cespiti" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_tag +msgid "Assets tag" +msgstr "Etichetta beni" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to create a new asset!" +msgstr "È necessaria almeno una riga contabile per creare un nuovo cespite!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to dismiss an asset!" +msgstr "È necessaria almeno una riga contabile per dismettere un cespite!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "At least one move line is mandatory to update an asset!" +msgstr "È necessaria almento una riga contabile per aggiornare un cespite!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_attachment_count +msgid "Attachment Count" +msgstr "Numero allegati" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Attention! You cannot create an asset from accounting moves related to sale " +"documents." +msgstr "" +"Attenzione! Non è possibile creare un Cespite da una registrazione contabile " +"collegata a documenti di vendita." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Attention! You cannot dismiss an asset from accounting moves related to " +"purchase documents." +msgstr "" +"Attenzione! Non è possibile dismettere un cespite da registrazioni contabili " +"collegate a documenti di acquisto." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__balance +msgid "Balance" +msgstr "Saldo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__base +msgid "Base" +msgstr "Imponibile" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_category.py:0 +#, python-format +msgid "" +"Before creating new categories, please complete the assets' configuration " +"for both depreciation types and modes." +msgstr "" +"Prima di creare nuove categorie, si prega di completare la configurazione " +"dei cespiti sia per i tipi che per i modi di ammortamento." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_wizard_asset_journal_report__show_sold_assets +#: model:ir.model.fields,help:l10n_it_asset_management.field_wizard_asset_previsional_report__show_sold_assets +msgid "" +"By default, only unsold or assets sold in the selected year are printed.\n" +"By selecting this flag, the report will show all assets, ignoring the sold " +"check." +msgstr "" +"Solo i cespiti non venduti o quelli venduti nell'anno selezionato sono " +"stampati in modo predefinito.\n" +"Selezionando questa opzione, il resoconto stamperà tutti i cespiti, " +"ignorando il controllo venduto." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Cancel" +msgstr "Annulla" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "Cannot change category for an asset that's already been depreciated." +msgstr "" +"Non è possibile cambiare categoria per un cespite che è già stato " +"ammortizzato." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot compute pro rata temporis for unknown date." +msgstr "" +"Non è possibile calcolare il prorata temporis per una data sconosciuta." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot create a depreciation line without a date" +msgstr "Non è possibile creare una riga di ammortamento senza data" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `Historical`" +msgstr "Non è possibile creare righe contabili per righe di tipo `Storico`" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `In`" +msgstr "Non è possibile creare righe contabili per righe di tipo `In`" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines for lines of type `Out`" +msgstr "Non è possibile creare righe contabili per righe di tipo `Out`" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Cannot create account move lines: no method is specified." +msgstr "Non è possibile creare righe contabili: nessun metodo specificato." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot create any depreciation according to current settings." +msgstr "Non è possibile creare ammortamenti in base alle impostazioni scelte." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Cannot create asset if move lines come from different account moves!" +msgstr "" +"Non è possibile creare cespiti se le righe contabili provengono da diversi " +"movimenti!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_account.py:0 +#, python-format +msgid "Cannot delete accounts while they're still used by asset categories." +msgstr "" +"Non è possibile eliminare conti ancora utilizzati da categorie cespiti." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_category.py:0 +#, python-format +msgid "Cannot delete categories while they're still linked to an asset." +msgstr "Non è possibile eliminare categorie ancora collegate a un cespite." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "" +"Cannot delete depreciation modes while they're still linked to categories." +msgstr "" +"Non è possibile eliminare metodi di ammortamento ancora collegati a " +"categorie." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "" +"Cannot delete depreciation modes while they're still linked to depreciations." +msgstr "" +"Non è possibile eliminare modi di ammortamento ancora collegati a " +"ammortamenti." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_type.py:0 +#, python-format +msgid "" +"Cannot delete depreciation types while they're still used by categories." +msgstr "" +"Non è possibile eliminare tipi di ammortamento ancora collegati a categorie." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Cannot delete depreciations if there is any depreciation line linked to it." +msgstr "" +"Non è possibile eliminare ammortamenti se ci sono ancora righe di " +"ammortamento collegate." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_journal.py:0 +#, python-format +msgid "Cannot delete journals while they're still used by asset categories." +msgstr "Non è possibile eliminare registri ancora usati da categorie cespite." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Cannot dismiss an asset earlier than the last depreciation date.\n" +"(Dismiss date: {}, last depreciation date: {})." +msgstr "" +"Non è possibile dismette un cespite rpima dell'ultima data di ammortamento.\n" +"(Data di Dismissione: {}, ultima data di ammortamento: {})." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Cannot dismiss asset if move lines come from different account moves!" +msgstr "" +"Non è possibile dismettere un cespite se le righe dei movimenti provengono " +"da differenti registrazioni contabili!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot get pro rata temporis multiplier for mode `{}`" +msgstr "" +"Non è possibile calcolare il moltiplicatore del prorata temporis per il modo " +"`{}`" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Cannot get pro rata temporis multiplier for unspecified mode" +msgstr "" +"Non è possibile calcolare il moltiplicatore del prorata temporis per un modo " +"sconosciuto" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line_type.py:0 +#, python-format +msgid "Cannot remove type {}: there is some depreciation line linked to it." +msgstr "" +"Non è possibile rimuovere il tipo {}: ci sono alcune righe di ammortamento " +"collegate." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Cannot update the following assets which contain draft depreciation for the " +"chosen date and types:\n" +"{}" +msgstr "" +"Impossibile aggiornare i seguenti cespiti, contengono ammortamenti in bozza " +"per data e tipologie scelte:\n" +"{}" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_gain +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__gain +msgid "Capital Gain" +msgstr "Plusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__gain_account_id +msgid "Capital Gain Account" +msgstr "Conto Plusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_loss +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__loss +msgid "Capital Loss" +msgstr "Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__loss_account_id +msgid "Capital Loss Account" +msgstr "Conto Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__category_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_category +msgid "Categories" +msgstr "Categorie" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__category_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +#, python-format +msgid "Category" +msgstr "Categoria" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__category_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__category_name +msgid "Category Name" +msgstr "Nome categoria" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Choose Your Asset" +msgstr "Scegli il Cespite" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__code +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__code +#, python-format +msgid "Code" +msgstr "Codice" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_depreciation__base_coeff +msgid "Coeff to compute amount depreciable from purchase amount" +msgstr "Coefficiente per calcolo importo ammortizzabile da valore di acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_category_depreciation_type__base_coeff +msgid "Coeff to compute depreciable amount from purchase amount" +msgstr "Coefficiente per calcolo importo ammortizzabile da valore di acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__coefficient +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_mode_line__application__coefficient +msgid "Coefficient" +msgstr "Coefficiente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__comment +msgid "Comment" +msgstr "Commento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__company_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__company_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Company" +msgstr "Azienda" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Could not determine how to link move lines to asset in mode `{}`." +msgstr "" +"Non è possibile determinare come collegare le righe dei movimenti al cespite " +"nel modo `{}`." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Could not retrieve depreciation line type from move `{}` (type `{}`)." +msgstr "" +"Non è possibile recuperare il tipo delle righe di ammortamento dal movimento " +"`{}` (tipo `{}`)." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Could not update `{}`: not enough residual amount to write off move `{}`.\n" +"(Amount to write off: {}; residual amount: {}.)\n" +"Maybe you should try to dismiss this asset instead?" +msgstr "" +"Non è possibile aggiornare `{}`: non c'è sufficiente importo residuo da " +"stornare dal movimento `{}`.\n" +"(Importo da stornare: {}; importo residuo: {}.)\n" +"Forse si dovrebbe invece dismettere il cespite?" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"Could not update `{}`: not enough residual amount to write off.\n" +"(Amount to write off: {}; residual amount: {}.)\n" +"Maybe you should try to dismiss this asset instead?" +msgstr "" +"Non è possibile aggiornare `{}`: non c'è sufficiente importo residuo da " +"stornare.\n" +"(Importo da stornare: {}; importo residuo: {}.)\n" +"Forse si dovrebbe invece dismettere il cespite?" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Couldn't determine which action should be done." +msgstr "Non è possibile determinare quale azione dovrebbe essere fatta." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Create Asset" +msgstr "Crea cespite" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Create Asset and Show" +msgstr "Crea cespite e mostra" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__create +msgid "Create New" +msgstr "Crea nuovo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__create_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__create_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Curr. Year Dep. Fund" +msgstr "F.do amm.to anno corr." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__currency_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "" +"Current asset has already been depreciated. Changes upon its purchase value " +"will not be automatically reflected upon depreciation lines, which will have " +"to be updated manually." +msgstr "" +"Il cespite attuale è già stato ammortizzato. Modifiche sui suoi valori di " +"acquisto non saranno automaticamente riversate sulle righe di ammortamento, " +"che dovranno essere aggiornate manualmente." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__customer_id +msgid "Customer" +msgstr "Cliente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__out_refund +msgid "Customer Credit Note" +msgstr "Nota di Credito Cliente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__out_invoice +msgid "Customer Invoice" +msgstr "Fattura cliente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__access_url +msgid "Customer Portal URL" +msgstr "URL portale cliente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__date +msgid "Date" +msgstr "Data" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__date_start +msgid "Date Start" +msgstr "Data inizio" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__default +msgid "Default Mode" +msgstr "Modo predefinito" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_category__print_by_default +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_depreciation_type__print_by_default +msgid "" +"Defines whether a category should be added by default when printing assets' " +"reports." +msgstr "" +"Definisci se una categoria dovrebbe essere aggiunta per default quanto si " +"stampa il registro dei cespiti." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_amount_depreciable +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_amount_depreciable +msgid "Dep Amount Depreciable" +msgstr "Importo ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__base_coeff +msgid "Dep Base Coeff" +msgstr "Coeff. base amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_date_start +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_date_start +msgid "Dep Date Start" +msgstr "Data inizio amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__dep_line_ids +msgid "Dep Line" +msgstr "Riga amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__mode_id +msgid "Dep Mode" +msgstr "Modalità amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_percentage +msgid "Dep Percentage" +msgstr "Percentuale amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__dep_pro_rata_temporis +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__dep_pro_rata_temporis +msgid "Dep Pro Rata Temporis" +msgstr "Pro Rata Temporis amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_nr +msgid "Dep. Num" +msgstr "Amm.to Nr" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Dep. Percentage (%)" +msgstr "Percentuale Amm.to (%)" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__base_coeff +msgid "Depreciable Base Coeff" +msgstr "Coeff. base Amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__totally_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__totally_depreciated +msgid "Depreciated" +msgstr "Ammortizzato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciated +msgid "Depreciated Amount" +msgstr "Valore ammortizzato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__depreciated_fund_amount +msgid "Depreciated Fund Amount" +msgstr "Valore fondo amm.to" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__depreciation_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__depreciation_id +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__depreciated +#, python-format +msgid "Depreciation" +msgstr "Ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__percentage +msgid "Depreciation %" +msgstr "Amm. %" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__percentage +msgid "Depreciation (%)" +msgstr "Amm. (%)" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__depreciation_account_id +msgid "Depreciation Account" +msgstr "Conto amm.to" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +msgid "Depreciation Data" +msgstr "Dati ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__date_dep +msgid "Depreciation Date" +msgstr "Data ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__dep_line_id +msgid "Depreciation Line" +msgstr "Riga ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_depreciation_line_type +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_line_type +msgid "Depreciation Line Amount Types" +msgstr "Tipi operazione" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_asset_depreciation_line_type +msgid "Depreciation Line Type" +msgstr "Tipo riga amm.to" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_asset_dep_line +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__dep_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__dep_line_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_dep_line +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +msgid "Depreciation Lines" +msgstr "Righe ammortamento" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Depreciation Mode" +msgstr "Modo Ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_mode +msgid "Depreciation Modes" +msgstr "Metodi ammortamento" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__depreciation_line_type_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#, python-format +msgid "Depreciation Type" +msgstr "Tipo ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__depreciation_type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__type_ids +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_depreciation_type +msgid "Depreciation Types" +msgstr "Tipi ammortamento" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Depreciation number can't be a negative number." +msgstr "Il numero di ammortamenti non può essere negativo." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__depreciation_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Depreciations" +msgstr "Ammortamenti" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Depreciations cannot start before {}." +msgstr "Gli ammortamenti non possono iniziare prima di {}." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Direct dismiss" +msgstr "Dismissione diretta" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__dismiss +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Dismiss Asset" +msgstr "Dismetti cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__dismiss_asset_without_sale +msgid "Dismiss Asset Without Sale" +msgstr "Dismetti cespite senza vendita" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Dismiss Asset and Show" +msgstr "Dismetti cespite e visualizza" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Dismiss Asset without Sale" +msgstr "Dismetti cespite senza vendita" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_move_manage_asset +msgid "Dismiss Assets" +msgstr "Dismetti cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__dismiss_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__dismiss_date +msgid "Dismiss Date" +msgstr "Data dismissione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__dismiss_move_id +msgid "Dismiss Move" +msgstr "Registrazione contabile dismissione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__dismissed +msgid "Dismissed" +msgstr "Dismesso" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_title +msgid "Dismissed assets: show" +msgstr "Cespiti dismessi: visualizza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__display_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__document_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__document_date +#, python-format +msgid "Document Date" +msgstr "Data Documento" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__document_nr +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__document_nr +#, python-format +msgid "Document Nr" +msgstr "N° Documento" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move.py:0 +#, python-format +msgid "Every line is already linked to an asset." +msgstr "Ogni linea è già collegata a un cespite." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Every move line must share the same account!" +msgstr "Ogni riga di movimento deve avere lo stesso conto!" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "Export Journal Report" +msgstr "Esporta stampa registro" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Export Previsional Report" +msgstr "Esporta Stampa Previsionale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Fields `Force All Dep. Num` and `Force First Dep. Num` cannot be both active." +msgstr "" +"Campi `Forza Tutti Num. Amm.ti. ` e `Forza Primo Num. Amm.to` non possono " +"essere entrambi attivi." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Filters" +msgstr "Filtri" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__first_dep_nr +msgid "First Dep. Num" +msgstr "Primo Amm.to Nr" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_fiscal_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__fiscal_year_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__fiscal_year_id +msgid "Fiscal Year" +msgstr "Anno fiscale" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_channel_ids +msgid "Followers (Channels)" +msgstr "Seguito da (canali)" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "" +"Following lines are linked to posted account moves, and cannot be deleted:\n" +msgstr "" +"Le righe seguenti sono collegate a registrazioni contabili contabilizzate, e " +"non possono essere eliminati:\n" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "" +"Following lines are linked to posted account moves, and cannot be deleted:\n" +"{}" +msgstr "" +"Le righe seguenti sono collegate a registrazioni contabili contabilizzate, e " +"non possono essere eliminate:\n" +"{}" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icona Font Awesome es. fa-tasks" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__force_all_dep_nr +msgid "Force All Dep. Num" +msgstr "Forza tutti i numeri amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__force_dep_nr +msgid "Force Dep. Num" +msgstr "Primo Nr amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__force_first_dep_nr +msgid "Force First Dep. Num" +msgstr "Forza PRIMO Nr amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__from_nr +msgid "From Nr" +msgstr "Dal N." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "From move(s) " +msgstr "Da registrazione/i " + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__fund_account_id +msgid "Fund Account" +msgstr "Conto fondo" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Gain" +msgstr "Plusvalenza" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Gain / Loss" +msgstr "Plusvalenza / Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__gain_loss +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__gain_loss +msgid "Gain Loss" +msgstr "Plusvalenza / Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__gain_loss_total +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__gain_loss_total +msgid "Gain Loss Total" +msgstr "Totale Plusvalenza / Minusvalenza" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +msgid "General Info" +msgstr "Info generali" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "General Total" +msgstr "Totale Complessivo" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +msgid "Generate" +msgstr "Genera" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_generate_depreciation +msgid "Generate Asset Depreciations" +msgstr "Genera ammortamenti" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_asset_generate_depreciation +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_wizard_asset_generate_depreciation +msgid "Generate Depreciations" +msgstr "Genera ammortamenti" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Generate Move" +msgstr "Genera registrazione" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Generate depreciations" +msgstr "Genera ammortamenti" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Group By" +msgstr "Raggruppa per" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__has_amount_detail +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__has_amount_detail +msgid "Has Amount Detail" +msgstr "Con dettaglio valore" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__hidden +msgid "Hidden" +msgstr "Nascosto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_bank_statement_line__hide_link_asset_button +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__hide_link_asset_button +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_payment__hide_link_asset_button +msgid "Hide Asset Button" +msgstr "Nascondi pulsante cespite" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__historical +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Historical" +msgstr "Storico" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_historical +msgid "Historical Amount" +msgstr "Valore storico" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__id +msgid "ID" +msgstr "ID" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_exception_icon +msgid "Icon" +msgstr "Icona" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icona per indicare un'attività eccezione." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_needaction +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_unread +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__in +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line_type__type__in +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "In" +msgstr "Rettifica attiva" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_in +#, python-format +msgid "In Amount" +msgstr "Valore rettifiche attive" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "In Amount - Detail" +msgstr "Importo Positivo - Dettaglio" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_tree_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_line_form_inherit +msgid "In/Out Amount Type" +msgstr "+/- Tipo operazione" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent asset data." +msgstr "Data cespite anomala." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent company data." +msgstr "Dati azienda anomali." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Incoherent move data." +msgstr "Data movimento anomala." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciable +#, python-format +msgid "Initial Depreciable Amount" +msgstr "Importo ammortizzabile iniziale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "Invalid search operator!" +msgstr "Operatore di ricerca non valido!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_is_follower +msgid "Is Follower" +msgstr "Sta seguendo" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_journal +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__journal_id +msgid "Journal" +msgstr "Registro" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_move +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_account_move_line +msgid "Journal Item" +msgstr "Movimento contabile" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__last_depreciation_date +msgid "Last Dep." +msgstr "Ultimo amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_account____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_fiscal_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_journal____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_account_move_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_journal_xlsx____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_l10n_it_asset_management_report_asset_previsional_xlsx____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report____last_update +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__write_uid +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_generate_depreciation__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__write_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__line_ids +msgid "Lines" +msgstr "Righe" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_move_form_inherit +msgid "Link to Asset" +msgstr "Beni ammortizzabili" + +#. module: l10n_it_asset_management +#: model:ir.actions.act_window,name:l10n_it_asset_management.action_wizard_account_move_manage_asset +msgid "Link to Assets" +msgstr "Collegamento ai cespiti" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Loss" +msgstr "Minusvalenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_main_attachment_id +msgid "Main Attachment" +msgstr "Allegato principale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_account_move_manage_asset +msgid "Manage Assets from Account Moves" +msgstr "Gestione cespiti da movimenti conto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__management_type +msgid "Management Type" +msgstr "Tipo gestione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__general +msgid "Miscellaneous" +msgstr "Varie" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__mode_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__mode_id +msgid "Mode" +msgstr "Metodo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__mode_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__mode_name +msgid "Mode Name" +msgstr "Metodo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__move_id +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_accounting_info_search_view +msgid "Move" +msgstr "Registrazione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_line_id +msgid "Move Line" +msgstr "Riga movimento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_line_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Move Lines" +msgstr "Righe di Movimento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__is_move_state_ok +msgid "Move State" +msgstr "Stato registrazione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_type +msgid "Move Type" +msgstr "Tipo movimento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__move_ids +msgid "Moves" +msgstr "Registrazioni contabili" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Multiple partners found in move lines!" +msgstr "Partner multipli trovati nelle righe movimento!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Scadenza mia attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_tag__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__name +msgid "Name" +msgstr "Nome" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__needs_previsional +msgid "Needs Previsional" +msgstr "Richiede previsionali" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "New" +msgstr "Nuovo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Scadenza prossima attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_summary +msgid "Next Activity Summary" +msgstr "Riepilogo prossima attività" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo prossima attività" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_fiscal_year.py:0 +#, python-format +msgid "No fiscal year defined for date " +msgstr "Nessun anno fiscale definito per data " + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "No fiscal year defined for date {}" +msgstr "Nessun anno fiscale definito per data {}" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "No report has been defined for type `{}`." +msgstr "Nessuna stampa definita per tipo `{}`." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "No report type has been declared for current print." +msgstr "Nessun tipo di report è stato dichiarato per la stampa corrente." + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__non_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__non_depreciated +msgid "Non Depreciated" +msgstr "Non ammortizzato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__message_unread_counter +msgid "Number of unread messages" +msgstr "Numero di messaggi non letti" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "" +"Only posted moves can be used to create, update or dismiss assets!
\n" +" Please select posted moves only." +msgstr "" +"Solo con le registrazioni contabili emesse è possibile creare, aggiornare o " +"dismettere un cespite!
\n" +" Scegli solo le registrazioni emesse." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Options" +msgstr "Opzioni" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line__move_type__out +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_line_type__type__out +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_search_view +msgid "Out" +msgstr "Rettifica negativa" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_out +#, python-format +msgid "Out Amount" +msgstr "Rettifica negativa" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Out Amount - Detail" +msgstr "Importi Negativi - Dettaglio" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__partial_dismiss +msgid "Partial Dismiss" +msgstr "Dismissione Parziale" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Partial Dismiss Asset" +msgstr "Dismissione Parziale" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Partial Dismiss Asset and Show" +msgstr "Dismetti Cespite e Mostra" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__partial_dismissal +msgid "Partial Dismissal" +msgstr "Dismissione Parziale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Partial dismissal from move(s) {}" +msgstr "Dismissione parziale da movimento/i {}" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_asset__state__partially_depreciated +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation__state__partially_depreciated +msgid "Partially Depreciated" +msgstr "Parzialmente Ammortizzato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Partner" +msgstr "Partner" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_name +msgid "Partner Name" +msgstr "Nome partner" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_ref +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_ref +msgid "Partner Ref" +msgstr "Riferimento partner" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__partner_vat +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__partner_vat +msgid "Partner Vat" +msgstr "P.IVA partner" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__percentage +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__percentage +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__asset_depreciation_mode_line__application__percentage +msgid "Percentage" +msgstr "Percentuale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Please choose an asset before continuing!" +msgstr "Scegliere un cespite prima di continuare!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "Please choose at least one depreciation type!" +msgstr "Scegliere almeno un tipo ammortamento!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_url +msgid "Portal Access URL" +msgstr "URL accesso portale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Prev. Year Dep. Fund" +msgstr "Fondo amm.to anno prec." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__previsional_line_ids +msgid "Previsional Line" +msgstr "Riga previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__print_by_default +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__print_by_default +msgid "Print By Default" +msgstr "Stampa in modo predefinito" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "Print Journal Report" +msgstr "Stampa resoconto registro" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "Print Previsional Report" +msgstr "Stampa resoconto previsionale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Pro Rata Temporis" +msgstr "Pro rata temporis" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__pro_rata_temporis +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__pro_rata_temporis +msgid "Pro-rata Temporis" +msgstr "Pro-rata temporis" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__purchase +msgid "Purchase" +msgstr "Acquisto" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__asset_purchase_amount +#, python-format +msgid "Purchase Amount" +msgstr "Valore acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__purchase_date +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_search_view +msgid "Purchase Date" +msgstr "Data acquisto" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Purchase Info" +msgstr "Informazioni acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_move_id +msgid "Purchase Move" +msgstr "Registrazione acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__purchase_amount +msgid "Purchase Value" +msgstr "Valore acquisto" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Purchased as New / Used" +msgstr "Acquisto Nuovo / Usato" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Regenerate Move" +msgstr "Rigenera registrazione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__relation_type +msgid "Relation Type" +msgstr "Tipo relazione" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Remove" +msgstr "Rimuovi" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.view_asset_depreciation_form +msgid "Remove Move" +msgstr "Rimuovi registrazione" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__report_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__report_id +msgid "Report" +msgstr "Resoconto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_accounting_doc_ids +msgid "Report Accounting Doc" +msgstr "Stampa documenti contabili" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_asset_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_asset_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_asset_id +msgid "Report Asset" +msgstr "Resoconto cespite" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal +msgid "Report Asset Journal" +msgstr "Stampa Registro Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_accounting_doc +msgid "Report Asset Journal Accounting Doc" +msgstr "Stampa Registro Cespiti Doc Contabili" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_asset +msgid "Report Asset Journal Asset" +msgstr "Stampa Registro Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_category +msgid "Report Asset Journal Category" +msgstr "Stampa Registro Categorie Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_depreciation +msgid "Report Asset Journal Depreciation" +msgstr "Stampa Registro Amm.ti Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_depreciation_line_year +msgid "Report Asset Journal Depreciation Line Year" +msgstr "Stampa Registro Amm.ti Righe Anno Cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_journal_totals +msgid "Report Asset Journal Totals" +msgstr "Stampa Registro Cespiti Totali" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_l10n_it_asset_management_report_asset_journal_xlsx +msgid "Report Asset Journal Xlsx" +msgstr "Stampa Registro Cespiti Xlsx" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional +msgid "Report Asset Previsional" +msgstr "Stampa Registro Cespiti Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_accounting_doc +msgid "Report Asset Previsional Accounting Doc" +msgstr "Stampa Registro Cespiti Doc Contabili Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_asset +msgid "Report Asset Previsional Asset" +msgstr "Stampa Registro Cespiti Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_category +msgid "Report Asset Previsional Category" +msgstr "Stampa Registro Categorie Cespiti Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_depreciation +msgid "Report Asset Previsional Depreciation" +msgstr "Stampa Registro Amm.ti Cespiti Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_depreciation_line_year +msgid "Report Asset Previsional Depreciation Line Year" +msgstr "Stampa Registro Amm.ti Cespiti Anno Previsionale" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_asset_previsional_totals +msgid "Report Asset Previsional Totals" +msgstr "Stampa Registro Cespiti Previsionale Totali" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_report_l10n_it_asset_management_report_asset_previsional_xlsx +msgid "Report Asset Previsional Xlsx" +msgstr "Stampa Registro Cespiti Previsionale Xlsx" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_category_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_category_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__report_category_id +msgid "Report Category" +msgstr "Resoconto categoria" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__report_depreciation_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_depreciation_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__report_depreciation_id +msgid "Report Depreciation" +msgstr "Resoconto ammortamento" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_depreciation_line_year_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_depreciation_line_year_ids +msgid "Report Depreciation Line Year" +msgstr "Resoconto riga ammortamento annuale" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__report_depreciation_year_line_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__report_depreciation_year_line_ids +msgid "Report Depreciation Year Line" +msgstr "Resoconto riga ammortamento annuale" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__report_footer_year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__report_footer_year +msgid "Report Footer Year" +msgstr "Anno piè di pagina resoconto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_name +msgid "Report Name" +msgstr "Nome della stampa" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_purchase_doc_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_purchase_doc_id +msgid "Report Purchase Doc" +msgstr "Stampa doc. acquisto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_asset__report_sale_doc_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_asset__report_sale_doc_id +msgid "Report Sale Doc" +msgstr "Resoconto doc. vendita" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_category__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__report_total_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_category__report_total_ids +msgid "Report Total" +msgstr "Resoconto totale" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__requires_account_move +msgid "Required Account Move" +msgstr "Genera registrazioni contabili" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__requires_account_move +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_type__requires_account_move +msgid "Requires Account Move" +msgstr "Richiede registrazione contabile" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__requires_depreciation_nr +msgid "Requires Dep Num" +msgstr "Richiede Nr Amm.to" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__res_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__res_id +msgid "Res" +msgstr "Res" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__res_model +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__res_model +msgid "Res Model" +msgstr "Modello res" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Residual" +msgstr "Residuo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_residual +msgid "Residual Amount" +msgstr "Importo residuo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__activity_user_id +msgid "Responsible User" +msgstr "Utente responsabile" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__sale +msgid "Sale" +msgstr "Vendita" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_date +msgid "Sale Date" +msgstr "Data vendita" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "Sale Info" +msgstr "Informazioni vendita" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_move_id +msgid "Sale Move" +msgstr "Registrazione contabile vendita" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sale_amount +msgid "Sale Value" +msgstr "Valore vendita" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__access_token +msgid "Security Token" +msgstr "Token di sicurezza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_accounting_doc__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_accounting_doc__sequence +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_category_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_category_totals +msgid "Show Category Totals" +msgstr "Mostra totali categoria" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_dismissed_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_dismissed_assets +msgid "Show Dismissed Assets" +msgstr "Visualizza cespiti dismessi" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_sold_assets +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_sold_assets +msgid "Show Sold Assets" +msgstr "Visualizza cespiti venduti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__show_totals +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__show_totals +msgid "Show Totals" +msgstr "Mostra totali" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__sold +msgid "Sold" +msgstr "Venduto" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_journal_title +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.template_asset_previsional_title +msgid "Sold assets: show" +msgstr "Cespiti vendiuti: visualizza" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Starting From" +msgstr "Inizio Da" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__state +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__state +msgid "State" +msgstr "Stato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Status" +msgstr "Stato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Stato in base alle attività\n" +"Scaduto: la data richiesta è trascorsa\n" +"Oggi: la data attività è oggi\n" +"Pianificato: attività future." + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__supplier_id +msgid "Supplier" +msgstr "Fornitore" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Supplier Ref" +msgstr "Rif. Fornitore" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__supplier_ref +msgid "Supplier Ref." +msgstr "Rif. documento fornitore" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category__tag_ids +msgid "Tag" +msgstr "Etichetta" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_tag +msgid "Tags" +msgstr "Etichette" + +#. module: l10n_it_asset_management +#: model:ir.ui.menu,name:l10n_it_asset_management.menu_asset_technical_data +msgid "Technical Data" +msgstr "Dati tecnici" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_accounting_info__move_id +msgid "The move of this entry line." +msgstr "Il movimento per questa riga di registrazione." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_mode.py:0 +#, python-format +msgid "There can be no more than 1 default depreciation mode for each company." +msgstr "" +"Non ci può essere più di un modo di amm.to predefinito per ogni azienda." + +#. module: l10n_it_asset_management +#: model_terms:ir.actions.act_window,help:l10n_it_asset_management.action_asset_accounting_info +msgid "There is no archive about assets, invoices and account moves... yet!" +msgstr "" +"Non c'è un archivio riguardo cespiti, fatture e registrazioni contabili... " +"ancora!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "There is nothing to print according to current settings!" +msgstr "Non c'è alcunché da stampare in base alle scelte impostate!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_journal_report__date +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_asset_previsional_report__date +msgid "To Date" +msgstr "Alla Data" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode_line__to_nr +msgid "To Nr" +msgstr "Al Nr" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "Total" +msgstr "Totale" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_accounting_info__move_type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_category_depreciation_type__depreciation_type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line__move_type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_line_type__type +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__type_id +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional__type_ids +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__type_id +#, python-format +msgid "Type" +msgstr "Tipo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_totals__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__type_name +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_totals__type_name +msgid "Type Name" +msgstr "Nome tipo" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo di attività eccezione sul record." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "Unknown" +msgstr "Sconosciuto" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_accounting_info.py:0 +#, python-format +msgid "Unknown Asset" +msgstr "Cespite Sconosciuto" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_unread +msgid "Unread Messages" +msgstr "Messaggi non letti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Contatore messaggi non letti" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Update Asset" +msgstr "Aggiorna Cespite" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_account_move_mange_asset_form_view +msgid "Update Asset and Show" +msgstr "Aggiorna Cespite e Mostra" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__management_type__update +msgid "Update Existing" +msgstr "Aggiorna esistente" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__amount_depreciable_updated +msgid "Updated Depreciable Amount" +msgstr "Importo Ammortizzabile Aggiornato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__used +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_wizard_account_move_manage_asset__used +#, python-format +msgid "Used" +msgstr "Usato" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation_mode__used_asset_coeff +msgid "Used Asset Coeff." +msgstr "Coeff. cespite usato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#, python-format +msgid "VAT" +msgstr "P.IVA" + +#. module: l10n_it_asset_management +#: model:ir.actions.server,name:l10n_it_asset_management.clean_asset_accounting_info_cron_ir_actions_server +#: model:ir.cron,cron_name:l10n_it_asset_management.clean_asset_accounting_info_cron +#: model:ir.cron,name:l10n_it_asset_management.clean_asset_accounting_info_cron +msgid "Vacuum Empty Asset Accounting Info" +msgstr "Svuota info contabili cespiti vuote" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__in_invoice +msgid "Vendor Bill" +msgstr "Fattura fornitore" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__in_refund +msgid "Vendor Credit Note" +msgstr "Nota di credito fornitore" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +msgid "View Journal Report" +msgstr "Vedi" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "View Previsional Report" +msgstr "Vedi" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "Warning!" +msgstr "Attenzione!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_asset__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,help:l10n_it_asset_management.field_asset_asset__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_journal_report +msgid "Wizard Asset Journal Report" +msgstr "Procedura guidata resoconto registro cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model,name:l10n_it_asset_management.model_wizard_asset_previsional_report +msgid "Wizard Asset Previsional Report" +msgstr "Procedura guidata resoconto previsionale cespiti" + +#. module: l10n_it_asset_management +#: model:ir.model.fields.selection,name:l10n_it_asset_management.selection__wizard_account_move_manage_asset__move_type__wrong +msgid "Wrong" +msgstr "Errato" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal_xlsx.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional_xlsx.py:0 +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_journal_depreciation_line_year__year +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_report_asset_previsional_depreciation_line_year__year +#, python-format +msgid "Year" +msgstr "Anno" + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_dep_line_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.asset_form_view +msgid "" +"You confirm the removal of the current line? Depreciation line amounts will " +"not be affected and will have to be updated manually." +msgstr "" +"Confermare la rimozione della riga corrente? Gli importi delle righe " +"ammortamento non saranno modificati e dovranno essere aggiornati manualmente." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to create " +"an asset for category `{}`!" +msgstr "" +"Si devono scegliere righe movimento con conto `{}` se servono per creare un " +"cespite per la categoria `{}`!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to dismiss " +"asset `{}`!" +msgstr "" +"Si devono scegliere righe movimento con conto `{}` se servono per dismettere " +"il cespite `{}`!" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/wizard/account_move_manage_asset.py:0 +#, python-format +msgid "" +"You need to choose move lines with account `{}` if you need them to update " +"asset `{}`!" +msgstr "" +"Si devono scegliere righe movimento con conto `{}` se servono per aggiornare " +"il cespite `{}`!" + +#. module: l10n_it_asset_management +#: model:ir.model.fields,field_description:l10n_it_asset_management.field_asset_depreciation__zero_depreciation_until +msgid "Zero Depreciation Up To" +msgstr "Nessun Amm.to fino al" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset.py:0 +#, python-format +msgid "" +"`{}`: cannot change asset's company once it's already related to accounting " +"info." +msgstr "" +"`{}`: non è possibile cambiare l'azienda di un cespite già collegato ad " +"informazioni contabili." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation_line.py:0 +#, python-format +msgid "" +"`{}`: cannot change depreciation line's company once it's already related to " +"an asset." +msgstr "" +"`{}`: non è possibile cambiare l'azienda di una riga di amm.to già collegata " +"a un cespite." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move_line.py:0 +#, python-format +msgid "" +"`{}`: cannot change move line's company once it's already related to an " +"asset." +msgstr "" +"`{}`: non è possibile modificare l'azienda della riga già collegata a un " +"cespite." + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/account_move.py:0 +#, python-format +msgid "" +"`{}`: cannot change move's company once it's already related to an asset." +msgstr "" +"`{}`: non è possibile cambiare l'azienda di un movimento già collegato a un " +"cespite." + +#. module: l10n_it_asset_management +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_generate_depreciation_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_journal_report_form_view +#: model_terms:ir.ui.view,arch_db:l10n_it_asset_management.wizard_asset_previsional_report_form_view +msgid "or" +msgstr "o" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/report/asset_journal.py:0 +#: code:addons/l10n_it_asset_management/report/asset_previsional.py:0 +#, python-format +msgid "to date {}" +msgstr "alla data {}" + +#. module: l10n_it_asset_management +#: code:addons/l10n_it_asset_management/models/asset_depreciation.py:0 +#, python-format +msgid "{} - Depreciation" +msgstr "{} - Ammortamento" + +#~ msgid "SMS Delivery error" +#~ msgstr "Errore consegna SMS" + +#~ msgid "move lines" +#~ msgstr "righe movimento" + +#, python-format +#~ msgid "" +#~ "Cannot update the following assets which contain posted depreciation for " +#~ "the chosen date and types:\n" +#~ "{}" +#~ msgstr "" +#~ "Non è possibile aggiornare i seguenti cespiti che contengono ammortamenti " +#~ "contabilizzati per le date e i tipi scelti:\n" +#~ "{}" + +#, python-format +#~ msgid "" +#~ "The assets you are trying to delete are currently linked to accounting " +#~ "info. Please remove them if necessary before removing these assets:\n" +#~ msgstr "" +#~ "I cespiti che si sta tentando di eliminare sono collegati a registrazioni " +#~ "contabili. Si prega di rimuoverle se necessario prima di rimuovere questi " +#~ "cespiti:\n" + +#, python-format +#~ msgid "" +#~ "The lines you you are trying to delete are currently linked to accounting " +#~ "info. Please remove them if necessary before removing these lines:\n" +#~ msgstr "" +#~ "Le righe che si sta tentando di eliminare sono collegati a registrazioni " +#~ "contabili. Si prega di rimuoverle se necessario prima di rimuovere queste " +#~ "righe:\n" + +#, python-format +#~ msgid "" +#~ "Cannot update the following assets which contain newer depreciations for " +#~ "the chosen types:\n" +#~ "{}" +#~ msgstr "" +#~ "Non è possibile aggiornare i seguenti cespiti che contengono ammortamenti " +#~ "più recenti per i tipi scelti:\n" +#~ "{}" + +#, python-format +#~ msgid "Depreciable Amount" +#~ msgstr "Valore ammortizzabile" + +#~ msgid "Updated Amount" +#~ msgstr "Aggiorma Valore" diff --git a/l10n_it_asset_management/migrations/16.0.1.0.0/pre-migrate.py b/l10n_it_asset_management/migrations/16.0.1.0.0/pre-migrate.py new file mode 100644 index 000000000000..eb52856920ac --- /dev/null +++ b/l10n_it_asset_management/migrations/16.0.1.0.0/pre-migrate.py @@ -0,0 +1,14 @@ +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +# pylint: disable=odoo-addons-relative-import +# because +# from ... import hooks +# raises +# ImportError: attempted relative import with no known parent package +from odoo.addons.l10n_it_asset_management import hooks + + +def migrate(cr, installed_version): + # Used by OpenUpgrade when module is in `apriori` + hooks.migrate_old_module(cr) diff --git a/l10n_it_asset_management/models/__init__.py b/l10n_it_asset_management/models/__init__.py new file mode 100644 index 000000000000..9e043ec0841c --- /dev/null +++ b/l10n_it_asset_management/models/__init__.py @@ -0,0 +1,20 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import account_account +from . import account_fiscal_year +from . import account_journal +from . import account_move +from . import account_move_line +from . import asset +from . import asset_accounting_info +from . import asset_category +from . import asset_category_depreciation_type +from . import asset_depreciation +from . import asset_depreciation_line +from . import asset_depreciation_line_type +from . import asset_depreciation_mode +from . import asset_depreciation_mode_line +from . import asset_depreciation_type +from . import asset_tag diff --git a/l10n_it_asset_management/models/account_account.py b/l10n_it_asset_management/models/account_account.py new file mode 100644 index 000000000000..f4ee2a4683c7 --- /dev/null +++ b/l10n_it_asset_management/models/account_account.py @@ -0,0 +1,39 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, models +from odoo.exceptions import UserError + + +class AccountAccount(models.Model): + _inherit = "account.account" + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_asset_category(self): + if ( + self.env["asset.category"] + .sudo() + .search( + [ + "|", + "|", + "|", + "|", + ("asset_account_id", "in", self.ids), + ("depreciation_account_id", "in", self.ids), + ("fund_account_id", "in", self.ids), + ("gain_account_id", "in", self.ids), + ("loss_account_id", "in", self.ids), + ] + ) + ): + raise UserError( + _( + "Cannot delete accounts while they're still used" + " by asset categories." + ) + ) diff --git a/l10n_it_asset_management/models/account_fiscal_year.py b/l10n_it_asset_management/models/account_fiscal_year.py new file mode 100644 index 000000000000..64d697d50dce --- /dev/null +++ b/l10n_it_asset_management/models/account_fiscal_year.py @@ -0,0 +1,37 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class AccountFiscalYear(models.Model): + _inherit = "account.fiscal.year" + + @api.model + def get_fiscal_year_by_date(self, date, limit=1, company=None, miss_raise=True): + """ + Retrieves fiscal year by given ``date`` (a datetime.date object). + + By default, only 1 fiscal year will be returned, unless specified + differently. + If ``miss_raise`` is True and no fiscal year is found, an error will be + raised. + """ + dom = self.get_fiscal_year_by_date_domain(date, company) + fiscal_years = self.search(dom, limit=limit) + if not fiscal_years and miss_raise: + date_str = fields.Date.to_string(date) + raise UserError(_("No fiscal year defined for date ") + date_str) + return fiscal_years + + @api.model + def get_fiscal_year_by_date_domain(self, date, company=None): + """ + Prepares a search() domain to retrieve fiscal years by given ``date``. + """ + domain = [("date_from", "<=", date), ("date_to", ">=", date)] + if company: + domain.append(("company_id", "in", company.ids)) + return domain diff --git a/l10n_it_asset_management/models/account_journal.py b/l10n_it_asset_management/models/account_journal.py new file mode 100644 index 000000000000..2b22e58753c4 --- /dev/null +++ b/l10n_it_asset_management/models/account_journal.py @@ -0,0 +1,31 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, models +from odoo.exceptions import UserError + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_asset_category(self): + if ( + self.env["asset.category"] + .sudo() + .search( + [ + ("journal_id", "in", self.ids), + ] + ) + ): + raise UserError( + _( + "Cannot delete journals while they're still used" + " by asset categories." + ) + ) diff --git a/l10n_it_asset_management/models/account_move.py b/l10n_it_asset_management/models/account_move.py new file mode 100644 index 000000000000..6f13756a8516 --- /dev/null +++ b/l10n_it_asset_management/models/account_move.py @@ -0,0 +1,130 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command + + +class AccountMove(models.Model): + _inherit = "account.move" + + asset_accounting_info_ids = fields.One2many( + "asset.accounting.info", "move_id", string="Assets Accounting Info" + ) + + asset_ids = fields.Many2many( + "asset.asset", compute="_compute_asset_data", store=True, string="Assets" + ) + + dep_line_ids = fields.Many2many( + "asset.depreciation.line", + compute="_compute_asset_data", + store=True, + string="Depreciation Lines", + ) + + hide_link_asset_button = fields.Boolean( + compute="_compute_hide_link_asset_button", + default=True, + string="Hide Asset Button", + ) + + @api.constrains("company_id") + def check_company(self): + for move in self: + comp = move.get_linked_aa_info_records().mapped("company_id") + if len(comp) > 1 or (comp and comp != move.company_id): + raise ValidationError( + _( + "`%(move)s`: cannot change move's company once it's already" + " related to an asset.", + move=move.name_get()[0][-1], + ) + ) + + def button_cancel(self): + res = super().button_cancel() + if self: + # Remove every a.a.info related to current moves, and delete + # related depreciation lines + aa_infos = self.mapped(lambda m: m.get_linked_aa_info_records()) + dep_lines = aa_infos.mapped("dep_line_id") + aa_infos.unlink() + # Filtering needed: cannot delete dep lines with a.a.info + dep_lines.filtered(lambda line: not line.asset_accounting_info_ids).unlink() + return res + + @api.depends( + "asset_accounting_info_ids", + "asset_accounting_info_ids.asset_id", + "asset_accounting_info_ids.dep_line_id", + ) + def _compute_asset_data(self): + for move in self: + aa_info = move.get_linked_aa_info_records() + assets = aa_info.mapped("asset_id") + dep_lines = aa_info.mapped("dep_line_id") + if dep_lines: + assets += dep_lines.mapped("asset_id") + move.update( + { + "asset_ids": [Command.set(assets.ids)], + "dep_line_ids": [Command.set(dep_lines.ids)], + } + ) + + def _compute_hide_link_asset_button(self): + valid_account_ids = self.get_valid_accounts() + if not valid_account_ids: + self.update({"hide_link_asset_button": True}) + else: + for move in self: + move.hide_link_asset_button = ( + not any( + [ + line.account_id.id in valid_account_ids.ids + for line in move.invoice_line_ids + ] + ) + or move.state != "posted" + ) + + def open_wizard_manage_asset(self): + self.ensure_one() + # do not use invoice_line_ids as it will ignore possible extra lines for not + # deductible VAT + lines = self.line_ids.filtered(lambda line: not line.asset_accounting_info_ids) + if not lines: + raise ValidationError(_("Every line is already linked to an asset.")) + + xmlid = "l10n_it_asset_management.action_wizard_account_move_manage_asset" + act = self.env.ref(xmlid).read()[0] + ctx = dict(self._context) + ctx.update( + { + "default_company_id": self.company_id.id, + "default_dismiss_date": self.invoice_date or self.invoice_date_due, + "default_move_ids": [Command.set(self.ids)], + "default_move_line_ids": [Command.set(lines.ids)], + "default_purchase_date": self.invoice_date or self.invoice_date_due, + "move_ids": self.ids, + } + ) + act.update({"context": ctx}) + return act + + def get_linked_aa_info_records(self): + self.ensure_one() + return self.env["asset.accounting.info"].search( + [ + "|", + ("move_id", "=", self.id), + ("move_line_id.move_id", "=", self.id), + ] + ) + + def get_valid_accounts(self): + return self.env["asset.category"].search([]).mapped("asset_account_id") diff --git a/l10n_it_asset_management/models/account_move_line.py b/l10n_it_asset_management/models/account_move_line.py new file mode 100644 index 000000000000..70eaf33572bb --- /dev/null +++ b/l10n_it_asset_management/models/account_move_line.py @@ -0,0 +1,74 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + asset_accounting_info_ids = fields.One2many( + "asset.accounting.info", "move_line_id", string="Assets Accounting Info" + ) + + asset_ids = fields.Many2many( + "asset.asset", compute="_compute_asset_data", store=True, string="Assets" + ) + + dep_line_ids = fields.Many2many( + "asset.depreciation.line", + compute="_compute_asset_data", + store=True, + string="Depreciation Lines", + ) + + @api.constrains("company_id") + def check_company(self): + for move_line in self: + comp = move_line.get_linked_aa_info_records().mapped("company_id") + if len(comp) > 1 or (comp and comp != move_line.company_id): + raise ValidationError( + _( + "`%(move_line)s`: cannot change move line's company once it's" + " already related to an asset.", + move_line=move_line.name_get()[0][-1], + ) + ) + + @api.depends( + "asset_accounting_info_ids", + "asset_accounting_info_ids.asset_id", + "asset_accounting_info_ids.dep_line_id", + ) + def _compute_asset_data(self): + for line in self: + aa_info = line.get_linked_aa_info_records() + assets = aa_info.mapped("asset_id") + dep_lines = aa_info.mapped("dep_line_id") + if dep_lines: + assets += dep_lines.mapped("asset_id") + line.update( + { + "asset_ids": [Command.set(assets.ids)], + "dep_line_ids": [Command.set(dep_lines.ids)], + } + ) + + def get_asset_purchase_amount(self, currency=None): + purchase_amount = 0 + for line in self: + purchase_amount += line.currency_id._convert( + line.debit - line.credit, + currency, + line.company_id, + line.date, + ) + return purchase_amount + + def get_linked_aa_info_records(self): + self.ensure_one() + return self.asset_accounting_info_ids diff --git a/l10n_it_asset_management/models/asset.py b/l10n_it_asset_management/models/asset.py new file mode 100644 index 000000000000..949605621e62 --- /dev/null +++ b/l10n_it_asset_management/models/asset.py @@ -0,0 +1,249 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command + + +class Asset(models.Model): + _name = "asset.asset" + _description = "Assets" + _inherit = ["mail.thread", "mail.activity.mixin", "portal.mixin"] + _order = "purchase_date desc, name asc" + + @api.model + def get_default_company_id(self): + return self.env.company + + asset_accounting_info_ids = fields.One2many( + "asset.accounting.info", "asset_id", string="Accounting Info" + ) + + category_id = fields.Many2one( + "asset.category", + required=True, + string="Category", + ) + + code = fields.Char( + default="", + ) + + company_id = fields.Many2one( + "res.company", + default=get_default_company_id, + required=True, + string="Company", + tracking=True, + ) + + currency_id = fields.Many2one( + "res.currency", + required=True, + string="Currency", + ) + + customer_id = fields.Many2one("res.partner", string="Customer") + + depreciation_ids = fields.One2many( + "asset.depreciation", + "asset_id", + string="Depreciations", + ) + + name = fields.Char( + required=True, + tracking=True, + ) + + purchase_amount = fields.Monetary( + string="Purchase Value", + tracking=True, + ) + + purchase_date = fields.Date( + default=fields.Date.today(), + tracking=True, + ) + + purchase_move_id = fields.Many2one("account.move", string="Purchase Move") + + sale_amount = fields.Monetary( + string="Sale Value", + ) + + sale_date = fields.Date() + + dismiss_date = fields.Date() + + sale_move_id = fields.Many2one("account.move", string="Sale Move") + + sold = fields.Boolean() + dismissed = fields.Boolean() + + state = fields.Selection( + [ + ("non_depreciated", "Non Depreciated"), + ("partially_depreciated", "Partially Depreciated"), + ("totally_depreciated", "Depreciated"), + ], + compute="_compute_state", + default="non_depreciated", + store=True, + ) + + supplier_id = fields.Many2one("res.partner", string="Supplier") + + supplier_ref = fields.Char(string="Supplier Ref.") + + used = fields.Boolean() + + @api.model_create_multi + def create(self, vals_list): + # Add depreciation if it's missing while category is set + assets = self.browse() + for vals in vals_list: + create_deps_from_categ = False + if vals.get("category_id") and not vals.get("depreciation_ids"): + create_deps_from_categ = True + if vals.get("code"): + vals["code"] = " ".join(vals.get("code").split()) + asset = super().create(vals) + if create_deps_from_categ: + asset.onchange_category_id() + assets |= asset + return assets + + def write(self, vals): + if vals.get("code"): + vals["code"] = " ".join(vals.get("code").split()) + return super().write(vals) + + def unlink(self): + self.mapped("asset_accounting_info_ids").unlink() + self.mapped("depreciation_ids").unlink() + return super().unlink() + + def name_get(self): + return [(asset.id, asset.make_name()) for asset in self] + + @api.constrains("company_id") + def check_company(self): + for asset in self: + comp = asset.get_linked_aa_info_records().mapped("company_id") + if len(comp) > 1 or (comp and comp != asset.company_id): + raise ValidationError( + _( + "`%(asset)s`: cannot change asset's company once it's already" + " related to accounting info.", + asset=asset.make_name(), + ) + ) + + @api.depends("depreciation_ids", "depreciation_ids.state") + def _compute_state(self): + for asset in self: + asset.state = asset.get_asset_state() + + @api.onchange("category_id") + def onchange_category_id(self): + # Do not allow category changes if any depreciation line is already + # linked to an account move + if any(self.depreciation_ids.mapped("line_ids.move_id")): + raise ValidationError( + _( + "Cannot change category for an asset that's already been" + " depreciated." + ) + ) + + if self.category_id: + # Remove depreciation lines + self.depreciation_ids = False + + # Set new lines + vals = self.category_id.get_depreciation_vals(self.purchase_amount) + self.depreciation_ids = [Command.create(v) for v in vals] + self.onchange_purchase_amount() + self.onchange_purchase_date() + + @api.onchange("company_id") + def onchange_company_currency(self): + if self.company_id: + self.currency_id = self.company_id.currency_id + + @api.onchange("purchase_amount") + def onchange_purchase_amount(self): + if self.purchase_amount: + for dep in self.depreciation_ids: + dep.amount_depreciable = self.purchase_amount * dep.base_coeff + if self.depreciation_ids.mapped("line_ids").filtered( + lambda line: line.move_type == "depreciated" + ): + title = _("Warning!") + msg = _( + "Current asset has already been depreciated. Changes upon" + " its purchase value will not be automatically reflected" + " upon depreciation lines, which will have to be updated" + " manually." + ) + return {"warning": {"title": title, "message": msg}} + + @api.onchange("purchase_date") + def onchange_purchase_date(self): + if self.purchase_date: + for dep in self.depreciation_ids: + dep.date_start = self.purchase_date + + def launch_wizard_generate_depreciations(self): + self.ensure_one() + xmlid = "l10n_it_asset_management.action_wizard_asset_generate_depreciation" + [act] = self.env.ref(xmlid).read() + ctx = dict(self._context) + ctx.update( + { + "default_asset_ids": [Command.set(self.ids)], + "default_category_ids": [Command.set(self.category_id.ids)], + "default_company_id": self.company_id.id, + "default_date": fields.Date.today(), + "default_type_ids": [ + Command.set(self.depreciation_ids.mapped("type_id").ids) + ], + } + ) + act["context"] = ctx + return act + + def get_asset_state(self): + self.ensure_one() + if not self.depreciation_ids: + return "non_depreciated" + + states = tuple(set(self.depreciation_ids.mapped("state"))) + + if not states: + return "non_depreciated" + elif len(states) == 1: + return states[0] + else: + return "partially_depreciated" + + def get_linked_aa_info_records(self): + self.ensure_one() + return self.env["asset.accounting.info"].search( + [ + "|", + ("asset_id", "=", self.id), + ("dep_line_id.asset_id", "=", self.id), + ] + ) + + def make_name(self): + self.ensure_one() + name = self.name.strip() + if self.code: + return f"[{self.code.strip()}] {name}" + return name diff --git a/l10n_it_asset_management/models/asset_accounting_info.py b/l10n_it_asset_management/models/asset_accounting_info.py new file mode 100644 index 000000000000..94e3a7c03bfa --- /dev/null +++ b/l10n_it_asset_management/models/asset_accounting_info.py @@ -0,0 +1,235 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class AssetAccountingInfo(models.Model): + """ + This model is necessary to manage info about the relationships between + assets and accounting records. We could have used `Many2many` fields to + create tables between assets, depreciation lines, account moves and account + move lines; but we need a custom + management, a bit more complex than the one provided by the standard + `Many2many` field. + + NB: a few methods could have been decorated with @api.constrains or + @api.depends, but that would have limited them by being triggered only + upon some fields' changes, and would have made it very hard to be + customizable by third party modules. + Therefore, it has been chosen to define them as simple Python methods which + are called right after ``create`` and ``write`` methods if some fields + (which can be retrieved by method ``get_main_fields``) are found within + ``vals`` dictionary. + """ + + _name = "asset.accounting.info" + _description = "Asset Accounting Relations" + _table = "asset_accounting_info" + + asset_id = fields.Many2one("asset.asset", ondelete="set null", string="Asset") + + company_id = fields.Many2one( + "res.company", + readonly=True, + string="Company", + ) + + dep_line_id = fields.Many2one( + "asset.depreciation.line", ondelete="set null", string="Depreciation Line" + ) + move_type = fields.Selection(related="dep_line_id.move_type") + move_line_id = fields.Many2one( + "account.move.line", ondelete="cascade", string="Move Line" + ) + move_id = fields.Many2one( + "account.move", related="move_line_id.move_id", string="Move" + ) + relation_type = fields.Selection( + [ + ("create", "Asset Creation"), + ("update", "Asset Update"), + ("partial_dismiss", "Asset Partial Dismissal"), + ("dismiss", "Asset Dismissal"), + ], + required=True, + ) + + @api.model_create_multi + def create(self, vals_list): + all_info = self.browse() + for vals in vals_list: + info = super().create(vals) + info.check_and_normalize() + all_info |= info + return all_info + + def write(self, vals): + fnames = self.get_main_fields() + + # ``load=''`` avoids returning tuple ``(rec.id, rec.name)`` for M2o + # fields and simply returns ``rec.id`` + old_info_vals = {d["id"]: d for d in self.read(fnames, load="")} + res = super().write(vals) + new_info_vals = {d["id"]: d for d in self.read(fnames, load="")} + + # old/new_info_vals dicts both have the same keys + to_check_ids = [] + for aa_info_id, old_vals in old_info_vals.items(): + new_vals = new_info_vals[aa_info_id] + common_fs = set(new_vals).intersection(old_vals) + extra_fs = set(new_vals).union(old_vals) - common_fs + if extra_fs or any(new_vals[k] != old_vals[k] for k in common_fs): + to_check_ids.append(aa_info_id) + + if to_check_ids: + self.browse(to_check_ids).check_and_normalize() + + return res + + def name_get(self): + return [(aa_info.id, aa_info.make_name()) for aa_info in self] + + @api.model + def cron_vacuum_table(self): + """A cron that deletes obsolete records""" + aa_info = self.get_records_to_delete_by_cron() + aa_info.unlink() + + @api.model + def get_main_fields(self): + return [ + "asset_id", + "dep_line_id", + "move_id", + "move_line_id", + ] + + def button_unlink(self): + """Button action: deletes a.a.info""" + other_asset_accounting_info = self.env["asset.accounting.info"].search( + [ + ("id", "!=", self.id), + ("dep_line_id", "=", self.dep_line_id.id), + ] + ) + dep_line_to_delete = self.env["asset.depreciation.line"] + if not other_asset_accounting_info: + dep_line_to_delete = self.dep_line_id + self.unlink() + if dep_line_to_delete: + dep_line_to_delete.unlink() + + def check_and_normalize(self): + for info in self: + info.check_coherence() + info.normalize_info() + + def check_coherence(self): + """Checks info coherence""" + self.check_company_coherence() + self.check_data_coherence() + + def check_company_coherence(self): + """Checks companies""" + self.ensure_one() + companies = self.get_all_companies() + if len(companies) > 1: + raise ValidationError(_("Incoherent company data.")) + + def check_data_coherence(self): + self.ensure_one() + + # If dep_line_id and asset_id are set, check whether the depreciation + # line belongs to the given asset + if ( + self.asset_id + and self.dep_line_id + and self.asset_id != self.dep_line_id.depreciation_id.asset_id + ): + raise ValidationError(_("Incoherent asset data.")) + + # If move_line_id and move_id are set, check whether the move line + # belongs to the given move + if ( + self.move_id + and self.move_line_id + and self.move_id != self.move_line_id.move_id + ): + raise ValidationError(_("Incoherent move data.")) + + def get_all_companies(self): + company_ids = [] + + fnames = self.get_main_fields() + for aa_info in self: + for fname in fnames: + # Using sudo() to avoid security problems during this check + rec = aa_info.sudo()[fname] + if rec and rec.company_id.id not in company_ids: + company_ids.append(rec.company_id.id) + + return self.env["res.company"].browse(company_ids) + + def get_normalized_info_vals(self): + self.ensure_one() + vals = {} + + # Set asset as dep line's asset if dep line is set + if not self.asset_id and self.dep_line_id: + vals["asset_id"] = self.dep_line_id.asset_id.id + + # Set move_id as move line's move if move line is set + if not self.move_id and self.move_line_id: + vals["move_id"] = self.move_line_id.move_id.id + + # Set company + companies = self.get_all_companies() + if len(companies) == 1: + vals["company_id"] = companies.id + else: + vals["company_id"] = False + + return vals + + def get_records_to_delete_by_cron(self): + """ + Returns every a.a.info that fits the condition: + (no asset AND no depreciation line) + OR + (no move AND no move line) + """ + return self.search( + [ + "|", + "&", + ("asset_id", "=", False), + ("dep_line_id", "=", False), + "&", + ("move_id", "=", False), + ("move_line_id", "=", False), + ] + ) + + def make_name(self): + self.ensure_one() + if self.asset_id: + name = self.asset_id.make_name() + else: + name = _("Unknown Asset") + relation_name = dict(self._fields["relation_type"].selection).get( + self.relation_type + ) + if relation_name: + name += " - " + relation_name + return name.strip() + + def normalize_info(self): + """Normalize asset accounting info if needed""" + self.ensure_one() + vals = self.get_normalized_info_vals() + if vals: + self.write(vals) diff --git a/l10n_it_asset_management/models/asset_category.py b/l10n_it_asset_management/models/asset_category.py new file mode 100644 index 000000000000..603bcefd0467 --- /dev/null +++ b/l10n_it_asset_management/models/asset_category.py @@ -0,0 +1,132 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.fields import Command + + +class AssetCategory(models.Model): + _name = "asset.category" + _description = "Asset Category" + _order = "name" + + @api.model + def get_default_company_id(self): + return self.env.company + + @api.model + def get_default_type_ids(self): + mode_obj = self.env["asset.depreciation.mode"] + dom = [("company_id", "=", self.get_default_company_id().id)] + mode = mode_obj.search(dom + [("default", "=", True)], limit=1) + # Field ``mode_id`` is required for asset.category.depreciation.type; + # if no default mode is found, retry by getting the first one found. + if not mode: + mode = mode_obj.search(dom, limit=1) + + types = self.env["asset.depreciation.type"].search(dom) + + # Raise error if configuration has not been completed. + if not (mode and types): + raise UserError( + _( + "Before creating new categories, please complete the" + " assets' configuration for both depreciation types" + " and modes." + ) + ) + + return [ + Command.create( + {"base_coeff": 1, "depreciation_type_id": t.id, "mode_id": mode.id} + ) + for t in types + ] + + asset_account_id = fields.Many2one( + "account.account", + required=True, + string="Asset Account", + ) + + comment = fields.Text() + + company_id = fields.Many2one( + "res.company", default=get_default_company_id, string="Company" + ) + + depreciation_account_id = fields.Many2one( + "account.account", + required=True, + string="Depreciation Account", + ) + + fund_account_id = fields.Many2one( + "account.account", + required=True, + string="Fund Account", + ) + + gain_account_id = fields.Many2one( + "account.account", + required=True, + string="Capital Gain Account", + ) + + journal_id = fields.Many2one("account.journal", required=True, string="Journal") + + loss_account_id = fields.Many2one( + "account.account", + required=True, + string="Capital Loss Account", + ) + + name = fields.Char( + required=True, + ) + + print_by_default = fields.Boolean( + default=True, + help="Defines whether a category should be added by default when" + " printing assets' reports.", + ) + + tag_ids = fields.Many2many( + "asset.tag", + string="Tag", + ) + + type_ids = fields.One2many( + "asset.category.depreciation.type", + "category_id", + default=get_default_type_ids, + string="Depreciation Types", + ) + + def copy(self, default=None): + default = dict(default or []) + default.update( + { + "tag_ids": [Command.set(self.tag_ids.ids)], + "type_ids": [ + Command.create(t.copy_data({"category_id": False})[0]) + for t in self.type_ids + ], + } + ) + return super().copy(default) + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_asset(self): + if self.env["asset.asset"].sudo().search([("category_id", "in", self.ids)]): + raise UserError( + _("Cannot delete categories while they're still linked" " to an asset.") + ) + + def get_depreciation_vals(self, amount_depreciable=0): + return [t.get_depreciation_vals(amount_depreciable) for t in self.type_ids] diff --git a/l10n_it_asset_management/models/asset_category_depreciation_type.py b/l10n_it_asset_management/models/asset_category_depreciation_type.py new file mode 100644 index 000000000000..0b81fa7b8061 --- /dev/null +++ b/l10n_it_asset_management/models/asset_category_depreciation_type.py @@ -0,0 +1,55 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AssetCategoryDepreciationType(models.Model): + _name = "asset.category.depreciation.type" + _description = "Asset Category - Depreciation Type" + + base_coeff = fields.Float( + default=1, + help="Coeff to compute depreciable amount from purchase amount", + string="Dep Base Coeff", + ) + + category_id = fields.Many2one( + "asset.category", + ondelete="cascade", + readonly=True, + required=True, + string="Category", + ) + + company_id = fields.Many2one( + "res.company", readonly=True, related="category_id.company_id", string="Company" + ) + + depreciation_type_id = fields.Many2one( + "asset.depreciation.type", + required=True, + string="Type", + ) + + mode_id = fields.Many2one( + "asset.depreciation.mode", + required=True, + string="Dep Mode", + ) + + percentage = fields.Float(string="Depreciation %") + + pro_rata_temporis = fields.Boolean(string="Pro-rata Temporis") + + def get_depreciation_vals(self, amount_depreciable=0): + self.ensure_one() + return { + "amount_depreciable": amount_depreciable * self.base_coeff, + "base_coeff": self.base_coeff, + "mode_id": self.mode_id.id, + "percentage": self.percentage, + "pro_rata_temporis": self.pro_rata_temporis, + "type_id": self.depreciation_type_id.id, + } diff --git a/l10n_it_asset_management/models/asset_depreciation.py b/l10n_it_asset_management/models/asset_depreciation.py new file mode 100644 index 000000000000..994d50671c25 --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation.py @@ -0,0 +1,630 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command +from odoo.tools import float_compare, float_is_zero + + +class AssetDepreciation(models.Model): + _name = "asset.depreciation" + _description = "Assets Depreciations" + + amount_depreciable = fields.Monetary(string="Initial Depreciable Amount") + + amount_depreciable_updated = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Updated Depreciable Amount", + ) + + amount_depreciated = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Depreciated Amount", + ) + + amount_gain = fields.Monetary( + compute="_compute_amounts", + string="Capital Gain", + store=True, + ) + + amount_historical = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Historical Amount", + ) + + amount_in = fields.Monetary( + compute="_compute_amounts", + store=True, + string="In Amount", + ) + + amount_loss = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Capital Loss", + ) + + amount_out = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Out Amount", + ) + + amount_residual = fields.Monetary( + compute="_compute_amounts", + store=True, + string="Residual Amount", + ) + + asset_id = fields.Many2one( + "asset.asset", + ondelete="cascade", + readonly=True, + required=True, + string="Asset", + ) + + base_coeff = fields.Float( + default=1, + help="Coeff to compute amount depreciable from purchase amount", + string="Depreciable Base Coeff", + ) + + company_id = fields.Many2one( + "res.company", readonly=True, related="asset_id.company_id", string="Company" + ) + + currency_id = fields.Many2one( + "res.currency", readonly=True, related="asset_id.currency_id", string="Currency" + ) + + date_start = fields.Date() + + dismiss_move_id = fields.Many2one("account.move", string="Dismiss Move") + + first_dep_nr = fields.Integer( + default=1, + string="First Dep. Num", + ) + + force_all_dep_nr = fields.Boolean(string="Force All Dep. Num") + + force_first_dep_nr = fields.Boolean(string="Force First Dep. Num") + + last_depreciation_date = fields.Date( + compute="_compute_last_depreciation_date", + store=True, + string="Last Dep.", + ) + + line_ids = fields.One2many( + "asset.depreciation.line", "depreciation_id", string="Lines" + ) + + mode_id = fields.Many2one( + "asset.depreciation.mode", + required=True, + string="Mode", + ) + + percentage = fields.Float(string="Depreciation (%)") + + pro_rata_temporis = fields.Boolean(string="Pro-rata Temporis") + + requires_account_move = fields.Boolean( + readonly=True, + related="type_id.requires_account_move", + string="Requires Account Move", + ) + + state = fields.Selection( + [ + ("non_depreciated", "Non Depreciated"), + ("partially_depreciated", "Partially Depreciated"), + ("totally_depreciated", "Depreciated"), + ], + compute="_compute_state", + default="non_depreciated", + store=True, + ) + + type_id = fields.Many2one("asset.depreciation.type", string="Depreciation Type") + + zero_depreciation_until = fields.Date(string="Zero Depreciation Up To") + + @api.model_create_multi + def create(self, vals_list): + depreciations = self.browse() + for vals in vals_list: + dep = super().create(vals) + dep.normalize_first_dep_nr() + if dep.line_ids: + num_lines = dep.line_ids.filtered("requires_depreciation_nr") + if num_lines: + num_lines.normalize_depreciation_nr() + depreciations |= dep + return depreciations + + def write(self, vals): + res = super().write(vals) + need_norm = self.filtered(lambda d: d.need_normalize_first_dep_nr()) + if need_norm: + need_norm.normalize_first_dep_nr(force=True) + for dep in self: + num_lines = dep.line_ids.filtered("requires_depreciation_nr") + if num_lines and num_lines.need_normalize_depreciation_nr(): + num_lines.normalize_depreciation_nr(force=True) + return res + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_open_move(self): + if self.mapped("line_ids"): + raise ValidationError( + _( + "Cannot delete depreciations if there is any depreciation" + " line linked to it." + ) + ) + if any([m.state != "draft" for m in self.mapped("dismiss_move_id")]): + deps = self.filtered( + lambda line: line.dismiss_move_id + and line.dismiss_move_id.state != "draft" + ) + name_list = "\n".join([line[-1] for line in deps.name_get()]) + raise ValidationError( + _( + "Following lines are linked to posted account moves, and" + " cannot be deleted:\n%(name_list)s", + name_list=name_list, + ) + ) + + def name_get(self): + return [(dep.id, dep.make_name()) for dep in self] + + @api.depends("amount_depreciable", "amount_depreciable_updated", "amount_residual") + def _compute_state(self): + for dep in self: + dep.state = dep.get_depreciation_state() + + @api.onchange("asset_id", "base_coeff") + def onchange_base_coeff(self): + purchase_amount = self.asset_id.purchase_amount + self.amount_depreciable = self.base_coeff * purchase_amount + + @api.onchange("first_dep_nr") + def onchange_normalize_first_dep_nr(self): + if self.first_dep_nr <= 0: + self.first_dep_nr = 1 + + @api.onchange("force_all_dep_nr") + def onchange_force_all_dep_nr(self): + if self.force_all_dep_nr: + self.first_dep_nr = 1 + + @api.onchange("force_first_dep_nr") + def onchange_force_first_dep_nr(self): + if self.force_first_dep_nr and self.first_dep_nr <= 0: + self.first_dep_nr = 1 + + @api.onchange("force_all_dep_nr", "force_first_dep_nr") + def onchange_force_dep_nrs(self): + if self.force_all_dep_nr and self.force_first_dep_nr: + self.force_all_dep_nr = False + self.force_first_dep_nr = False + title = _("Warning!") + msg = _( + "Fields `Force All Dep. Num` and `Force First Dep. Num`" + " cannot be both active." + ) + return {"warning": {"title": title, "message": msg}} + if not self.force_all_dep_nr and self.force_first_dep_nr: + self.first_dep_nr = 1 + + @api.depends( + "amount_depreciable", + "line_ids.amount", + "line_ids.balance", + "line_ids.move_type", + "asset_id.sold", + "asset_id.dismissed", + ) + def _compute_amounts(self): + for dep in self: + vals = dep.get_computed_amounts() + dep.update(vals) + + @api.depends("line_ids", "line_ids.date", "line_ids.move_type") + def _compute_last_depreciation_date(self): + """ + Update date upon deps with at least one depreciation line (excluding + partial dismissal); else set field to False + """ + for dep in self: + dep_lines = dep.line_ids.filtered( + lambda line: line.move_type == "depreciated" + and not line.partial_dismissal + ) + if dep_lines: + dep.last_depreciation_date = max(dep_lines.mapped("date")) + else: + dep.last_depreciation_date = False + + def check_before_generate_depreciation_lines(self, dep_date): + # Check if self is a valid recordset + if not self: + raise ValidationError( + _("Cannot create any depreciation according to current settings.") + ) + + lines = self.mapped("line_ids") + + draft_lines = lines.filtered( + lambda line: line.date == dep_date and line.move_type == "depreciated" + ) + if draft_lines: + draft_names = ", ".join( + [ + asset_name + for asset_id, asset_name in draft_lines.mapped( + "depreciation_id.asset_id" + ).name_get() + ] + ) + raise ValidationError( + _( + "Cannot update the following assets which contain" + " draft depreciation for the" + " chosen date and types:\n%(draft_names)s", + draft_names=draft_names, + ) + ) + + def generate_depreciation_lines(self, dep_date): + # Set new date within context if necessary + self.check_before_generate_depreciation_lines(dep_date) + + new_lines = self.env["asset.depreciation.line"] + for dep in self: + new_line = dep.generate_depreciation_lines_single(dep_date) + if new_line: + new_lines |= new_line + + return new_lines + + def generate_depreciation_lines_single(self, dep_date): + self.ensure_one() + res = self.env["asset.depreciation.line"] + if self.last_depreciation_date and self.last_depreciation_date > dep_date: + return res + dep_nr = self.get_max_depreciation_nr() + 1 + dep = self.with_context(dep_nr=dep_nr, used_asset=self.asset_id.used) + dep_amount = dep.get_depreciation_amount(dep_date) + if not dep_amount: + return res + dep = dep.with_context(dep_amount=dep_amount) + + vals = dep.prepare_depreciation_line_vals(dep_date) + res = self.env["asset.depreciation.line"].create(vals) + return res + + def generate_dismiss_account_move(self): + self.ensure_one() + am_obj = self.env["account.move"] + + vals = self.get_dismiss_account_move_vals() + if "line_ids" not in vals: + vals["line_ids"] = [] + + line_vals = self.get_dismiss_account_move_line_vals() + for v in line_vals: + vals["line_ids"].append(Command.create(v)) + + self.dismiss_move_id = am_obj.create(vals) + + def get_computed_amounts(self): + self.ensure_one() + vals = { + f"amount_{k}": abs(v) + for k, v in self.line_ids.get_balances_grouped().items() + if f"amount_{k}" in self._fields + } + + if self.asset_id.sold or self.asset_id.dismissed: + vals.update({"amount_depreciable_updated": 0, "amount_residual": 0}) + else: + non_residual_types = self.line_ids.get_non_residual_move_types() + update_move_types = self.line_ids.get_update_move_types() + amt_dep = self.amount_depreciable + vals.update( + { + "amount_depreciable_updated": amt_dep + + sum( + [ + line.balance + for line in self.line_ids + if line.move_type in update_move_types + ] + ), + "amount_residual": amt_dep + + sum( + [ + line.balance + for line in self.line_ids + if line.move_type not in non_residual_types + ] + ), + } + ) + + return vals + + def get_depreciable_amount(self, dep_date=None): + types = self.line_ids.get_update_move_types() + depreciable_amount = self.amount_depreciable + update_depreciable_amount = sum( + [ + line.balance + for line in self.line_ids + if line.move_type in types and (not dep_date or line.date <= dep_date) + ] + ) + depreciable_amount += update_depreciable_amount + depreciated_amount = sum( + [ + line.balance + for line in self.line_ids + if line.move_type == "depreciated" + and (not dep_date or line.date <= dep_date) + ] + ) + # If the asset is fully depreciated in the dep_date requested, gives 0 as + # depreciable amount + if float_is_zero(depreciable_amount + depreciated_amount, precision_digits=2): + depreciable_amount = 0 + return depreciable_amount + + def get_depreciation_amount(self, dep_date): + self.ensure_one() + zero_dep_date = self.zero_depreciation_until + if zero_dep_date and dep_date <= zero_dep_date: + return 0 + + # Get depreciable amount, multiplier and digits + amount = self.get_depreciable_amount(dep_date) + multiplier = self.get_depreciation_amount_multiplier(dep_date) + digits = self.env["decimal.precision"].precision_get("Account") + dep_amount = round(amount * multiplier, digits) + + # If amount_residual < dep_amount: use amount_residual as dep_amount + if float_compare(self.amount_residual, dep_amount, digits) < 0: + dep_amount = self.amount_residual + + return dep_amount + + def get_depreciation_amount_multiplier(self, dep_date): + self.ensure_one() + + # Base multiplier + multiplier = self.percentage / 100 + + # Update multiplier from depreciation mode data + multiplier *= self.mode_id.get_depreciation_amount_multiplier() + + # Update multiplier from pro-rata temporis + date_start = self.date_start + if dep_date < date_start: + dt_start_str = fields.Date.from_string(date_start).strftime("%d-%m-%Y") + raise ValidationError( + _( + "Depreciations cannot start before %(start_date)s.", + start_date=dt_start_str, + ) + ) + + if self.pro_rata_temporis or self._context.get("force_prorata"): + fiscal_year_obj = self.env["account.fiscal.year"] + fy_start = fiscal_year_obj.get_fiscal_year_by_date( + date_start, company=self.company_id + ) + fy_dep = fiscal_year_obj.get_fiscal_year_by_date( + dep_date, company=self.company_id + ) + if fy_dep == fy_start: + # If current depreciation lies within the same fiscal year in + # which the asset was registered, compute multiplier as a + # difference from date_dep multiplier and start_date + # multiplier, plus 1/lapse to avoid "skipping" one day + fy_end = fields.Date.from_string(fy_dep.date_to) + fy_start = fields.Date.from_string(fy_dep.date_from) + lapse = (fy_end - fy_start).days + 1 + dep_multiplier = self.get_pro_rata_temporis_multiplier(dep_date, "dte") + start_multiplier = self.get_pro_rata_temporis_multiplier( + self.date_start, "dte" + ) + multiplier *= start_multiplier - dep_multiplier + 1 / lapse + else: + # Otherwise, simply compute multiplier with respect to how + # many days have passed since the beginning of the fiscal year + multiplier *= self.get_pro_rata_temporis_multiplier(dep_date, "std") + + return multiplier + + def get_depreciation_state(self): + self.ensure_one() + digits = self.env["decimal.precision"].precision_get("Account") + depreciable = self.amount_depreciable + residual = self.amount_residual + updated = self.amount_depreciable_updated + if float_is_zero(depreciable, digits): + return "non_depreciated" + elif float_is_zero(residual, digits): + return "totally_depreciated" + elif float_compare(residual, updated, digits) < 0: + return "partially_depreciated" + else: + return "non_depreciated" + + def get_dismiss_account_move_line_vals(self): + self.ensure_one() + credit_line_vals = { + "account_id": self.asset_id.category_id.asset_account_id.id, + "credit": self.amount_depreciated, + "debit": 0.0, + "currency_id": self.currency_id.id, + "name": _("Asset dismissal: ") + self.asset_id.make_name(), + } + debit_line_vals = { + "account_id": self.asset_id.category_id.fund_account_id.id, + "credit": 0.0, + "debit": self.amount_depreciated, + "currency_id": self.currency_id.id, + "name": _("Asset dismissal: ") + self.asset_id.make_name(), + } + return [credit_line_vals, debit_line_vals] + + def get_dismiss_account_move_vals(self): + self.ensure_one() + return { + "company_id": self.company_id.id, + "date": self._context.get("dismiss_date") or self.asset_id.sale_date, + "journal_id": self.asset_id.category_id.journal_id.id, + "line_ids": [], + "ref": _("Asset dismissal: ") + self.asset_id.make_name(), + "move_type": "entry", + } + + def get_max_depreciation_nr(self): + self.ensure_one() + num_lines = self.line_ids.filtered("requires_depreciation_nr") + nums = num_lines.mapped("depreciation_nr") + if not nums: + nums = [0] + return max(nums) + + def get_pro_rata_temporis_dates(self, date): + """ + Gets useful dates for pro rata temporis computations, according to + given date, by retrieving its fiscal year. + + :param date: given date for depreciation + :return: date objects triplet (dt_start, dt, dt_end) + - dt_start: fiscal year first day + - dt: given date + - dt_end: fiscal year last day + """ + if not date: + raise ValidationError( + _("Cannot compute pro rata temporis for unknown date.") + ) + + fiscal_year_obj = self.env["account.fiscal.year"] + fiscal_year = fiscal_year_obj.get_fiscal_year_by_date( + date, company=self.company_id + ) + if not fiscal_year: + date_str = fields.Date.from_string(date).strftime("%d/%m/%Y") + raise ValidationError( + _( + "No fiscal year defined for date %(date)s", + date=date_str, + ) + ) + + return ( + fields.Date.from_string(fiscal_year.date_from), + fields.Date.from_string(date), + fields.Date.from_string(fiscal_year.date_to), + ) + + def get_pro_rata_temporis_multiplier(self, date=None, mode="std"): + """ + Computes and returns pro rata temporis multiplier according to given + depreciation, date, fiscal year and mode + :param date: given date as a fields.Date string + :param mode: string, defines how to compute multiplier. Valid values: + - 'std': start-to-date, computes multiplier using days from fiscal + year's first day to given date; + - 'dte': date-to-end, computes multiplier using days from given + date to fiscal year's last day + """ + self.ensure_one() + if not (self.pro_rata_temporis or self._context.get("force_prorata")): + return 1 + + dt_start, dt, dt_end = self.get_pro_rata_temporis_dates(date) + lapse = (dt_end - dt_start).days + 1 + if mode == "std": + return ((dt - dt_start).days + 1) / lapse + elif mode == "dte": + return ((dt_end - dt).days + 1) / lapse + elif mode: + raise NotImplementedError( + _( + "Cannot get pro rata temporis multiplier for mode `%(mode)s`", + mode=mode, + ) + ) + raise NotImplementedError( + _("Cannot get pro rata temporis multiplier for unspecified mode") + ) + + def make_name(self): + self.ensure_one() + return " - ".join((self.asset_id.make_name(), self.type_id.name or "")) + + def need_normalize_first_dep_nr(self): + self.ensure_one() + + if self.force_all_dep_nr: + return False + + if self.force_first_dep_nr: + if self.first_dep_nr <= 0: + return True + + else: + if self.first_dep_nr != 1: + return True + + return False + + def normalize_first_dep_nr(self, force=False): + """ + Normalize first numbered line according to `first_dep_nr` value + :param force: if True, force normalization + """ + force = force or self._context.get("force_normalize_first_dep_nr") + for d in self: + if force or d.need_normalize_first_dep_nr(): + d.onchange_normalize_first_dep_nr() + + def post_generate_depreciation_lines(self, lines=None): + lines = lines or self.env["asset.depreciation.line"] + lines.filtered("requires_account_move").button_generate_account_move() + + def prepare_depreciation_line_vals(self, dep_date): + self.ensure_one() + if dep_date is None: + raise ValidationError(_("Cannot create a depreciation line without a date")) + dep_amount = self._context.get("dep_amount") or 0.0 + dep_year = fields.Date.from_string(dep_date).year + return { + "amount": dep_amount, + "date": dep_date, + "depreciation_id": self.id, + "move_type": "depreciated", + "name": _( + "%(year)s - Depreciation", + year=dep_year, + ), + } diff --git a/l10n_it_asset_management/models/asset_depreciation_line.py b/l10n_it_asset_management/models/asset_depreciation_line.py new file mode 100644 index 000000000000..40296df2b197 --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation_line.py @@ -0,0 +1,497 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command + + +class AssetDepreciationLine(models.Model): + _name = "asset.depreciation.line" + _description = "Assets Depreciations Lines" + _order = "date asc, name asc" + + amount = fields.Monetary() + + asset_accounting_info_ids = fields.One2many( + "asset.accounting.info", "dep_line_id", string="Accounting Info" + ) + + asset_id = fields.Many2one( + "asset.asset", + readonly=True, + related="depreciation_id.asset_id", + store=True, + string="Asset", + ) + + balance = fields.Monetary( + compute="_compute_balance", + store=True, + ) + + base = fields.Float() + + company_id = fields.Many2one( + "res.company", + readonly=True, + related="depreciation_id.company_id", + ) + + currency_id = fields.Many2one( + "res.currency", + readonly=True, + related="depreciation_id.currency_id", + ) + + date = fields.Date( + required=True, + ) + + depreciation_id = fields.Many2one( + "asset.depreciation", + ondelete="cascade", + readonly=True, + required=True, + string="Asset depreciation", + ) + + depreciation_line_type_id = fields.Many2one( + "asset.depreciation.line.type", string="Depreciation Type" + ) + + depreciation_nr = fields.Integer( + string="Dep. Num", + ) + + depreciation_type_id = fields.Many2one( + "asset.depreciation.type", + readonly=True, + related="depreciation_id.type_id", + store=True, + string="Asset depreciation type", + ) + + force_dep_nr = fields.Boolean( + readonly=True, + related="depreciation_id.force_all_dep_nr", + string="Force Dep. Num", + ) + + move_id = fields.Many2one("account.move", string="Move") + + move_type = fields.Selection( + [ + ("depreciated", "Depreciation"), + ("historical", "Historical"), + ("in", "In"), + ("out", "Out"), + ("loss", "Capital Loss"), + ("gain", "Capital Gain"), + ], + string="Type", + required=True, + ) + + name = fields.Char( + required=True, + ) + + partial_dismissal = fields.Boolean() + + percentage = fields.Float(string="%") + + requires_account_move = fields.Boolean( + readonly=True, + related="depreciation_id.type_id.requires_account_move", + string="Required Account Move", + ) + + requires_depreciation_nr = fields.Boolean( + compute="_compute_requires_depreciation_nr", + search="_search_requires_depreciation_nr_lines", + string="Requires Dep Num", + ) + + # Non-default parameter: set which `move_types` require numeration + _numbered_move_types = ("depreciated", "historical") + # Non-default parameter: set which `move_types` do not concur to + # asset.depreciation's `amount_residual` field compute + _non_residual_move_types = ("gain",) + # Non-default parameter: set which `move_types` get to update the + # depreciable amount + _update_move_types = ("in", "out") + + @api.model_create_multi + def create(self, vals_list): + lines = self.browse() + for vals in vals_list: + line = super().create(vals) + if line.need_normalize_depreciation_nr(): + line.normalize_depreciation_nr(force=True) + lines |= line + return lines + + def write(self, vals): + res = super().write(vals) + self.check_company() + for line in self: + if line.need_normalize_depreciation_nr(): + line.normalize_depreciation_nr(force=True) + return res + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_open_move(self): + if any([m.state != "draft" for m in self.mapped("move_id")]): + lines = self.filtered( + lambda line: line.move_id and line.move_id.state != "draft" + ) + name_list = "\n".join([line[-1] for line in lines.name_get()]) + raise ValidationError( + _( + "Following lines are linked to posted account moves, and" + " cannot be deleted:\n" + ) + + name_list + ) + + def unlink(self): + self.mapped("asset_accounting_info_ids").unlink() + self.mapped("move_id").unlink() + return super().unlink() + + def name_get(self): + return [(line.id, line.make_name()) for line in self] + + def check_company(self): + for dep_line in self: + comp = dep_line.get_linked_aa_info_records().mapped("company_id") + if len(comp) > 1 or (comp and comp != dep_line.company_id): + raise ValidationError( + _( + "`%(dep_line)s`: cannot change depreciation line's company once" + " it's already related to an asset.", + dep_line=dep_line.make_name(), + ) + ) + + @api.constrains("depreciation_nr") + def check_depreciation_nr_coherence(self): + for dep in self.mapped("depreciation_id"): + # Check if any number is negative + num_lines = dep.line_ids.filtered("requires_depreciation_nr") + nums = num_lines.mapped("depreciation_nr") + if nums and min(nums) < 0: + raise ValidationError( + _("Depreciation number can't be a negative number.") + ) + + @api.depends("amount", "move_type") + def _compute_balance(self): + for line in self: + if line.move_type in ["out", "depreciated", "historical", "loss"]: + line.balance = -line.amount + else: + line.balance = line.amount + + def _compute_requires_depreciation_nr(self): + for line in self: + line.requires_depreciation_nr = line.is_depreciation_nr_required() + + def _search_requires_depreciation_nr_lines(self, operator, value): + if operator not in ("=", "!="): + raise ValidationError(_("Invalid search operator!")) + + if (operator == "=" and value) or (operator == "!=" and not value): + return [("move_type", "in", self.get_numbered_move_types())] + else: + return [("move_type", "not in", self.get_numbered_move_types())] + + @api.onchange("move_type") + def onchange_move_type(self): + if self.move_type not in ("in", "out"): + self.depreciation_line_type_id = False + + def get_linked_aa_info_records(self): + self.ensure_one() + return self.asset_accounting_info_ids + + def get_balances_grouped(self): + """Groups balances of line in `self` by line.move_type, adding all + possible type to ensure values are computed always.""" + balances_grouped = { + x: 0 for x in dict(self._fields["move_type"].selection).keys() + } + for line in self: + balances_grouped[line.move_type] += line.balance + return balances_grouped + + def get_depreciation_nr_dict(self): + """Returns dict {line: new number}""" + dep = self.mapped("depreciation_id") + dep.ensure_one() + lines = dep.line_ids.filtered("requires_depreciation_nr").sorted() + if not lines: + return {} + + first_num = 1 + if dep.force_first_dep_nr and dep.first_dep_nr > 0: + first_num = dep.first_dep_nr + + return {line: nr + first_num for nr, line in enumerate(lines)} + + def get_non_residual_move_types(self): + """ + Returns list of `move_type` vals that do not concur to + asset.depreciation's `amount_residual` field compute + """ + return self._non_residual_move_types + + def get_numbered_move_types(self): + """Returns list of `move_type` vals that require numeration""" + return self._numbered_move_types + + def get_update_move_types(self): + """ + Returns list of `move_type` that concur to update asset.depreciation's + `amount_depreciable_updated` field + """ + return self._update_move_types + + def is_depreciation_nr_required(self): + """Defines if a line requires to be numbered""" + self.ensure_one() + return ( + self.move_type in self.get_numbered_move_types() + and not self.partial_dismissal + ) + + def make_name(self): + self.ensure_one() + return f"{self.name} ({self.depreciation_id.make_name()})" + + def need_normalize_depreciation_nr(self): + """Check if numbers need to be normalized""" + dep = self.mapped("depreciation_id") + dep.ensure_one() + + if dep.force_all_dep_nr: + return False + + lines = dep.line_ids.filtered("requires_depreciation_nr").sorted() + if not lines: + return False + + first_line = lines[0] + + if dep.force_first_dep_nr and dep.first_dep_nr: + if first_line.depreciation_nr != dep.first_dep_nr: + return True + + if not dep.force_first_dep_nr: + if first_line.depreciation_nr != 1: + return True + + nrs = tuple(lines.mapped("depreciation_nr") or [0]) + if min(nrs) <= 0: + return True + + expected_nrs = tuple([x for x in range(min(nrs), max(nrs) + 1)]) + if nrs != expected_nrs: + return True + + return False + + def normalize_depreciation_nr(self, force=False): + """ + Normalize depreciation numbers to be consecutive for depreciation + and historical lines within the same depreciation set; force to 0 + every non-depreciation line. + :param force: force normalization for every depreciations' lines + """ + for dep in self.mapped("depreciation_id"): + # Avoid if user chooses to use custom numbers + if dep.force_all_dep_nr: + continue + + num_lines = dep.line_ids.filtered("requires_depreciation_nr") + if force or num_lines.need_normalize_depreciation_nr(): + nr_dict = num_lines.get_depreciation_nr_dict() + for num_line, nr in nr_dict.items(): + if num_line.depreciation_nr != nr: + num_line.depreciation_nr = nr + (dep.line_ids - num_lines).update({"depreciation_nr": 0}) + + ########################################################################## + # # + # ACCOUNT MOVE CREATING METHODS # + # # + ########################################################################## + + def button_generate_account_move(self): + self.generate_account_move() + + def button_regenerate_account_move(self): + self.button_remove_account_move() + self.generate_account_move() + + def button_remove_account_move(self): + self.mapped("move_id").unlink() + + def generate_account_move(self): + for line in self.filtered(lambda line: line.needs_account_move()): + line.generate_account_move_single() + + def generate_account_move_single(self): + self.ensure_one() + am_obj = self.env["account.move"] + + vals = self.get_account_move_vals() + if "line_ids" not in vals: + vals["line_ids"] = [] + + line_vals = self.get_account_move_line_vals() + for v in line_vals: + vals["line_ids"].append(Command.create(v)) + + self.move_id = am_obj.create(vals) + + def get_account_move_vals(self): + self.ensure_one() + return { + "company_id": self.company_id.id, + "date": self.date, + "journal_id": self.asset_id.category_id.journal_id.id, + "line_ids": [], + "ref": _("Asset: ") + self.asset_id.make_name(), + "move_type": "entry", + } + + def get_account_move_line_vals(self): + """Switcher between methods""" + method = self.get_account_move_line_vals_methods().get(self.move_type) + if not method: + raise NotImplementedError( + _("Cannot create account move lines: no method is specified.") + ) + + return method() + + def get_account_move_line_vals_methods(self): + """ + Maps line `move_type` to its own method for generating move lines. + """ + return { + t: getattr(self, f"get_{t}_account_move_line_vals", False) + for t in dict(self._fields["move_type"].selection).keys() + } + + def get_depreciated_account_move_line_vals(self): + self.ensure_one() + + # Asset depreciation + if not self.partial_dismissal: + credit_account_id = self.asset_id.category_id.fund_account_id.id + debit_account_id = self.asset_id.category_id.depreciation_account_id.id + + # Asset partial dismissal + else: + debit_account_id = self.asset_id.category_id.fund_account_id.id + credit_account_id = self.asset_id.category_id.asset_account_id.id + + amt = abs(self.amount) + credit_line_vals = { + "account_id": credit_account_id, + "credit": amt, + "debit": 0.0, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + debit_line_vals = { + "account_id": debit_account_id, + "credit": 0.0, + "debit": amt, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + return [credit_line_vals, debit_line_vals] + + def get_gain_account_move_line_vals(self): + self.ensure_one() + credit_line_vals = { + "account_id": self.asset_id.category_id.gain_account_id.id, + "credit": self.amount, + "debit": 0.0, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + debit_line_vals = { + "account_id": self.asset_id.category_id.asset_account_id.id, + "credit": 0.0, + "debit": self.amount, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + return [credit_line_vals, debit_line_vals] + + def get_historical_account_move_line_vals(self): + raise NotImplementedError( + _("Cannot create account move lines for lines of type" " `Historical`") + ) + + def get_in_account_move_line_vals(self): + raise NotImplementedError( + _("Cannot create account move lines for lines of type `In`") + ) + + def get_loss_account_move_line_vals(self): + self.ensure_one() + credit_line_vals = { + "account_id": self.asset_id.category_id.asset_account_id.id, + "credit": self.amount, + "debit": 0.0, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + debit_line_vals = { + "account_id": self.asset_id.category_id.loss_account_id.id, + "credit": 0.0, + "debit": self.amount, + "currency_id": self.currency_id.id, + "name": " - ".join((self.asset_id.make_name(), self.name)), + } + return [credit_line_vals, debit_line_vals] + + def get_out_account_move_line_vals(self): + raise NotImplementedError( + _("Cannot create account move lines for lines of type `Out`") + ) + + def needs_account_move(self): + self.ensure_one() + return self.requires_account_move and not self.move_id and self.amount + + def post_dismiss_asset(self): + dep = self.mapped("depreciation_id") + dep.ensure_one() + types = ("gain", "loss") + gain_or_loss = self.filtered( + lambda line: line.needs_account_move() and line.move_type in types + ) + if gain_or_loss: + gain_or_loss.generate_account_move_single() + dep.generate_dismiss_account_move() + + def post_partial_dismiss_asset(self): + dep = self.mapped("depreciation_id") + dep.ensure_one() + types = ("depreciated", "gain", "loss") + to_create_move = self.filtered( + lambda line: line.needs_account_move() and line.move_type in types + ) + if to_create_move: + to_create_move.generate_account_move() diff --git a/l10n_it_asset_management/models/asset_depreciation_line_type.py b/l10n_it_asset_management/models/asset_depreciation_line_type.py new file mode 100644 index 000000000000..1d4ecc4221b0 --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation_line_type.py @@ -0,0 +1,60 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class DepLineType(models.Model): + _name = "asset.depreciation.line.type" + _description = "Depreciation Line Type" + _table = "asset_dep_line_type" + _order = "name asc, code asc" + + @api.model + def get_default_company_id(self): + return self.env.company + + code = fields.Char() + + company_id = fields.Many2one( + "res.company", default=get_default_company_id, string="Company" + ) + + name = fields.Char(required=True) + + type = fields.Selection( + [("in", "In"), ("out", "Out")], + ) + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_depreciation_line(self): + for line_type in self: + if self.env["asset.depreciation.line"].search( + [("depreciation_line_type_id", "=", line_type.id)] + ): + raise ValidationError( + _( + "Cannot remove type %(type)s: there is some depreciation" + " line linked to it.", + type=line_type.name, + ) + ) + + def name_get(self): + return [(line_type.id, line_type.make_name()) for line_type in self] + + def make_name(self): + self.ensure_one() + name = "" + if self.code: + name += f"[{self.code}] " + name += self.name + type_name = dict(self._fields["type"].selection).get(self.type) + if type_name: + name += " - " + type_name + return name.strip() diff --git a/l10n_it_asset_management/models/asset_depreciation_mode.py b/l10n_it_asset_management/models/asset_depreciation_mode.py new file mode 100644 index 000000000000..5887aaab7d05 --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation_mode.py @@ -0,0 +1,104 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import UserError, ValidationError +from odoo.fields import Command + + +class AssetDepreciationMode(models.Model): + _name = "asset.depreciation.mode" + _description = "Asset Depreciation Mode" + _order = "name" + + @api.model + def get_default_company_id(self): + return self.env.company + + company_id = fields.Many2one( + "res.company", default=get_default_company_id, string="Company" + ) + + default = fields.Boolean(string="Default Mode") + + line_ids = fields.One2many( + "asset.depreciation.mode.line", "mode_id", string="Lines" + ) + + name = fields.Char( + required=True, + ) + + used_asset_coeff = fields.Float( + default=1.0, + string="Used Asset Coeff.", + ) + + def copy(self, default=None): + default = dict(default or []) + default.update( + { + "default": False, + "line_ids": [ + Command.create(line.copy_data({"mode_id": False})[0]) + for line in self.line_ids + ], + } + ) + return super().copy(default) + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_depreciation(self): + if ( + self.env["asset.category.depreciation.type"] + .sudo() + .search([("mode_id", "in", self.ids)]) + ): + raise UserError( + _( + "Cannot delete depreciation modes while they're still linked" + " to categories." + ) + ) + if self.env["asset.depreciation"].sudo().search([("mode_id", "in", self.ids)]): + raise UserError( + _( + "Cannot delete depreciation modes while they're still linked" + " to depreciations." + ) + ) + + @api.constrains("company_id", "default") + def check_default_modes(self): + for company in self.mapped("company_id"): + domain = [("company_id", "=", company.id), ("default", "=", True)] + if self.search_count(domain) > 1: + raise ValidationError( + _( + "There can be no more than 1 default depreciation mode" + " for each company." + ) + ) + + def get_depreciation_amount_multiplier(self): + multiplier = 1 + if not self: + return multiplier + + self.ensure_one() + + # Update multiplier from used asset coefficient + used_asset = self._context.get("used_asset", False) + if self.used_asset_coeff and used_asset: + multiplier *= self.used_asset_coeff + + # Update multiplier from lines + lines = self.line_ids + if lines: + multiplier *= lines.get_depreciation_amount_multiplier() + + return multiplier diff --git a/l10n_it_asset_management/models/asset_depreciation_mode_line.py b/l10n_it_asset_management/models/asset_depreciation_mode_line.py new file mode 100644 index 000000000000..55474f8c992d --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation_mode_line.py @@ -0,0 +1,73 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AssetDepreciationModeLine(models.Model): + _name = "asset.depreciation.mode.line" + _description = "Asset Depreciation Mode Line" + _order = "from_nr asc, to_nr asc" + + application = fields.Selection( + [("coefficient", "Coefficient"), ("percentage", "Percentage")], + default="coefficient", + required=True, + string="Application by", + ) + + coefficient = fields.Float() + + company_id = fields.Many2one( + "res.company", readonly=True, related="mode_id.company_id", string="Company" + ) + + from_nr = fields.Integer( + required=True, + ) + + mode_id = fields.Many2one( + "asset.depreciation.mode", + ondelete="cascade", + required=True, + readonly=True, + string="Mode", + ) + + percentage = fields.Float() + + to_nr = fields.Integer() + + @api.onchange("application") + def onchange_application(self): + if self.application: + if self.application == "coefficient": + self.percentage = 0 + elif self.application == "percentage": + self.coefficient = 0 + else: + self.coefficient = 0 + self.percentage = 0 + + def get_depreciation_amount_multiplier(self): + multiplier = 1 + nr = self._context.get("dep_nr") + if nr is None: + # Cannot compare to any line + return multiplier + + lines = self.filtered( + lambda line: line.from_nr <= nr and (not line.to_nr or line.to_nr >= nr) + ) + if not lines: + return multiplier + + for line in lines: + if line.application == "coefficient": + multiplier *= line.coefficient + elif line.application == "percentage": + multiplier *= line.percentage / 100 + + return multiplier diff --git a/l10n_it_asset_management/models/asset_depreciation_type.py b/l10n_it_asset_management/models/asset_depreciation_type.py new file mode 100644 index 000000000000..d2cf0131f2b8 --- /dev/null +++ b/l10n_it_asset_management/models/asset_depreciation_type.py @@ -0,0 +1,47 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class AssetDepreciationType(models.Model): + _name = "asset.depreciation.type" + _description = "Asset Depreciation Type" + _order = "name" + + @api.model + def get_default_company_id(self): + return self.env.company + + company_id = fields.Many2one( + "res.company", default=get_default_company_id, string="Company" + ) + + name = fields.Char(required=True) + + print_by_default = fields.Boolean( + default=True, + help="Defines whether a category should be added by default when" + " printing assets' reports.", + ) + + requires_account_move = fields.Boolean() + + @api.ondelete( + at_uninstall=False, + ) + def _unlink_except_in_category(self): + if ( + self.env["asset.category.depreciation.type"] + .sudo() + .search([("depreciation_type_id", "in", self.ids)]) + ): + raise UserError( + _( + "Cannot delete depreciation types while they're still used" + " by categories." + ) + ) diff --git a/l10n_it_asset_management/models/asset_tag.py b/l10n_it_asset_management/models/asset_tag.py new file mode 100644 index 000000000000..30a091475a18 --- /dev/null +++ b/l10n_it_asset_management/models/asset_tag.py @@ -0,0 +1,21 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AssetTag(models.Model): + _name = "asset.tag" + _description = "Asset Tags" + + @api.model + def get_default_company_id(self): + return self.env.company + + company_id = fields.Many2one( + "res.company", default=get_default_company_id, string="Company" + ) + + name = fields.Char(required=True) diff --git a/l10n_it_asset_management/pyproject.toml b/l10n_it_asset_management/pyproject.toml new file mode 100644 index 000000000000..4231d0cccb3d --- /dev/null +++ b/l10n_it_asset_management/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/l10n_it_asset_management/readme/CONTRIBUTORS.md b/l10n_it_asset_management/readme/CONTRIBUTORS.md new file mode 100644 index 000000000000..001aa6e3fcd0 --- /dev/null +++ b/l10n_it_asset_management/readme/CONTRIBUTORS.md @@ -0,0 +1,12 @@ +- Alessandro Camilli \<\> +- Silvio Gregorini \<\> +- Stefano Pezzini \<\> +- Lorenzo Battistini \<\> +- [TAKOBI](https://takobi.online): + - Simone Rubino \<\> +- [Aion Tech](https://aiontech.company/): + - Simone Rubino \<\> +- Nextev Srl \<\> + +Base icon made by [surang](https://www.flaticon.com/authors/surang) from +[www.flaticon.com](https://www.flaticon.com/). diff --git a/l10n_it_asset_management/readme/DESCRIPTION.md b/l10n_it_asset_management/readme/DESCRIPTION.md new file mode 100644 index 000000000000..7d5424d09a35 --- /dev/null +++ b/l10n_it_asset_management/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This modules allows account management of companies' assets. diff --git a/l10n_it_asset_management/readme/USAGE.md b/l10n_it_asset_management/readme/USAGE.md new file mode 100644 index 000000000000..75a337b11f92 --- /dev/null +++ b/l10n_it_asset_management/readme/USAGE.md @@ -0,0 +1,24 @@ +**English** + +You can create and manage assets from accounting section of Odoo. + +Configuration must be done from Assets -\> Assets Configuration, where +depreciation types, modes and assets categories can be found. + +Assets can both be created manually or via invoices and journal entries. +Depreciations can be generated by using the related wizard found in +Assets -\> Assets Management -\> Generate Depreciations, or by +triggering the same wizard from a single asset form view. + +**Italiano** + +È possibile creare e gestire cespiti dalla sezione contabilità di Odoo. + +La configurazione dei cespiti dev'essere fatta andando in Cespiti -\> +Configurazione Cespiti, dove si trovano le categorie dei beni, i tipi e +le modalità di ammortamento. + +I cespiti possono essere creati manualmente o da fatture e registrazioni +contabili. Gli ammortamenti possono essere generati utilizzando +l'apposito wizard in Cespiti -\> Gestione Cestpiti -\> Genera +Ammortamenti, o aprendo quello stesso wizard dalla scheda del cespite. diff --git a/l10n_it_asset_management/report/__init__.py b/l10n_it_asset_management/report/__init__.py new file mode 100644 index 000000000000..96d7545e5369 --- /dev/null +++ b/l10n_it_asset_management/report/__init__.py @@ -0,0 +1,8 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import asset_journal +from . import asset_journal_xlsx +from . import asset_previsional +from . import asset_previsional_xlsx diff --git a/l10n_it_asset_management/report/asset_journal.py b/l10n_it_asset_management/report/asset_journal.py new file mode 100644 index 000000000000..f00a7ece325a --- /dev/null +++ b/l10n_it_asset_management/report/asset_journal.py @@ -0,0 +1,954 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2022 Simone Rubino - TAKOBI +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from collections import OrderedDict + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command +from odoo.tools.misc import format_amount + + +def format_date(rec, field_name, fmt): + """Formats record's field value according to given format `fmt`""" + if not rec[field_name]: + return "" + return rec._fields[field_name].from_string(rec[field_name]).strftime(fmt) + + +class Report(models.TransientModel): + """ + This report has the following structure: + * Report (which is just a data container) + ** Category + *** Asset + **** Depreciation + ***** Depreciation Line by Year + Each class is set to be linked via a M2O to its parent class, and via + a O2M to its child class. + Each class is linked to Report via `report_id` field. + Asset and Depreciation Line by Year both have a relation to the section + Accounting Data which stores sale/purchase data. + """ + + _name = "report_asset_journal" + _description = "Report Asset Journal" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + asset_ids = fields.Many2many( + "asset.asset", + ) + + asset_order_fname = fields.Char() + + category_ids = fields.Many2many( + "asset.category", + ) + + company_id = fields.Many2one( + "res.company", + ) + + date = fields.Date() + + show_totals = fields.Boolean() + + show_category_totals = fields.Boolean() + show_sold_assets = fields.Boolean() + show_dismissed_assets = fields.Boolean() + + type_ids = fields.Many2many( + "asset.depreciation.type", + ) + + # Report structure fields + report_category_ids = fields.One2many("report_asset_journal_category", "report_id") + + report_asset_ids = fields.One2many("report_asset_journal_asset", "report_id") + + report_depreciation_ids = fields.One2many( + "report_asset_journal_depreciation", "report_id" + ) + + report_depreciation_line_year_ids = fields.One2many( + "report_asset_journal_depreciation_line_year", "report_id" + ) + + report_total_ids = fields.One2many("report_asset_journal_totals", "report_id") + + # Fields to be printed + report_footer_year = fields.Char() + report_name = fields.Char() + + ############################ + # # + # REPORT RENDERING METHODS # + # # + ############################ + + def print_report(self, report_type=None): + """ + This method is called from the JS widget buttons 'Print' + and 'Export' in the HTML view. + Prints PDF and XLSX reports. + :param report_type: string that represents the report type + """ + self.ensure_one() + report_type = report_type or "qweb-pdf" + if report_type in ("qweb-pdf", "xlsx", "qweb-html"): + res = self.do_print(report_type) + elif report_type: + raise ValidationError( + _( + "No report has been defined for type `%(report_type)s`.", + report_type=report_type, + ) + ) + else: + raise ValidationError( + _("No report type has been declared for current print.") + ) + return res + + def do_print(self, report_type): + self.ensure_one() + if report_type == "qweb-pdf": + xml_id = "l10n_it_asset_management.report_asset_journal_pdf" + elif report_type == "qweb-html": + xml_id = "l10n_it_asset_management.report_asset_journal_html" + else: + xml_id = "l10n_it_asset_management.report_asset_journal_xlsx" + report = self.env.ref(xml_id) + return report.report_action(self) + + @api.model + def get_html(self, given_context=None): + """Method needed from JavaScript widget to render HTML view""" + context = dict(self.env.context) + context.update(given_context or {}) + report = self or self.browse(context.get("active_id")) + xml_id = "l10n_it_asset_management.template_asset_journal_report" + + result = {} + if report: + context["o"] = report + result["html"] = self.env.ref(xml_id).render(context) + return result + + ########################### + # # + # REPORT CREATION METHODS # + # # + ########################### + + def compute_data_for_report(self): + """Compute data to be printed""" + self.set_report_name() + self.generate_structure() + self.generate_data() + + def generate_data(self): + self.report_category_ids.generate_data() + self.report_asset_ids.generate_data() + self.report_depreciation_ids.generate_data() + self.report_depreciation_line_year_ids.generate_data() + self.report_category_ids.generate_totals() + self.generate_totals() + + def generate_structure(self): + deps = self.get_depreciations() + dep_lines = deps.mapped("line_ids") + assets = deps.mapped("asset_id") + if self.date: + assets = assets.filtered( + lambda a: not a.purchase_date or a.purchase_date <= self.date + ) + dep_lines = dep_lines.filtered(lambda dl: dl.date <= self.date) + categories = assets.mapped("category_id") + + if not (categories and assets and deps): + raise ValidationError( + _("There is nothing to print according to current settings!") + ) + + dep_lines_grouped = OrderedDict() + fiscal_year = self.env["account.fiscal.year"] + for dep_line in dep_lines.sorted("date"): + dep = dep_line.depreciation_id + fyear = fiscal_year.get_fiscal_year_by_date( + dep_line.date, company=dep_line.company_id + ) + key = (dep, fyear) + if key not in dep_lines_grouped: + dep_lines_grouped[key] = self.env["asset.depreciation.line"] + dep_lines_grouped[key] += dep_line + + self.write( + { + "report_category_ids": [ + Command.create({"category_id": c.id, "report_id": self.id}) + for c in categories.sorted("name") + ] + } + ) + for report_categ in self.report_category_ids: + report_categ.write( + { + "report_asset_ids": [ + Command.create({"asset_id": a.id, "report_id": self.id}) + for a in self.sort_assets(assets) + if a.category_id == report_categ.category_id + ] + } + ) + for report_asset in self.report_asset_ids: + report_asset.write( + { + "report_depreciation_ids": [ + Command.create({"depreciation_id": d.id, "report_id": self.id}) + for d in deps + if d.asset_id == report_asset.asset_id + ] + } + ) + for report_dep in self.report_depreciation_ids: + sequence = 0 + for (dep, fyear), lines in dep_lines_grouped.items(): + if dep == report_dep.depreciation_id: + sequence += 1 + report_dep.write( + { + "report_depreciation_year_line_ids": [ + Command.create( + { + "dep_line_ids": [Command.set(lines.ids)], + "fiscal_year_id": fyear.id, + "report_id": self.id, + "sequence": sequence, + }, + ) + ] + } + ) + + def generate_totals(self): + curr = self.company_id.currency_id + categ_totals = self.report_category_ids.mapped("report_total_ids") + fnames = self.env["report_asset_journal_totals"]._total_fnames + totals_by_dep_type = { + t: {fname: 0 for fname in fnames} for t in categ_totals.mapped("type_id") + } + for total in categ_totals: + total_curr = total.get_currency() + total_type = total.type_id + for fname in fnames: + totals_by_dep_type[total_type][fname] += total_curr._convert( + total[fname], curr, self.company_id, self.date + ) + self.write( + { + "report_total_ids": [ + Command.create( + dict( + v, + name=_("General Total"), + type_name=t.name_get()[0][-1], + type_id=t.id, + ), + ) + for t, v in totals_by_dep_type.items() + ] + } + ) + + def get_depreciations(self): + domain = [] + if self.asset_ids: + domain += [("asset_id", "in", self.asset_ids.ids)] + if self.category_ids: + domain += [("asset_id.category_id", "in", self.category_ids.ids)] + if self.company_id: + domain += [("company_id", "=", self.company_id.id)] + if self.date: + domain += [("date_start", "<=", self.date)] + if self.type_ids: + domain += [("type_id", "in", self.type_ids.ids)] + if not self.show_sold_assets: + domain += [ + "|", + ("asset_id.sale_date", "=", False), + ("asset_id.sale_date", ">=", self.date.replace(month=1, day=1)), + ] + if not self.show_dismissed_assets: + domain += [ + "|", + ("asset_id.dismiss_date", "=", False), + ("asset_id.dismiss_date", ">=", self.date.replace(month=1, day=1)), + ] + return self.env["asset.depreciation"].search(domain) + + def set_report_name(self): + report_name = _("Assets Depreciations ") + if self.date: + report_name += _( + "to date %(to_date)s", + to_date=format_date(self, "date", "%d-%m-%Y"), + ) + self.report_name = report_name.strip() + + def sort_assets(self, assets): + sortable_assets = assets.filtered(self.asset_order_fname) + sorted_assets = ( + sortable_assets.sorted(self.asset_order_fname) + + (assets - sortable_assets).sorted() + ) + return sorted_assets + + +class ReportCategory(models.TransientModel): + _name = "report_asset_journal_category" + _description = "Report Asset Journal Category" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + category_id = fields.Many2one("asset.category", ondelete="cascade", required=True) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + report_asset_ids = fields.One2many( + "report_asset_journal_asset", "report_category_id" + ) + + report_total_ids = fields.One2many( + "report_asset_journal_totals", "report_category_id" + ) + + # Fields to be printed + category_name = fields.Char() + + def generate_data(self): + for report_categ in self: + report_categ.write(report_categ.get_report_categ_data()) + + def get_report_categ_data(self): + self.ensure_one() + return {"category_name": self.category_id.name} + + def generate_totals(self): + for categ in self: + curr = categ.report_id.company_id.currency_id + report_date = categ.report_id.date + report_deps = categ.report_asset_ids.mapped("report_depreciation_ids") + fnames = categ.env["report_asset_journal_totals"]._total_fnames + totals_by_dep_type = { + t: {fname: 0 for fname in fnames} + for t in report_deps.mapped("depreciation_id.type_id") + } + for report_dep in report_deps: + dep_type = report_dep.depreciation_id.type_id + if not report_dep.report_depreciation_year_line_ids: + totals_by_dep_type[dep_type][ + "amount_depreciable_updated" + ] += report_dep.dep_amount_depreciable + totals_by_dep_type[dep_type][ + "amount_residual" + ] += report_dep.dep_amount_depreciable + continue + last_line = report_dep.report_depreciation_year_line_ids[-1] + line_curr = last_line.get_currency() + fy_start = last_line.fiscal_year_id.date_from + fy_end = last_line.fiscal_year_id.date_to + for fname in fnames: + if fname == "amount_depreciation_fund_prev_year": + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + elif fy_end < report_date: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line["amount_depreciation_fund_curr_year"], + curr, + categ.report_id.company_id, + report_date, + ) + elif fname in ( + "amount_in_total", + "amount_out_total", + "gain_loss_total", + ): + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + elif report_date < fy_start: + totals_by_dep_type[dep_type][fname] = 0 + elif fname == "amount_depreciated": + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + else: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + categ.write( + { + "report_total_ids": [ + Command.create( + dict( + v, + name=categ.category_id.name_get()[0][-1], + type_name=t.name_get()[0][-1], + type_id=t.id, + ), + ) + for t, v in totals_by_dep_type.items() + ] + } + ) + + +class ReportAsset(models.TransientModel): + _name = "report_asset_journal_asset" + _description = "Report Asset Journal Asset" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + asset_id = fields.Many2one("asset.asset", ondelete="cascade", required=True) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + report_category_id = fields.Many2one("report_asset_journal_category") + + report_depreciation_ids = fields.One2many( + "report_asset_journal_depreciation", "report_asset_id" + ) + + report_purchase_doc_id = fields.Many2one( + "report_asset_journal_accounting_doc", + ) + + report_sale_doc_id = fields.Many2one( + "report_asset_journal_accounting_doc", + ) + + # Fields to be printed + asset_code = fields.Char() + asset_name = fields.Char() + asset_purchase_amount = fields.Float() + asset_state = fields.Char() + asset_used = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_asset in self: + report_asset.write(report_asset.get_report_asset_data()) + + def get_currency(self): + self.ensure_one() + return self.asset_id.currency_id + + def get_report_asset_data(self): + self.ensure_one() + asset = self.asset_id + states_dict = dict(asset._fields["state"].selection) + + vals = { + "asset_code": asset.code or "/", + "asset_name": asset.name, + "asset_purchase_amount": asset.purchase_amount, + "asset_state": states_dict.get(asset.state) or _("Unknown"), + "asset_used": _("Used") if asset.used else _("New"), + } + + acc_doc = self.env["report_asset_journal_accounting_doc"] + purchase_vals = self.get_purchase_vals() + if purchase_vals: + vals.update( + { + "report_purchase_doc_id": acc_doc.create(purchase_vals).id, + } + ) + + sale_vals = self.get_sale_vals() + if sale_vals: + vals.update( + { + "report_sale_doc_id": acc_doc.create(sale_vals).id, + } + ) + + return vals + + def get_purchase_vals(self): + asset = self.asset_id + purchase_vals = { + "partner_name": asset.supplier_id.name or "/", + "partner_vat": asset.supplier_id.vat or "/", + } + + if asset.purchase_date: + purchase_vals["document_date"] = format_date( + asset, "purchase_date", "%d-%m-%Y" + ) + + if asset.supplier_ref: + purchase_vals["partner_ref"] = asset.supplier_ref + elif asset.purchase_move_id.payment_reference: + purchase_vals["partner_ref"] = asset.purchase_move_id.payment_reference + elif asset.purchase_move_id.ref: + purchase_vals["partner_ref"] = asset.purchase_move_id.ref + else: + purchase_vals["partner_ref"] = "/" + + if asset.purchase_move_id: + purchase_vals.update( + { + "document_nr": asset.purchase_move_id.name or "/", + "res_id": asset.purchase_move_id.id, + "res_model": "account.move", + } + ) + else: + purchase_vals.update( + { + "document_nr": "/", + "res_id": asset.id, + "res_model": "asset.asset", + } + ) + + return purchase_vals + + def get_sale_vals(self): + asset = self.asset_id + if not asset.sale_date or asset.sale_date > self.report_id.date: + return {} + + sale_vals = { + "document_date": format_date(asset, "sale_date", "%d-%m-%Y"), + "partner_name": asset.customer_id.name, + "partner_vat": asset.customer_id.vat or "/", + } + + if asset.sale_move_id: + sale_vals.update( + { + "document_nr": asset.sale_move_id.name or "/", + "res_id": asset.sale_move_id.id, + "res_model": "account.move", + } + ) + else: + sale_vals.update( + { + "document_nr": "/", + "res_id": asset.id, + "res_model": "asset.asset", + } + ) + return sale_vals + + +class ReportDepreciation(models.TransientModel): + _name = "report_asset_journal_depreciation" + _description = "Report Asset Journal Depreciation" + _inherit = "report.account_financial_report.abstract_report" + _order = "type_name asc" + + # Data fields + depreciation_id = fields.Many2one( + "asset.depreciation", ondelete="cascade", required=True + ) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + report_asset_id = fields.Many2one("report_asset_journal_asset") + + report_depreciation_year_line_ids = fields.One2many( + "report_asset_journal_depreciation_line_year", "report_depreciation_id" + ) + + # Fields to be printed + dep_amount_depreciable = fields.Float() + dep_date_start = fields.Char() + dep_percentage = fields.Float() + dep_pro_rata_temporis = fields.Char() + mode_name = fields.Char() + type_name = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_dep in self: + report_dep.write(report_dep.get_report_dep_data()) + + def get_currency(self): + self.ensure_one() + return self.depreciation_id.currency_id + + def get_report_dep_data(self): + self.ensure_one() + dep = self.depreciation_id + if dep.pro_rata_temporis: + dep_pro_rata_temporis = "\u2612" # checked ballot box -> ☒ + else: + dep_pro_rata_temporis = "\u2610" # empty ballot box -> ☐ + + return { + "dep_amount_depreciable": dep.amount_depreciable, + "dep_date_start": format_date(dep, "date_start", "%d-%m-%Y"), + "dep_percentage": dep.percentage, + "dep_pro_rata_temporis": dep_pro_rata_temporis, + "mode_name": dep.mode_id.name_get()[0][-1] if dep.mode_id else "", + "type_name": dep.type_id.name_get()[0][-1] if dep.type_id else "", + } + + +class ReportDepreciationLineByYear(models.TransientModel): + _name = "report_asset_journal_depreciation_line_year" + _description = "Report Asset Journal Depreciation Line Year" + _inherit = "report.account_financial_report.abstract_report" + _order = "sequence asc" + + # Data fields + dep_line_ids = fields.Many2many( + "asset.depreciation.line", relation="report_journal_line_year_dep_line" + ) + + fiscal_year_id = fields.Many2one("account.fiscal.year") + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + report_depreciation_id = fields.Many2one("report_asset_journal_depreciation") + + report_accounting_doc_ids = fields.Many2many( + "report_asset_journal_accounting_doc", + relation="year_dep_line_accounting_doc_rel", + ) + + sequence = fields.Integer() + + # Fields to be printed + amount_depreciable = fields.Float() + amount_depreciable_updated = fields.Float() + amount_depreciated = fields.Float() + amount_depreciation_fund_curr_year = fields.Float() + amount_depreciation_fund_prev_year = fields.Float() + amount_gain = fields.Float() + amount_gain_total = fields.Float() + amount_historical = fields.Float() + amount_in = fields.Float() + amount_in_detail = fields.Char() + amount_in_total = fields.Float() + amount_loss = fields.Float() + amount_loss_total = fields.Float() + amount_out = fields.Float() + amount_out_detail = fields.Char() + amount_out_total = fields.Float() + amount_residual = fields.Float() + date_start = fields.Char() + gain_loss = fields.Float() # Needed for the .xls report + gain_loss_total = fields.Float() # Needed for the .xls report + has_amount_detail = fields.Boolean() + percentage = fields.Float() + year = fields.Char() + type_name = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_dep_line_year in self.sorted(): # Force sorting by _order + report_dep_line_year.write( + report_dep_line_year.get_report_dep_line_year_data() + ) + + def get_currency(self): + self.ensure_one() + return self.report_depreciation_id.depreciation_id.currency_id + + def get_report_dep_line_year_data(self): + self.ensure_one() + report_dep = self.report_depreciation_id + grouped_amounts = self.dep_line_ids.get_balances_grouped() + + amount_depreciable = report_dep.dep_amount_depreciable + amount_gain = grouped_amounts.get("gain") or 0.0 + amount_gain_total = amount_gain + amount_historical = abs(grouped_amounts.get("historical") or 0.0) + amount_in = abs(grouped_amounts.get("in") or 0.0) + amount_in_total = amount_in + amount_loss = grouped_amounts.get("loss") or 0.0 + amount_loss_total = amount_loss + amount_out = abs(grouped_amounts.get("out") or 0.0) + amount_out_total = amount_out + gain_loss = amount_gain + amount_loss + gain_loss_total = gain_loss + + amount_depreciated = sum( + [ + line.amount + for line in self.dep_line_ids.filtered( + lambda line: line.move_type == "depreciated" + and not line.partial_dismissal + ) + ] + ) + amount_dismissal = sum( + [ + line.amount + for line in self.dep_line_ids.filtered( + lambda line: line.move_type == "depreciated" + and line.partial_dismissal + ) + ] + ) + + prev_year_line = report_dep.report_depreciation_year_line_ids.filtered( + lambda line: line.sequence == self.sequence - 1 + ) + asset = self.report_depreciation_id.report_asset_id.asset_id + fy_start = self.fiscal_year_id.date_from + fy_end = self.fiscal_year_id.date_to + if ( + asset.sold and asset.sale_date and fy_start <= asset.sale_date <= fy_end + ) or ( + asset.dismissed + and asset.dismiss_date + and fy_start <= asset.dismiss_date <= fy_end + ): + amount_depreciable_upd = 0.0 + depreciation_fund_curr_year = 0.0 + amount_residual = 0.0 + if prev_year_line: + depreciation_fund_prev_year = ( + prev_year_line.amount_depreciation_fund_curr_year + ) + amount_in_total += prev_year_line.amount_in_total + amount_out_total += prev_year_line.amount_out_total + else: + depreciation_fund_prev_year = 0.0 + else: + if prev_year_line: + depreciation_fund_prev_year = ( + prev_year_line.amount_depreciation_fund_curr_year + ) + prev_year_resid = prev_year_line.amount_residual + amount_depreciable_upd = ( + prev_year_line.amount_depreciable_updated + amount_in - amount_out + ) + amount_in_total += prev_year_line.amount_in_total + amount_out_total += prev_year_line.amount_out_total + else: + depreciation_fund_prev_year = 0.0 + prev_year_resid = amount_depreciable + amount_depreciable_upd = amount_depreciable + amount_in - amount_out + + depreciation_fund_curr_year = ( + depreciation_fund_prev_year + amount_depreciated + amount_dismissal + ) + amount_residual = ( + prev_year_resid + + amount_in + - amount_out + - amount_depreciated + - amount_dismissal + ) + if prev_year_line: + amount_gain_total += prev_year_line.amount_gain_total + amount_loss_total += prev_year_line.amount_loss_total + gain_loss_total += prev_year_line.gain_loss_total + + type_mapping = {"in": {}, "out": {}} + for dep_line in self.dep_line_ids.filtered( + lambda line: line.move_type in ("in", "out") + and line.depreciation_line_type_id + ): + dep_type = dep_line.depreciation_line_type_id + if dep_type not in type_mapping[dep_line.move_type]: + type_mapping[dep_line.move_type][dep_type] = 0 + type_mapping[dep_line.move_type][dep_type] += dep_line.amount + + amount_in_detail = amount_out_detail = "" + has_amount_detail = False + if type_mapping["in"]: + amount_in_detail = "; ".join( + [ + f"{dep_type.name}: {self.format_amount(amount)}" + for dep_type, amount in sorted(list(type_mapping["in"].items())) + ] + ) + has_amount_detail = True + if type_mapping["out"]: + amount_out_detail = "; ".join( + [ + f"{dep_type.name}: {self.format_amount(amount)}" + for dep_type, amount in sorted(list(type_mapping["out"].items())) + ] + ) + has_amount_detail = True + + accounting_doc_vals = [] + for dep_line in self.dep_line_ids.filtered( + lambda line: line.move_type in ("in", "out") + ): + for num, aa_info in enumerate(dep_line.asset_accounting_info_ids): + vals = { + "document_date": format_date(dep_line, "date", "%d-%m-%Y"), + "document_nr": aa_info.move_id.name or "/", + "partner_name": aa_info.move_id.partner_id.name or "/", + "partner_ref": aa_info.move_id.ref or "/", + "partner_vat": aa_info.move_id.partner_id.vat or "/", + "res_id": aa_info.move_id.id, + "res_model": "account.move", + "sequence": num + 1, + } + accounting_doc_vals.append(Command.create(vals)) + + start = fields.Date.from_string(self.fiscal_year_id.date_from).year + end = fields.Date.from_string(self.fiscal_year_id.date_to).year + if start == end: + year = str(start) + else: + year = f"{start} - {end}" + + return { + "amount_depreciable": amount_depreciable, + "amount_depreciable_updated": amount_depreciable_upd, + "amount_depreciated": amount_depreciated, + "amount_depreciation_fund_curr_year": depreciation_fund_curr_year, + "amount_depreciation_fund_prev_year": depreciation_fund_prev_year, + "amount_gain": amount_gain, + "amount_historical": amount_historical, + "amount_in": amount_in, + "amount_in_detail": amount_in_detail, + "amount_in_total": amount_in_total, + "amount_loss": amount_loss, + "amount_out": amount_out, + "amount_out_detail": amount_out_detail, + "amount_out_total": amount_out_total, + "amount_residual": amount_residual, + "date_start": report_dep.dep_date_start, + "gain_loss": gain_loss, + "gain_loss_total": gain_loss_total, + "has_amount_detail": has_amount_detail, + "percentage": report_dep.dep_percentage, + "report_accounting_doc_ids": accounting_doc_vals, + "type_name": report_dep.type_name, + "year": year, + } + + +class ReportAccountingDoc(models.TransientModel): + _name = "report_asset_journal_accounting_doc" + _description = "Report Asset Journal Accounting Doc" + _inherit = "report.account_financial_report.abstract_report" + _order = "sequence asc" + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + # Fields to be printed + document_date = fields.Char() + document_nr = fields.Char() + partner_name = fields.Char() + partner_ref = fields.Char() + partner_vat = fields.Char() + res_id = fields.Integer() + res_model = fields.Char() + sequence = fields.Integer() + + +class ReportTotals(models.TransientModel): + _name = "report_asset_journal_totals" + _description = "Report Asset Journal Totals" + _inherit = "report.account_financial_report.abstract_report" + _total_fnames = [ + "amount_depreciable_updated", + "amount_depreciated", + "amount_depreciation_fund_curr_year", + "amount_depreciation_fund_prev_year", + "amount_gain", + "amount_in_total", + "amount_loss", + "amount_out_total", + "amount_residual", + "gain_loss_total", + ] + + # Data fields + type_id = fields.Many2one( + "asset.depreciation.type", + ) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_journal", + ) + + report_category_id = fields.Many2one("report_asset_journal_category") + + # Fields to be printed + amount_depreciable_updated = fields.Float() + amount_depreciated = fields.Float() + amount_depreciation_fund_curr_year = fields.Float() + amount_depreciation_fund_prev_year = fields.Float() + amount_gain = fields.Float() + amount_in_total = fields.Float() + amount_loss = fields.Float() + amount_out_total = fields.Float() + amount_residual = fields.Float() + gain_loss = fields.Float() # Needed for the .xls report + gain_loss_total = fields.Float() # Needed for the .xls report + name = fields.Char() # Needed for the .xls report + type_name = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def get_currency(self): + self.ensure_one() + report = self.report_id or self.report_category_id.report_id + return report.company_id.currency_id diff --git a/l10n_it_asset_management/report/asset_journal_xlsx.py b/l10n_it_asset_management/report/asset_journal_xlsx.py new file mode 100644 index 000000000000..9cccd9ab1bff --- /dev/null +++ b/l10n_it_asset_management/report/asset_journal_xlsx.py @@ -0,0 +1,724 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import _, models + +_logger = logging.getLogger(__name__) + + +class AssetJournalXslx(models.AbstractModel): + _name = "report.l10n_it_asset_management.report_asset_journal_xlsx" + _description = "Report Asset Journal Xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" + + def generate_xlsx_report(self, workbook, data, objects): + """Set wb, data and report attributes""" + # Initialize report variables + report_data = { + "workbook": None, + "sheet": None, # main sheet which will contains report + "columns": None, # columns of the report + "row_pos": None, # row_pos must be incremented at each writing lines + "formats": None, + } + report_name = self._get_report_name(objects, data=data) + report_data["workbook"] = workbook + report_data["sheet"] = workbook.add_worksheet(report_name[:31]) + report_data["row_pos"] = 0 + self._define_formats(workbook, report_data) + self.set_formats(workbook, report_data) + self.set_report_data(report_data) + + # Get report data + + report_footer = self._get_report_footer() + filters = self._get_report_filters(objects) + report_data["columns"] = self._get_report_columns(objects) + self._set_column_width(report_data) + # Fill report + self._write_report_title(report_name, report_data) + self._write_filters(filters, report_data) + self._generate_report_content(workbook, objects, data, report_data) + self._write_report_footer(report_footer, report_data) + + def set_formats(self, workbook, report_data): + """Defines custom formats""" + + # 1- Category formats + + report_data["formats"]["format_category_name"] = workbook.add_format( + { + "align": "center", + "bg_color": "#337AB7", + "bold": True, + "font_color": "#FFFFFF", + "font_size": 16, + } + ) + + # 2- Asset formats + + report_data["formats"]["format_asset_header"] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_color": "#337AB7", + "font_size": 14, + } + ) + + report_data["formats"]["format_asset_value"] = workbook.add_format( + { + "align": "center", + "font_color": "#337AB7", + "font_size": 14, + } + ) + + # 3- Depreciations formats + + report_data["formats"]["format_depreciation_header"] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_size": 12, + } + ) + + report_data["formats"]["format_depreciation_value"] = workbook.add_format( + { + "align": "center", + "font_size": 12, + } + ) + + # 4- Depreciation yearly and amount details formats + + report_data["formats"][ + "format_depreciation_year_line_header" + ] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_size": 12, + } + ) + + report_data["formats"][ + "format_depreciation_year_line_value_center" + ] = workbook.add_format( + { + "align": "center", + "font_size": 12, + } + ) + + report_data["formats"][ + "format_depreciation_year_line_value_right" + ] = workbook.add_format( + { + "align": "right", + "font_size": 12, + } + ) + + # 5- Report title + report_data["formats"]["format_title"] = workbook.add_format( + { + "align": "center", + "bg_color": "#337AB7", + "bold": True, + "font_color": "white", + "font_size": 20, + } + ) + + def set_report_data(self, report_data): + self.set_category_data(report_data) + self.set_asset_data(report_data) + self.set_asset_accounting_doc_data(report_data) + self.set_depreciation_data(report_data) + self.set_depreciation_line_year_data(report_data) + self.set_depreciation_line_amount_detail_data(report_data) + self.set_depreciation_line_accounting_doc_data(report_data) + self.set_totals_data(report_data) + + def set_category_data(self, report_data): + report_data["category_data"] = self.generate_category_data(report_data) + + def generate_category_data(self, report_data): + data = ( + { + "title": _("Category"), + "field": "category_name", + "tstyle": report_data["formats"]["format_category_name"], + "vstyle": report_data["formats"]["format_category_name"], + }, + ) + return dict(enumerate(data)) + + def set_asset_data(self, report_data): + report_data["asset_data"] = self.generate_asset_data(report_data) + + def generate_asset_data(self, report_data): + data = ( + { + "title": _("Asset"), + "field": "asset_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Code"), + "field": "asset_code", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Purchase Amount"), + "field": "asset_purchase_amount", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Purchased as New / Used"), + "field": "asset_used", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Status"), + "field": "asset_state", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return dict(enumerate(data)) + + def set_asset_accounting_doc_data(self, report_data): + report_data[ + "asset_accounting_doc_data" + ] = self.generate_asset_accounting_doc_data(report_data) + + def generate_asset_accounting_doc_data(self, report_data): + data = ( + { + "title": _("Partner"), + "field": "partner_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("VAT"), + "field": "partner_vat", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Document Nr"), + "field": "document_nr", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Document Date"), + "field": "document_date", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Supplier Ref"), + "field": "partner_ref", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_data(self, report_data): + report_data["depreciation_data"] = self.generate_depreciation_data(report_data) + + def generate_depreciation_data(self, report_data): + data = ( + { + "title": _("Depreciation Type"), + "field": "type_name", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Depreciation Mode"), + "field": "mode_name", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Initial Depreciable Amount"), + "field": "dep_amount_depreciable", + "type": "amount", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Starting From"), + "field": "dep_date_start", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Dep. Percentage (%)"), + "field": "dep_percentage", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Pro Rata Temporis"), + "field": "dep_pro_rata_temporis", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_line_year_data(self, report_data): + report_data[ + "depreciation_line_year_data" + ] = self.generate_depreciation_line_year_data(report_data) + + def generate_depreciation_line_year_data(self, report_data): + formatd = report_data["formats"] + data = ( + { + "title": _("Year"), + "field": "year", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("Amount"), + "field": "amount_depreciable_updated", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("In Amount"), + "field": "amount_in", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Out Amount"), + "field": "amount_out", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Prev. Year Dep. Fund"), + "field": "amount_depreciation_fund_prev_year", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Depreciation"), + "field": "amount_depreciated", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Curr. Year Dep. Fund"), + "field": "amount_depreciation_fund_curr_year", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Gain / Loss"), + "field": "gain_loss", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + { + "title": _("Residual"), + "field": "amount_residual", + "type": "amount", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_right"], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_line_amount_detail_data(self, report_data): + report_data[ + "depreciation_line_amount_detail_data" + ] = self.generate_depreciation_line_amount_detail_data(report_data) + + def generate_depreciation_line_amount_detail_data(self, report_data): + formatd = report_data["formats"] + data = ( + { + "title": _("In Amount - Detail"), + "field": "amount_in_detail", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("Out Amount - Detail"), + "field": "amount_out_detail", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + ) + return {n + 3: d for n, d in enumerate(data)} + + def set_depreciation_line_accounting_doc_data(self, report_data): + report_data[ + "depreciation_line_accounting_doc_data" + ] = self.generate_depreciation_line_accounting_doc_data(report_data) + + def generate_depreciation_line_accounting_doc_data(self, report_data): + formatd = report_data["formats"] + data = ( + { + "title": _("Partner"), + "field": "partner_name", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("VAT"), + "field": "partner_vat", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("Document Nr"), + "field": "document_nr", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("Document Date"), + "field": "document_date", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + { + "title": _("Supplier Ref"), + "field": "partner_ref", + "tstyle": formatd["format_depreciation_year_line_header"], + "vstyle": formatd["format_depreciation_year_line_value_center"], + }, + ) + return {n + 3: d for n, d in enumerate(data)} + + def set_totals_data(self, report_data): + report_data["totals_data"] = self.get_totals_data(report_data) + + def get_totals_data(self, report_data): + data = ( + { + "title": _("Total"), + "field": "name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Type"), + "field": "type_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Amount"), + "field": "amount_depreciable_updated", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("In Amount"), + "field": "amount_in_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Out Amount"), + "field": "amount_out_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Prev. Year Dep. Fund"), + "field": "amount_depreciation_fund_prev_year", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Depreciation"), + "field": "amount_depreciated", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Curr. Year Dep. Fund"), + "field": "amount_depreciation_fund_curr_year", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Gain / Loss"), + "field": "gain_loss_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Residual"), + "field": "amount_residual", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return {n: d for n, d in enumerate(data)} + + def _set_column_width(self, report_data): + """Override to force every column to width 25 at least""" + max_width = self.get_max_width_dict(report_data) + for col, width in max_width.items(): + report_data["sheet"].set_column(col, col, max(width, 25)) + + def get_max_width_dict(self, report_data): + min_col = min( + [ + min(report_data["category_data"].keys()), + min(report_data["asset_data"].keys()), + min(report_data["asset_accounting_doc_data"].keys()), + min(report_data["depreciation_data"].keys()), + min(report_data["depreciation_line_year_data"].keys()), + min(report_data["depreciation_line_amount_detail_data"].keys()), + min(report_data["depreciation_line_accounting_doc_data"].keys()), + min(report_data["totals_data"].keys()), + ] + ) + max_col = max( + [ + max(report_data["category_data"].keys()), + max(report_data["asset_data"].keys()), + max(report_data["asset_accounting_doc_data"].keys()), + max(report_data["depreciation_data"].keys()), + max(report_data["depreciation_line_year_data"].keys()), + max(report_data["depreciation_line_amount_detail_data"].keys()), + max(report_data["depreciation_line_accounting_doc_data"].keys()), + max(report_data["totals_data"].keys()), + ] + ) + + return { + col: max( + [ + report_data["category_data"].get(col, {}).get("width") or 0, + report_data["asset_data"].get(col, {}).get("width") or 0, + report_data["asset_accounting_doc_data"].get(col, {}).get("width") + or 0, + report_data["depreciation_data"].get(col, {}).get("width") or 0, + report_data["depreciation_line_year_data"].get(col, {}).get("width") + or 0, + report_data["depreciation_line_amount_detail_data"] + .get(col, {}) + .get("width") + or 0, + report_data["depreciation_line_accounting_doc_data"] + .get(col, {}) + .get("width") + or 0, + report_data["totals_data"].get(col, {}).get("width") or 0, + ] + ) + for col in range(min_col, max_col + 1) + } + + def _get_report_name(self, report, data=False): + report_name = _("Asset Journal") + return self._get_report_complete_name(report, report_name) + + def _write_report_title(self, title, report_data): + """ + * Overrides standard method * + Writes report title on current line using all defined columns width + """ + report_data["sheet"].merge_range( + report_data["row_pos"], + 0, + report_data["row_pos"] + 1, + 9, + title, + report_data["formats"]["format_title"], + ) + report_data["row_pos"] += 5 + + def _generate_report_content(self, workbook, objects, data, report_data): + """Creates actual xls report""" + report = objects + for categ_section in report.report_category_ids: + self.write_all(report_data, categ_section, "category_data") + + for asset_section in categ_section.report_asset_ids: + self.write_all(report_data, asset_section, "asset_data") + + if asset_section.report_purchase_doc_id: + self.write_all( + report_data, + asset_section.report_purchase_doc_id, + "asset_accounting_doc_data", + ) + + for dep_section in asset_section.report_depreciation_ids: + self.write_all(report_data, dep_section, "depreciation_data") + + self.write_header(report_data, "depreciation_line_year_data") + for year in dep_section.report_depreciation_year_line_ids: + self.write_value( + report_data, year, "depreciation_line_year_data" + ) + if year.has_amount_detail: + self.write_value( + report_data, + year, + "depreciation_line_amount_detail_data", + ) + for doc in year.report_accounting_doc_ids: + self.write_value( + report_data, + doc, + "depreciation_line_accounting_doc_data", + ) + + if asset_section.report_sale_doc_id: + self.write_all( + report_data, + asset_section.report_sale_doc_id, + "asset_accounting_doc_data", + ) + report_data["row_pos"] += 1 + + if report.show_category_totals: + self.write_header(report_data, "totals_data") + for total_section in categ_section.report_total_ids: + self.write_value(report_data, total_section, "totals_data") + report_data["row_pos"] += 1 + + report_data["row_pos"] += 1 + + if report.show_totals: + self.write_header(report_data, "totals_data") + for total_section in report.report_total_ids: + self.write_value(report_data, total_section, "totals_data") + report_data["row_pos"] += 1 + + def _define_formats(self, workbook, report_data): + """Add cell formats to current workbook. + Those formats can be used on all cell. + Available formats are : + * format_bold + * format_right + * format_right_bold_italic + * format_header_left + * format_header_center + * format_header_right + * format_header_amount + * format_amount + * format_percent_bold_italic + """ + currency_id = self.env["res.company"]._default_currency_id() + report_data["formats"] = { + "format_bold": workbook.add_format({"bold": True}), + "format_right": workbook.add_format({"align": "right"}), + "format_left": workbook.add_format({"align": "left"}), + "format_right_bold_italic": workbook.add_format( + {"align": "right", "bold": True, "italic": True} + ), + "format_header_left": workbook.add_format( + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_center": workbook.add_format( + {"bold": True, "align": "center", "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_right": workbook.add_format( + {"bold": True, "align": "right", "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_amount": workbook.add_format( + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ), + "format_amount": workbook.add_format(), + "format_amount_bold": workbook.add_format({"bold": True}).set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ), + "format_percent_bold_italic": workbook.add_format( + {"bold": True, "italic": True} + ), + } + report_data["formats"]["format_amount"].set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ) + report_data["formats"]["format_header_amount"].set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ) + report_data["formats"]["format_percent_bold_italic"].set_num_format("#,##0.00%") + + def write_all(self, report_data, obj, index): + self.write_header(report_data, index) + self.write_value(report_data, obj, index) + + def write_header(self, report_data, index): + pos = report_data["row_pos"] + for col, data in report_data[index].items(): + report_data["sheet"].write(pos, col, data["title"], data["tstyle"]) + report_data["row_pos"] += 1 + + def write_value(self, report_data, obj, index): + pos = report_data["row_pos"] + for col, data in report_data[index].items(): + value, style = getattr(obj, data["field"]), data["vstyle"] + if data.get("type") == "amount": + value = obj.format_amount(value) + if value in (False, None): + value = "/" + report_data["sheet"].write(pos, col, value, style) + report_data["row_pos"] += 1 + + ######################################################## + # # + # UNUSED METHODS, OVERRIDDEN FOR COMPATIBILITY REASONS # + # # + ######################################################## + + def _get_report_filters(self, report): + """Override original method even if not used to avoid errors""" + return [] + + def _get_report_columns(self, report): + """Override original method even if not used to avoid errors""" + return {} + + def _get_col_count_filter_name(self): + """Override original method even if not used to avoid errors""" + + def _get_col_count_filter_value(self): + """Override original method even if not used to avoid errors""" + + def _write_filters(self, filters, data): + """Override original method even if not used to avoid errors""" diff --git a/l10n_it_asset_management/report/asset_previsional.py b/l10n_it_asset_management/report/asset_previsional.py new file mode 100644 index 000000000000..efe2d0e9aabf --- /dev/null +++ b/l10n_it_asset_management/report/asset_previsional.py @@ -0,0 +1,1005 @@ +# Author(s): Silvio Gregorini (silviogregorini@openforce.it) +# Copyright 2019 Openforce Srls Unipersonale (www.openforce.it) +# Copyright 2022 Simone Rubino - TAKOBI +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from collections import OrderedDict + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.fields import Command +from odoo.tools.float_utils import float_is_zero +from odoo.tools.misc import format_amount + + +def format_date(rec, field_name, fmt): + """Formats record's field value according to given format `fmt`""" + if not rec[field_name]: + return "" + return rec._fields[field_name].from_string(rec[field_name]).strftime(fmt) + + +class Report(models.TransientModel): + """ + This report has the following structure: + * Report (which is just a data container) + ** Category + *** Asset + **** Depreciation + ***** Depreciation Line by Year + Each class is set to be linked via a M2O to its parent class, and via + a O2M to its child class. + Each class is linked to Report via `report_id` field. + Asset has a relation to the section Accounting Data which stores + sale/purchase data. + """ + + _name = "report_asset_previsional" + _description = "Report Asset Previsional" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + asset_ids = fields.Many2many( + "asset.asset", + ) + + asset_order_fname = fields.Char() + + category_ids = fields.Many2many( + "asset.category", + ) + + company_id = fields.Many2one( + "res.company", + ) + + date = fields.Date() + + show_totals = fields.Boolean() + + show_category_totals = fields.Boolean() + show_sold_assets = fields.Boolean() + show_dismissed_assets = fields.Boolean() + + type_ids = fields.Many2many( + "asset.depreciation.type", + ) + + # Report structure fields + previsional_line_ids = fields.Many2many("asset.depreciation.line") + + report_category_ids = fields.One2many( + "report_asset_previsional_category", "report_id" + ) + + report_asset_ids = fields.One2many("report_asset_previsional_asset", "report_id") + + report_depreciation_ids = fields.One2many( + "report_asset_previsional_depreciation", "report_id" + ) + + report_depreciation_line_year_ids = fields.One2many( + "report_asset_previsional_depreciation_line_year", "report_id" + ) + + report_total_ids = fields.One2many("report_asset_previsional_totals", "report_id") + + # Fields to be printed + report_footer_year = fields.Char() + report_name = fields.Char() + + ############################ + # # + # REPORT RENDERING METHODS # + # # + ############################ + + def print_report(self, report_type=None): + """ + This method is called from the JS widget buttons 'Print' + and 'Export' in the HTML view. + Prints PDF and XLSX reports. + :param report_type: string that represents the report type + """ + self.ensure_one() + report_type = report_type or "qweb-pdf" + if report_type in ("qweb-pdf", "xlsx", "qweb-html"): + res = self.do_print(report_type) + elif report_type: + raise ValidationError( + _( + "No report has been defined for type `%(report_type)s`.", + report_type=report_type, + ) + ) + else: + raise ValidationError( + _("No report type has been declared for current print.") + ) + return res + + def do_print(self, report_type): + self.ensure_one() + if report_type == "qweb-pdf": + xml_id = "l10n_it_asset_management.report_asset_previsional_pdf" + elif report_type == "qweb-html": + xml_id = "l10n_it_asset_management.report_asset_previsional_html" + else: + xml_id = "l10n_it_asset_management.report_asset_previsional_xlsx" + report = self.env.ref(xml_id) + return report.report_action(self) + + @api.model + def get_html(self, given_context=None): + """Method needed from JavaScript widget to render HTML view""" + context = dict(self.env.context) + context.update(given_context or {}) + report = self or self.browse(context.get("active_id")) + xml_id = "l10n_it_asset_management.template_asset_previsional_report" + + result = {} + if report: + context["o"] = report + result["html"] = self.env.ref(xml_id).render(context) + return result + + ########################### + # # + # REPORT CREATION METHODS # + # # + ########################### + + def compute_data_for_report(self): + """Compute data to be printed""" + self.set_report_name() + self.generate_structure() + self.generate_data() + + def generate_data(self): + self.report_category_ids.generate_data() + self.report_asset_ids.generate_data() + self.report_depreciation_ids.generate_data() + self.report_depreciation_line_year_ids.generate_previsional_lines() + self.report_depreciation_line_year_ids.generate_data() + self.previsional_line_ids.unlink() + self.report_depreciation_line_year_ids.clean_unused() + self.report_category_ids.generate_totals() + self.generate_totals() + + def generate_structure(self): + assets = self.get_assets() + categories = assets.mapped("category_id") + deps = assets.mapped("depreciation_ids") + if self.type_ids: + deps = deps.filtered(lambda d: d.type_id in self.type_ids) + if not (categories and assets and deps): + raise ValidationError( + _("There is nothing to print according to current settings!") + ) + + dep_lines = deps.mapped("line_ids") + if self.date: + dep_lines = dep_lines.filtered(lambda dl: dl.date <= self.date) + + fy_domain = [("company_id", "=", self.company_id.id)] + if self.date: + fy_domain += [("date_from", "<=", self.date)] + # Create an ordered dict where each key is a fiscal year, sorting + # them for starting date => every fiscal year must have its own + # depreciation lines or previsional ones + dep_line_obj = self.env["asset.depreciation.line"] + dep_lines_grouped = { + dep: OrderedDict( + { + fy: dep_line_obj + for fy in self.env["account.fiscal.year"].search( + fy_domain, order="date_from asc" + ) + } + ) + for dep in deps + } + + fiscal_year = self.env["account.fiscal.year"] + for dep_line in dep_lines: + dep = dep_line.depreciation_id + fyear = fiscal_year.get_fiscal_year_by_date( + dep_line.date, company=dep_line.company_id + ) + dep_lines_grouped[dep][fyear] += dep_line + + self.write( + { + "report_category_ids": [ + Command.create({"category_id": c.id, "report_id": self.id}) + for c in categories.sorted("name") + ] + } + ) + for report_categ in self.report_category_ids: + report_categ.write( + { + "report_asset_ids": [ + Command.create({"asset_id": a.id, "report_id": self.id}) + for a in self.sort_assets(assets) + if a.category_id == report_categ.category_id + ] + } + ) + for report_asset in self.report_asset_ids: + report_asset.write( + { + "report_depreciation_ids": [ + Command.create({"depreciation_id": d.id, "report_id": self.id}) + for d in deps + if d.asset_id == report_asset.asset_id + ] + } + ) + for report_dep in self.report_depreciation_ids: + sequence = 0 + for dep, lines_by_fyear in dep_lines_grouped.items(): + if dep == report_dep.depreciation_id: + for fyear, lines in lines_by_fyear.items(): + if fyear.date_to >= dep.date_start: + prev = not lines or not any( + line.move_type == "depreciated" + and not line.partial_dismissal + for line in lines + ) + sequence += 1 + line_ids = lines.ids + report_dep.write( + { + "report_depreciation_year_line_ids": [ + Command.create( + { + "dep_line_ids": [Command.set(line_ids)], + "fiscal_year_id": fyear.id, + "needs_previsional": prev, + "report_id": self.id, + "sequence": sequence, + }, + ) + ] + } + ) + + def generate_totals(self): + curr = self.company_id.currency_id + categ_totals = self.report_category_ids.mapped("report_total_ids") + fnames = self.env["report_asset_previsional_totals"]._total_fnames + totals_by_dep_type = { + t: {fname: 0 for fname in fnames} for t in categ_totals.mapped("type_id") + } + for total in categ_totals: + total_curr = total.get_currency() + total_type = total.type_id + for fname in fnames: + totals_by_dep_type[total_type][fname] += total_curr._convert( + total[fname], curr, self.company_id, self.date + ) + self.write( + { + "report_total_ids": [ + Command.create( + dict( + v, + name=_("General Total"), + type_name=t.name_get()[0][-1], + type_id=t.id, + ), + ) + for t, v in totals_by_dep_type.items() + ] + } + ) + + def get_assets(self): + domain = [] + if self.asset_ids: + domain += [("id", "in", self.asset_ids.ids)] + if self.category_ids: + domain += [("category_id", "in", self.category_ids.ids)] + if self.company_id: + domain += [("company_id", "=", self.company_id.id)] + if self.date: + domain += [("purchase_date", "<=", self.date)] + if not self.show_sold_assets: + domain += [ + "|", + ("sale_date", "=", False), + ("sale_date", ">=", self.date.replace(month=1, day=1)), + ] + if not self.show_dismissed_assets: + domain += [ + "|", + ("dismiss_date", "=", False), + ("dismiss_date", ">=", self.date.replace(month=1, day=1)), + ] + return self.env["asset.asset"].search(domain) + + def set_report_name(self): + report_name = _("Assets Previsional Depreciations ") + if self.date: + report_name += _( + "to date %(to_date)s", + to_date=format_date(self, "date", "%d-%m-%Y"), + ) + self.report_name = report_name.strip() + + def sort_assets(self, assets): + # Divide assets in 'sortable' and 'unsortable' by filtering them upon + # the report's `asset_order_fname`. + # If the given + sortable_assets = assets.filtered(self.asset_order_fname) + unsortable_assets = assets - sortable_assets + sorted_assets = ( + sortable_assets.sorted(self.asset_order_fname) + unsortable_assets.sorted() + ) + return sorted_assets + + +class ReportCategory(models.TransientModel): + _name = "report_asset_previsional_category" + _description = "Report Asset Previsional Category" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + category_id = fields.Many2one("asset.category", ondelete="cascade", required=True) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_previsional", + ) + + report_asset_ids = fields.One2many( + "report_asset_previsional_asset", "report_category_id" + ) + + report_total_ids = fields.One2many( + "report_asset_previsional_totals", "report_category_id" + ) + + # Fields to be printed + category_name = fields.Char() + + def generate_data(self): + for report_categ in self: + report_categ.write(report_categ.get_report_categ_data()) + + def get_report_categ_data(self): + self.ensure_one() + return {"category_name": self.category_id.name} + + def generate_totals(self): + for categ in self: + curr = categ.report_id.company_id.currency_id + report_date = categ.report_id.date + report_deps = categ.report_asset_ids.mapped("report_depreciation_ids") + fnames = categ.env["report_asset_previsional_totals"]._total_fnames + totals_by_dep_type = { + t: {fname: 0 for fname in fnames} + for t in report_deps.mapped("depreciation_id.type_id") + } + for report_dep in report_deps.filtered("report_depreciation_year_line_ids"): + dep_type = report_dep.depreciation_id.type_id + last_line = report_dep.report_depreciation_year_line_ids[-1] + line_curr = last_line.get_currency() + fy_start = last_line.fiscal_year_id.date_from + fy_end = last_line.fiscal_year_id.date_to + for fname in fnames: + if fname == "amount_depreciation_fund_prev_year": + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + elif fy_end < report_date: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line["amount_depreciation_fund_curr_year"], + curr, + categ.report_id.company_id, + report_date, + ) + elif fname in ( + "amount_in_total", + "amount_out_total", + "gain_loss_total", + ): + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + elif report_date < fy_start: + totals_by_dep_type[dep_type][fname] = 0 + elif fname == "amount_depreciated": + if fy_start <= report_date <= fy_end: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + else: + totals_by_dep_type[dep_type][fname] += line_curr._convert( + last_line[fname], + curr, + categ.report_id.company_id, + report_date, + ) + categ.write( + { + "report_total_ids": [ + Command.create( + dict( + v, + name=categ.category_id.name_get()[0][-1], + type_name=t.name_get()[0][-1], + type_id=t.id, + ), + ) + for t, v in totals_by_dep_type.items() + ] + } + ) + + +class ReportAsset(models.TransientModel): + _name = "report_asset_previsional_asset" + _description = "Report Asset Previsional Asset" + _inherit = "report.account_financial_report.abstract_report" + + # Data fields + asset_id = fields.Many2one("asset.asset", ondelete="cascade", required=True) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_previsional", + ) + + report_category_id = fields.Many2one("report_asset_previsional_category") + + report_depreciation_ids = fields.One2many( + "report_asset_previsional_depreciation", "report_asset_id" + ) + + report_purchase_doc_id = fields.Many2one( + "report_asset_previsional_accounting_doc", + ) + + report_sale_doc_id = fields.Many2one( + "report_asset_previsional_accounting_doc", + ) + + # Fields to be printed + asset_code = fields.Char() + asset_name = fields.Char() + asset_purchase_amount = fields.Float() + asset_state = fields.Char() + asset_used = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_asset in self: + report_asset.write(report_asset.get_report_asset_data()) + + def get_currency(self): + self.ensure_one() + return self.asset_id.currency_id + + def get_report_asset_data(self): + self.ensure_one() + asset = self.asset_id + states_dict = dict(asset._fields["state"].selection) + + vals = { + "asset_code": asset.code or "/", + "asset_name": asset.name, + "asset_purchase_amount": asset.purchase_amount, + "asset_state": states_dict.get(asset.state) or _("Unknown"), + "asset_used": _("Used") if asset.used else _("New"), + } + + acc_doc = self.env["report_asset_previsional_accounting_doc"] + purchase_vals = self.get_purchase_vals() + if purchase_vals: + vals.update( + { + "report_purchase_doc_id": acc_doc.create(purchase_vals).id, + } + ) + + sale_vals = self.get_sale_vals() + if sale_vals: + vals.update( + { + "report_sale_doc_id": acc_doc.create(sale_vals).id, + } + ) + + return vals + + def get_purchase_vals(self): + asset = self.asset_id + purchase_vals = { + "partner_name": asset.supplier_id.name or "/", + "partner_vat": asset.supplier_id.vat or "/", + } + + if asset.purchase_date: + purchase_vals["document_date"] = format_date( + asset, "purchase_date", "%d-%m-%Y" + ) + + if asset.supplier_ref: + purchase_vals["partner_ref"] = asset.supplier_ref + elif asset.purchase_move_id.payment_reference: + purchase_vals["partner_ref"] = asset.purchase_move_id.payment_reference + elif asset.purchase_move_id.ref: + purchase_vals["partner_ref"] = asset.purchase_move_id.ref + else: + purchase_vals["partner_ref"] = "/" + + if asset.purchase_move_id: + purchase_vals.update( + { + "document_nr": asset.purchase_move_id.name or "/", + "res_id": asset.purchase_move_id.id, + "res_model": "account.move", + } + ) + else: + purchase_vals.update( + { + "document_nr": "/", + "res_id": asset.id, + "res_model": "asset.asset", + } + ) + + return purchase_vals + + def get_sale_vals(self): + asset = self.asset_id + if not asset.sale_date or asset.sale_date > self.report_id.date: + return {} + + sale_vals = { + "document_date": format_date(asset, "sale_date", "%d-%m-%Y"), + "partner_name": asset.customer_id.name, + "partner_vat": asset.customer_id.vat or "/", + } + + if asset.sale_move_id: + sale_vals.update( + { + "document_nr": asset.sale_move_id.name or "/", + "res_id": asset.sale_move_id.id, + "res_model": "account.move", + } + ) + else: + sale_vals.update( + { + "document_nr": "/", + "res_id": asset.id, + "res_model": "asset.asset", + } + ) + return sale_vals + + +class ReportDepreciation(models.TransientModel): + _name = "report_asset_previsional_depreciation" + _description = "Report Asset Previsional Depreciation" + _inherit = "report.account_financial_report.abstract_report" + _order = "type_name asc" + + # Data fields + depreciation_id = fields.Many2one( + "asset.depreciation", ondelete="cascade", required=True + ) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_previsional", + ) + + report_asset_id = fields.Many2one("report_asset_previsional_asset") + + report_depreciation_year_line_ids = fields.One2many( + "report_asset_previsional_depreciation_line_year", "report_depreciation_id" + ) + + # Fields to be printed + dep_amount_depreciable = fields.Float() + dep_date_start = fields.Char() + dep_percentage = fields.Float() + dep_pro_rata_temporis = fields.Char() + mode_name = fields.Char() + type_name = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_dep in self: + report_dep.write(report_dep.get_report_dep_data()) + + def get_currency(self): + self.ensure_one() + return self.depreciation_id.currency_id + + def get_report_dep_data(self): + self.ensure_one() + dep = self.depreciation_id + if dep.pro_rata_temporis: + dep_pro_rata_temporis = "\u2612" # checked ballot box -> ☒ + else: + dep_pro_rata_temporis = "\u2610" # empty ballot box -> ☐ + + return { + "dep_amount_depreciable": dep.amount_depreciable, + "dep_date_start": format_date(dep, "date_start", "%d-%m-%Y"), + "dep_percentage": dep.percentage, + "dep_pro_rata_temporis": dep_pro_rata_temporis, + "mode_name": dep.mode_id.name_get()[0][-1] if dep.mode_id else "", + "type_name": dep.type_id.name_get()[0][-1] if dep.type_id else "", + } + + +class ReportDepreciationLineByYear(models.TransientModel): + _name = "report_asset_previsional_depreciation_line_year" + _description = "Report Asset Previsional Depreciation Line Year" + _inherit = "report.account_financial_report.abstract_report" + _order = "sequence asc" + + # Data fields + dep_line_ids = fields.Many2many( + "asset.depreciation.line", relation="report_previsional_line_year_dep_line" + ) + + fiscal_year_id = fields.Many2one("account.fiscal.year") + + # Report structure fields + hidden = fields.Boolean() + + report_id = fields.Many2one( + "report_asset_previsional", + ) + + report_depreciation_id = fields.Many2one("report_asset_previsional_depreciation") + + sequence = fields.Integer() + + # Fields to be printed + amount_depreciable = fields.Float() + amount_depreciable_updated = fields.Float() + amount_depreciated = fields.Float() + amount_depreciation_fund_curr_year = fields.Float() + amount_depreciation_fund_prev_year = fields.Float() + amount_gain = fields.Float() + amount_gain_total = fields.Float() + amount_historical = fields.Float() + amount_in = fields.Float() + amount_in_detail = fields.Char() + amount_in_total = fields.Float() + amount_loss = fields.Float() + amount_loss_total = fields.Float() + amount_out = fields.Float() + amount_out_detail = fields.Char() + amount_out_total = fields.Float() + amount_residual = fields.Float() + date_start = fields.Char() + gain_loss = fields.Float() # Needed for the .xls report + gain_loss_total = fields.Float() # Needed for the .xls report + has_amount_detail = fields.Boolean() + needs_previsional = fields.Boolean() + percentage = fields.Float() + year = fields.Char() + type_name = fields.Char() + + def clean_unused(self): + self.filtered(lambda line: line.do_clean()).unlink() + + def do_clean(self): + self.ensure_one() + digits = self.env["decimal.precision"].precision_get("Account") + if ( + not self.dep_line_ids + and float_is_zero(self.amount_residual, digits) + and self.sequence > 1 + ): + previous_line = ( + self.report_depreciation_id.report_depreciation_year_line_ids.filtered( + lambda line: line.sequence == self.sequence - 1 + ) + ) + if float_is_zero(previous_line.amount_residual, digits): + return True + return False + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def generate_data(self): + for report_dep_line_year in self.sorted(): # Force sorting by _order + report_dep_line_year.write( + report_dep_line_year.get_report_dep_line_year_data() + ) + + def get_currency(self): + self.ensure_one() + return self.report_depreciation_id.depreciation_id.currency_id + + def generate_previsional_lines(self): + lines_grouped = dict() + for line in self.filtered("needs_previsional"): + dep = line.report_depreciation_id.depreciation_id + if dep not in lines_grouped: + lines_grouped[dep] = line + else: + lines_grouped[dep] += line + + ctx = dict(force_prorata=True) + for lines in lines_grouped.values(): + lines = lines.sorted() + last_line = lines[-1] + for line in lines - last_line: + line.generate_previsional_line_single() + last_line.with_context(**ctx).generate_previsional_line_single() + + def generate_previsional_line_single(self): + self.ensure_one() + dep = self.report_depreciation_id.depreciation_id + to_date = min(self.fiscal_year_id.date_to, self.report_id.date) + previsional_lines = dep.with_context( + previsional=True + ).generate_depreciation_lines(to_date) + self.dep_line_ids += previsional_lines + self.report_id.previsional_line_ids += previsional_lines + + def get_report_dep_line_year_data(self): + self.ensure_one() + report_dep = self.report_depreciation_id + grouped_amounts = self.dep_line_ids.get_balances_grouped() + + amount_depreciable = report_dep.dep_amount_depreciable + amount_gain = grouped_amounts.get("gain") or 0.0 + amount_gain_total = amount_gain + amount_historical = abs(grouped_amounts.get("historical") or 0.0) + amount_in = abs(grouped_amounts.get("in") or 0.0) + amount_in_total = amount_in + amount_loss = grouped_amounts.get("loss") or 0.0 + amount_loss_total = amount_loss + amount_out = abs(grouped_amounts.get("out") or 0.0) + amount_out_total = amount_out + gain_loss = amount_gain + amount_loss + gain_loss_total = gain_loss + + amount_depreciated = sum( + [ + line.amount + for line in self.dep_line_ids.filtered( + lambda line: line.move_type == "depreciated" + and not line.partial_dismissal + ) + ] + ) + amount_dismissal = sum( + [ + line.amount + for line in self.dep_line_ids.filtered( + lambda line: line.move_type == "depreciated" + and line.partial_dismissal + ) + ] + ) + + prev_year_line = report_dep.report_depreciation_year_line_ids.filtered( + lambda line: line.sequence == self.sequence - 1 + ) + asset = self.report_depreciation_id.report_asset_id.asset_id + fy_start = self.fiscal_year_id.date_from + fy_end = self.fiscal_year_id.date_to + if ( + asset.sold and asset.sale_date and fy_start <= asset.sale_date <= fy_end + ) or ( + asset.dismissed + and asset.dismiss_date + and fy_start <= asset.dismiss_date <= fy_end + ): + amount_depreciable_upd = 0.0 + depreciation_fund_curr_year = 0.0 + amount_residual = 0.0 + if prev_year_line: + depreciation_fund_prev_year = ( + prev_year_line.amount_depreciation_fund_curr_year + ) + amount_in_total += prev_year_line.amount_in_total + amount_out_total += prev_year_line.amount_out_total + else: + depreciation_fund_prev_year = 0.0 + else: + if prev_year_line: + depreciation_fund_prev_year = ( + prev_year_line.amount_depreciation_fund_curr_year + ) + prev_year_resid = prev_year_line.amount_residual + amount_depreciable_upd = ( + prev_year_line.amount_depreciable_updated + amount_in - amount_out + ) + amount_in_total += prev_year_line.amount_in_total + amount_out_total += prev_year_line.amount_out_total + else: + depreciation_fund_prev_year = 0.0 + prev_year_resid = amount_depreciable + amount_depreciable_upd = amount_depreciable + amount_in - amount_out + + depreciation_fund_curr_year = ( + depreciation_fund_prev_year + amount_depreciated + amount_dismissal + ) + amount_residual = ( + prev_year_resid + + amount_in + - amount_out + - amount_depreciated + - amount_dismissal + ) + if prev_year_line: + amount_gain_total += prev_year_line.amount_gain_total + amount_loss_total += prev_year_line.amount_loss_total + gain_loss_total += prev_year_line.gain_loss_total + + type_mapping = {"in": {}, "out": {}} + for dep_line in self.dep_line_ids.filtered( + lambda line: line.move_type in ("in", "out") + and line.depreciation_line_type_id + ): + dep_type = dep_line.depreciation_line_type_id + if dep_type not in type_mapping[dep_line.move_type]: + type_mapping[dep_line.move_type][dep_type] = 0 + type_mapping[dep_line.move_type][dep_type] += dep_line.amount + + amount_in_detail = amount_out_detail = "" + has_amount_detail = False + if type_mapping["in"]: + amount_in_detail = "; ".join( + [ + f"{dep_type.name}: {self.format_amount(amount)}" + for dep_type, amount in sorted(list(type_mapping["in"].items())) + ] + ) + has_amount_detail = True + if type_mapping["out"]: + amount_out_detail = "; ".join( + [ + f"{dep_type.name}: {self.format_amount(amount)}" + for dep_type, amount in sorted(list(type_mapping["out"].items())) + ] + ) + has_amount_detail = True + + start = fields.Date.from_string(self.fiscal_year_id.date_from).year + end = fields.Date.from_string(self.fiscal_year_id.date_to).year + if start == end: + year = str(start) + else: + year = f"{start} - {end}" + + return { + "amount_depreciable": amount_depreciable, + "amount_depreciable_updated": amount_depreciable_upd, + "amount_depreciated": amount_depreciated, + "amount_depreciation_fund_curr_year": depreciation_fund_curr_year, + "amount_depreciation_fund_prev_year": depreciation_fund_prev_year, + "amount_gain": amount_gain, + "amount_historical": amount_historical, + "amount_in": amount_in, + "amount_in_detail": amount_in_detail, + "amount_in_total": amount_in_total, + "amount_loss": amount_loss, + "amount_out": amount_out, + "amount_out_detail": amount_out_detail, + "amount_out_total": amount_out_total, + "amount_residual": amount_residual, + "date_start": report_dep.dep_date_start, + "gain_loss": gain_loss, + "gain_loss_total": gain_loss_total, + "has_amount_detail": has_amount_detail, + "percentage": report_dep.dep_percentage, + "type_name": report_dep.type_name, + "year": year, + } + + +class ReportAccountingDoc(models.TransientModel): + _name = "report_asset_previsional_accounting_doc" + _description = "Report Asset Previsional Accounting Doc" + _inherit = "report.account_financial_report.abstract_report" + _order = "sequence asc" + + # Report structure fields + report_id = fields.Many2one( + "report_asset_previsional", + ) + + # Fields to be printed + document_date = fields.Char() + document_nr = fields.Char() + partner_name = fields.Char() + partner_ref = fields.Char() + partner_vat = fields.Char() + res_id = fields.Integer() + res_model = fields.Char() + sequence = fields.Integer() + + +class ReportTotals(models.TransientModel): + _name = "report_asset_previsional_totals" + _description = "Report Asset Previsional Totals" + _inherit = "report.account_financial_report.abstract_report" + _total_fnames = [ + "amount_depreciable_updated", + "amount_depreciated", + "amount_depreciation_fund_curr_year", + "amount_depreciation_fund_prev_year", + "amount_gain", + "amount_in_total", + "amount_loss", + "amount_out_total", + "amount_residual", + "gain_loss_total", + ] + + # Data fields + type_id = fields.Many2one( + "asset.depreciation.type", + ) + + # Report structure fields + report_id = fields.Many2one( + "report_asset_previsional", + ) + + report_category_id = fields.Many2one("report_asset_previsional_category") + + # Fields to be printed + amount_depreciable_updated = fields.Float() + amount_depreciated = fields.Float() + amount_depreciation_fund_curr_year = fields.Float() + amount_depreciation_fund_prev_year = fields.Float() + amount_gain = fields.Float() + amount_in_total = fields.Float() + amount_loss = fields.Float() + amount_out_total = fields.Float() + amount_residual = fields.Float() + gain_loss = fields.Float() # Needed for the .xls report + gain_loss_total = fields.Float() # Needed for the .xls report + name = fields.Char() # Needed for the .xls report + type_name = fields.Char() + + def format_amount(self, amount, currency=None): + self.ensure_one() + currency = currency or self.get_currency() + return format_amount(self.env, amount, currency) + + def get_currency(self): + self.ensure_one() + report = self.report_id or self.report_category_id.report_id + return report.company_id.currency_id diff --git a/l10n_it_asset_management/report/asset_previsional_xlsx.py b/l10n_it_asset_management/report/asset_previsional_xlsx.py new file mode 100644 index 000000000000..c81c341bfbc6 --- /dev/null +++ b/l10n_it_asset_management/report/asset_previsional_xlsx.py @@ -0,0 +1,710 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import _, models + +_logger = logging.getLogger(__name__) + + +class AssetJournalXslx(models.AbstractModel): + _name = "report.l10n_it_asset_management.report_asset_previsional_xlsx" + _description = "Report Asset Previsional Xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" + + def generate_xlsx_report(self, workbook, data, objects): + """Set wb, data and report attributes""" + # Initialize report variables + report_data = { + "workbook": None, + "sheet": None, # main sheet which will contains report + "columns": None, # columns of the report + "row_pos": None, # row_pos must be incremented at each writing lines + "formats": None, + } + report_name = self._get_report_name(objects, data=data) + report_data["workbook"] = workbook + report_data["sheet"] = workbook.add_worksheet(report_name[:31]) + report_data["row_pos"] = 0 + self._define_formats(workbook, report_data) + self.set_formats(workbook, report_data) + self.set_report_data(report_data) + + # Get report data + + report_footer = self._get_report_footer() + filters = self._get_report_filters(objects) + report_data["columns"] = self._get_report_columns(objects) + self._set_column_width(report_data) + # Fill report + self._write_report_title(report_name, report_data) + self._write_filters(filters, report_data) + self._generate_report_content(workbook, objects, data, report_data) + self._write_report_footer(report_footer, report_data) + + def set_formats(self, workbook, report_data): + """Defines custom formats""" + + # 1- Category formats + report_data["formats"]["format_category_name"] = workbook.add_format( + { + "align": "center", + "bg_color": "#337AB7", + "bold": True, + "font_color": "#FFFFFF", + "font_size": 16, + } + ) + + # 2- Asset formats + report_data["formats"]["format_asset_header"] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_color": "#337AB7", + "font_size": 14, + } + ) + report_data["formats"]["format_asset_value"] = workbook.add_format( + { + "align": "center", + "font_color": "#337AB7", + "font_size": 14, + } + ) + + # 3- Depreciations formats + report_data["formats"]["format_depreciation_header"] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_size": 12, + } + ) + + report_data["formats"]["format_depreciation_value"] = workbook.add_format( + { + "align": "center", + "font_size": 12, + } + ) + + # 4- Depreciation yearly and amount details formats + report_data["formats"][ + "format_depreciation_year_line_header" + ] = workbook.add_format( + { + "align": "center", + "bold": True, + "font_size": 12, + } + ) + + report_data["formats"][ + "format_depreciation_year_line_value_center" + ] = workbook.add_format( + { + "align": "center", + "font_size": 12, + } + ) + + report_data["formats"][ + "format_depreciation_year_line_value_right" + ] = workbook.add_format( + { + "align": "right", + "font_size": 12, + } + ) + + # 5- Report title + report_data["formats"]["format_title"] = workbook.add_format( + { + "align": "center", + "bg_color": "#337AB7", + "bold": True, + "font_color": "white", + "font_size": 20, + } + ) + + def set_report_data(self, report_data): + self.set_category_data(report_data) + self.set_asset_data(report_data) + self.set_asset_accounting_doc_data(report_data) + self.set_depreciation_data(report_data) + self.set_depreciation_line_year_data(report_data) + self.set_depreciation_line_amount_detail_data(report_data) + self.set_totals_data(report_data) + + def set_category_data(self, report_data): + report_data["category_data"] = self.generate_category_data(report_data) + + def generate_category_data(self, report_data): + data = ( + { + "title": _("Category"), + "field": "category_name", + "tstyle": report_data["formats"]["format_category_name"], + "vstyle": report_data["formats"]["format_category_name"], + }, + ) + return dict(enumerate(data)) + + def set_asset_data(self, report_data): + report_data["asset_data"] = self.generate_asset_data(report_data) + + def generate_asset_data(self, report_data): + data = ( + { + "title": _("Asset"), + "field": "asset_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Code"), + "field": "asset_code", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Purchase Amount"), + "field": "asset_purchase_amount", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Purchased as New / Used"), + "field": "asset_used", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Status"), + "field": "asset_state", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return dict(enumerate(data)) + + def set_asset_accounting_doc_data(self, report_data): + report_data[ + "asset_accounting_doc_data" + ] = self.generate_asset_accounting_doc_data(report_data) + + def generate_asset_accounting_doc_data(self, report_data): + data = ( + { + "title": _("Partner"), + "field": "partner_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("VAT"), + "field": "partner_vat", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Document Nr"), + "field": "document_nr", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Document Date"), + "field": "document_date", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Supplier Ref"), + "field": "partner_ref", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_data(self, report_data): + report_data["depreciation_data"] = self.generate_depreciation_data(report_data) + + def generate_depreciation_data(self, report_data): + data = ( + { + "title": _("Depreciation Type"), + "field": "type_name", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Depreciation Mode"), + "field": "mode_name", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Initial Depreciable Amount"), + "field": "dep_amount_depreciable", + "type": "amount", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Starting From"), + "field": "dep_date_start", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Dep. Percentage (%)"), + "field": "dep_percentage", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + { + "title": _("Pro Rata Temporis"), + "field": "dep_pro_rata_temporis", + "tstyle": report_data["formats"]["format_depreciation_header"], + "vstyle": report_data["formats"]["format_depreciation_value"], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_line_year_data(self, report_data): + report_data[ + "depreciation_line_year_data" + ] = self.generate_depreciation_line_year_data(report_data) + + def generate_depreciation_line_year_data(self, report_data): + data = ( + { + "title": _("Year"), + "field": "year", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_center" + ], + }, + { + "title": _("Amount"), + "field": "amount_depreciable_updated", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("In Amount"), + "field": "amount_in", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Out Amount"), + "field": "amount_out", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Prev. Year Dep. Fund"), + "field": "amount_depreciation_fund_prev_year", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Depreciation"), + "field": "amount_depreciated", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Curr. Year Dep. Fund"), + "field": "amount_depreciation_fund_curr_year", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Gain / Loss"), + "field": "gain_loss", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + { + "title": _("Residual"), + "field": "amount_residual", + "type": "amount", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_right" + ], + }, + ) + return {n + 1: d for n, d in enumerate(data)} + + def set_depreciation_line_amount_detail_data(self, report_data): + report_data[ + "depreciation_line_amount_detail_data" + ] = self.generate_depreciation_line_amount_detail_data(report_data) + + def generate_depreciation_line_amount_detail_data(self, report_data): + data = ( + { + "title": _("In Amount - Detail"), + "field": "amount_in_detail", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_center" + ], + }, + { + "title": _("Out Amount - Detail"), + "field": "amount_out_detail", + "tstyle": report_data["formats"][ + "format_depreciation_year_line_header" + ], + "vstyle": report_data["formats"][ + "format_depreciation_year_line_value_center" + ], + }, + ) + return {n + 3: d for n, d in enumerate(data)} + + def set_totals_data(self, report_data): + report_data["totals_data"] = self.get_totals_data(report_data) + + def get_totals_data(self, report_data): + data = ( + { + "title": _("Total"), + "field": "name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Type"), + "field": "type_name", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Amount"), + "field": "amount_depreciable_updated", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("In Amount"), + "field": "amount_in_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Out Amount"), + "field": "amount_out_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Prev. Year Dep. Fund"), + "field": "amount_depreciation_fund_prev_year", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Depreciation"), + "field": "amount_depreciated", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Curr. Year Dep. Fund"), + "field": "amount_depreciation_fund_curr_year", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Gain / Loss"), + "field": "gain_loss_total", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + { + "title": _("Residual"), + "field": "amount_residual", + "type": "amount", + "tstyle": report_data["formats"]["format_asset_header"], + "vstyle": report_data["formats"]["format_asset_value"], + }, + ) + return {n: d for n, d in enumerate(data)} + + def _set_column_width(self, report_data): + """Override to force every column to width 25 at least""" + max_width = self.get_max_width_dict(report_data) + for col, width in max_width.items(): + report_data["sheet"].set_column(col, col, max(width, 25)) + + def get_max_width_dict(self, report_data): + min_col = min( + [ + min(report_data["category_data"].keys()), + min(report_data["asset_data"].keys()), + min(report_data["asset_accounting_doc_data"].keys()), + min(report_data["depreciation_data"].keys()), + min(report_data["depreciation_line_year_data"].keys()), + min(report_data["depreciation_line_amount_detail_data"].keys()), + min(report_data["totals_data"].keys()), + ] + ) + max_col = max( + [ + max(report_data["category_data"].keys()), + max(report_data["asset_data"].keys()), + max(report_data["asset_accounting_doc_data"].keys()), + max(report_data["depreciation_data"].keys()), + max(report_data["depreciation_line_year_data"].keys()), + max(report_data["depreciation_line_amount_detail_data"].keys()), + max(report_data["totals_data"].keys()), + ] + ) + + return { + col: max( + [ + report_data["category_data"].get(col, {}).get("width") or 0, + report_data["asset_data"].get(col, {}).get("width") or 0, + report_data["asset_accounting_doc_data"].get(col, {}).get("width") + or 0, + report_data["depreciation_data"].get(col, {}).get("width") or 0, + report_data["depreciation_line_year_data"].get(col, {}).get("width") + or 0, + report_data["depreciation_line_amount_detail_data"] + .get(col, {}) + .get("width") + or 0, + report_data["totals_data"].get(col, {}).get("width") or 0, + ] + ) + for col in range(min_col, max_col + 1) + } + + def _get_report_name(self, report, data=False): + """ + * Overrides standard method * + Returns name for both sheet and report title + """ + return self._get_report_complete_name(report, report.report_name) + + def _write_report_title(self, title, report_data): + """ + * Overrides standard method * + Writes report title on current line using all defined columns width + """ + report_data["sheet"].merge_range( + report_data["row_pos"], + 0, + report_data["row_pos"] + 1, + 9, + title, + report_data["formats"]["format_title"], + ) + report_data["row_pos"] += 5 + + def _generate_report_content(self, workbook, objects, data, report_data): + """Creates actual xls report""" + report = objects + for categ_section in report.report_category_ids: + self.write_all(report_data, categ_section, "category_data") + + for asset_section in categ_section.report_asset_ids: + self.write_all(report_data, asset_section, "asset_data") + + if asset_section.report_purchase_doc_id: + self.write_all( + report_data, + asset_section.report_purchase_doc_id, + "asset_accounting_doc_data", + ) + + for dep_section in asset_section.report_depreciation_ids: + self.write_all(report_data, dep_section, "depreciation_data") + + self.write_header(report_data, "depreciation_line_year_data") + for year in dep_section.report_depreciation_year_line_ids: + self.write_value( + report_data, year, "depreciation_line_year_data" + ) + if year.has_amount_detail: + self.write_value( + report_data, + year, + "depreciation_line_amount_detail_data", + ) + + if asset_section.report_sale_doc_id: + self.write_all( + report_data, + asset_section.report_sale_doc_id, + "asset_accounting_doc_data", + ) + report_data["row_pos"] += 1 + + if report.show_category_totals: + self.write_header(report_data, "totals_data") + for total_section in categ_section.report_total_ids: + self.write_value(report_data, total_section, "totals_data") + report_data["row_pos"] += 1 + + report_data["row_pos"] += 1 + + if report.show_totals: + self.write_header(report_data, "totals_data") + for total_section in report.report_total_ids: + self.write_value(report_data, total_section, "totals_data") + report_data["row_pos"] += 1 + + def _define_formats(self, workbook, report_data): + """Add cell formats to current workbook. + Those formats can be used on all cell. + Available formats are : + * format_bold + * format_right + * format_right_bold_italic + * format_header_left + * format_header_center + * format_header_right + * format_header_amount + * format_amount + * format_percent_bold_italic + """ + currency_id = self.env["res.company"]._default_currency_id() + report_data["formats"] = { + "format_bold": workbook.add_format({"bold": True}), + "format_right": workbook.add_format({"align": "right"}), + "format_left": workbook.add_format({"align": "left"}), + "format_right_bold_italic": workbook.add_format( + {"align": "right", "bold": True, "italic": True} + ), + "format_header_left": workbook.add_format( + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_center": workbook.add_format( + {"bold": True, "align": "center", "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_right": workbook.add_format( + {"bold": True, "align": "right", "border": True, "bg_color": "#FFFFCC"} + ), + "format_header_amount": workbook.add_format( + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ), + "format_amount": workbook.add_format(), + "format_amount_bold": workbook.add_format({"bold": True}).set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ), + "format_percent_bold_italic": workbook.add_format( + {"bold": True, "italic": True} + ), + } + report_data["formats"]["format_amount"].set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ) + report_data["formats"]["format_header_amount"].set_num_format( + "#,##0." + "0" * currency_id.decimal_places + ) + report_data["formats"]["format_percent_bold_italic"].set_num_format("#,##0.00%") + + def write_all(self, report_data, obj, index): + self.write_header(report_data, index) + self.write_value(report_data, obj, index) + + def write_header(self, report_data, index): + pos = report_data["row_pos"] + for col, data in report_data[index].items(): + report_data["sheet"].write(pos, col, data["title"], data["tstyle"]) + report_data["row_pos"] += 1 + + def write_value(self, report_data, obj, index): + pos = report_data["row_pos"] + for col, data in report_data[index].items(): + value, style = getattr(obj, data["field"]), data["vstyle"] + if data.get("type") == "amount": + value = obj.format_amount(value) + if value in (False, None): + value = "/" + report_data["sheet"].write(pos, col, value, style) + report_data["row_pos"] += 1 + + ######################################################## + # # + # UNUSED METHODS, OVERRIDDEN FOR COMPATIBILITY REASONS # + # # + ######################################################## + + def _get_report_filters(self, report): + """Override original method even if not used to avoid errors""" + return [] + + def _get_report_columns(self, report): + """Override original method even if not used to avoid errors""" + return {} + + def _get_col_count_filter_name(self): + """Override original method even if not used to avoid errors""" + + def _get_col_count_filter_value(self): + """Override original method even if not used to avoid errors""" + + def _write_filters(self, filters, data): + """Override original method even if not used to avoid errors""" diff --git a/l10n_it_asset_management/report/layout.xml b/l10n_it_asset_management/report/layout.xml new file mode 100644 index 000000000000..9c0d43d38b51 --- /dev/null +++ b/l10n_it_asset_management/report/layout.xml @@ -0,0 +1,72 @@ + + + + + + + diff --git a/l10n_it_asset_management/report/paperformat.xml b/l10n_it_asset_management/report/paperformat.xml new file mode 100644 index 000000000000..d681fa780b33 --- /dev/null +++ b/l10n_it_asset_management/report/paperformat.xml @@ -0,0 +1,34 @@ + + + + + Assets Journal Report A4 Landscape + A4 + 0 + 0 + Landscape + 40 + 15 + 5 + 5 + + 35 + 90 + + + + Assets Previsional Report A4 Landscape + A4 + 0 + 0 + Landscape + 40 + 15 + 5 + 5 + + 35 + 90 + + + diff --git a/l10n_it_asset_management/report/reports.xml b/l10n_it_asset_management/report/reports.xml new file mode 100644 index 000000000000..669e014a259a --- /dev/null +++ b/l10n_it_asset_management/report/reports.xml @@ -0,0 +1,91 @@ + + + + Asset Report HTML + report_asset_journal + qweb-html + + l10n_it_asset_management.template_asset_journal_qweb + l10n_it_asset_management.template_asset_journal_html + + + + Asset Report PDF + report_asset_journal + qweb-pdf + + l10n_it_asset_management.template_asset_journal_qweb + l10n_it_asset_management.template_asset_journal_qweb + + + + Asset Report XLSX + report_asset_journal + xlsx + l10n_it_asset_management.report_asset_journal_xlsx + l10n_it_asset_management.report_asset_journal_xlsx + + + + Asset Previsional Report HTML + report_asset_previsional + qweb-html + + l10n_it_asset_management.template_asset_previsional_qweb + l10n_it_asset_management.template_asset_previsional_html + + + + Asset Previsional Report PDF + report_asset_previsional + qweb-pdf + + l10n_it_asset_management.template_asset_previsional_qweb + l10n_it_asset_management.template_asset_previsional_qweb + + + + Asset Previsional Report XLSX + report_asset_previsional + xlsx + l10n_it_asset_management.report_asset_previsional_xlsx + l10n_it_asset_management.report_asset_previsional_xlsx + + + diff --git a/l10n_it_asset_management/report/templates/asset_journal.xml b/l10n_it_asset_management/report/templates/asset_journal.xml new file mode 100644 index 000000000000..68eac8be4438 --- /dev/null +++ b/l10n_it_asset_management/report/templates/asset_journal.xml @@ -0,0 +1,1018 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_it_asset_management/report/templates/asset_previsional.xml b/l10n_it_asset_management/report/templates/asset_previsional.xml new file mode 100644 index 000000000000..05bacf351dac --- /dev/null +++ b/l10n_it_asset_management/report/templates/asset_previsional.xml @@ -0,0 +1,895 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_it_asset_management/security/ir.model.access.csv b/l10n_it_asset_management/security/ir.model.access.csv new file mode 100644 index 000000000000..1907ba458c7e --- /dev/null +++ b/l10n_it_asset_management/security/ir.model.access.csv @@ -0,0 +1,30 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +asset_user,asset_user,model_asset_asset,group_asset_user,1,1,1,1 +asset_accounting_info_user,asset_accounting_info_user,model_asset_accounting_info,group_asset_user,1,1,1,1 +asset_category_user,asset_category_user,model_asset_category,group_asset_user,1,1,1,1 +asset_category_depreciation_type_user,asset_category_depreciation_type_user,model_asset_category_depreciation_type,group_asset_user,1,1,1,1 +asset_depreciation_user,asset_depreciation_user,model_asset_depreciation,group_asset_user,1,1,1,1 +asset_depreciation_line_user,asset_depreciation_line_user,model_asset_depreciation_line,group_asset_user,1,1,1,1 +asset_depreciation_line_type_user,asset_depreciation_line_type_user,model_asset_depreciation_line_type,group_asset_user,1,1,1,1 +asset_depreciation_mode_user,asset_depreciation_mode_user,model_asset_depreciation_mode,group_asset_user,1,1,1,1 +asset_depreciation_mode_line_user,asset_depreciation_mode_line_user,model_asset_depreciation_mode_line,group_asset_user,1,1,1,1 +asset_depreciation_type_user,asset_depreciation_type_user,model_asset_depreciation_type,group_asset_user,1,1,1,1 +asset_tag_user,asset_tag_user,model_asset_tag,group_asset_user,1,1,1,1 +asset_generate_depreciation_user,asset_generate_depreciation_user,model_wizard_asset_generate_depreciation,group_asset_user,1,1,1,1 +asset_journal_report,asset_journal_report,model_wizard_asset_journal_report,group_asset_user,1,1,1,1 +asset_previsional_report,asset_previsional_report,model_wizard_asset_previsional_report,group_asset_user,1,1,1,1 +asset_report_asset_journal,asset_report_asset_journal,model_report_asset_journal,group_asset_user,1,1,1,1 +asset_report_asset_journal_category,asset_report_asset_journal_category,model_report_asset_journal_category,group_asset_user,1,1,1,1 +asset_report_asset_journal_asset,asset_report_asset_journal_asset,model_report_asset_journal_asset,group_asset_user,1,1,1,1 +asset_report_asset_journal_depreciation,asset_report_asset_journal_depreciation,model_report_asset_journal_depreciation,group_asset_user,1,1,1,1 +asset_report_asset_journal_depreciation_line_year,asset_report_asset_journal_depreciation_line_year,model_report_asset_journal_depreciation_line_year,group_asset_user,1,1,1,1 +asset_report_asset_journal_accounting_doc,asset_report_asset_journal_accounting_doc,model_report_asset_journal_accounting_doc,group_asset_user,1,1,1,1 +asset_report_asset_journal_totals,asset_report_asset_journal_totals,model_report_asset_journal_totals,group_asset_user,1,1,1,1 +asset_report_asset_previsional,asset_report_asset_previsional,model_report_asset_previsional,group_asset_user,1,1,1,1 +asset_report_asset_previsional_category,asset_report_asset_previsional_category,model_report_asset_previsional_category,group_asset_user,1,1,1,1 +asset_report_asset_previsional_asset,asset_report_asset_previsional_asset,model_report_asset_previsional_asset,group_asset_user,1,1,1,1 +asset_report_asset_previsional_depreciation,asset_report_asset_previsional_depreciation,model_report_asset_previsional_depreciation,group_asset_user,1,1,1,1 +asset_report_asset_previsional_depreciation_line_year,asset_report_asset_previsional_depreciation_line_year,model_report_asset_previsional_depreciation_line_year,group_asset_user,1,1,1,1 +asset_report_asset_previsional_accounting_doc,asset_report_asset_previsional_accounting_doc,model_report_asset_previsional_accounting_doc,group_asset_user,1,1,1,1 +asset_report_asset_previsional_totals,asset_report_asset_previsional_totals,model_report_asset_previsional_totals,group_asset_user,1,1,1,1 +asset_wizard_account_move_manage_asset,asset_wizard_account_move_manage_asset,model_wizard_account_move_manage_asset,group_asset_user,1,1,1,1 diff --git a/l10n_it_asset_management/security/res_groups.xml b/l10n_it_asset_management/security/res_groups.xml new file mode 100644 index 000000000000..c578c81c7543 --- /dev/null +++ b/l10n_it_asset_management/security/res_groups.xml @@ -0,0 +1,18 @@ + + + + + + Asset Users + + + + + + + + + diff --git a/l10n_it_asset_management/security/rules.xml b/l10n_it_asset_management/security/rules.xml new file mode 100644 index 000000000000..801dd5927277 --- /dev/null +++ b/l10n_it_asset_management/security/rules.xml @@ -0,0 +1,107 @@ + + + + + + Asset multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset accounting info multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset category multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset category dep type multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation line multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation line type multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation mode multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation mode line multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset depreciation type multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Asset tag multi company rule + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + diff --git a/l10n_it_asset_management/static/description/icon.png b/l10n_it_asset_management/static/description/icon.png new file mode 100644 index 000000000000..b9c8a51fbc3d Binary files /dev/null and b/l10n_it_asset_management/static/description/icon.png differ diff --git a/l10n_it_asset_management/static/description/index.html b/l10n_it_asset_management/static/description/index.html new file mode 100644 index 000000000000..16bd08fd8890 --- /dev/null +++ b/l10n_it_asset_management/static/description/index.html @@ -0,0 +1,455 @@ + + + + + +ITA - Gestione Cespiti + + + +
+

ITA - Gestione Cespiti

+ + +

Beta License: AGPL-3 OCA/l10n-italy Translate me on Weblate Try me on Runboat

+

This modules allows account management of companies’ assets.

+

Table of contents

+ +
+

Usage

+

English

+

You can create and manage assets from accounting section of Odoo.

+

Configuration must be done from Assets -> Assets Configuration, where +depreciation types, modes and assets categories can be found.

+

Assets can both be created manually or via invoices and journal entries. +Depreciations can be generated by using the related wizard found in +Assets -> Assets Management -> Generate Depreciations, or by triggering +the same wizard from a single asset form view.

+

Italiano

+

È possibile creare e gestire cespiti dalla sezione contabilità di Odoo.

+

La configurazione dei cespiti dev’essere fatta andando in Cespiti -> +Configurazione Cespiti, dove si trovano le categorie dei beni, i tipi e +le modalità di ammortamento.

+

I cespiti possono essere creati manualmente o da fatture e registrazioni +contabili. Gli ammortamenti possono essere generati utilizzando +l’apposito wizard in Cespiti -> Gestione Cestpiti -> Genera +Ammortamenti, o aprendo quello stesso wizard dalla scheda del cespite.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Openforce
  • +
+
+
+

Contributors

+ +

Base icon made by surang +from www.flaticon.com.

+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/l10n-italy project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/l10n_it_asset_management/static/src/css/report.css b/l10n_it_asset_management/static/src/css/report.css new file mode 100644 index 000000000000..bb233d6da63d --- /dev/null +++ b/l10n_it_asset_management/static/src/css/report.css @@ -0,0 +1,92 @@ +.act_as_table { + display: table !important; + background-color: white; +} +.act_as_row { + display: table-row !important; + page-break-inside: avoid; +} +.act_as_cell { + display: table-cell !important; + page-break-inside: avoid; +} +.act_as_thead { + display: table-header-group !important; +} +.act_as_tbody { + display: table-row-group !important; +} +.list_table, +.data_table { + width: 100% !important; +} +.act_as_row.labels { + background-color: #f0f0f0 !important; +} +.list_table, +.data_table, +.list_table .act_as_row { + border-left: 0; + border-right: 0; + text-align: center; + font-size: 10px; + padding: 2px 3px; + border-collapse: collapse; +} +.list_table .act_as_row.labels, +.list_table .act_as_row.initial_balance, +.list_table .act_as_row.lines { + border-color: grey !important; + border-bottom: 1px solid lightGrey !important; +} +.data_table .act_as_cell { + border: 1px solid lightGrey; + text-align: center; +} +.data_table .act_as_cell, +.list_table .act_as_cell, +.totals_table .act_as_cell { + word-wrap: break-word; +} +.data_table .act_as_row.labels, +.totals_table .act_as_row.labels { + font-weight: bold; +} +.initial_balance .act_as_cell { + font-style: italic; +} +.account_title { + font-size: 11px; + font-weight: bold; +} +.account_title.labels { + background-color: #f0f0f0 !important; +} +.act_as_cell.amount { + word-wrap: normal; + text-align: right; +} +.act_as_cell.left { + text-align: left; +} +.act_as_cell.right { + text-align: right; +} +.list_table .act_as_cell { + /* border-right:1px solid lightGrey; uncomment to active column lines */ +} +.list_table .act_as_cell.first_column { + padding-left: 0; + /* border-left:1px solid lightGrey; uncomment to active column lines */ +} +.custom_footer { + font-size: 7px !important; +} + +.o_account_financial_reports_page { + padding-top: 10px; + width: 90%; + margin-right: auto; + margin-left: auto; + font-family: Helvetica, Arial, serif; +} diff --git a/l10n_it_asset_management/static/src/js/report_action.esm.js b/l10n_it_asset_management/static/src/js/report_action.esm.js new file mode 100644 index 000000000000..7976aba10666 --- /dev/null +++ b/l10n_it_asset_management/static/src/js/report_action.esm.js @@ -0,0 +1,40 @@ +/** @odoo-module **/ +import {ReportAction} from "@web/webclient/actions/reports/report_action"; +import {patch} from "web.utils"; + +const MODULE_NAME = "l10n_it_asset_management"; + +patch(ReportAction.prototype, "l10n_it_asset_management.ReportAction", { + setup() { + this._super.apply(this, arguments); + this.isAssetReport = this.props.report_name.startsWith(`${MODULE_NAME}.`); + }, + + /** + * Override of method _get_xlsx_name in account_financial_report/static/src/js/report_action.esm.js + * to manage assets reports. + * @param {String} str + * @returns {String} + */ + _get_xlsx_name(str) { + if (!this.isAssetReport) return this._super.apply(this, arguments); + + if (!_.isString(str)) { + return str; + } + const parts = str.split("."); + const qweb_report = parts[1]; + let xlsx_report = ""; + switch (qweb_report) { + case "template_asset_previsional_qweb": + case "template_asset_previsional_html": + xlsx_report = "report_asset_previsional_xlsx"; + break; + case "template_asset_journal_qweb": + case "template_asset_journal_html": + xlsx_report = "report_asset_journal_xlsx"; + break; + } + return `${MODULE_NAME}.` + xlsx_report; + }, +}); diff --git a/l10n_it_asset_management/static/src/xml/report.xml b/l10n_it_asset_management/static/src/xml/report.xml new file mode 100644 index 000000000000..4e79e25e9f93 --- /dev/null +++ b/l10n_it_asset_management/static/src/xml/report.xml @@ -0,0 +1,19 @@ + diff --git a/l10n_it_asset_management/tests/__init__.py b/l10n_it_asset_management/tests/__init__.py new file mode 100644 index 000000000000..5ddb45a9e1ec --- /dev/null +++ b/l10n_it_asset_management/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_assets_management diff --git a/l10n_it_asset_management/tests/test_assets_management.py b/l10n_it_asset_management/tests/test_assets_management.py new file mode 100644 index 000000000000..4a62c4bb4a1b --- /dev/null +++ b/l10n_it_asset_management/tests/test_assets_management.py @@ -0,0 +1,740 @@ +# Copyright 2021 Sergio Corato +# Copyright 2022 Simone Rubino - TAKOBI +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from datetime import date + +from odoo import fields +from odoo.exceptions import ValidationError +from odoo.fields import Command, first +from odoo.tests.common import TransactionCase +from odoo.tools.date_utils import relativedelta + + +class TestAssets(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.data_account_type_current_assets = "asset_current" + cls.asset_category_1 = cls.env["asset.category"].create( + { + "name": "Asset category 1", + "asset_account_id": cls.env["account.account"] + .search( + [ + ( + "account_type", + "=", + "asset_fixed", + ) + ], + limit=1, + ) + .id, + "depreciation_account_id": cls.env["account.account"] + .search( + [ + ( + "account_type", + "=", + "expense", + ) + ], + limit=1, + ) + .id, + "fund_account_id": cls.env["account.account"] + .search( + [ + ( + "account_type", + "=", + "asset_non_current", + ) + ], + limit=1, + ) + .id, + "gain_account_id": cls.env["account.account"] + .search( + [ + ( + "account_type", + "=", + "income", + ) + ], + limit=1, + ) + .id, + "journal_id": cls.env["account.journal"] + .search([("type", "=", "general")], limit=1) + .id, + "loss_account_id": cls.env["account.account"] + .search( + [ + ( + "account_type", + "=", + "expense", + ) + ], + limit=1, + ) + .id, + "type_ids": [ + Command.create( + { + "depreciation_type_id": cls.env.ref( + "l10n_it_asset_management.ad_type_civilistico" + ).id, + "mode_id": cls.env.ref( + "l10n_it_asset_management.ad_mode_materiale" + ).id, + }, + ) + ], + } + ) + cls.tax_account = cls.env["account.account"].create( + { + "name": "Deductable tax", + "code": "DEDTAX", + "account_type": cls.data_account_type_current_assets, + } + ) + cls.tax_22_partial_60 = cls.env["account.tax"].create( + { + "name": "22% deductable partial 60%", + "type_tax_use": "purchase", + "amount_type": "percent", + "amount": 22, + "invoice_repartition_line_ids": [ + Command.create( + { + "factor_percent": 100, + "repartition_type": "base", + }, + ), + Command.create( + { + "factor_percent": 60, + "repartition_type": "tax", + "account_id": cls.tax_account.id, + }, + ), + Command.create( + { + "factor_percent": 40, + "repartition_type": "tax", + }, + ), + ], + "refund_repartition_line_ids": [ + Command.create( + { + "factor_percent": 100, + "repartition_type": "base", + }, + ), + Command.create( + { + "factor_percent": 60, + "repartition_type": "tax", + "account_id": cls.tax_account.id, + }, + ), + Command.create( + { + "factor_percent": 40, + "repartition_type": "tax", + }, + ), + ], + } + ) + + def _create_asset(self, asset_date): + asset = self.env["asset.asset"].create( + { + "name": "Test asset", + "category_id": self.asset_category_1.id, + "company_id": self.env.ref("base.main_company").id, + "currency_id": self.env.ref("base.main_company").currency_id.id, + "purchase_amount": 1000.0, + "purchase_date": asset_date, + } + ) + return asset + + def _depreciate_asset(self, asset, date_dep): + wiz_vals = asset.with_context( + **{"allow_reload_window": True} + ).launch_wizard_generate_depreciations() + wiz = ( + self.env["wizard.asset.generate.depreciation"] + .with_context(**wiz_vals["context"]) + .create({"date_dep": date_dep}) + ) + wiz.do_generate() + + def _create_purchase_invoice(self, invoice_date, tax_ids=False, amount=7000): + invoice_line_vals = { + "account_id": self.asset_category_1.asset_account_id.id, + "quantity": 1, + "price_unit": amount, + } + if tax_ids: + invoice_line_vals.update({"tax_ids": tax_ids}) + purchase_invoice = self.env["account.move"].create( + { + "move_type": "in_invoice", + "invoice_date": invoice_date, + "partner_id": self.env.ref("base.partner_demo").id, + "journal_id": self.env["account.journal"] + .search( + [ + ("type", "=", "purchase"), + ], + limit=1, + ) + .id, + "invoice_line_ids": [ + Command.create( + invoice_line_vals, + ) + ], + } + ) + purchase_invoice.action_post() + self.assertEqual(purchase_invoice.state, "posted") + return purchase_invoice + + def test_00_create_asset_depreciate_and_sale(self): + today = fields.Date.today() + first_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-1 + ) + second_depreciation_date = today.replace(month=12, day=31) + asset = self._create_asset(today + relativedelta(years=-1)) + civ_type = self.env.ref("l10n_it_asset_management.ad_type_civilistico") + depreciation_id = asset.depreciation_ids.filtered( + lambda x: x.type_id == civ_type + ) + self.assertAlmostEqual(depreciation_id.amount_depreciable, 1000) + depreciation_id.percentage = 25.0 + depreciation_id.mode_id.line_ids.coefficient = 0.5 + self.assertEqual( + asset.state, "non_depreciated", "Asset is not in non depreciated state!" + ) + + self._depreciate_asset(asset, first_depreciation_date) + self._depreciate_asset(asset, second_depreciation_date) + dep_lines = asset.depreciation_ids.line_ids + self.assertTrue(dep_lines) + self.assertEqual(len(dep_lines), 2) + civ_dep_lines = dep_lines.filtered( + lambda x: x.depreciation_id.type_id == civ_type + and x.move_type == "depreciated" + ) + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 375) + self.assertEqual(asset.state, "partially_depreciated") + + # create sale invoice and link to asset + sale_invoice = self.env["account.move"].create( + { + "move_type": "out_invoice", + "partner_id": self.env.ref("base.partner_demo").id, + "journal_id": self.env["account.journal"] + .search( + [ + ("type", "=", "sale"), + ], + limit=1, + ) + .id, + "invoice_line_ids": [ + Command.create( + { + "account_id": asset.category_id.asset_account_id.id, + "quantity": 1, + "price_unit": 600, + }, + ) + ], + } + ) + sale_invoice.action_post() + wiz_vals = sale_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == asset.category_id.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "dismiss", + "asset_id": asset.id, + } + ) + ) + with self.assertRaises(ValidationError) as exc: + wiz.link_asset() + self.assertEqual( + exc.exception.args[0], + "Cannot dismiss an asset earlier than the last depreciation date.\n" + "(Dismiss date: {}, last depreciation date: {}).".format( + today, second_depreciation_date + ), + ) + sale_invoice.button_cancel() + sale_invoice.button_draft() + new_invoice_date = second_depreciation_date + relativedelta(days=10) + with self.assertRaises(ValidationError) as ve: + sale_invoice.invoice_date = new_invoice_date + exc_message = ve.exception.args[0] + self.assertIn("doesn't match the sequence number", exc_message) + self.assertIn("clear the Journal Entry's Number to proceed", exc_message) + self.assertNotEqual(sale_invoice.state, "posted") + sale_invoice.name = False + sale_invoice.invoice_date = new_invoice_date + sale_invoice.action_post() + self.assertEqual(sale_invoice.state, "posted") + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == asset.category_id.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "dismiss", + "asset_id": asset.id, + "dismiss_date": sale_invoice.invoice_date, + } + ) + ) + asset = wiz.link_asset() + self.assertTrue(asset.sold) + + def test_01_asset_from_purchase_invoice(self): + # create purchase invoice and generate asset + invoice_date = fields.Date.today() + purchase_invoice = self._create_purchase_invoice(invoice_date) + wiz_vals = purchase_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "create", + "category_id": self.asset_category_1.id, + "name": "Test asset", + } + ) + ) + asset = wiz.link_asset() + self.assertFalse(asset.dismiss_date) + self.assertEqual(asset.purchase_amount, 7000) + # dismiss asset with sale + # create sale invoice and link to asset + sale_invoice = self.env["account.move"].create( + { + "move_type": "out_invoice", + "partner_id": self.env.ref("base.partner_demo").id, + "journal_id": self.env["account.journal"] + .search( + [ + ("type", "=", "sale"), + ], + limit=1, + ) + .id, + "invoice_line_ids": [ + Command.create( + { + "account_id": asset.category_id.asset_account_id.id, + "quantity": 1, + "price_unit": 6000, + }, + ) + ], + } + ) + sale_invoice.action_post() + wiz_vals = sale_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == asset.category_id.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "dismiss", + "asset_id": asset.id, + } + ) + ) + wiz.link_asset() + self.assertTrue(asset.sold) + + def test_02_asset_partial_deductible_from_purchase_invoice(self): + # create purchase invoice partial deductible and generate asset + invoice_date = fields.Date.today() + purchase_invoice = self._create_purchase_invoice( + invoice_date, tax_ids=[Command.set([self.tax_22_partial_60.id])] + ) + self.assertAlmostEqual( + sum( + line.debit + for line in purchase_invoice.line_ids + if line.account_id == self.asset_category_1.asset_account_id + ), + 7000 + (7000 * 0.22 * 0.4), + ) + wiz_vals = purchase_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "create", + "category_id": self.asset_category_1.id, + "name": "Test asset", + } + ) + ) + asset = wiz.link_asset() + self.assertAlmostEqual(asset.purchase_amount, 7000 + (7000 * 0.22 * 0.4), 2) + + def test_03_asset_from_purchase_invoice_increment(self): + # create purchase invoice and generate asset + today = fields.Date.today() + invoice_date = today + relativedelta(years=-5) + purchase_invoice = self._create_purchase_invoice(invoice_date) + wiz_vals = purchase_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "create", + "category_id": self.asset_category_1.id, + "name": "Test asset", + } + ) + ) + asset = wiz.link_asset() + self.assertEqual(asset.purchase_amount, 7000) + # fully depreciate the asset + first_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-5 + ) + second_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-4 + ) + third_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-3 + ) + civ_type = self.env.ref("l10n_it_asset_management.ad_type_civilistico") + depreciation_id = asset.depreciation_ids.filtered( + lambda x: x.type_id == civ_type + ) + self.assertAlmostEqual(depreciation_id.amount_depreciable, 7000) + depreciation_id.percentage = 40.0 + depreciation_id.mode_id.line_ids.coefficient = 0.5 + self.assertEqual( + asset.state, "non_depreciated", "Asset is not in non depreciated state!" + ) + self._depreciate_asset(asset, first_depreciation_date) + self._depreciate_asset(asset, second_depreciation_date) + self._depreciate_asset(asset, third_depreciation_date) + dep_lines = asset.depreciation_ids.line_ids + self.assertEqual(len(dep_lines), 3) + civ_dep_lines = dep_lines.filtered( + lambda x: x.depreciation_id.type_id == civ_type + and x.move_type == "depreciated" + ) + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 7000) + self.assertEqual(asset.state, "totally_depreciated") + # create an invoice to increment th totally depreciated asset + increment_invoice = self._create_purchase_invoice(today, amount=2000) + wiz_vals = increment_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "update", + "category_id": self.asset_category_1.id, + "asset_id": asset.id, + "depreciation_type_ids": [Command.set(civ_type.ids)], + } + ) + ) + wiz.link_asset() + self.assertAlmostEqual(depreciation_id.amount_depreciable_updated, 9000) + # create depreciation for year -2 or -1 should do nothing as asset is totally + # depreciated + fourth_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-2 + ) + self._depreciate_asset(asset, fourth_depreciation_date) + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 7000) + # create depreciation for current year should depreciate totally (as computed + # value 9000*40% = 3600 is greater than residual value) + current_year_depreciation_date = today.replace(month=12, day=31) + self._depreciate_asset(asset, current_year_depreciation_date) + dep_lines = asset.depreciation_ids.line_ids + civ_dep_lines = dep_lines.filtered( + lambda x: x.depreciation_id.type_id == civ_type + and x.move_type == "depreciated" + ) + self.assertEqual(asset.state, "totally_depreciated") + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 9000) + + def test_04_asset_partial_depreciate_from_purchase_invoice_increment(self): + # create purchase invoice and generate asset + today = fields.Date.today() + invoice_date = today + relativedelta(years=-5) + purchase_invoice = self._create_purchase_invoice(invoice_date) + wiz_vals = purchase_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "create", + "category_id": self.asset_category_1.id, + "name": "Test asset", + } + ) + ) + asset = wiz.link_asset() + self.assertEqual(asset.purchase_amount, 7000) + # partially depreciate the asset + first_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-5 + ) + second_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-3 + ) + civ_type = self.env.ref("l10n_it_asset_management.ad_type_civilistico") + depreciation_id = asset.depreciation_ids.filtered( + lambda x: x.type_id == civ_type + ) + self.assertAlmostEqual(depreciation_id.amount_depreciable, 7000) + depreciation_id.percentage = 40.0 + depreciation_id.mode_id.line_ids.coefficient = 0.5 + self.assertEqual( + asset.state, "non_depreciated", "Asset is not in non depreciated state!" + ) + self._depreciate_asset(asset, first_depreciation_date) + self._depreciate_asset(asset, second_depreciation_date) + dep_lines = asset.depreciation_ids.line_ids + self.assertEqual(len(dep_lines), 2) + civ_dep_lines = dep_lines.filtered( + lambda x: x.depreciation_id.type_id == civ_type + and x.move_type == "depreciated" + ) + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 7000 * 0.6) + self.assertEqual(asset.state, "partially_depreciated") + # create an invoice to increment th totally depreciated asset + increment_invoice = self._create_purchase_invoice(today, amount=2000) + wiz_vals = increment_invoice.open_wizard_manage_asset() + move_line_ids = wiz_vals["context"]["default_move_line_ids"][0][2] + move_lines = self.env["account.move.line"].browse(move_line_ids) + move_lines_to_do = move_lines.filtered( + lambda x: x.account_id == self.asset_category_1.asset_account_id + ) + wiz_vals["context"]["default_move_line_ids"] = [ + Command.set(move_lines_to_do.ids) + ] + wiz = ( + self.env["wizard.account.move.manage.asset"] + .with_context(**wiz_vals["context"]) + .create( + { + "management_type": "update", + "category_id": self.asset_category_1.id, + "asset_id": asset.id, + "depreciation_type_ids": [Command.set(civ_type.ids)], + } + ) + ) + wiz.link_asset() + self.assertAlmostEqual(depreciation_id.amount_depreciable_updated, 9000) + # create depreciation for year -4 should do nothing as asset is already + # depreciated in a later date + third_depreciation_date = today.replace(month=12, day=31) + relativedelta( + years=-4 + ) + self._depreciate_asset(asset, third_depreciation_date) + self.assertAlmostEqual(sum(civ_dep_lines.mapped("amount")), 7000 * 0.6) + # create depreciation for current year should depreciate totally (as computed + # value 9000*40% = 3600 is greater than residual value) + current_year_depreciation_date = today.replace(month=12, day=31) + self._depreciate_asset(asset, current_year_depreciation_date) + dep_lines = asset.depreciation_ids.line_ids + self.assertEqual(len(dep_lines), 4) + civ_dep_lines = dep_lines.filtered( + lambda x: x.depreciation_id.type_id == civ_type + and x.move_type == "depreciated" + ) + self.assertEqual(len(civ_dep_lines), 3) + self.assertEqual(asset.state, "partially_depreciated") + self.assertAlmostEqual( + sum(civ_dep_lines.mapped("amount")), 7000 * 0.6 + 9000 * 0.4 + ) + + def _civil_depreciate_asset(self, asset): + # Keep only one civil depreciation + civil_depreciation_type = self.env.ref( + "l10n_it_asset_management.ad_type_civilistico" + ) + civil_depreciation = first( + asset.depreciation_ids.filtered( + lambda d: d.type_id == civil_depreciation_type + ) + ) + (asset.depreciation_ids - civil_depreciation).unlink() + + civil_depreciation.line_ids = [ + Command.clear(), + Command.create( + { + "name": "2019", + "date": date(2019, 12, 31), + "move_type": "depreciated", + "amount": 500, + }, + ), + Command.create( + { + "name": "2020", + "date": date(2020, 12, 31), + "move_type": "depreciated", + "amount": 500, + }, + ), + ] + return True + + def _generate_fiscal_years(self, start_date, end_date): + fiscal_years = range( + start_date.year, + end_date.year, + ) + fiscal_years_values = list() + for fiscal_year in fiscal_years: + fiscal_year_values = { + "name": "Fiscal Year %d" % fiscal_year, + "date_from": date(fiscal_year, 1, 1), + "date_to": date(fiscal_year, 12, 31), + } + fiscal_years_values.append(fiscal_year_values) + return self.env["account.fiscal.year"].create(fiscal_years_values) + + def _get_report_values(self, report_type): + if report_type == "previsional": + wizard_model = "wizard.asset.previsional.report" + report_model = "report_asset_previsional" + export_method = "export_asset_previsional_report" + elif report_type == "journal": + wizard_model = "wizard.asset.journal.report" + report_model = "report_asset_journal" + export_method = "export_asset_journal_report" + else: + raise Exception("Report can only be 'journal' or 'previsional'") + return export_method, report_model, wizard_model + + def _get_report(self, report_date, report_type): + export_method, report_model, wizard_model = self._get_report_values(report_type) + + wiz = self.env[wizard_model].create( + { + "date": report_date, + } + ) + report_result = getattr(wiz, export_method)() + report_ids = report_result["context"]["report_action"]["context"]["active_ids"] + report = self.env[report_model].browse(report_ids) + return report + + def test_journal_prev_year(self): + """ + Previous year depreciation considers depreciation of all previous years + """ + # Arrange: Create an asset bought in 2019 + # and totally depreciated in 2019 and 2020 + purchase_date = date(2019, 1, 1) + asset = self._create_asset(purchase_date) + asset.purchase_date = purchase_date + self.assertEqual(asset.purchase_amount, 1000) + self._civil_depreciate_asset(asset) + self.assertEqual(asset.state, "totally_depreciated") + + # Act: Generate the asset journal report for 2022 + report_date = date(2022, 11, 7) + self._generate_fiscal_years(purchase_date, report_date) + report = self._get_report(report_date, "journal") + + # Assert: The previous year depreciation counts.the depreciation of 2020 + total = report.report_total_ids + self.assertEqual(total.amount_depreciation_fund_curr_year, 1000) + self.assertEqual(total.amount_depreciation_fund_prev_year, 1000) diff --git a/l10n_it_asset_management/views/account_move.xml b/l10n_it_asset_management/views/account_move.xml new file mode 100644 index 000000000000..0d68c8cf8e5e --- /dev/null +++ b/l10n_it_asset_management/views/account_move.xml @@ -0,0 +1,119 @@ + + + + + + view.move.form.inherit + account.move + + + + +