diff --git a/rental_base_extension/README.rst b/rental_base_extension/README.rst new file mode 100644 index 000000000..f5a320ea6 --- /dev/null +++ b/rental_base_extension/README.rst @@ -0,0 +1,94 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +===================== +Rental Base Extension +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:09ab96bf14c0b83294c077459048e953907a79975688866d7ca219537c451e41 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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-nuobit%2Fodoo--addons-lightgray.png?logo=github + :target: https://github.com/nuobit/odoo-addons/tree/16.0/rental_base_extension + :alt: nuobit/odoo-addons + +|badge1| |badge2| |badge3| + +This module extends ``rental_base`` to improve the rental order experience +with better menu visibility and product filtering. + +Rental Positions menu +~~~~~~~~~~~~~~~~~~~~~ + +The ``rental_base`` module places the Rental Positions screen (the ``sale.rental`` +list) under Configuration and restricts it to debug mode. This module moves it +to the top level of the Rentals menu as the first entry, visible to all sales +users, since it is the primary screen for tracking rental status. + +Product filter on rental order lines +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When creating a rental order, the product dropdown on order lines only shows +rental service products (i.e. products linked to a rented physical product +via ``rented_product_id``). This prevents users from accidentally selecting +non-rental products on rental orders. + +Catalan and Spanish translations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Provides Catalan and Spanish translations for ``rental_base``, which does not +ship with these languages. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**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 +~~~~~~~ + +* NuoBiT Solutions SL + +Contributors +~~~~~~~~~~~~ + +* `NuoBiT `__: + + * Eric Antones + +Maintainers +~~~~~~~~~~~ + +This module is part of the `nuobit/odoo-addons `_ project on GitHub. + +You are welcome to contribute. diff --git a/rental_base_extension/__init__.py b/rental_base_extension/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/rental_base_extension/__manifest__.py b/rental_base_extension/__manifest__.py new file mode 100644 index 000000000..54fa78a22 --- /dev/null +++ b/rental_base_extension/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2026 NuoBiT Solutions SL - Eric Antones +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +{ + "name": "Rental Base Extension", + "summary": "Improves rental product form with checkbox visibility," + " rental sections and translations.", + "version": "16.0.1.0.0", + "development_status": "Alpha", + "category": "Rental", + "author": "NuoBiT Solutions SL", + "website": "https://github.com/nuobit/odoo-addons", + "license": "AGPL-3", + "depends": [ + "rental_base", + ], + "data": [ + "views/product_views.xml", + ], +} diff --git a/rental_base_extension/i18n/ca.po b/rental_base_extension/i18n/ca.po new file mode 100644 index 000000000..afc86479c --- /dev/null +++ b/rental_base_extension/i18n/ca.po @@ -0,0 +1,653 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rental_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-03-09 11:00+0000\n" +"PO-Revision-Date: 2026-03-09 11:00+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"\n" +"Order: %(order)s\n" +"Line with product: '%(product)s'\n" +"\n" +"Please use instead the button 'Update Times' in the order to correctly update the order line's times, its timeline entry, contract and its stock moves and pickings as required." +msgstr "" +"\n" +"Comanda: %(order)s\n" +"Línia amb producte: '%(product)s'\n" +"\n" +"Si us plau, utilitzeu el botó 'Actualitzar temps' a la comanda per actualitzar correctament els temps de la línia de comanda, la seva entrada de cronologia, contracte i els seus moviments d'estoc i albarans segons sigui necessari." + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.sale_start_end_dates +msgid "" +msgstr "" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • %(name)s: %(start_date)s - %(end_date)s->%(date_start)s - " +"%(date_end)s
  • " +msgstr "" +"
  • %(name)s: %(start_date)s - %(end_date)s->%(date_start)s - " +"%(date_end)s
  • " + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • (All lines): %(default_start_date)s -%(default_end_date)s-> " +"%(date_start)s - %(date_end)s
  • " +msgstr "" +"
  • (Totes les línies): %(default_start_date)s -%(default_end_date)s-> " +"%(date_start)s - %(date_end)s
  • " + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • (Lines: %(from_line)s - %(to_line)s): %(default_start_date)s - " +"%(default_end_date)s -> %(date_start)s - %(date_end)s
  • " +msgstr "" +"
  • (Línies: %(from_line)s - %(to_line)s): %(default_start_date)s - " +"%(default_end_date)s -> %(date_start)s - %(date_end)s
  • " + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid " " +msgstr "" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__all_line +msgid "All Lines" +msgstr "Totes les línies" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Attributes" +msgstr "Atributs" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "" +"By changing the start and end dates of order lines, the dates are also updated in the timeline,the related stock pickings and contracts, if available.\n" +" Attention: The ordered quantities are not updated!" +msgstr "" +"En canviar les dates d'inici i fi de les línies de comanda, les dates també s'actualitzen a la cronologia, als albarans d'estoc relacionats i als contractes, si estan disponibles.\n" +" Atenció: Les quantitats demanades no s'actualitzen!" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_product_product__rental +#: model:ir.model.fields,field_description:rental_base.field_product_template__rental +msgid "Can be Rent" +msgstr "Es pot llogar" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.rental_product_search_view +msgid "Can be Rented" +msgstr "Es pot llogar" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "Cancel" +msgstr "Cancel·la" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__change +msgid "Change" +msgstr "Canvi" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_config +msgid "Configuration" +msgstr "Configuració" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Configure your products with variants" +msgstr "Configura els teus productes amb variants" + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_orders +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_quotations +msgid "Create a new quotation, the first step of a new sale!" +msgstr "Crea un nou pressupost, el primer pas d'una nova venda!" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__create_uid +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__create_date +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_credit_notes +msgid "Customer Credit Notes" +msgstr "Notes de crèdit del client" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_invoices2 +msgid "Customer Invoices" +msgstr "Factures del client" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customers +#: model:ir.ui.menu,name:rental_base.menu_top_customer +msgid "Customers" +msgstr "Clients" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_end +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__date_end +msgid "Date End" +msgstr "Data de fi" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_in_line +msgid "Date In Line" +msgstr "Data a la línia" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_start +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__date_start +msgid "Date Start" +msgstr "Data d'inici" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Day(s)" +msgstr "Dia(es)" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order__default_end_date +msgid "Default End Date" +msgstr "Data de fi per defecte" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order__default_start_date +msgid "Default Start Date" +msgstr "Data d'inici per defecte" + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_sale_order_line__rental_qty_uom +msgid "Default unit of measure used for all stock operations." +msgstr "Unitat de mesura per defecte utilitzada per a totes les operacions d'estoc." + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.stock_picking_action_picking_type_in +#: model_terms:ir.actions.act_window,help:rental_base.stock_picking_action_picking_type_out +msgid "Define a new transfer" +msgstr "Defineix una nova transferència" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Delivered Rental Quantity" +msgstr "Quantitat de lloguer lliurada" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery +msgid "Delivery" +msgstr "Lliurament" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Description" +msgstr "Descripció" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_update_sale_line_date_line +msgid "Details for updating sale order line dates" +msgstr "Detalls per actualitzar les dates de les línies de comanda de venda" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__display_name +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__display_name +msgid "Display Name" +msgstr "Nom per mostrar" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__end_date +msgid "End Date" +msgstr "Data de fi" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__from_line +msgid "From" +msgstr "Des de" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__id +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__id +msgid "ID" +msgstr "ID" + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__all_line +msgid "" +"If set, all order lines of this order are updated with the given dates." +msgstr "" +"Si s'activa, totes les línies de comanda d'aquesta comanda s'actualitzen amb les dates indicades." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__date_in_line +msgid "If set, you can set an individual date in every selected position." +msgstr "Si s'activa, es pot establir una data individual a cada posició seleccionada." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__from_line +msgid "" +"In order to update one or several order lines, please set a number referring" +" to the first order line that should to be changed." +msgstr "" +"Per actualitzar una o diverses línies de comanda, si us plau indiqueu un número que faci referència a la primera línia de comanda que s'ha de canviar." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__to_line +msgid "" +"In order to update one or several order lines, please set a number referring" +" to the last order line that should to be changed." +msgstr "" +"Per actualitzar una o diverses línies de comanda, si us plau indiqueu un número que faci referència a l'última línia de comanda que s'ha de canviar." + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.stock_picking_action_picking_type_in +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery_incoming +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery_incoming +msgid "Incoming Deliveries" +msgstr "Lliuraments entrants" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Incoming shipment is in state %s. You cannot change the end date anymore." +msgstr "" +"L'enviament entrant està en estat %s. Ja no podeu canviar la data de fi." + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Invoiced Rental Time" +msgstr "Temps de lloguer facturat" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_invoices +#: model:ir.ui.menu,name:rental_base.menu_vendor_invoices +msgid "Invoices" +msgstr "Factures" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Invoicing" +msgstr "Facturació" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date____last_update +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line____last_update +msgid "Last Modified on" +msgstr "Última modificació el" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__write_uid +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__write_date +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Missing \"Rental to Extend\" on the sale order line with rental service " +"%(name)s." +msgstr "" +"Falta \"Lloguer a estendre\" a la línia de comanda de venda amb servei de lloguer %(name)s." + +#. module: rental_base +#: model:uom.uom,name:rental_base.product_uom_month +msgid "Month(s)" +msgstr "Mes(os)" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the \"new rental\" sale order line with product \"%(name)s\", we should " +"have a rental service product!" +msgstr "" +"A la línia de comanda de venda de \"nou lloguer\" amb producte \"%(name)s\", hauria d'haver-hi un producte de servei de lloguer!" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the sale order line with product %(name)s you are trying to sell a rented" +" product with a quantity (%(qty)s) that is different from the rented " +"quantity (%(sell_rental_qty)s). This is not supported." +msgstr "" +"A la línia de comanda de venda amb producte %(name)s esteu intentant vendre un producte llogat amb una quantitat (%(qty)s) diferent de la quantitat llogada (%(sell_rental_qty)s). Això no és compatible." + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the sale order line with rental service %(name)s ,you are trying to " +"extend a rental with a rental quantity (%(rental_qty)s) that is different " +"from the quantity of the original rental (%(ext_rental_qty)s). This is not " +"supported." +msgstr "" +"A la línia de comanda de venda amb servei de lloguer %(name)s, esteu intentant estendre un lloguer amb una quantitat de lloguer (%(rental_qty)s) diferent de la quantitat del lloguer original (%(ext_rental_qty)s). Això no és compatible." + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_orders +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_quotations +msgid "" +"Once the quotation is confirmed, it becomes a sales order.
    You will be " +"able to create an invoice and collect the payment." +msgstr "" +"Un cop confirmat el pressupost, es converteix en una comanda de venda.
    Podreu crear una factura i cobrar el pagament." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__order_id +msgid "Order" +msgstr "Comanda" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Information" +msgstr "Informació de la comanda" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__order_line_id +msgid "Order Line" +msgstr "Línia de comanda" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Reference" +msgstr "Referència de la comanda" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Type" +msgstr "Tipus de comanda" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Ordered Rental Time" +msgstr "Temps de lloguer demanat" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_orders +msgid "Orders" +msgstr "Comandes" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.stock_picking_action_picking_type_out +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery_outgoing +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery_outgoing +msgid "Outgoing Deliveries" +msgstr "Lliuraments sortints" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Outgoing shipment is in state %(state)s. You cannot change the start date " +"anymore." +msgstr "" +"L'enviament sortint està en estat %(state)s. Ja no podeu canviar la data d'inici." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__line_ids +msgid "Positions" +msgstr "Posicions" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_product_template +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__product_id +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Product" +msgstr "Producte" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__rental_qty_uom +msgid "Product Unit of Measure" +msgstr "Unitat de mesura del producte" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_product_product +msgid "Product Variant" +msgstr "Variant de producte" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.view_rental_product_action +msgid "Product Variants" +msgstr "Variants de producte" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_config_products +#: model:ir.ui.menu,name:rental_base.menu_master_data +#: model:ir.ui.menu,name:rental_base.menu_products +msgid "Products" +msgstr "Productes" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_quotations +msgid "Quotations" +msgstr "Pressupostos" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__rental +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Rental" +msgstr "Lloguer" + +#. module: rental_base +#: model:sale.order.type,name:rental_base.rental_sale_type +msgid "Rental Order" +msgstr "Comanda de lloguer" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_orders +#: model:ir.ui.menu,name:rental_base.menu_rental_orders +msgid "Rental Orders" +msgstr "Comandes de lloguer" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_rental_positions +msgid "Rental Positions" +msgstr "Posicions de lloguer" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Quantity" +msgstr "Quantitat de lloguer" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_quotations +#: model:ir.ui.menu,name:rental_base.menu_rental_quotations +msgid "Rental Quotations" +msgstr "Pressupostos de lloguer" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Settings" +msgstr "Configuració de lloguer" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Time Unit" +msgstr "Unitat de temps de lloguer" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Times" +msgstr "Temps de lloguer" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_rental_root +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Rentals" +msgstr "Lloguers" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_sale_order +msgid "Sales Order" +msgstr "Comanda de venda" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línia de comanda de venda" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_ir_sequence +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__sequence +msgid "Sequence" +msgstr "Seqüència" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.sale_start_end_dates +msgid "Service Period" +msgstr "Període de servei" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_configuration +#: model:ir.ui.menu,name:rental_base.menu_settings +msgid "Settings" +msgstr "Configuració" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__start_date +msgid "Start Date" +msgstr "Data d'inici" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "The value in 'To' is less then the value in 'From'." +msgstr "El valor de 'Fins a' és inferior al valor de 'Des de'." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__to_line +msgid "To" +msgstr "Fins a" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Transport" +msgstr "Transport" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "Update" +msgstr "Actualitza" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "Update Date of Sale Order Lines" +msgstr "Actualitzar data de les línies de comanda de venda" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_update_sale_line_date +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Update Times" +msgstr "Actualitzar temps" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_vendor_bills +msgid "Vendor Bills" +msgstr "Factures de proveïdor" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_vendor_credit_notes +msgid "Vendor Credit Notes" +msgstr "Notes de crèdit del proveïdor" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_top_vendor +#: model:ir.ui.menu,name:rental_base.menu_vendors +msgid "Vendors" +msgstr "Proveïdors" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__wizard_id +msgid "Wizard" +msgstr "Assistent" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_update_sale_line_date +msgid "Wizard for updating sale order line dates" +msgstr "Assistent per actualitzar les dates de les línies de comanda de venda" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"You are not allowed to change the 'end date' in an order line of a confirmed" +" order." +msgstr "" +"No teniu permís per canviar la 'data de fi' a una línia de comanda d'una comanda confirmada." + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"You are not allowed to change the 'start date' in an order line of a " +"confirmed order." +msgstr "" +"No teniu permís per canviar la 'data d'inici' a una línia de comanda d'una comanda confirmada." + +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Create Rental Service" +msgstr "Crear servei de lloguer" diff --git a/rental_base_extension/i18n/es.po b/rental_base_extension/i18n/es.po new file mode 100644 index 000000000..510a3b1f8 --- /dev/null +++ b/rental_base_extension/i18n/es.po @@ -0,0 +1,665 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rental_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-03-09 11:00+0000\n" +"PO-Revision-Date: 2026-03-09 11:00+0000\n" +"Last-Translator: \n" +"Language-Team: \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" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"\n" +"Order: %(order)s\n" +"Line with product: '%(product)s'\n" +"\n" +"Please use instead the button 'Update Times' in the order to correctly update the order line's times, its timeline entry, contract and its stock moves and pickings as required." +msgstr "" +"\n" +"Pedido: %(order)s\n" +"Línea con producto: '%(product)s'\n" +"\n" +"Por favor, utilice el botón 'Actualizar tiempos' en el pedido para actualizar correctamente los tiempos de la línea de pedido, su entrada de cronología, contrato y sus movimientos de stock y albaranes según sea necesario." + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.sale_start_end_dates +msgid "" +msgstr "" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • %(name)s: %(start_date)s - %(end_date)s->%(date_start)s - " +"%(date_end)s
  • " +msgstr "" +"
  • %(name)s: %(start_date)s - %(end_date)s->%(date_start)s - " +"%(date_end)s
  • " + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • (All lines): %(default_start_date)s -%(default_end_date)s-> " +"%(date_start)s - %(date_end)s
  • " +msgstr "" +"
  • (Todas las líneas): %(default_start_date)s -%(default_end_date)s-> " +"%(date_start)s - %(date_end)s
  • " + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "" +"
  • (Lines: %(from_line)s - %(to_line)s): %(default_start_date)s - " +"%(default_end_date)s -> %(date_start)s - %(date_end)s
  • " +msgstr "" +"
  • (Líneas: %(from_line)s - %(to_line)s): %(default_start_date)s - " +"%(default_end_date)s -> %(date_start)s - %(date_end)s
  • " + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid " " +msgstr "" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__all_line +msgid "All Lines" +msgstr "Todas las líneas" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Attributes" +msgstr "Atributos" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "" +"By changing the start and end dates of order lines, the dates are also updated in the timeline,the related stock pickings and contracts, if available.\n" +" Attention: The ordered quantities are not updated!" +msgstr "" +"Al cambiar las fechas de inicio y fin de las líneas de pedido, las fechas también se actualizan en la cronología, los albaranes de stock relacionados y los contratos, si están disponibles.\n" +" Atención: ¡Las cantidades pedidas no se actualizan!" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_product_product__rental +#: model:ir.model.fields,field_description:rental_base.field_product_template__rental +msgid "Can be Rent" +msgstr "Se puede alquilar" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.rental_product_search_view +msgid "Can be Rented" +msgstr "Se puede alquilar" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__change +msgid "Change" +msgstr "Cambio" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_config +msgid "Configuration" +msgstr "Configuración" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Configure your products with variants" +msgstr "Configure sus productos con variantes" + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_orders +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_quotations +msgid "Create a new quotation, the first step of a new sale!" +msgstr "¡Cree un nuevo presupuesto, el primer paso de una nueva venta!" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__create_uid +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__create_date +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_credit_notes +msgid "Customer Credit Notes" +msgstr "Notas de crédito del cliente" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_invoices2 +msgid "Customer Invoices" +msgstr "Facturas del cliente" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customers +#: model:ir.ui.menu,name:rental_base.menu_top_customer +msgid "Customers" +msgstr "Clientes" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_end +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__date_end +msgid "Date End" +msgstr "Fecha de fin" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_in_line +msgid "Date In Line" +msgstr "Fecha en la línea" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__date_start +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__date_start +msgid "Date Start" +msgstr "Fecha de inicio" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Day(s)" +msgstr "Día(s)" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order__default_end_date +msgid "Default End Date" +msgstr "Fecha de fin por defecto" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order__default_start_date +msgid "Default Start Date" +msgstr "Fecha de inicio por defecto" + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_sale_order_line__rental_qty_uom +msgid "Default unit of measure used for all stock operations." +msgstr "Unidad de medida por defecto utilizada para todas las operaciones de stock." + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.stock_picking_action_picking_type_in +#: model_terms:ir.actions.act_window,help:rental_base.stock_picking_action_picking_type_out +msgid "Define a new transfer" +msgstr "Defina una nueva transferencia" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Delivered Rental Quantity" +msgstr "Cantidad de alquiler entregada" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery +msgid "Delivery" +msgstr "Entrega" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Description" +msgstr "Descripción" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_update_sale_line_date_line +msgid "Details for updating sale order line dates" +msgstr "Detalles para actualizar las fechas de las líneas de pedido de venta" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__display_name +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__end_date +msgid "End Date" +msgstr "Fecha de fin" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__from_line +msgid "From" +msgstr "Desde" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__id +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__id +msgid "ID" +msgstr "ID" + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__all_line +msgid "" +"If set, all order lines of this order are updated with the given dates." +msgstr "" +"Si se activa, todas las líneas del pedido se actualizan con las fechas indicadas." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__date_in_line +msgid "If set, you can set an individual date in every selected position." +msgstr "Si se activa, puede establecer una fecha individual en cada posición seleccionada." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__from_line +msgid "" +"In order to update one or several order lines, please set a number referring" +" to the first order line that should to be changed." +msgstr "" +"Para actualizar una o varias líneas de pedido, indique un número que haga " +"referencia a la primera línea de pedido que debe modificarse." + +#. module: rental_base +#: model:ir.model.fields,help:rental_base.field_update_sale_line_date__to_line +msgid "" +"In order to update one or several order lines, please set a number referring" +" to the last order line that should to be changed." +msgstr "" +"Para actualizar una o varias líneas de pedido, indique un número que haga " +"referencia a la última línea de pedido que debe modificarse." + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.stock_picking_action_picking_type_in +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery_incoming +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery_incoming +msgid "Incoming Deliveries" +msgstr "Entregas entrantes" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Incoming shipment is in state %s. You cannot change the end date anymore." +msgstr "" +"El envío entrante está en estado %s. Ya no puede cambiar la fecha de fin." + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Invoiced Rental Time" +msgstr "Tiempo de alquiler facturado" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_invoices +#: model:ir.ui.menu,name:rental_base.menu_vendor_invoices +msgid "Invoices" +msgstr "Facturas" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Invoicing" +msgstr "Facturación" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date____last_update +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__write_uid +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__write_date +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Missing \"Rental to Extend\" on the sale order line with rental service " +"%(name)s." +msgstr "" +"Falta \"Alquiler a extender\" en la línea de pedido de venta con servicio de alquiler " +"%(name)s." + +#. module: rental_base +#: model:uom.uom,name:rental_base.product_uom_month +msgid "Month(s)" +msgstr "Mes(es)" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the \"new rental\" sale order line with product \"%(name)s\", we should " +"have a rental service product!" +msgstr "" +"En la línea de pedido de venta de \"nuevo alquiler\" con producto \"%(name)s\", " +"¡debería haber un producto de servicio de alquiler!" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the sale order line with product %(name)s you are trying to sell a rented" +" product with a quantity (%(qty)s) that is different from the rented " +"quantity (%(sell_rental_qty)s). This is not supported." +msgstr "" +"En la línea de pedido de venta con producto %(name)s está intentando vender un " +"producto alquilado con una cantidad (%(qty)s) diferente de la cantidad " +"alquilada (%(sell_rental_qty)s). Esto no está soportado." + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"On the sale order line with rental service %(name)s ,you are trying to " +"extend a rental with a rental quantity (%(rental_qty)s) that is different " +"from the quantity of the original rental (%(ext_rental_qty)s). This is not " +"supported." +msgstr "" +"En la línea de pedido de venta con servicio de alquiler %(name)s, está intentando " +"extender un alquiler con una cantidad de alquiler (%(rental_qty)s) diferente " +"de la cantidad del alquiler original (%(ext_rental_qty)s). Esto no está " +"soportado." + +#. module: rental_base +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_orders +#: model_terms:ir.actions.act_window,help:rental_base.action_rental_quotations +msgid "" +"Once the quotation is confirmed, it becomes a sales order.
    You will be " +"able to create an invoice and collect the payment." +msgstr "" +"Una vez confirmado el presupuesto, se convierte en un pedido de venta.
    Podrá " +"crear una factura y cobrar el pago." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__order_id +msgid "Order" +msgstr "Pedido" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Information" +msgstr "Información del pedido" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__order_line_id +msgid "Order Line" +msgstr "Línea de pedido" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Reference" +msgstr "Referencia del pedido" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Order Type" +msgstr "Tipo de pedido" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Ordered Rental Time" +msgstr "Tiempo de alquiler pedido" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_orders +msgid "Orders" +msgstr "Pedidos" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.stock_picking_action_picking_type_out +#: model:ir.ui.menu,name:rental_base.menu_customer_delivery_outgoing +#: model:ir.ui.menu,name:rental_base.menu_vendor_delivery_outgoing +msgid "Outgoing Deliveries" +msgstr "Entregas salientes" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"Outgoing shipment is in state %(state)s. You cannot change the start date " +"anymore." +msgstr "" +"El envío saliente está en estado %(state)s. Ya no puede cambiar la fecha de inicio." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__line_ids +msgid "Positions" +msgstr "Posiciones" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_product_template +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__product_id +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +msgid "Product" +msgstr "Producto" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__rental_qty_uom +msgid "Product Unit of Measure" +msgstr "Unidad de medida del producto" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_product_product +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.view_rental_product_action +msgid "Product Variants" +msgstr "Variantes de producto" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_config_products +#: model:ir.ui.menu,name:rental_base.menu_master_data +#: model:ir.ui.menu,name:rental_base.menu_products +msgid "Products" +msgstr "Productos" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_customer_quotations +msgid "Quotations" +msgstr "Presupuestos" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__rental +#: model_terms:ir.ui.view,arch_db:rental_base.res_config_settings_view_form +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Rental" +msgstr "Alquiler" + +#. module: rental_base +#: model:sale.order.type,name:rental_base.rental_sale_type +msgid "Rental Order" +msgstr "Pedido de alquiler" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_orders +#: model:ir.ui.menu,name:rental_base.menu_rental_orders +msgid "Rental Orders" +msgstr "Pedidos de alquiler" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_rental_positions +msgid "Rental Positions" +msgstr "Posiciones de alquiler" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Quantity" +msgstr "Cantidad de alquiler" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_quotations +#: model:ir.ui.menu,name:rental_base.menu_rental_quotations +msgid "Rental Quotations" +msgstr "Presupuestos de alquiler" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Settings" +msgstr "Configuración de alquiler" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Time Unit" +msgstr "Unidad de tiempo de alquiler" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Rental Times" +msgstr "Tiempos de alquiler" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_rental_root +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Rentals" +msgstr "Alquileres" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_sale_order +msgid "Sales Order" +msgstr "Pedido de venta" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_ir_sequence +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.sale_start_end_dates +msgid "Service Period" +msgstr "Período de servicio" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_rental_configuration +#: model:ir.ui.menu,name:rental_base.menu_settings +msgid "Settings" +msgstr "Configuración" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_sale_order_line__start_date +msgid "Start Date" +msgstr "Fecha de inicio" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "The value in 'To' is less then the value in 'From'." +msgstr "El valor de 'Hasta' es inferior al valor de 'Desde'." + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date__to_line +msgid "To" +msgstr "Hasta" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Transport" +msgstr "Transporte" + +#. module: rental_base +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +msgid "Update" +msgstr "Actualizar" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/wizard/update_sale_line_date.py:0 +#, python-format +msgid "Update Date of Sale Order Lines" +msgstr "Actualizar fecha de las líneas de pedido de venta" + +#. module: rental_base +#: model:ir.actions.act_window,name:rental_base.action_update_sale_line_date +#: model_terms:ir.ui.view,arch_db:rental_base.update_sale_line_date_form +#: model_terms:ir.ui.view,arch_db:rental_base.view_order_form +msgid "Update Times" +msgstr "Actualizar tiempos" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_vendor_bills +msgid "Vendor Bills" +msgstr "Facturas de proveedor" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_vendor_credit_notes +msgid "Vendor Credit Notes" +msgstr "Notas de crédito del proveedor" + +#. module: rental_base +#: model:ir.ui.menu,name:rental_base.menu_top_vendor +#: model:ir.ui.menu,name:rental_base.menu_vendors +msgid "Vendors" +msgstr "Proveedores" + +#. module: rental_base +#: model:ir.model.fields,field_description:rental_base.field_update_sale_line_date_line__wizard_id +msgid "Wizard" +msgstr "Asistente" + +#. module: rental_base +#: model:ir.model,name:rental_base.model_update_sale_line_date +msgid "Wizard for updating sale order line dates" +msgstr "Asistente para actualizar las fechas de las líneas de pedido de venta" + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"You are not allowed to change the 'end date' in an order line of a confirmed" +" order." +msgstr "" +"No tiene permiso para cambiar la 'fecha de fin' en una línea de pedido de un pedido " +"confirmado." + +#. module: rental_base +#. odoo-python +#: code:addons/rental_base/models/sale.py:0 +#, python-format +msgid "" +"You are not allowed to change the 'start date' in an order line of a " +"confirmed order." +msgstr "" +"No tiene permiso para cambiar la 'fecha de inicio' en una línea de pedido de un " +"pedido confirmado." + +#. module: rental_base_extension +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:rental_base_extension.product_template_only_form_view +msgid "Create Rental Service" +msgstr "Crear servicio de alquiler" diff --git a/rental_base_extension/readme/CONTRIBUTORS.rst b/rental_base_extension/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..866096fcb --- /dev/null +++ b/rental_base_extension/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `NuoBiT `__: + + * Eric Antones diff --git a/rental_base_extension/readme/DESCRIPTION.rst b/rental_base_extension/readme/DESCRIPTION.rst new file mode 100644 index 000000000..965535953 --- /dev/null +++ b/rental_base_extension/readme/DESCRIPTION.rst @@ -0,0 +1,24 @@ +This module extends ``rental_base`` to improve the rental order experience +with better menu visibility and product filtering. + +Rental Positions menu +~~~~~~~~~~~~~~~~~~~~~ + +The ``rental_base`` module places the Rental Positions screen (the ``sale.rental`` +list) under Configuration and restricts it to debug mode. This module moves it +to the top level of the Rentals menu as the first entry, visible to all sales +users, since it is the primary screen for tracking rental status. + +Product filter on rental order lines +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When creating a rental order, the product dropdown on order lines only shows +rental service products (i.e. products linked to a rented physical product +via ``rented_product_id``). This prevents users from accidentally selecting +non-rental products on rental orders. + +Catalan and Spanish translations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Provides Catalan and Spanish translations for ``rental_base``, which does not +ship with these languages. diff --git a/rental_base_extension/static/description/icon.png b/rental_base_extension/static/description/icon.png new file mode 100644 index 000000000..1cd641e79 Binary files /dev/null and b/rental_base_extension/static/description/icon.png differ diff --git a/rental_base_extension/static/description/index.html b/rental_base_extension/static/description/index.html new file mode 100644 index 000000000..dad4f9149 --- /dev/null +++ b/rental_base_extension/static/description/index.html @@ -0,0 +1,446 @@ + + + + + +README.rst + + + +
    + + + +Odoo Community Association + +
    +

    Rental Base Extension

    + +

    Alpha License: AGPL-3 nuobit/odoo-addons

    +

    This module extends rental_base to improve the rental order experience +with better menu visibility and product filtering.

    +
    +

    Rental Positions menu

    +

    The rental_base module places the Rental Positions screen (the sale.rental +list) under Configuration and restricts it to debug mode. This module moves it +to the top level of the Rentals menu as the first entry, visible to all sales +users, since it is the primary screen for tracking rental status.

    +
    +
    +

    Product filter on rental order lines

    +

    When creating a rental order, the product dropdown on order lines only shows +rental service products (i.e. products linked to a rented physical product +via rented_product_id). This prevents users from accidentally selecting +non-rental products on rental orders.

    +
    +
    +

    Catalan and Spanish translations

    +

    Provides Catalan and Spanish translations for rental_base, which does not +ship with these languages.

    +
    +

    Important

    +

    This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

    +
    +

    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.

    +
    + +
    +
    +

    Authors

    +
      +
    • NuoBiT Solutions SL
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is part of the nuobit/odoo-addons project on GitHub.

    +

    You are welcome to contribute.

    +
    +
    +
    + + diff --git a/rental_base_extension/views/product_views.xml b/rental_base_extension/views/product_views.xml new file mode 100644 index 000000000..56ac2d067 --- /dev/null +++ b/rental_base_extension/views/product_views.xml @@ -0,0 +1,123 @@ + + + + + + product.template.form.inherit.rental_base_extension + product.template + + + + + {'invisible': [('type', '=', 'service')]} + + + + + + + + product.product.form.inherit.rental_base_extension + product.product + + + + + + 1 + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sale_rental_extension/tests/__init__.py b/sale_rental_extension/tests/__init__.py new file mode 100644 index 000000000..95d8a8bce --- /dev/null +++ b/sale_rental_extension/tests/__init__.py @@ -0,0 +1 @@ +from . import test_rental_status diff --git a/sale_rental_extension/tests/test_rental_status.py b/sale_rental_extension/tests/test_rental_status.py new file mode 100644 index 000000000..18cfc709b --- /dev/null +++ b/sale_rental_extension/tests/test_rental_status.py @@ -0,0 +1,156 @@ +# Copyright 2026 NuoBiT Solutions SL - Eric Antones +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from datetime import timedelta + +from odoo import fields +from odoo.tests import common, tagged + + +@tagged("post_install", "-at_install") +class TestRentalStatus(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.category_all = cls.env.ref("product.product_category_all") + cls.rental_sale_type = cls.env.ref("rental_base.rental_sale_type") + cls.uom_day = cls.env.ref("uom.product_uom_day") + cls.warehouse0 = cls.env.ref("stock.warehouse0") + cls.partner = cls.env["res.partner"].create( + { + "name": "Test Partner", + "email": "test@test.com", + } + ) + cls.product_hw = cls.env["product.product"].create( + { + "name": "Rental Hardware", + "type": "product", + "categ_id": cls.category_all.id, + } + ) + cls.service_rental = ( + cls.env["create.rental.product"] + .with_context(active_model="product.product", active_id=cls.product_hw.id) + .create( + { + "hw_product_id": cls.product_hw.id, + "name": "Rental of Rental Hardware (Day)", + "categ_id": cls.product_hw.categ_id.id, + "copy_image": True, + } + ) + .create_rental_product() + ) + cls.service_rental = cls.env["product.product"].browse( + cls.service_rental["res_id"] + ) + cls.service_rental.write( + { + "uom_id": cls.uom_day.id, + "uom_po_id": cls.uom_day.id, + "list_price": 100, + } + ) + cls.service_rental.rental = True + + def _create_rental_order(self, **kwargs): + today = fields.Date.today() + date_start = kwargs.get("date_start", today + timedelta(days=1)) + date_end = kwargs.get("date_end", today + timedelta(days=5)) + date_qty = (date_end - date_start).days + 1 + return self.env["sale.order"].create( + { + "type_id": self.rental_sale_type.id, + "partner_id": self.partner.id, + "partner_invoice_id": self.partner.id, + "partner_shipping_id": self.partner.id, + "pricelist_id": self.env.ref("product.list0").id, + "picking_policy": "direct", + "warehouse_id": self.warehouse0.id, + "order_line": [ + ( + 0, + 0, + { + "name": "Rental Service", + "product_id": self.service_rental.id, + "rental": True, + "rental_type": "new_rental", + "rental_qty": 1, + "product_uom_qty": date_qty, + "start_date": date_start, + "end_date": date_end, + "price_unit": 100, + "product_uom": self.uom_day.id, + }, + ) + ], + } + ) + + def _create_and_confirm_rental_order(self): + order = self._create_rental_order() + order.action_confirm() + return order + + def test_confirmed_rental_status_pickup(self): + """Confirmed rental with sale.rental records should have 'pickup' status.""" + order = self._create_and_confirm_rental_order() + self.assertTrue(order.rental_ids) + self.assertEqual(order.rental_status, "pickup") + + def test_confirmed_rental_status_pickup_product_without_rental_flag(self): + """Confirmed rental with product missing rental=True on template + should still be recognized as a rental order.""" + self.service_rental.rental = False + order = self._create_and_confirm_rental_order() + self.assertTrue(order.is_rental_order) + self.assertTrue(order.rental_ids) + self.assertEqual(order.rental_status, "pickup") + + def test_confirmed_rental_status_pickup_without_rental_records(self): + """Confirmed rental order without sale.rental records should be 'pickup', + not 'returned'. This happens when a product is not a proper rental + service (missing rented_product_id) but the order is created from + the rental menu.""" + order = self._create_and_confirm_rental_order() + order.rental_ids.unlink() + order._compute_rental_status() + self.assertFalse(order.rental_ids) + self.assertEqual(order.rental_status, "pickup") + + def test_rental_status_draft(self): + """Draft rental order should have 'draft' status.""" + order = self._create_rental_order() + self.assertEqual(order.rental_status, "draft") + + def test_rental_status_cancel(self): + """Cancelled rental order should have 'cancel' status.""" + order = self._create_and_confirm_rental_order() + order._action_cancel() + self.assertEqual(order.rental_status, "cancel") + + def test_rental_status_return(self): + """Rental with completed outgoing picking should have 'return' status.""" + order = self._create_and_confirm_rental_order() + rental = order.rental_ids + out_picking = rental.out_move_id.picking_id + out_picking.action_assign() + out_picking.move_ids.quantity_done = out_picking.move_ids.product_uom_qty + out_picking.button_validate() + self.assertEqual(order.rental_status, "return") + + def test_rental_status_returned(self): + """Rental with both pickings completed should have 'returned' status.""" + order = self._create_and_confirm_rental_order() + rental = order.rental_ids + out_picking = rental.out_move_id.picking_id + out_picking.action_assign() + out_picking.move_ids.quantity_done = out_picking.move_ids.product_uom_qty + out_picking.button_validate() + in_picking = rental.in_move_id.picking_id + in_picking.action_assign() + in_picking.move_ids.quantity_done = in_picking.move_ids.product_uom_qty + in_picking.button_validate() + self.assertEqual(order.rental_status, "returned") diff --git a/sale_rental_extension/views/res_config_settings_views.xml b/sale_rental_extension/views/res_config_settings_views.xml new file mode 100644 index 000000000..eedeecd87 --- /dev/null +++ b/sale_rental_extension/views/res_config_settings_views.xml @@ -0,0 +1,30 @@ + + + + + res.config.settings.view.form.inherit.sale_rental_extension + res.config.settings + + +
    +

    Signature

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/sale_rental_extension/views/sale_order_rental_views.xml b/sale_rental_extension/views/sale_order_rental_views.xml new file mode 100644 index 000000000..d1940d1cb --- /dev/null +++ b/sale_rental_extension/views/sale_order_rental_views.xml @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + sale.order.form.rental + sale.order + + primary + 999 + + + + + + + + + + + + + 1 + + + + +