diff --git a/account_asset_transfer/README.rst b/account_asset_transfer/README.rst new file mode 100644 index 000000000..16085c5c8 --- /dev/null +++ b/account_asset_transfer/README.rst @@ -0,0 +1,115 @@ +================================ +Asset Transfer from AUC to Asset +================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5fb144c4441c023dcd6f27dcd7be70952e7b51761699c1c4e0a08f50f8bc9c97 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Faccount--financial--tools-lightgray.png?logo=github + :target: https://github.com/OCA/account-financial-tools/tree/16.0/account_asset_transfer + :alt: OCA/account-financial-tools +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-financial-tools-16-0/account-financial-tools-16-0-account_asset_transfer + :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/account-financial-tools&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allow transferring assets under construction (AUC) to normal assets. + +AUC is Asset under construction where some assets are in construction phase and +cost needs to be captured for the time being. Once asset is fully completed then +cost would be transferred to final asset + +**Note:** + +* If the asset don't have journal entries, asset transfer will use account settings from the asset/asset profile instead. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +On asset profile, user can setup default Transfer Journal, to be used during transfer. + +Usage +===== + +Given asset under construction has been created, i.e., by vendor bill. + +- Go to asset menu +- Filter "Transferrable" assets and look for desired assets to transfer +- Select assets to transfer, and click action "Transfer Asset" +- On asset transfer wizard, on the "To New Asset" tab, choose new profile(s) +- Click "Transfer" button +- Odoo will create journal entry as well as new asset(s) + +**Note:** You can click "Expand Asset" button for expand asset line that selects the asset profile set to be "Create an asset by product item" + +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 +~~~~~~~ + +* Ecosoft + +Contributors +~~~~~~~~~~~~ + +* `Ecosoft `__: + + * Kitti U. + * Pimolnat Suntian + * Saran Lim. + +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. + +.. |maintainer-kittiu| image:: https://github.com/kittiu.png?size=40px + :target: https://github.com/kittiu + :alt: kittiu + +Current `maintainer `__: + +|maintainer-kittiu| + +This module is part of the `OCA/account-financial-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_asset_transfer/__init__.py b/account_asset_transfer/__init__.py new file mode 100644 index 000000000..4d7a49b5e --- /dev/null +++ b/account_asset_transfer/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models +from . import wizard diff --git a/account_asset_transfer/__manifest__.py b/account_asset_transfer/__manifest__.py new file mode 100644 index 000000000..f1b834eae --- /dev/null +++ b/account_asset_transfer/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Asset Transfer from AUC to Asset", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "depends": ["account_asset_management"], + "author": "Ecosoft, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/account-financial-tools", + "category": "Accounting & Finance", + "data": [ + "security/ir.model.access.csv", + "views/account_asset.xml", + "views/account_asset_profile.xml", + "wizard/account_asset_transfer.xml", + ], + "maintainers": ["kittiu"], +} diff --git a/account_asset_transfer/i18n/account_asset_transfer.pot b/account_asset_transfer/i18n/account_asset_transfer.pot new file mode 100644 index 000000000..cceb2c69f --- /dev/null +++ b/account_asset_transfer/i18n/account_asset_transfer.pot @@ -0,0 +1,295 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_asset_transfer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset__can_transfer +msgid "Allow transfer AUC (running) to Asset" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__analytic_account_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__analytic_account_id +msgid "Analytic account" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__analytic_tag_ids +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__analytic_tag_ids +msgid "Analytic tags" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset +msgid "Asset" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Asset From" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_name +msgid "Asset Name" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_profile_id +msgid "Asset Profile" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Asset To" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Asset Transfer Journal Entry" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_value +msgid "Asset Value" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset_profile +msgid "Asset profile" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Assets" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__balance +msgid "Balance" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset__can_transfer +msgid "Can Transfer" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_search +msgid "Can be transferred" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Cancel" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__company_id +msgid "Company" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__create_uid +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__create_uid +msgid "Created by" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__create_date +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__create_date +msgid "Created on" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__currency_id +msgid "Currency" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__display_name +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__display_name +msgid "Display Name" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Expand Asset" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "From" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__from_asset_ids +msgid "From Asset(s)" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__from_asset_value +msgid "From Value" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__id +msgid "ID" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset__is_transfer +msgid "Is Transfer" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer____last_update +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__write_uid +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__write_date +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__note +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Notes" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Only running assets without depreciation (AUC) can transfer" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__partner_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__partner_id +msgid "Partner" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__quantity +msgid "Quantity" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "" +"There are no journal entries on current asset(s), asset transfer will use " +"account settings from the asset/asset profile instead." +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__to_asset_ids +msgid "To Asset(s)" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "To New Asset" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__to_asset_value +msgid "To Value" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Total values of new assets must equal to source assets" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__transfer_id +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Transfer" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Transfer AUC to Asset & Create Transfer Journal Entry" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.actions.act_window,name:account_asset_transfer.action_account_asset_transfer +#: model:ir.actions.server,name:account_asset_transfer.action_asset_transfer_from_list +#: model:ir.model,name:account_asset_transfer.model_account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Transfer Asset" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__date_transfer +msgid "Transfer Date" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_profile__transfer_journal_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__transfer_journal_id +msgid "Transfer Journal" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset_transfer_line +msgid "Transfer To Asset" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Transfer asset from AUC to Asset" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset_transfer__date_transfer +msgid "Transfer date must be after the asset journal entry" +msgstr "" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_search +msgid "Transferable" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__price_unit +msgid "Unit Price" +msgstr "" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Value of new asset must greater than 0.0" +msgstr "" + +#. module: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset__is_transfer +msgid "" +"flag indicating if the asset has been transferred from/to another asset." +msgstr "" diff --git a/account_asset_transfer/i18n/es.po b/account_asset_transfer/i18n/es.po new file mode 100644 index 000000000..02dda4f3b --- /dev/null +++ b/account_asset_transfer/i18n/es.po @@ -0,0 +1,302 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_asset_transfer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-10 19:36+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset__can_transfer +msgid "Allow transfer AUC (running) to Asset" +msgstr "Permitir transferencia AUC (en curso) a Activo" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__analytic_account_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__analytic_account_id +msgid "Analytic account" +msgstr "Cuenta Analítica" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__analytic_tag_ids +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__analytic_tag_ids +msgid "Analytic tags" +msgstr "Etiquetas analíticas" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset +msgid "Asset" +msgstr "Activo" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Asset From" +msgstr "Activo Desde" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_name +msgid "Asset Name" +msgstr "Nombre del activo" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_profile_id +msgid "Asset Profile" +msgstr "Perfil del activo" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Asset To" +msgstr "Activo a" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Asset Transfer Journal Entry" +msgstr "Entrada en el diario de transferencia de activos" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__asset_value +msgid "Asset Value" +msgstr "Valor del activo" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset_profile +msgid "Asset profile" +msgstr "Perfil del activo" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Assets" +msgstr "Activos" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__balance +msgid "Balance" +msgstr "Saldo" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset__can_transfer +msgid "Can Transfer" +msgstr "Puede transferir" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_search +msgid "Can be transferred" +msgstr "Se puede transferir" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__company_id +msgid "Company" +msgstr "Compañía" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__create_uid +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__create_date +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__currency_id +msgid "Currency" +msgstr "Divisa" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__display_name +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Expand Asset" +msgstr "Ampliar activos" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "From" +msgstr "Desde" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__from_asset_ids +msgid "From Asset(s)" +msgstr "Desde Activo(s)" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__from_asset_value +msgid "From Value" +msgstr "Desde Valor" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset__is_transfer +msgid "Is Transfer" +msgstr "Es Transferencia" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer____last_update +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line____last_update +msgid "Last Modified on" +msgstr "Última Modifiación en" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__write_uid +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__write_date +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__note +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Notes" +msgstr "Notas" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Only running assets without depreciation (AUC) can transfer" +msgstr "Sólo pueden transferirse los activos circulantes sin amortización (AUC)" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__partner_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__partner_id +msgid "Partner" +msgstr "Socio" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "" +"There are no journal entries on current asset(s), asset transfer will use " +"account settings from the asset/asset profile instead." +msgstr "" +"No hay asientos en los activos actuales, la transferencia de activos " +"utilizará en su lugar los ajustes de cuenta del perfil de activo/activo." + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__to_asset_ids +msgid "To Asset(s)" +msgstr "A Activo(s)" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "To New Asset" +msgstr "Al nuevo activo" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__to_asset_value +msgid "To Value" +msgstr "Para valorar" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Total values of new assets must equal to source assets" +msgstr "" +"El valor total de los activos nuevos debe ser igual al de los activos de " +"origen" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__transfer_id +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Transfer" +msgstr "Transferencia" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/models/account_asset.py:0 +#, python-format +msgid "Transfer AUC to Asset & Create Transfer Journal Entry" +msgstr "Transferir AUC a activo y crear asiento de transferencia" + +#. module: account_asset_transfer +#: model:ir.actions.act_window,name:account_asset_transfer.action_account_asset_transfer +#: model:ir.actions.server,name:account_asset_transfer.action_asset_transfer_from_list +#: model:ir.model,name:account_asset_transfer.model_account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_transfer_view_form +msgid "Transfer Asset" +msgstr "Transferencia de activos" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__date_transfer +msgid "Transfer Date" +msgstr "Fecha de transferencia" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_profile__transfer_journal_id +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer__transfer_journal_id +msgid "Transfer Journal" +msgstr "Diario de transferencia" + +#. module: account_asset_transfer +#: model:ir.model,name:account_asset_transfer.model_account_asset_transfer_line +msgid "Transfer To Asset" +msgstr "Transferencia a activos" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_form +msgid "Transfer asset from AUC to Asset" +msgstr "Transferir activo de AUC a Activo" + +#. module: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset_transfer__date_transfer +msgid "Transfer date must be after the asset journal entry" +msgstr "La fecha de transferencia debe ser posterior al asiento del activo" + +#. module: account_asset_transfer +#: model_terms:ir.ui.view,arch_db:account_asset_transfer.account_asset_view_search +msgid "Transferable" +msgstr "Transferible" + +#. module: account_asset_transfer +#: model:ir.model.fields,field_description:account_asset_transfer.field_account_asset_transfer_line__price_unit +msgid "Unit Price" +msgstr "Precio Unitario" + +#. module: account_asset_transfer +#: code:addons/account_asset_transfer/wizard/account_asset_transfer.py:0 +#, python-format +msgid "Value of new asset must greater than 0.0" +msgstr "El valor del nuevo activo debe ser superior a 0,0" + +#. module: account_asset_transfer +#: model:ir.model.fields,help:account_asset_transfer.field_account_asset__is_transfer +msgid "" +"flag indicating if the asset has been transferred from/to another asset." +msgstr "que indica si el activo ha sido transferido de/a otro activo." diff --git a/account_asset_transfer/models/__init__.py b/account_asset_transfer/models/__init__.py new file mode 100644 index 000000000..b5f1e68b9 --- /dev/null +++ b/account_asset_transfer/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import account_asset +from . import account_asset_profile diff --git a/account_asset_transfer/models/account_asset.py b/account_asset_transfer/models/account_asset.py new file mode 100644 index 000000000..c15bad2f1 --- /dev/null +++ b/account_asset_transfer/models/account_asset.py @@ -0,0 +1,94 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, fields, models +from odoo.exceptions import ValidationError + + +class AccountAsset(models.Model): + _inherit = "account.asset" + + can_transfer = fields.Boolean( + compute="_compute_can_transfer", + search="_search_can_transfer", + help="Allow transfer AUC (running) to Asset", + ) + is_transfer = fields.Boolean( + help="flag indicating if the asset has been transferred from/to another asset." + ) + + def _compute_can_transfer(self): + for asset in self: + asset.can_transfer = ( + not asset.method_number + and asset.value_residual + and asset.state == "open" + ) + + def _search_can_transfer(self, operator, value): + if operator == "=": + return [ + ("method_number", "=", 0), + ("value_residual", ">", 0), + ("state", "=", "open"), + ] + if operator == "!=": + return [ + "|", + "|", + "|", + ("method_number", ">", 0), + ("value_residual", "=", 0), + ("state", "!=", "open"), + ] + + def _check_can_transfer(self): + if not all(self.mapped("can_transfer")): + raise ValidationError( + _("Only running assets without depreciation (AUC) can transfer") + ) + + def transfer(self): + ctx = dict(self.env.context, active_ids=self.ids) + self._check_can_transfer() + return { + "name": _("Transfer AUC to Asset & Create Transfer Journal Entry"), + "view_mode": "form", + "res_model": "account.asset.transfer", + "target": "new", + "type": "ir.actions.act_window", + "context": ctx, + } + + def open_assets(self): + self.ensure_one() + moves = self.account_move_line_ids.mapped("move_id") + assets = self.env["account.asset"] + asset_from = self._context.get("asset_from") + asset_to = self._context.get("asset_to") + for move in moves: + # Source Assets, we check from move that create this asset + if ( + asset_from + and self.id + not in move.line_ids.filtered(lambda l: l.credit).mapped("asset_id").ids + ): + assets = move.line_ids.filtered(lambda l: l.credit).mapped("asset_id") + break + # Destination Assets, we check from move that create destination asset + elif ( + asset_to + and self.id + in move.line_ids.filtered(lambda l: l.credit).mapped("asset_id").ids + ): + assets = move.line_ids.filtered(lambda l: l.debit).mapped("asset_id") + break + return { + "name": _("Assets"), + "view_mode": "tree,form", + "res_model": "account.asset", + "view_id": False, + "type": "ir.actions.act_window", + "context": self._context, + "domain": [("id", "in", assets.ids)], + } diff --git a/account_asset_transfer/models/account_asset_profile.py b/account_asset_transfer/models/account_asset_profile.py new file mode 100644 index 000000000..831f32034 --- /dev/null +++ b/account_asset_transfer/models/account_asset_profile.py @@ -0,0 +1,15 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountAssetProfile(models.Model): + _inherit = "account.asset.profile" + + transfer_journal_id = fields.Many2one( + comodel_name="account.journal", + domain="[('type', '=', 'general'), ('company_id', '=', company_id)]", + string="Transfer Journal", + check_company=True, + ) diff --git a/account_asset_transfer/readme/CONFIGURE.rst b/account_asset_transfer/readme/CONFIGURE.rst new file mode 100644 index 000000000..7a1b303b0 --- /dev/null +++ b/account_asset_transfer/readme/CONFIGURE.rst @@ -0,0 +1 @@ +On asset profile, user can setup default Transfer Journal, to be used during transfer. diff --git a/account_asset_transfer/readme/CONTRIBUTORS.rst b/account_asset_transfer/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0b1bd3c7d --- /dev/null +++ b/account_asset_transfer/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Ecosoft `__: + + * Kitti U. + * Pimolnat Suntian + * Saran Lim. diff --git a/account_asset_transfer/readme/DESCRIPTION.rst b/account_asset_transfer/readme/DESCRIPTION.rst new file mode 100644 index 000000000..176f2cbd1 --- /dev/null +++ b/account_asset_transfer/readme/DESCRIPTION.rst @@ -0,0 +1,9 @@ +This module allow transferring assets under construction (AUC) to normal assets. + +AUC is Asset under construction where some assets are in construction phase and +cost needs to be captured for the time being. Once asset is fully completed then +cost would be transferred to final asset + +**Note:** + +* If the asset don't have journal entries, asset transfer will use account settings from the asset/asset profile instead. diff --git a/account_asset_transfer/readme/USAGE.rst b/account_asset_transfer/readme/USAGE.rst new file mode 100644 index 000000000..3dd83b8b1 --- /dev/null +++ b/account_asset_transfer/readme/USAGE.rst @@ -0,0 +1,10 @@ +Given asset under construction has been created, i.e., by vendor bill. + +- Go to asset menu +- Filter "Transferrable" assets and look for desired assets to transfer +- Select assets to transfer, and click action "Transfer Asset" +- On asset transfer wizard, on the "To New Asset" tab, choose new profile(s) +- Click "Transfer" button +- Odoo will create journal entry as well as new asset(s) + +**Note:** You can click "Expand Asset" button for expand asset line that selects the asset profile set to be "Create an asset by product item" diff --git a/account_asset_transfer/security/ir.model.access.csv b/account_asset_transfer/security/ir.model.access.csv new file mode 100644 index 000000000..5558b0da0 --- /dev/null +++ b/account_asset_transfer/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_asset_transfer_user,account.asset.transfer,model_account_asset_transfer,account.group_account_user,1,1,1,1 +access_account_asset_transfer_line_user,account.asset.transfer.line,model_account_asset_transfer_line,account.group_account_user,1,1,1,1 diff --git a/account_asset_transfer/static/description/icon.png b/account_asset_transfer/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/account_asset_transfer/static/description/icon.png differ diff --git a/account_asset_transfer/static/description/index.html b/account_asset_transfer/static/description/index.html new file mode 100644 index 000000000..2fad89adc --- /dev/null +++ b/account_asset_transfer/static/description/index.html @@ -0,0 +1,454 @@ + + + + + + +Asset Transfer from AUC to Asset + + + +
+

Asset Transfer from AUC to Asset

+ + +

Beta License: AGPL-3 OCA/account-financial-tools Translate me on Weblate Try me on Runboat

+

This module allow transferring assets under construction (AUC) to normal assets.

+

AUC is Asset under construction where some assets are in construction phase and +cost needs to be captured for the time being. Once asset is fully completed then +cost would be transferred to final asset

+

Note:

+
    +
  • If the asset don’t have journal entries, asset transfer will use account settings from the asset/asset profile instead.
  • +
+

Table of contents

+ +
+

Configuration

+

On asset profile, user can setup default Transfer Journal, to be used during transfer.

+
+
+

Usage

+

Given asset under construction has been created, i.e., by vendor bill.

+
    +
  • Go to asset menu
  • +
  • Filter “Transferrable” assets and look for desired assets to transfer
  • +
  • Select assets to transfer, and click action “Transfer Asset”
  • +
  • On asset transfer wizard, on the “To New Asset” tab, choose new profile(s)
  • +
  • Click “Transfer” button
  • +
  • Odoo will create journal entry as well as new asset(s)
  • +
+

Note: You can click “Expand Asset” button for expand asset line that selects the asset profile set to be “Create an asset by product item”

+
+
+

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

+
    +
  • Ecosoft
  • +
+
+
+

Contributors

+ +
+
+

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.

+

Current maintainer:

+

kittiu

+

This module is part of the OCA/account-financial-tools project on GitHub.

+

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

+
+
+
+ + diff --git a/account_asset_transfer/tests/__init__.py b/account_asset_transfer/tests/__init__.py new file mode 100644 index 000000000..29f2356fd --- /dev/null +++ b/account_asset_transfer/tests/__init__.py @@ -0,0 +1 @@ +from . import test_account_asset_transfer diff --git a/account_asset_transfer/tests/test_account_asset_transfer.py b/account_asset_transfer/tests/test_account_asset_transfer.py new file mode 100644 index 000000000..d495b7139 --- /dev/null +++ b/account_asset_transfer/tests/test_account_asset_transfer.py @@ -0,0 +1,142 @@ +# Copyright 2021 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo import fields +from odoo.exceptions import UserError +from odoo.tests import tagged +from odoo.tests.common import Form + +from odoo.addons.account_asset_management.tests.test_account_asset_management import ( + TestAssetManagement, +) + + +@tagged("post_install", "-at_install") +class TestAccountAssetTransfer(TestAssetManagement): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Profile Under Construction + cls.profile_auc = cls.asset_profile_model.create( + { + "account_expense_depreciation_id": cls.company_data[ + "default_account_expense" + ].id, + "account_asset_id": cls.company_data["default_account_assets"].id, + "account_depreciation_id": cls.company_data[ + "default_account_assets" + ].id, + "journal_id": cls.company_data["default_journal_purchase"].id, + "transfer_journal_id": cls.company_data["default_journal_misc"].id, + "asset_product_item": True, + "name": "Asset Under Construction", + "method_time": "year", + "method_number": 0, + "method_period": "year", + } + ) + + # Profile normal asset + cls.profile_asset = cls.asset_profile_model.create( + { + "account_expense_depreciation_id": cls.company_data[ + "default_account_expense" + ].id, + "account_asset_id": cls.company_data["default_account_assets"].id, + "account_depreciation_id": cls.company_data[ + "default_account_assets" + ].id, + "journal_id": cls.company_data["default_journal_purchase"].id, + "asset_product_item": True, + "name": "Room - 5 Years", + "method_time": "year", + "method_number": 5, + "method_period": "year", + } + ) + + def test_01_asset_transfer_auc_to_asset(self): + """Create AUC and then transfer to normal asset class, + I expect a new journal entry will be created""" + # Create 3 AUC assets from an invoice + move_form = Form( + self.env["account.move"].with_context( + default_move_type="in_invoice", check_move_validity=False + ) + ) + move_form.invoice_date = fields.Date.context_today(self.env.user) + move_form.partner_id = self.partner + with move_form.invoice_line_ids.new() as line_form: + line_form.name = "Wall" + line_form.price_unit = 2000.00 + line_form.asset_profile_id = self.profile_auc + with move_form.invoice_line_ids.new() as line_form: + line_form.name = "Roof" + line_form.price_unit = 10000.00 + line_form.asset_profile_id = self.profile_auc + with move_form.invoice_line_ids.new() as line_form: + line_form.name = "Floor" + line_form.price_unit = 10000.00 + line_form.asset_profile_id = self.profile_auc + self.invoice_auc = move_form.save() + self.invoice_auc.invoice_line_ids.write( + {"asset_profile_id": self.profile_auc.id} + ) + self.invoice_auc.action_post() + # Create AUC asset without move + asset_auc = self.env["account.asset"].create( + { + "name": "Door", + "profile_id": self.profile_auc.id, + "purchase_value": 1000, + "date_start": fields.Date.context_today(self.env.user), + } + ) + # Test can_transfer status + assets = self.invoice_auc.invoice_line_ids.mapped("asset_id") + assets += asset_auc + self.assertFalse(list(set(assets.mapped("can_transfer")))[0]) + assets.validate() + assets.invalidate_model() + # can_transfer = True after validate + self.assertTrue(list(set(assets.mapped("can_transfer")))[0]) + self.assertEqual(list(set(assets.mapped("is_transfer"))), [False]) + # Keep source asset + source_assets = assets + # Create Asset Transfer + transfer_form = Form( + self.env["account.asset.transfer"].with_context(active_ids=assets.ids) + ) + transfer_wiz = transfer_form.save() + with self.assertRaises(UserError): + transfer_wiz.transfer() + with transfer_form.to_asset_ids.new() as to_asset: + to_asset.asset_name = "Asset 1" + to_asset.asset_profile_id = self.profile_asset + to_asset.quantity = 6 + to_asset.price_unit = 500 + with transfer_form.to_asset_ids.new() as to_asset: + to_asset.asset_name = "Asset 2" + to_asset.asset_profile_id = self.profile_asset + to_asset.quantity = 1 + to_asset.price_unit = 20000 + transfer_form.save() + # Test expand asset lines from quantity line + self.assertEqual(len(transfer_wiz.to_asset_ids), 2) + transfer_wiz.expand_to_asset_ids() + self.assertEqual(len(transfer_wiz.to_asset_ids), 7) + res = transfer_wiz.transfer() + transfer_move = self.env["account.move"].browse(res["domain"][0][2]) + assets = transfer_move.invoice_line_ids.mapped("asset_id") + # 2 new assets created, and value equal to original assets + new_assets = assets.filtered(lambda l: l.state == "draft") + self.assertEqual(sum(new_assets.mapped("purchase_value")), 23000) + # All asset transfer will change to is_transfer + self.assertEqual(list(set(assets.mapped("is_transfer"))), [True]) + # Check source asset from new asset + result = new_assets[0].with_context(asset_from=1).open_assets() + self.assertEqual(sorted(result["domain"][0][2]), source_assets.ids) + # Check dest asset from source asset + result = source_assets[0].with_context(asset_to=1).open_assets() + self.assertEqual(result["domain"][0][2], new_assets.ids) diff --git a/account_asset_transfer/views/account_asset.xml b/account_asset_transfer/views/account_asset.xml new file mode 100644 index 000000000..ba99382de --- /dev/null +++ b/account_asset_transfer/views/account_asset.xml @@ -0,0 +1,79 @@ + + + + account.asset.form + account.asset + + + + + + + +