diff --git a/purchase_container/README.rst b/purchase_container/README.rst new file mode 100644 index 00000000000..379554bdadd --- /dev/null +++ b/purchase_container/README.rst @@ -0,0 +1,95 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +================== +Purchase Container +================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:baa8fdb1bf7c768b597127f43206886bc305180a2ea9536616b333d388fdd394 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/license-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%2Fpurchase--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/purchase-workflow/tree/19.0/purchase_container + :alt: OCA/purchase-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/purchase-workflow-19-0/purchase-workflow-19-0-purchase_container + :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/purchase-workflow&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Add containers to purchase orders and stock pickings. + +|Purchase container image| + +.. |Purchase container image| image:: https://raw.githubusercontent.com/OCA/purchase-workflow/19.0/purchase_container/static/description/img.png + +**Table of contents** + +.. contents:: + :local: + +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 +------- + +* Akretion + +Contributors +------------ + +- Akretion + + - Olivier Nibart + - Mathieu Delva + +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-nayatec| image:: https://github.com/nayatec.png?size=40px + :target: https://github.com/nayatec + :alt: nayatec + +Current `maintainer `__: + +|maintainer-nayatec| + +This module is part of the `OCA/purchase-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/purchase_container/__init__.py b/purchase_container/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/purchase_container/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/purchase_container/__manifest__.py b/purchase_container/__manifest__.py new file mode 100644 index 00000000000..a60ef0c9423 --- /dev/null +++ b/purchase_container/__manifest__.py @@ -0,0 +1,21 @@ +{ + "name": "Purchase Container", + "summary": """Add containers to purchase orders and stock pickings.""", + "version": "19.0.1.0.0", + "license": "AGPL-3", + "maintainers": ["nayatec"], + "author": "Akretion, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/purchase-workflow", + "depends": [ + "purchase_stock", + ], + "data": [ + "data/container.type.csv", + "data/cron_data.xml", + "views/container_type.xml", + "views/purchase.xml", + "views/purchase_container.xml", + "views/stock_picking.xml", + "security/ir.model.access.csv", + ], +} diff --git a/purchase_container/data/container.type.csv b/purchase_container/data/container.type.csv new file mode 100644 index 00000000000..1a166b474e3 --- /dev/null +++ b/purchase_container/data/container.type.csv @@ -0,0 +1,6 @@ +id,name +container_20,20' +container_40,40' +container_40HC,40' HC +container_lcl,LCL +container_lcl_air,LCL Air diff --git a/purchase_container/data/cron_data.xml b/purchase_container/data/cron_data.xml new file mode 100644 index 00000000000..048e8733fcd --- /dev/null +++ b/purchase_container/data/cron_data.xml @@ -0,0 +1,14 @@ + + + Recompute purchase container state + + + 1 + days + +records = model.search([("state", "in", ["waiting", "transit"])]) +if records: + records._compute_state() + + + diff --git a/purchase_container/i18n/it.po b/purchase_container/i18n/it.po new file mode 100644 index 00000000000..91554974299 --- /dev/null +++ b/purchase_container/i18n/it.po @@ -0,0 +1,510 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_container +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-11-10 10:44+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\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 5.10.4\n" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.container_type_view_form +msgid "40HC" +msgstr "40HC" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ata +msgid "ATA Date" +msgstr "Data ATA" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_atd +msgid "ATD Date" +msgstr "Data ATD" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_ids +msgid "Activities" +msgstr "Attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decorazione eccezione attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_state +msgid "Activity State" +msgstr "Stato attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icona tipo attività" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ata +msgid "Actual Time Of Arrival" +msgstr "Ora di arrivo attuale" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_atd +msgid "Actual Time Of Departure" +msgstr "Ora di partenza attuale" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Arrival" +msgstr "Arrivo" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__arrival_location_id +msgid "Arrival Location" +msgstr "Località di arrivo" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__arrived +msgid "Arrived" +msgstr "Arrivato" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_attachment_count +msgid "Attachment Count" +msgstr "Conteggio allegati" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__bill_of_lading_ref +msgid "Bill Of Lading No." +msgstr "N° della bolla di carico" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight +msgid "Bruto Weight" +msgstr "Peso lordo" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_stock_picking__container_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container" +msgstr "Contenitore" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__code +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container Reference" +msgstr "Riferimento contenitore" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.container_type_action +#: model:ir.ui.menu,name:purchase_container.menu_container_type +msgid "Container Types" +msgstr "Tipi contenitore" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.purchase_container_action +#: model:ir.model.fields,field_description:purchase_container.field_purchase_order__container_ids +#: model:ir.ui.menu,name:purchase_container.menu_procurement_management_container +msgid "Containers" +msgstr "Contenitori" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost +msgid "Cost" +msgstr "Costo" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost_currency_id +msgid "Cost Currency" +msgstr "Valuta costo" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Departure" +msgstr "Partenza" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__departure_location_id +msgid "Departure Location" +msgstr "Località di partenza" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__description +msgid "Description" +msgstr "Descrizione" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__display_name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__displayed_incoterm_id +msgid "Displayed Incoterm" +msgstr "Incoterm visualizzati" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_eta +msgid "ETA Date" +msgstr "Data ETA" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_etd +msgid "ETD Date" +msgstr "Data ETD" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ett +msgid "ETT Date" +msgstr "Data ETT" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_eta +msgid "Estimated Time Of Arrival" +msgstr "Ora di arrivo stimata" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_etd +msgid "Estimated Time Of Departure" +msgstr "Ora di partenza stimata" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ett +msgid "Estimated Time Of Travel" +msgstr "Tempo di viaggio stimato" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icona Font Awesome es. fa-tasks" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__has_message +msgid "Has Message" +msgstr "Ha un messaggio" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__id +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__id +msgid "ID" +msgstr "ID" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon" +msgstr "Icona" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icona per indicare un'attività eccezione." + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__incoterm_id +msgid "Incoterm" +msgstr "Incoterm" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_is_follower +msgid "Is Follower" +msgstr "Segue" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__is_locked +msgid "Is Locked" +msgstr "È bloccato" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Lock" +msgstr "Blocco" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__locked +msgid "Locked" +msgstr "Bloccato" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__manual_incoterm_id +msgid "Manual Incoterm" +msgstr "Incoterm manuale" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Scadenza mia attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__name +msgid "Name" +msgstr "Nome" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Scadenza prossima attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_summary +msgid "Next Activity Summary" +msgstr "Riepilogo prossima attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo prossima attività" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_order_view_form_container +msgid "Open" +msgstr "Apri" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__package_qty +msgid "Package Qty" +msgstr "Q.tà collo" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_order +msgid "Purchase Order" +msgstr "Ordine di acquisto" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchase Orders" +msgstr "Ordini di acquisto" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_container +msgid "Purchase order related container" +msgstr "Contenitore relativo all'ordine di acquisto" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchases" +msgstr "Acquisti" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_rfq_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "RFQ" +msgstr "RdP" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Receipts" +msgstr "Ricevute" + +#. module: purchase_container +#: model:ir.actions.server,name:purchase_container.ir_cron_recompute_purchase_container_state_ir_actions_server +msgid "Recompute purchase container state" +msgstr "Ricalcola stato container acquisto" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_ids +msgid "Related Pickings" +msgstr "Prelievi correlati" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_ids +msgid "Related Purchases" +msgstr "Acquisti correlati" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_user_id +msgid "Responsible User" +msgstr "Utente responsabile" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__shipping_agent_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Shipping Agent" +msgstr "Agente spedizione" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__state +msgid "State" +msgstr "Stato" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__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: purchase_container +#: model:ir.model,name:purchase_container.model_stock_picking +msgid "Transfer" +msgstr "Trasferimento" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Transfers" +msgstr "Trasferimenti" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__transit +msgid "Transit" +msgstr "Transito" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__type_id +msgid "Type" +msgstr "Tipo" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo di attività eccezione sul record." + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Unlock" +msgstr "Sblocca" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_container_type +msgid "Usual containers" +msgstr "Contenitori consueto" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Volume" +msgstr "Volume" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume_uom_id +msgid "Volume Units of Measure" +msgstr "Unità di misura del volume" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__waiting +msgid "Waiting" +msgstr "Attesa" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Unit of Measure" +msgstr "Unità di misura del peso" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Units of Measure" +msgstr "Unità di misura del peso" + +#~ msgid "SMS Delivery error" +#~ msgstr "Errore consegna SMS" diff --git a/purchase_container/i18n/pt_BR.po b/purchase_container/i18n/pt_BR.po new file mode 100644 index 00000000000..506b6c99030 --- /dev/null +++ b/purchase_container/i18n/pt_BR.po @@ -0,0 +1,503 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_container +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-09-03 19:43+0000\n" +"Last-Translator: Douglas Custódio \n" +"Language-Team: none\n" +"Language: pt_BR\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 5.10.4\n" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.container_type_view_form +msgid "40HC" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ata +msgid "ATA Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_atd +msgid "ATD Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_ids +msgid "Activities" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoração de Exceção de Atividade" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_state +msgid "Activity State" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_icon +msgid "Activity Type Icon" +msgstr "Ícone do Tipo de Atividade" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ata +msgid "Actual Time Of Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_atd +msgid "Actual Time Of Departure" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__arrival_location_id +msgid "Arrival Location" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__arrived +msgid "Arrived" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__bill_of_lading_ref +msgid "Bill Of Lading No." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight +msgid "Bruto Weight" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_stock_picking__container_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__code +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container Reference" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.container_type_action +#: model:ir.ui.menu,name:purchase_container.menu_container_type +msgid "Container Types" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.purchase_container_action +#: model:ir.model.fields,field_description:purchase_container.field_purchase_order__container_ids +#: model:ir.ui.menu,name:purchase_container.menu_procurement_management_container +msgid "Containers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost +msgid "Cost" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost_currency_id +msgid "Cost Currency" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_uid +msgid "Created by" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_date +msgid "Created on" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Departure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__departure_location_id +msgid "Departure Location" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__description +msgid "Description" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__display_name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__display_name +msgid "Display Name" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__displayed_incoterm_id +msgid "Displayed Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_eta +msgid "ETA Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_etd +msgid "ETD Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ett +msgid "ETT Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_eta +msgid "Estimated Time Of Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_etd +msgid "Estimated Time Of Departure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ett +msgid "Estimated Time Of Travel" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Group By" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__has_message +msgid "Has Message" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__id +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__id +msgid "ID" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__incoterm_id +msgid "Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__is_locked +msgid "Is Locked" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_date +msgid "Last Updated on" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Lock" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__locked +msgid "Locked" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__manual_incoterm_id +msgid "Manual Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_ids +msgid "Messages" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__name +msgid "Name" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_order_view_form_container +msgid "Open" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__package_qty +msgid "Package Qty" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchase Orders" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_container +msgid "Purchase order related container" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchases" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_rfq_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "RFQ" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Receipts" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.server,name:purchase_container.ir_cron_recompute_purchase_container_state_ir_actions_server +msgid "Recompute purchase container state" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_ids +msgid "Related Pickings" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_ids +msgid "Related Purchases" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__shipping_agent_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Shipping Agent" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__state +msgid "State" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__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: purchase_container +#: model:ir.model,name:purchase_container.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Transfers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__transit +msgid "Transit" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__type_id +msgid "Type" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo da atividade de exceção no registro." + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Unlock" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_container_type +msgid "Usual containers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Volume" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume_uom_id +msgid "Volume Units of Measure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__waiting +msgid "Waiting" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Unit of Measure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Units of Measure" +msgstr "" diff --git a/purchase_container/i18n/purchase_container.pot b/purchase_container/i18n/purchase_container.pot new file mode 100644 index 00000000000..c2768cf114a --- /dev/null +++ b/purchase_container/i18n/purchase_container.pot @@ -0,0 +1,500 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_container +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.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: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.container_type_view_form +msgid "40HC" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ata +msgid "ATA Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_atd +msgid "ATD Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_ids +msgid "Activities" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_state +msgid "Activity State" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ata +msgid "Actual Time Of Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_atd +msgid "Actual Time Of Departure" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__arrival_location_id +msgid "Arrival Location" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__arrived +msgid "Arrived" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__bill_of_lading_ref +msgid "Bill Of Lading No." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight +msgid "Bruto Weight" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_stock_picking__container_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__code +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Container Reference" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.container_type_action +#: model:ir.ui.menu,name:purchase_container.menu_container_type +msgid "Container Types" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.act_window,name:purchase_container.purchase_container_action +#: model:ir.model.fields,field_description:purchase_container.field_purchase_order__container_ids +#: model:ir.ui.menu,name:purchase_container.menu_procurement_management_container +msgid "Containers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost +msgid "Cost" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__cost_currency_id +msgid "Cost Currency" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_uid +msgid "Created by" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__create_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__create_date +msgid "Created on" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Departure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__departure_location_id +msgid "Departure Location" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__description +msgid "Description" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__display_name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__display_name +msgid "Display Name" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__displayed_incoterm_id +msgid "Displayed Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_eta +msgid "ETA Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_etd +msgid "ETD Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__date_ett +msgid "ETT Date" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_eta +msgid "Estimated Time Of Arrival" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_etd +msgid "Estimated Time Of Departure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__date_ett +msgid "Estimated Time Of Travel" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Group By" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__has_message +msgid "Has Message" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__id +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__id +msgid "ID" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__incoterm_id +msgid "Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__is_locked +msgid "Is Locked" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_uid +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__write_date +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__write_date +msgid "Last Updated on" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Lock" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__locked +msgid "Locked" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__manual_incoterm_id +msgid "Manual Incoterm" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_ids +msgid "Messages" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_container_type__name +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__name +msgid "Name" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_order_view_form_container +msgid "Open" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__package_qty +msgid "Package Qty" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchase Orders" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_purchase_container +msgid "Purchase order related container" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Purchases" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_rfq_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "RFQ" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_count +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Receipts" +msgstr "" + +#. module: purchase_container +#: model:ir.actions.server,name:purchase_container.ir_cron_recompute_purchase_container_state_ir_actions_server +msgid "Recompute purchase container state" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__picking_ids +msgid "Related Pickings" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__purchase_order_ids +msgid "Related Purchases" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__shipping_agent_id +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_search +msgid "Shipping Agent" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__state +msgid "State" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__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: purchase_container +#: model:ir.model,name:purchase_container.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Transfers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__transit +msgid "Transit" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__type_id +msgid "Type" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: purchase_container +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Unlock" +msgstr "" + +#. module: purchase_container +#: model:ir.model,name:purchase_container.model_container_type +msgid "Usual containers" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume +#: model_terms:ir.ui.view,arch_db:purchase_container.purchase_container_view_form +msgid "Volume" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__volume_uom_id +msgid "Volume Units of Measure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields.selection,name:purchase_container.selection__purchase_container__state__waiting +msgid "Waiting" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,help:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Unit of Measure" +msgstr "" + +#. module: purchase_container +#: model:ir.model.fields,field_description:purchase_container.field_purchase_container__weight_uom_id +msgid "Weight Units of Measure" +msgstr "" diff --git a/purchase_container/models/__init__.py b/purchase_container/models/__init__.py new file mode 100644 index 00000000000..63183983787 --- /dev/null +++ b/purchase_container/models/__init__.py @@ -0,0 +1,6 @@ +from . import ( + container_type, + purchase_container, + purchase_order, + stock_picking, +) diff --git a/purchase_container/models/container_type.py b/purchase_container/models/container_type.py new file mode 100644 index 00000000000..a366b72a2cb --- /dev/null +++ b/purchase_container/models/container_type.py @@ -0,0 +1,9 @@ +from odoo import fields, models + + +class ContainerType(models.Model): + _name = "container.type" + _description = "Usual containers" + + name = fields.Char() + description = fields.Char() diff --git a/purchase_container/models/purchase_container.py b/purchase_container/models/purchase_container.py new file mode 100644 index 00000000000..6f28864cb30 --- /dev/null +++ b/purchase_container/models/purchase_container.py @@ -0,0 +1,259 @@ +from datetime import date + +from odoo import api, fields, models + + +class PurchaseContainer(models.Model): + _name = "purchase.container" + _description = "Purchase order related container" + _inherit = ["mail.thread", "mail.activity.mixin"] + _order = "id desc" + + name = fields.Char(compute="_compute_name", store=True, readonly=True, index=True) + code = fields.Char( + string="Container Reference", + compute="_compute_code", + inverse="_inverse_code", + store=True, + required=True, + copy=False, + ) + bill_of_lading_ref = fields.Char("Bill Of Lading No.", copy=False) + shipping_agent_id = fields.Many2one( + comodel_name="res.partner", string="Shipping Agent" + ) + type_id = fields.Many2one(comodel_name="container.type") + package_qty = fields.Integer(copy=False) + cost = fields.Float(digits="Product Price", copy=False) + cost_currency_id = fields.Many2one("res.currency", "Cost Currency", copy=False) + volume = fields.Float(digits="Volume", copy=False) + volume_uom_id = fields.Many2one( + "uom.uom", + string="Volume Units of Measure", + default=lambda self: self.env[ + "product.template" + ]._get_volume_uom_id_from_ir_config_parameter(), + ) + weight = fields.Float(string="Bruto Weight", digits="Stock Weight", copy=False) + weight_uom_id = fields.Many2one( + "uom.uom", + string="Weight Units of Measure", + help="Weight Unit of Measure", + default=lambda self: self.env[ + "product.template" + ]._get_weight_uom_id_from_ir_config_parameter(), + ) + purchase_order_ids = fields.Many2many( + "purchase.order", string="Related Purchases", copy=False + ) + purchase_order_count = fields.Integer( + string="Purchases", compute="_compute_purchase_order_count" + ) + purchase_order_rfq_count = fields.Integer( + string="RFQ", compute="_compute_purchase_order_rfq_count" + ) + picking_ids = fields.One2many( + comodel_name="stock.picking", + inverse_name="container_id", + string="Related Pickings", + ) + picking_count = fields.Integer(string="Receipts", compute="_compute_picking_count") + + incoterm_id = fields.Many2one( + "account.incoterms", compute="_compute_incoterm_id", store=False, readonly=True + ) + manual_incoterm_id = fields.Many2one("account.incoterms") + displayed_incoterm_id = fields.Many2one( + "account.incoterms", + compute="_compute_displayed_incoterm_id", + inverse="_inverse_displayed_incoterm_id", + store=True, + tracking=True, + ) + + departure_location_id = fields.Many2one("res.partner") + arrival_location_id = fields.Many2one("res.partner") + date_eta = fields.Date( + string="ETA Date", help="Estimated Time Of Arrival", tracking=True + ) + date_etd = fields.Date( + string="ETD Date", help="Estimated Time Of Departure", tracking=True + ) + date_ata = fields.Date( + string="ATA Date", help="Actual Time Of Arrival", tracking=True + ) + date_atd = fields.Date( + string="ATD Date", help="Actual Time Of Departure", tracking=True + ) + date_ett = fields.Char( + string="ETT Date", + help="Estimated Time Of Travel", + compute="_compute_date_ett", + store=False, + tracking=True, + ) + + state = fields.Selection( + [ + ("waiting", "Waiting"), + ("transit", "Transit"), + ("arrived", "Arrived"), + ("locked", "Locked"), + ], + compute="_compute_state", + store=True, + tracking=True, + ) + is_locked = fields.Boolean() + + def _compute_incoterm_id(self): + for record in self: + record.incoterm_id = record.purchase_order_ids.filtered( + lambda po: po.incoterm_id + )[:1].incoterm_id + + @api.depends( + "manual_incoterm_id", "purchase_order_ids", "purchase_order_ids.incoterm_id" + ) + def _compute_displayed_incoterm_id(self): + for record in self: + record.displayed_incoterm_id = ( + record.manual_incoterm_id + if record.manual_incoterm_id + else record.incoterm_id + ) + + def _inverse_displayed_incoterm_id(self): + for record in self: + record.manual_incoterm_id = record.displayed_incoterm_id + + @api.depends("date_eta", "date_etd") + def _compute_date_ett(self): + for record in self: + record.date_ett = 0 + if record.date_eta and record.date_etd: + record.date_ett = record.date_eta - record.date_etd + + @api.depends("is_locked", "date_etd", "date_atd", "picking_ids.state") + def _compute_state(self): + for record in self: + departure_date = record.date_atd if record.date_atd else record.date_etd + + picking_states = set(record.picking_ids.mapped("state")) + if record.is_locked: + record.state = "locked" + elif picking_states and picking_states.issubset({"done", "cancel"}): + record.state = "arrived" + elif departure_date and departure_date <= date.today(): + record.state = "transit" + else: + record.state = "waiting" + + def button_lock(self): + self.is_locked = True + + def button_unlock(self): + self.is_locked = False + + @api.depends("code", "purchase_order_ids") + def _compute_name(self): + for record in self: + record.name = record.code + po = record.purchase_order_ids + if po: + record.name += " ({})".format(",".join(po.mapped("name"))) + + @api.model + def _code_transform(self, code): + return code.upper() if code else code + + @api.model + def _code_from_name(self, name): + words = name.split() if name else None + code = words[0] if words else False + return self._code_transform(code) + + @api.depends("name") + def _compute_code(self): + for record in self: + if not record.code: + record.code = record._code_from_name(record.name) + + def _inverse_code(self): + for record in self: + code = self._code_transform(record.code) + if record.code != code: + record.code = code + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + vals.setdefault("code", self._code_from_name(vals.get("name"))) + return super().create(vals_list=vals_list) + + def _compute_purchase_order_count(self): + for record in self: + record.purchase_order_count = self.env["purchase.order"].search_count( + [ + ("state", "in", ("purchase", "done")), + ("container_ids", "=", self.id), + ], + ) + + def _compute_purchase_order_rfq_count(self): + for record in self: + record.purchase_order_rfq_count = self.env["purchase.order"].search_count( + [ + ("state", "in", ("draft", "sent", "to approve")), + ("container_ids", "=", self.id), + ], + ) + + def _compute_picking_count(self): + for record in self: + record.picking_count = len(record.picking_ids) + + def action_view_rfq(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq") + action["domain"] = [ + ( + "id", + "in", + [ + po.id + for po in self.purchase_order_ids + if po.state in ("draft", "sent", "to approve") + ], + ) + ] + action["context"] = {"create": False} + return action + + def action_view_order(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "purchase.purchase_form_action" + ) + action["domain"] = [ + ( + "id", + "in", + [ + po.id + for po in self.purchase_order_ids + if po.state in ("purchase", "done") + ], + ) + ] + action["context"] = {"create": False} + return action + + def action_view_picking(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "stock.action_picking_tree_all" + ) + action["domain"] = [("id", "in", self.picking_ids.ids)] + action["context"] = {"create": False} + return action diff --git a/purchase_container/models/purchase_order.py b/purchase_container/models/purchase_order.py new file mode 100644 index 00000000000..15324f844c3 --- /dev/null +++ b/purchase_container/models/purchase_order.py @@ -0,0 +1,36 @@ +from odoo import Command, api, fields, models + + +class PurchaseOrder(models.Model): + _inherit = "purchase.order" + + container_ids = fields.Many2many( + "purchase.container", + string="Containers", + compute="_compute_container_ids", + inverse="_inverse_container_ids", + copy=False, + store=True, + index=True, + ) + + @api.depends("picking_ids.container_id") + def _compute_container_ids(self): + for purchase in self: + if purchase.picking_ids: + purchase.container_ids = [ + Command.set(purchase.picking_ids.container_id.ids) + ] + + def _inverse_container_ids(self): + pass + + def _prepare_picking(self): + # This function initialize the picking vals from the current order + vals = super()._prepare_picking() + # So if we have at least a container set on the order, we should + # initialize the picking container with one. + if self.container_ids: + # Arbitrarily, we take the first one by default + vals["container_id"] = self.container_ids[0].id + return vals diff --git a/purchase_container/models/stock_picking.py b/purchase_container/models/stock_picking.py new file mode 100644 index 00000000000..77b2cf41c52 --- /dev/null +++ b/purchase_container/models/stock_picking.py @@ -0,0 +1,9 @@ +from odoo import fields, models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + container_id = fields.Many2one( + "purchase.container", string="Container", copy=False, index=True + ) diff --git a/purchase_container/pyproject.toml b/purchase_container/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/purchase_container/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/purchase_container/readme/CONTRIBUTORS.md b/purchase_container/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..629a218f062 --- /dev/null +++ b/purchase_container/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +* Akretion + * Olivier Nibart + * Mathieu Delva diff --git a/purchase_container/readme/DESCRIPTION.md b/purchase_container/readme/DESCRIPTION.md new file mode 100644 index 00000000000..e82102c0ed5 --- /dev/null +++ b/purchase_container/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +Add containers to purchase orders and stock pickings. + +![Purchase container image](../static/description/img.png) diff --git a/purchase_container/security/ir.model.access.csv b/purchase_container/security/ir.model.access.csv new file mode 100644 index 00000000000..b090883f165 --- /dev/null +++ b/purchase_container/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_purchase_container,purchase.container,model_purchase_container,purchase.group_purchase_user,1,1,1,1 +access_container_type,container.type,model_container_type,purchase.group_purchase_user,1,1,1,1 +access_purchase_container_manager,purchase.container,model_purchase_container,purchase.group_purchase_manager,1,1,1,1 +access_purchase_container_readonly,purchase.container,model_purchase_container,account.group_account_readonly,1,0,0,0 +access_purchase_container_invoice,purchase.container,model_purchase_container,account.group_account_invoice,1,1,0,0 diff --git a/purchase_container/static/description/icon.png b/purchase_container/static/description/icon.png new file mode 100644 index 00000000000..1dcc49c24f3 Binary files /dev/null and b/purchase_container/static/description/icon.png differ diff --git a/purchase_container/static/description/img.png b/purchase_container/static/description/img.png new file mode 100644 index 00000000000..b9970bef1b6 Binary files /dev/null and b/purchase_container/static/description/img.png differ diff --git a/purchase_container/static/description/index.html b/purchase_container/static/description/index.html new file mode 100644 index 00000000000..db89b7a1c94 --- /dev/null +++ b/purchase_container/static/description/index.html @@ -0,0 +1,436 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Purchase Container

+ +

Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runboat

+

Add containers to purchase orders and stock pickings.

+

Purchase container image

+

Table of contents

+ +
+

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

+
    +
  • Akretion
  • +
+
+
+

Contributors

+
    +
  • Akretion
      +
    • Olivier Nibart
    • +
    • Mathieu Delva
    • +
    +
  • +
+
+
+

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:

+

nayatec

+

This module is part of the OCA/purchase-workflow project on GitHub.

+

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

+
+
+
+
+ + diff --git a/purchase_container/tests/__init__.py b/purchase_container/tests/__init__.py new file mode 100644 index 00000000000..d9b96c4fa5a --- /dev/null +++ b/purchase_container/tests/__init__.py @@ -0,0 +1 @@ +from . import test_module diff --git a/purchase_container/tests/test_module.py b/purchase_container/tests/test_module.py new file mode 100644 index 00000000000..65a2ae8f760 --- /dev/null +++ b/purchase_container/tests/test_module.py @@ -0,0 +1,78 @@ +from odoo import Command, fields + +from odoo.addons.base.tests.common import BaseCommon + + +class Test(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner = cls.env["res.partner"].create({"name": "Test Supplier"}) + cls.product = cls.env["product.product"].create({"name": "Test Product"}) + cls.cont_a = cls.env["purchase.container"].create({"code": "AA"}) + cls.cont_b = cls.env["purchase.container"].create({"code": "BB"}) + cls.incoterm_id = cls.env.ref("account.incoterm_FCA") + + def test_container_by_purchase(self): + # first PO + po = self.get_po() + po.button_confirm() + pick01 = po.picking_ids[0] + pick01.container_id = self.cont_a.id + self.assertIn(self.cont_a, po.container_ids) + self.assertEqual(self.cont_a.purchase_order_count, 1) + pick01.button_validate() + # this update triggers a new picking + po.order_line[0].product_qty = 7 + pick02 = po.picking_ids.filtered(lambda x: x.state != "done") + pick02.container_id = self.cont_b.id + pick02.button_validate() + self.assertEqual(pick02.state, "done") + self.assertIn(self.cont_b, po.container_ids) + self.assertEqual(self.cont_b.purchase_order_count, 1) + # second PO + po2 = po.copy() + po2.button_confirm() + pick11 = po2.picking_ids + pick11.container_id = self.cont_b.id + pick11.button_validate() + self.assertIn(self.cont_b, po2.container_ids) + self.assertEqual(pick11.state, "done") + self.assertEqual(len(self.cont_b.purchase_order_ids), 2) + self.assertEqual(self.cont_b.purchase_order_count, 1) + # this method is not computed because not a stored field + self.cont_b._compute_purchase_order_count() + self.assertEqual(self.cont_b.purchase_order_count, 2) + + self.cont_b._compute_incoterm_id() + self.assertEqual(self.cont_b.displayed_incoterm_id, self.incoterm_id) + + def test_action_views(self): + po = self.get_po() + po.button_confirm() + pick01 = po.picking_ids[0] + pick01.container_id = self.cont_a.id + self.cont_a.action_view_rfq() + self.cont_a.action_view_order() + self.cont_a.action_view_picking() + + def get_po(self): + return self.env["purchase.order"].create( + { + "partner_id": self.partner.id, + "date_planned": fields.Datetime.now(), + "incoterm_id": self.incoterm_id.id, + "order_line": [ + Command.create( + { + "name": "Test Line", + "product_id": self.product.id, + "product_qty": 4.0, + "product_uom_id": self.product.uom_id.id, + "price_unit": 1, + "date_planned": fields.Datetime.now(), + }, + ) + ], + } + ) diff --git a/purchase_container/views/container_type.xml b/purchase_container/views/container_type.xml new file mode 100644 index 00000000000..121c68a5992 --- /dev/null +++ b/purchase_container/views/container_type.xml @@ -0,0 +1,50 @@ + + + container.type + +
+ + + + + + + + + + +
+
+
+ + + container.type + + + + + + + + + + container.type + + + + + + + + + Container Types + container.type + list,form + + + +
diff --git a/purchase_container/views/purchase.xml b/purchase_container/views/purchase.xml new file mode 100644 index 00000000000..210369b542d --- /dev/null +++ b/purchase_container/views/purchase.xml @@ -0,0 +1,41 @@ + + + + purchase.order + + + + + + + + + + + + + + + +
+ Container +

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + purchase.container + + + + + + + + + + + + + + + + purchase.container + + + + + + + + + + + + + + + Containers + purchase.container + list,form + + + +
diff --git a/purchase_container/views/stock_picking.xml b/purchase_container/views/stock_picking.xml new file mode 100644 index 00000000000..1b5de599556 --- /dev/null +++ b/purchase_container/views/stock_picking.xml @@ -0,0 +1,22 @@ + + + + stock.picking + + + + + + + + + + stock.picking + + + + + + + +