├── requirements.txt ├── l10n_ar_sale ├── wizards │ ├── __init__.py │ ├── res_config_settings.py │ └── res_config_settings_view.xml ├── security │ └── invoice_sale_security.xml ├── __init__.py ├── models │ ├── __init__.py │ ├── sale_order.py │ └── sale_order_line.py ├── __manifest__.py ├── views │ ├── sale_view.xml │ ├── l10n_ar_sale_templates.xml │ └── sale_report_templates.xml ├── README.rst └── i18n │ ├── l10n_ar_sale.pot │ └── es.po ├── l10n_ar_stock_ux ├── security │ ├── ir.model.access.csv │ └── res_groups.xml ├── __init__.py ├── data │ ├── ir_sequence_data.xml │ └── product_uom_data.xml ├── wizards │ ├── __init__.py │ ├── res_config_settings.py │ ├── arba_cot_wizard_views.xml │ ├── res_config_settings_view.xml │ └── arba_cot_wizard.py ├── models │ ├── stock_lot.py │ ├── __init__.py │ ├── uom_uom.py │ ├── product_template.py │ ├── res_company.py │ └── stock_picking_type.py ├── views │ ├── stock_picking_type_views.xml │ ├── report_invoice.xml │ ├── product_template_views.xml │ ├── uom_uom_views.xml │ ├── stock_lot_views.xml │ ├── stock_picking_views.xml │ └── report_deliveryslip.xml ├── __manifest__.py ├── demo │ └── stock_picking_demo.xml ├── README.rst └── i18n │ ├── ru.po │ └── l10n_ar_stock_ux.pot ├── CONTRIBUTING.md ├── l10n_ar_sale_order_type ├── __init__.py ├── models │ ├── __init__.py │ ├── sale_order_type.py │ └── sale_order.py ├── migrations │ └── 16.0.1.1.0 │ │ └── post-migration.py ├── views │ ├── sale_report_templates.xml │ └── sale_order_type_views.xml ├── __manifest__.py ├── README.rst └── i18n │ ├── l10n_ar_sale_order_type.pot │ └── es.po ├── l10n_ar_stock_delivery ├── __init__.py ├── wizards │ ├── __init__.py │ └── arba_cot_wizard.py ├── __manifest__.py ├── views │ ├── report_deliveryslip.xml │ ├── ir.action.reports.xml │ └── picking_templates.xml ├── i18n │ ├── l10n_ar_stock_delivery.pot │ ├── ru.po │ └── es.po └── README.rst ├── .copier-answers.yml ├── README.md ├── .gitignore ├── .github ├── workflows │ ├── pre-commit.yml │ └── cleaner.yml └── copilot-instructions.md ├── .pre-commit-config.yaml └── pyproject.toml /requirements.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /l10n_ar_sale/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config_settings 2 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_arba_cot_wizard,access_arba_cot_wizard,model_arba_cot_wizard,base.group_user,1,1,1,0 3 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/security/res_groups.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Arba COT enabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # ADHOC Guidelines 2 | 3 | Please follow the official guide from [Odoo Argentina](https://github.com/ingadhoc/odoo-argentina/wiki). 4 | 5 | ## Project Specific Guidelines 6 | 7 | This project does not have specific coding guidelines. 8 | -------------------------------------------------------------------------------- /l10n_ar_sale/security/invoice_sale_security.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Sale Unit Prices w/ Taxes 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import models 6 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import wizards 6 | -------------------------------------------------------------------------------- /l10n_ar_sale/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import models 6 | from . import wizards 7 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import arba_cot_wizard 6 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import models 6 | from . import wizards 7 | -------------------------------------------------------------------------------- /l10n_ar_sale/models/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import sale_order 6 | from . import sale_order_line 7 | -------------------------------------------------------------------------------- /l10n_ar_sale/wizards/res_config_settings.py: -------------------------------------------------------------------------------- 1 | from odoo import fields, models 2 | 3 | 4 | class ResConfigSettings(models.TransientModel): 5 | _inherit = "res.config.settings" 6 | 7 | group_price_unit_with_tax = fields.Boolean( 8 | "Unit Price w/ Taxes", 9 | implied_group="l10n_ar_sale.sale_price_unit_with_tax", 10 | ) 11 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/models/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import sale_order_type 6 | from . import sale_order 7 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/data/ir_sequence_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sequencia para COT (ARBA/API) 4 | arba.cot.file 5 | 6 | 6 7 | 8 | 9 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import res_config_settings 6 | from . import arba_cot_wizard 7 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/migrations/16.0.1.1.0/post-migration.py: -------------------------------------------------------------------------------- 1 | from openupgradelib import openupgrade 2 | 3 | 4 | @openupgrade.migrate() 5 | def migrate(env, version): 6 | env.cr.execute(""" 7 | UPDATE sale_order_type SET sale_checkbook_id = NULL 8 | WHERE sequence_id is not null 9 | AND sale_checkbook_id is not null 10 | """) 11 | -------------------------------------------------------------------------------- /.copier-answers.yml: -------------------------------------------------------------------------------- 1 | # Do NOT update manually; changes here will be overwritten by Copier 2 | _commit: 2f2f7c4 3 | _src_path: https://github.com/ingadhoc/addons-repo-template.git 4 | description: Modules that extend odoo for common needs of ADHOC Customers 5 | is_private: false 6 | name: ADHOC Odoo Argentina Sale 7 | odoo_version: 19.0 8 | pre_commit_ignore: [] 9 | slug: '' 10 | 11 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/views/sale_report_templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/stock_lot.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import fields, models 6 | 7 | 8 | class StockLot(models.Model): 9 | _inherit = "stock.lot" 10 | 11 | dispatch_number = fields.Char() 12 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from . import res_company 6 | from . import stock_picking_type 7 | from . import stock_picking 8 | from . import product_template 9 | from . import uom_uom 10 | from . import stock_lot 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Coverage Status](https://coveralls.io/repos/ingadhoc//badge.png?branch=19.0)](https://coveralls.io/r/ingadhoc/?branch=19.0) 2 | [![Code Climate](https://codeclimate.com/github/ingadhoc//badges/gpa.svg)](https://codeclimate.com/github/ingadhoc/) 3 | 4 | # ADHOC Odoo Argentina Sale 5 | 6 | Modules that extend odoo for common needs of ADHOC Customers 7 | 8 | ---- 9 | 10 | ADHOC 11 | **Adhoc SA** - www.adhoc.com.ar 12 | . 13 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Integracion entre modulo delivery y localización argentina", 3 | "version": "19.0.1.0.0", 4 | "category": "Localization/Argentina", 5 | "sequence": 14, 6 | "author": "ADHOC SA", 7 | "website": "www.adhoc.com.ar", 8 | "license": "AGPL-3", 9 | "depends": ["delivery_ux", "l10n_ar_stock_ux"], 10 | "data": [ 11 | "views/report_deliveryslip.xml", 12 | ], 13 | "demo": [], 14 | "installable": True, 15 | "auto_install": True, 16 | "application": False, 17 | } 18 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/wizards/res_config_settings.py: -------------------------------------------------------------------------------- 1 | from odoo import fields, models 2 | 3 | 4 | class ResConfigSettings(models.TransientModel): 5 | _inherit = "res.config.settings" 6 | 7 | group_arba_cot_enabled = fields.Boolean( 8 | "Usar COT de ARBA?", 9 | help="Permite generar el COT de arba una vez que se han asignado " "números de remitos en las entregas", 10 | implied_group="l10n_ar_stock_ux.arba_cot_enabled", 11 | ) 12 | arba_cot = fields.Char( 13 | related="company_id.arba_cot", 14 | readonly=False, 15 | ) 16 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Argentinian Sale with Sale Order Type", 3 | "version": "19.0.1.0.0", 4 | "category": "Localization/Argentina", 5 | "sequence": 14, 6 | "author": "ADHOC SA", 7 | "website": "www.adhoc.com.ar", 8 | "license": "AGPL-3", 9 | "summary": "", 10 | "depends": [ 11 | "sale_order_type", 12 | "l10n_ar_sale", 13 | ], 14 | "data": [ 15 | "views/sale_order_type_views.xml", 16 | "views/sale_report_templates.xml", 17 | ], 18 | "demo": [], 19 | "installable": True, 20 | "auto_install": False, 21 | "application": False, 22 | } 23 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/views/sale_order_type_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sale.order.type.form 5 | sale.order.type 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/uom_uom.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import fields, models 6 | 7 | 8 | class ProductUom(models.Model): 9 | _inherit = "uom.uom" 10 | 11 | arba_code = fields.Char() 12 | 13 | def action_arba_codes(self): 14 | self.ensure_one() 15 | return { 16 | "type": "ir.actions.act_url", 17 | "url": "http://www.arba.gov.ar/bajadas/Fiscalizacion/Operativos/TransporteBienes/Documentacion/20080701-TB-TablasDeValidacion.pdf", 18 | "target": "new", 19 | } 20 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/wizards/arba_cot_wizard.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import api, models 6 | 7 | 8 | class ArbaCotWizard(models.TransientModel): 9 | _inherit = "arba.cot.wizard" 10 | 11 | @api.model 12 | def default_get(self, default_fields): 13 | vals = super().default_get(default_fields) 14 | if self.env.context.get("active_model"): 15 | picking = self.env["stock.picking"].browse(self.env.context.get("active_id")) 16 | vals["partner_id"] = picking.carrier_id.partner_id.id 17 | return vals 18 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/stock_picking_type_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | stock.picking.type.inherit.l10n_ar_stock 4 | stock.picking.type 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /l10n_ar_sale/wizards/res_config_settings_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | res.config.settings.view.form.inherit.l10n_ar_account 6 | 7 | res.config.settings 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/product_template.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import api, fields, models 6 | from odoo.exceptions import ValidationError 7 | 8 | 9 | class ProductTemplate(models.Model): 10 | _inherit = "product.template" 11 | 12 | arba_code = fields.Char() 13 | 14 | @api.constrains("arba_code") 15 | def check_arba_code(self): 16 | for rec in self.filtered("arba_code"): 17 | if len(rec.arba_code) != 6 or not rec.arba_code.isdigit(): 18 | raise ValidationError( 19 | self.env._("El código según nomenclador de arba debe ser de 6 dígitos" " numéricos") 20 | ) 21 | -------------------------------------------------------------------------------- /l10n_ar_sale/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Argentinian Sale Total Fields", 3 | "version": "19.0.1.0.0", 4 | "category": "Localization/Argentina", 5 | "sequence": 14, 6 | "author": "ADHOC SA", 7 | "website": "www.adhoc.com.ar", 8 | "license": "AGPL-3", 9 | "summary": "", 10 | "depends": [ 11 | "sale_ux", # we make it dependent on sale_ux by setting group_delivery_date. More information in ticket 95265 12 | "l10n_ar_tax", 13 | ], 14 | "external_dependencies": {}, 15 | "data": [ 16 | "security/invoice_sale_security.xml", 17 | "views/sale_view.xml", 18 | "views/l10n_ar_sale_templates.xml", 19 | "views/sale_report_templates.xml", 20 | "wizards/res_config_settings_view.xml", 21 | ], 22 | "demo": [], 23 | "installable": True, 24 | "auto_install": False, 25 | "application": False, 26 | } 27 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/report_invoice.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/product_template_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | product product 5 | product.template 6 | 7 | 8 | 9 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /l10n_ar_sale/views/sale_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sale.order.form 5 | sale.order 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/data/product_uom_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 6 | 7 | 2 8 | 9 | 10 | 3 11 | 12 | 13 | 4 14 | 15 | 16 | 5 17 | 18 | 19 | 6 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/models/sale_order_type.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import api, fields, models 6 | 7 | 8 | class SaleOrderType(models.Model): 9 | _inherit = "sale.order.type" 10 | 11 | discriminate_taxes = fields.Selection( 12 | [ 13 | ("yes", "Yes"), 14 | ("no", "No"), 15 | ], 16 | ) 17 | report_partner_id = fields.Many2one( 18 | "res.partner", 19 | ) 20 | fiscal_country_codes = fields.Char(compute="_compute_fiscal_country_codes") 21 | 22 | @api.depends("company_id") 23 | @api.depends_context("allowed_company_ids") 24 | def _compute_fiscal_country_codes(self): 25 | for record in self: 26 | allowed_companies = record.company_id or self.env.companies 27 | record.fiscal_country_codes = ",".join(allowed_companies.mapped("account_fiscal_country_id.code")) 28 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/models/sale_order.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | from odoo import api, models 6 | 7 | 8 | class SaleOrder(models.Model): 9 | _inherit = "sale.order" 10 | 11 | @api.depends("type_id.discriminate_taxes") 12 | def _compute_vat_discriminated(self): 13 | recs = self.filtered(lambda x: x.type_id.discriminate_taxes in ["yes", "no"]) 14 | for rec in recs: 15 | # si tiene checkbook y discrimna en funcion al partner pero no tiene responsabilidad seteada, 16 | # dejamos comportamiento nativo de odoo de discriminar impuestos 17 | discriminate_taxes = rec.type_id.discriminate_taxes 18 | if discriminate_taxes == "yes": 19 | rec.vat_discriminated = True 20 | else: 21 | rec.vat_discriminated = False 22 | return super(SaleOrder, self - recs)._compute_vat_discriminated() 23 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/uom_uom_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | uom.uom.form 6 | uom.uom 7 | 8 | 9 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | uom.uom.list 23 | uom.uom 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/views/report_deliveryslip.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/res_company.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import warnings 3 | 4 | from odoo import api, fields, models 5 | from odoo.exceptions import UserError 6 | 7 | warnings.filterwarnings("ignore", category=DeprecationWarning) 8 | 9 | 10 | _logger = logging.getLogger(__name__) 11 | 12 | 13 | class ResCompany(models.Model): 14 | _inherit = "res.company" 15 | 16 | arba_cot = fields.Char( 17 | "Clave COT", 18 | help="Clave para generación de remito electŕonico", 19 | ) 20 | 21 | @api.model 22 | def _get_arba_cot_login_url(self, environment_type=False): 23 | if not environment_type: 24 | environment_type = self._get_environment_type() 25 | _logger.info("Getting connection to ARBA on %s mode" % environment_type) 26 | base_url = "https://cot.arba.gov.ar/TransporteBienes/SeguridadCliente/presentarRemitos.do" 27 | if environment_type != "production": 28 | base_url = base_url.replace("cot.arba.gov.ar", "cot.test.arba.gov.ar") 29 | return base_url 30 | 31 | def _get_arba_cot_request_data(self): 32 | self.ensure_one() 33 | 34 | if not self.arba_cot: 35 | raise UserError(self.env._("You must configure ARBA COT on company %s", self.name)) 36 | user = self.partner_id.ensure_vat() 37 | return { 38 | "Usuario": user, 39 | "Password": self.arba_cot, 40 | } 41 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/stock_lot_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | stock.production.lot.form 6 | stock.lot 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | stock.production.lot.list 17 | stock.lot 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | stock.lot.filter 28 | stock.lot 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Remitos, COT y demas ajustes de stock para Argentina", 3 | "version": "19.0.1.0.0", 4 | "category": "Localization/Argentina", 5 | "sequence": 14, 6 | "author": "ADHOC SA", 7 | "website": "www.adhoc.com.ar", 8 | "license": "AGPL-3", 9 | "depends": [ 10 | "l10n_ar_stock", 11 | "l10n_ar_ux", 12 | "stock_picking_invoice_link", 13 | "stock_ux", 14 | # esta dependencia es solo por el campo declared value para: 15 | # a) reporte de remito 16 | # b) mandar valor declarado a wizard de COT 17 | # eventualmente se podría moer dicho campo a stock_ux y evitar esta dependencia 18 | "stock_declared_value", 19 | ], 20 | "data": [ 21 | "security/res_groups.xml", 22 | "wizards/arba_cot_wizard_views.xml", 23 | "wizards/res_config_settings_view.xml", 24 | "views/stock_picking_views.xml", 25 | "views/stock_picking_type_views.xml", 26 | "views/product_template_views.xml", 27 | "views/uom_uom_views.xml", 28 | "views/stock_lot_views.xml", 29 | "views/report_deliveryslip.xml", 30 | "views/report_invoice.xml", 31 | "data/ir_sequence_data.xml", 32 | "data/product_uom_data.xml", 33 | "security/ir.model.access.csv", 34 | ], 35 | "demo": [ 36 | "demo/stock_picking_demo.xml", 37 | ], 38 | "installable": True, 39 | "auto_install": ["l10n_ar_stock"], 40 | "application": False, 41 | } 42 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/models/stock_picking_type.py: -------------------------------------------------------------------------------- 1 | from odoo import api, fields, models 2 | 3 | 4 | class StockPickingType(models.Model): 5 | _inherit = "stock.picking.type" 6 | 7 | report_partner_id = fields.Many2one( 8 | "res.partner", 9 | string="Contacto para Encabezado", 10 | help="Para el encabezado de los remitos/comprobantes de entrega, la información a utilizar se obtendrá del " 11 | "primer datos definido de estos lugares:\n" 12 | "* Este campo\n" 13 | "* Dirección del Almacen de la transferencia\n" 14 | "* Información de la compañía de la transferencia", 15 | ) 16 | report_signature_section = fields.Boolean( 17 | string="Añadir sección firma", 18 | help="Agregar al reporte una sección para añadir firma de confirmación de recepción.", 19 | default=False, 20 | ) 21 | auto_assign_delivery_guide = fields.Boolean( 22 | string="Auto Assign Delivery Guide Number", 23 | help="Al validar una transferencia de este tipo, se asignará automáticamente un número de remito.", 24 | default=False, 25 | ) 26 | 27 | @api.onchange("l10n_ar_sequence_number_start") 28 | def _add_padding_to_sequence_number_start(self): 29 | if self.l10n_ar_sequence_number_start: 30 | self.l10n_ar_sequence_number_start = self.l10n_ar_sequence_number_start.zfill(8) 31 | 32 | @api.onchange("l10n_ar_sequence_number_end") 33 | def _add_padding_to_sequence_number_end(self): 34 | if self.l10n_ar_sequence_number_end: 35 | self.l10n_ar_sequence_number_end = self.l10n_ar_sequence_number_end.zfill(8) 36 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/i18n/l10n_ar_stock_delivery.pot: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_stock_delivery 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 19.0+e\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-11-25 17:22+0000\n" 10 | "PO-Revision-Date: 2025-11-25 17:22+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: l10n_ar_stock_delivery 19 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 20 | msgid "
Carrier:" 21 | msgstr "" 22 | 23 | #. module: l10n_ar_stock_delivery 24 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 25 | msgid "
Tracking Number:" 26 | msgstr "" 27 | 28 | #. module: l10n_ar_stock_delivery 29 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 30 | msgid "Weight:" 31 | msgstr "" 32 | 33 | #. module: l10n_ar_stock_delivery 34 | #: model:ir.model.fields,field_description:l10n_ar_stock_delivery.field_arba_cot_wizard__display_name 35 | msgid "Display Name" 36 | msgstr "" 37 | 38 | #. module: l10n_ar_stock_delivery 39 | #: model:ir.model.fields,field_description:l10n_ar_stock_delivery.field_arba_cot_wizard__id 40 | msgid "ID" 41 | msgstr "" 42 | 43 | #. module: l10n_ar_stock_delivery 44 | #: model:ir.model,name:l10n_ar_stock_delivery.model_arba_cot_wizard 45 | msgid "arba.cot.wizard" 46 | msgstr "" 47 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/wizards/arba_cot_wizard_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | arba.cot.wizard.form 6 | arba.cot.wizard 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |
26 |
27 |
28 |
29 | 30 | 31 | Asistente para Código de Operaciones de Traslado 32 | arba.cot.wizard 33 | form 34 | new 35 | 36 | 37 |
38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ⚠️ DO NOT EDIT THIS FILE, IT IS GENERATED BY COPIER ⚠️ 2 | # Changes here will be lost on a future update. 3 | # See: https://github.com/ingadhoc/addons-repo-template 4 | 5 | # Byte-compiled / optimized / DLL files 6 | __pycache__/ 7 | *.py[cod] 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | env/ 15 | bin/ 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | 29 | # Installer logs 30 | pip-log.txt 31 | pip-delete-this-directory.txt 32 | 33 | # Unit test / coverage reports 34 | htmlcov/ 35 | .tox/ 36 | .coverage 37 | .cache 38 | nosetests.xml 39 | coverage.xml 40 | 41 | # Translations 42 | *.mo 43 | 44 | # Ensure we never commit pgdumps 45 | *.dump 46 | *.sql 47 | *.pg 48 | *.pg.gpg 49 | 50 | # Mr Developer 51 | .mr.developer.cfg 52 | .project 53 | .pydevproject 54 | 55 | # Rope 56 | .ropeproject 57 | 58 | # Django stuff: 59 | *.log 60 | 61 | # Sphinx documentation 62 | docs/_build/ 63 | 64 | ### macOS ### 65 | # General 66 | .DS_Store 67 | .AppleDouble 68 | .LSOverride 69 | 70 | # Icon must end with two \r 71 | Icon 72 | 73 | 74 | # Thumbnails 75 | ._* 76 | 77 | # Files that might appear in the root of a volume 78 | .DocumentRevisions-V100 79 | .fseventsd 80 | .Spotlight-V100 81 | .TemporaryItems 82 | .Trashes 83 | .VolumeIcon.icns 84 | .com.apple.timemachine.donotpresent 85 | 86 | # Directories potentially created on remote AFP share 87 | .AppleDB 88 | .AppleDesktop 89 | Network Trash Folder 90 | Temporary Items 91 | .apdisk 92 | 93 | ### macOS Patch ### 94 | # iCloud generated files 95 | *.icloud 96 | -------------------------------------------------------------------------------- /.github/workflows/pre-commit.yml: -------------------------------------------------------------------------------- 1 | # ⚠️ DO NOT EDIT THIS FILE, IT IS GENERATED BY COPIER ⚠️ 2 | # Changes here will be lost on a future update. 3 | # See: https://github.com/ingadhoc/addons-repo-template 4 | 5 | name: pre-commit 6 | 7 | on: 8 | push: 9 | branches: "[0-9][0-9].0" 10 | pull_request_target: 11 | 12 | jobs: 13 | pre-commit: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - 17 | name: Checkout 18 | uses: actions/checkout@v4 19 | with: 20 | ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.sha || github.ref }} 21 | - 22 | id: setup-python 23 | name: Setup Python 24 | uses: actions/setup-python@v5 25 | with: 26 | python-version: "3.10" 27 | cache: "pip" 28 | - 29 | name: Pre-commit cache 30 | uses: actions/cache@v4 31 | with: 32 | path: ~/.cache/pre-commit 33 | key: pre-commit|${{ steps.setup-python.outputs.python-version }}|${{ hashFiles('.pre-commit-config.yaml') }} 34 | - 35 | id: precommit 36 | name: Pre-commit 37 | uses: pre-commit/action@v3.0.1 38 | - 39 | name: Create commit status 40 | if: github.event_name == 'pull_request_target' 41 | run: | 42 | curl -L \ 43 | -X POST \ 44 | -H "Accept: application/vnd.github+json" \ 45 | -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ 46 | -H "X-GitHub-Api-Version: 2022-11-28" \ 47 | https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.event.pull_request.head.sha }} \ 48 | -d '{"state":"${{ steps.precommit.outcome }}","context":"mergebot/pre-commit"}' \ 49 | --fail 50 | -------------------------------------------------------------------------------- /l10n_ar_sale/views/l10n_ar_sale_templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/i18n/ru.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_stock_delivery 4 | # 5 | # Translators: 6 | # Irina Fedulova , 2020 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Odoo Server 13.0\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2020-12-30 20:29+0000\n" 13 | "PO-Revision-Date: 2020-07-14 02:32+0000\n" 14 | "Last-Translator: Irina Fedulova , 2020\n" 15 | "Language-Team: Russian (https://www.transifex.com/adhoc/teams/46451/ru/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: \n" 19 | "Language: ru\n" 20 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" 21 | 22 | #. module: l10n_ar_stock_delivery 23 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 24 | msgid "
Carrier:" 25 | msgstr "" 26 | 27 | #. module: l10n_ar_stock_delivery 28 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 29 | msgid "
Tracking Number:" 30 | msgstr "
Трек-номер:" 31 | 32 | #. module: l10n_ar_stock_delivery 33 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 34 | msgid "
Weight:" 35 | msgstr "" 36 | 37 | #. module: l10n_ar_stock_delivery 38 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 39 | msgid "Packages Qty:" 40 | msgstr "" 41 | 42 | #. module: l10n_ar_stock_delivery 43 | #: model:ir.model,name:l10n_ar_stock_delivery.model_arba_cot_wizard 44 | msgid "arba.cot.wizard" 45 | msgstr "arba.cot.wizard" 46 | -------------------------------------------------------------------------------- /l10n_ar_sale/README.rst: -------------------------------------------------------------------------------- 1 | .. |company| replace:: ADHOC SA 2 | 3 | .. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png 4 | :alt: ADHOC SA 5 | :target: https://www.adhoc.com.ar 6 | 7 | .. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png 8 | 9 | .. image:: https://img.shields.io/badge/license-AGPL--3-blue.png 10 | :target: https://www.gnu.org/licenses/agpl 11 | :alt: License: AGPL-3 12 | 13 | ============================= 14 | Argentinian Sale Total Fields 15 | ============================= 16 | 17 | Este modulo agrega, en talonarios de ventas, la posibilidad de forzar la discriminación, 18 | o no, de los impuestos independientemente de la responsabilidad de IVA del partner 19 | 20 | Installation 21 | ============ 22 | 23 | To install this module, you need to: 24 | 25 | #. Activar "Talonarios de venta" en ajustes 26 | 27 | Configuration 28 | ============= 29 | 30 | To configure this module, you need to: 31 | 32 | #. Nothing to configure 33 | 34 | Usage 35 | ===== 36 | 37 | To use this module, you need to: 38 | 39 | #. Go to ... 40 | 41 | .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas 42 | :alt: Try me on Runbot 43 | :target: http://runbot.adhoc.com.ar/ 44 | 45 | Bug Tracker 46 | =========== 47 | 48 | Bugs are tracked on `GitHub Issues 49 | `_. In case of trouble, please 50 | check there if your issue has already been reported. If you spotted it first, 51 | help us smashing it by providing a detailed and welcomed feedback. 52 | 53 | Credits 54 | ======= 55 | 56 | Images 57 | ------ 58 | 59 | * |company| |icon| 60 | 61 | Contributors 62 | ------------ 63 | 64 | Maintainer 65 | ---------- 66 | 67 | |company_logo| 68 | 69 | This module is maintained by the |company|. 70 | 71 | To contribute to this module, please visit https://www.adhoc.com.ar. 72 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/i18n/es.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_stock_delivery 4 | # 5 | # Translators: 6 | # ADHOC - Bot , 2025 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Odoo Server 19.0+e\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2025-11-19 20:28+0000\n" 13 | "PO-Revision-Date: 2025-11-19 20:28+0000\n" 14 | "Last-Translator: ADHOC - Bot , 2025\n" 15 | "Language-Team: Spanish (https://app.transifex.com/adhoc/teams/46451/es/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: \n" 19 | "Language: es\n" 20 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" 21 | 22 | #. module: l10n_ar_stock_delivery 23 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 24 | msgid "
Carrier:" 25 | msgstr "
Transporte:" 26 | 27 | #. module: l10n_ar_stock_delivery 28 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 29 | msgid "
Tracking Number:" 30 | msgstr "
Número de seguimiento:" 31 | 32 | #. module: l10n_ar_stock_delivery 33 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_delivery.report_delivery_document 34 | msgid "Weight:" 35 | msgstr "Peso:" 36 | 37 | #. module: l10n_ar_stock_delivery 38 | #: model:ir.model.fields,field_description:l10n_ar_stock_delivery.field_arba_cot_wizard__display_name 39 | msgid "Display Name" 40 | msgstr "Nombre mostrado" 41 | 42 | #. module: l10n_ar_stock_delivery 43 | #: model:ir.model.fields,field_description:l10n_ar_stock_delivery.field_arba_cot_wizard__id 44 | msgid "ID" 45 | msgstr "ID (identificación)" 46 | 47 | #. module: l10n_ar_stock_delivery 48 | #: model:ir.model,name:l10n_ar_stock_delivery.model_arba_cot_wizard 49 | msgid "arba.cot.wizard" 50 | msgstr "" 51 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/README.rst: -------------------------------------------------------------------------------- 1 | .. |company| replace:: ADHOC SA 2 | 3 | .. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png 4 | :alt: ADHOC SA 5 | :target: https://www.adhoc.com.ar 6 | 7 | .. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png 8 | 9 | .. image:: https://img.shields.io/badge/license-AGPL--3-blue.png 10 | :target: https://www.gnu.org/licenses/agpl 11 | :alt: License: AGPL-3 12 | 13 | 14 | ================================================== 15 | Sale Order Type Extended for Argentinean Use Cases 16 | ================================================== 17 | 18 | Extended functionalities for sale order types in Argentinean sales: 19 | #. Enable the option to force the inclusion or exclusion of VAT 20 | #. Allow the option to set a different partner, distinct from the company's, for the sale order report header 21 | 22 | Installation 23 | ============ 24 | 25 | To install this module, you need to: 26 | 27 | #. Only need to install the module 28 | 29 | Configuration 30 | ============= 31 | 32 | To configure this module, you need to: 33 | 34 | #. Nothing to configure 35 | 36 | Usage 37 | ===== 38 | 39 | To use this module, you need to: 40 | 41 | #. Go to ... 42 | 43 | .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas 44 | :alt: Try me on Runbot 45 | :target: http://runbot.adhoc.com.ar/ 46 | 47 | Bug Tracker 48 | =========== 49 | 50 | Bugs are tracked on `GitHub Issues 51 | `_. In case of trouble, please 52 | check there if your issue has already been reported. If you spotted it first, 53 | help us smashing it by providing a detailed and welcomed feedback. 54 | 55 | Credits 56 | ======= 57 | 58 | Images 59 | ------ 60 | 61 | * |company| |icon| 62 | 63 | Contributors 64 | ------------ 65 | 66 | Maintainer 67 | ---------- 68 | 69 | |company_logo| 70 | 71 | This module is maintained by the |company|. 72 | 73 | To contribute to this module, please visit https://www.adhoc.com.ar. 74 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/views/ir.action.reports.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Etiqueta de despacho(10x15) 6 | 7 | custom 8 | 150 9 | 100 10 | Portrait 11 | 5 12 | 5 13 | 5 14 | 5 15 | 16 | 20 17 | 90 18 | 19 | 20 | 21 | Etiqueta de despacho (ZPL) 22 | stock.picking 23 | 24 | qweb-text 25 | l10n_ar_stock_delivery.custom_label_transfer_template_view_zpl 26 | l10n_ar_stock_delivery.custom_label_transfer_template_view_zpl 27 | report 28 | 29 | 30 | 31 | Etiqueta de despacho (PDF) 32 | stock.picking 33 | 34 | qweb-pdf 35 | l10n_ar_stock_delivery.custom_label_transfer_template_view_pdf 36 | l10n_ar_stock_delivery.custom_label_transfer_template_view_pdf 37 | report 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/wizards/res_config_settings_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | res.config.settings.view.form 6 | 7 | res.config.settings 8 | 9 | 10 | 11 |
12 | 13 |
14 |
15 |
30 |
31 |
32 |
33 |
34 | 35 |
36 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # ⚠️ DO NOT EDIT THIS FILE, IT IS GENERATED BY COPIER ⚠️ 2 | # Changes here will be lost on a future update. 3 | # See: https://github.com/ingadhoc/addons-repo-template 4 | 5 | exclude: | 6 | (?x) 7 | # We don't want to mess with tool-generated files 8 | .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|^eslint.config.cjs|^prettier.config.cjs| 9 | # Library files can have extraneous formatting (even minimized) 10 | /static/(src/)?lib/| 11 | # Ignore build and dist directories in addons 12 | /build/|/dist/| 13 | # Ignore test files in addons 14 | /tests/samples/.*| 15 | # You don't usually want a bot to modify your legal texts 16 | (LICENSE.*|COPYING.*) 17 | 18 | # Keep in sync with .github/workflows/pre-commit.yml 19 | default_language_version: 20 | python: python3 21 | 22 | repos: 23 | 24 | - repo: https://github.com/pre-commit/pre-commit-hooks 25 | rev: v5.0.0 26 | hooks: 27 | - id: check-added-large-files 28 | - id: check-case-conflict 29 | - id: check-docstring-first 30 | - id: check-executables-have-shebangs 31 | - id: check-merge-conflict 32 | - id: check-symlinks 33 | - id: check-xml 34 | - id: check-yaml 35 | - id: debug-statements 36 | - id: end-of-file-fixer 37 | - id: mixed-line-ending 38 | args: ["--fix=lf"] 39 | - id: trailing-whitespace 40 | # exclude autogenerated files 41 | exclude: \.pot?$ 42 | 43 | - repo: https://github.com/OCA/odoo-pre-commit-hooks 44 | rev: v0.0.35 45 | hooks: 46 | - id: oca-checks-odoo-module 47 | args: 48 | - --disable=xml-dangerous-qweb-replace-low-priority,xml-view-dangerous-replace-low-priority,xml-oe-structure-missing-id 49 | - id: oca-checks-po 50 | args: 51 | - --disable=po-pretty-format 52 | 53 | - repo: https://github.com/astral-sh/ruff-pre-commit 54 | rev: v0.6.8 55 | hooks: 56 | - id: ruff 57 | args: [--fix, --exit-non-zero-on-fix] 58 | - id: ruff-format 59 | 60 | - repo: https://github.com/OCA/pylint-odoo 61 | rev: v9.1.3 62 | hooks: 63 | - id: pylint_odoo 64 | 65 | - repo: https://github.com/rstcheck/rstcheck 66 | rev: v6.2.1 67 | hooks: 68 | - id: rstcheck 69 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/i18n/l10n_ar_sale_order_type.pot: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_sale_order_type 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 19.0+e\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-11-21 11:01+0000\n" 10 | "PO-Revision-Date: 2025-11-21 11:01+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: l10n_ar_sale_order_type 19 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__discriminate_taxes 20 | msgid "Discriminate Taxes" 21 | msgstr "" 22 | 23 | #. module: l10n_ar_sale_order_type 24 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order__display_name 25 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__display_name 26 | msgid "Display Name" 27 | msgstr "" 28 | 29 | #. module: l10n_ar_sale_order_type 30 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__fiscal_country_codes 31 | msgid "Fiscal Country Codes" 32 | msgstr "" 33 | 34 | #. module: l10n_ar_sale_order_type 35 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order__id 36 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__id 37 | msgid "ID" 38 | msgstr "" 39 | 40 | #. module: l10n_ar_sale_order_type 41 | #: model:ir.model.fields.selection,name:l10n_ar_sale_order_type.selection__sale_order_type__discriminate_taxes__no 42 | msgid "No" 43 | msgstr "" 44 | 45 | #. module: l10n_ar_sale_order_type 46 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__report_partner_id 47 | msgid "Report Partner" 48 | msgstr "" 49 | 50 | #. module: l10n_ar_sale_order_type 51 | #: model:ir.model,name:l10n_ar_sale_order_type.model_sale_order 52 | msgid "Sales Order" 53 | msgstr "" 54 | 55 | #. module: l10n_ar_sale_order_type 56 | #: model:ir.model,name:l10n_ar_sale_order_type.model_sale_order_type 57 | msgid "Type of sale order" 58 | msgstr "" 59 | 60 | #. module: l10n_ar_sale_order_type 61 | #: model:ir.model.fields.selection,name:l10n_ar_sale_order_type.selection__sale_order_type__discriminate_taxes__yes 62 | msgid "Yes" 63 | msgstr "" 64 | -------------------------------------------------------------------------------- /l10n_ar_sale_order_type/i18n/es.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_sale_order_type 4 | # 5 | # Translators: 6 | # ADHOC - Bot , 2025 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Odoo Server 19.0+e\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2025-11-19 17:08+0000\n" 13 | "PO-Revision-Date: 2025-11-19 17:08+0000\n" 14 | "Last-Translator: ADHOC - Bot , 2025\n" 15 | "Language-Team: Spanish (https://app.transifex.com/adhoc/teams/46451/es/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: \n" 19 | "Language: es\n" 20 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" 21 | 22 | #. module: l10n_ar_sale_order_type 23 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__discriminate_taxes 24 | msgid "Discriminate Taxes" 25 | msgstr "Impuestos discriminados" 26 | 27 | #. module: l10n_ar_sale_order_type 28 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order__display_name 29 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__display_name 30 | msgid "Display Name" 31 | msgstr "Nombre para mostrar" 32 | 33 | #. module: l10n_ar_sale_order_type 34 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__fiscal_country_codes 35 | msgid "Fiscal Country Codes" 36 | msgstr "" 37 | 38 | #. module: l10n_ar_sale_order_type 39 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order__id 40 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__id 41 | msgid "ID" 42 | msgstr "" 43 | 44 | #. module: l10n_ar_sale_order_type 45 | #: model:ir.model.fields.selection,name:l10n_ar_sale_order_type.selection__sale_order_type__discriminate_taxes__no 46 | msgid "No" 47 | msgstr "" 48 | 49 | #. module: l10n_ar_sale_order_type 50 | #: model:ir.model.fields,field_description:l10n_ar_sale_order_type.field_sale_order_type__report_partner_id 51 | msgid "Report Partner" 52 | msgstr "" 53 | 54 | #. module: l10n_ar_sale_order_type 55 | #: model:ir.model,name:l10n_ar_sale_order_type.model_sale_order 56 | msgid "Sales Order" 57 | msgstr "Pedido de venta" 58 | 59 | #. module: l10n_ar_sale_order_type 60 | #: model:ir.model,name:l10n_ar_sale_order_type.model_sale_order_type 61 | msgid "Type of sale order" 62 | msgstr "Tipo de pedido de venta" 63 | 64 | #. module: l10n_ar_sale_order_type 65 | #: model:ir.model.fields.selection,name:l10n_ar_sale_order_type.selection__sale_order_type__discriminate_taxes__yes 66 | msgid "Yes" 67 | msgstr "Si" 68 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/demo/stock_picking_demo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | (AR) Responsable Inscripto2 6 | RI2 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | 21 | 22 | outgoing shipment 23 | 24 | 25 | 26 | 30 | 12345 31 | ABC123 32 | 000001 33 | COT-001 34 | draft 35 | 36 | 37 | 38 | outgoing shipment 39 | 40 | 41 | 42 | 46 | 45843 47 | ABC123 48 | 000001 49 | COT-001 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/README.rst: -------------------------------------------------------------------------------- 1 | .. |company| replace:: ADHOC SA 2 | 3 | .. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png 4 | :alt: ADHOC SA 5 | :target: https://www.adhoc.com.ar 6 | 7 | .. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png 8 | 9 | .. image:: https://img.shields.io/badge/license-AGPL--3-blue.png 10 | :target: https://www.gnu.org/licenses/agpl 11 | :alt: License: AGPL-3 12 | 13 | =================================================== 14 | Argentina - Stock Delivery Integration 15 | =================================================== 16 | 17 | This module integrates the delivery functionality with the Argentinian localization features, providing enhanced delivery slip reports and ARBA COT (Código de Operaciones de Traslado) wizard integration for stock movements. 18 | 19 | Features 20 | ======== 21 | 22 | #. **Enhanced Delivery Slip Reports**: Adds delivery-specific information to delivery documents including: 23 | 24 | * Package weight and weight unit of measure 25 | * Carrier tracking reference numbers 26 | * Detailed carrier information (name, VAT number, and address) 27 | * Integration with Argentinian identification document types 28 | 29 | #. **ARBA COT Wizard Integration**: Extends the ARBA COT (Transport Operations Code) wizard to automatically pre-fill the carrier partner information when accessed from stock picking operations. 30 | 31 | Installation 32 | ============ 33 | 34 | To install this module, you need to: 35 | 36 | #. Install the module from the Apps menu 37 | #. The module will be automatically installed when both ``delivery_ux`` and ``l10n_ar_stock_extended`` modules are present 38 | 39 | Configuration 40 | ============= 41 | 42 | To configure this module, you need to: 43 | 44 | #. Configure your delivery carriers in Inventory > Configuration > Delivery > Delivery Methods 45 | #. Ensure your carriers have proper partner information including VAT numbers and addresses 46 | #. The module will automatically enhance delivery reports with the configured information 47 | 48 | Usage 49 | ===== 50 | 51 | To use this module: 52 | 53 | #. **Enhanced Delivery Reports**: When printing delivery slips, the reports will automatically include: 54 | 55 | * Weight information if configured on the picking 56 | * Tracking references from the carrier 57 | * Complete carrier details including identification documents 58 | 59 | #. **ARBA COT Integration**: When using the ARBA COT wizard from stock pickings, the carrier partner will be automatically selected based on the picking's carrier configuration. 60 | 61 | .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas 62 | :alt: Try me on Runbot 63 | :target: http://runbot.adhoc.com.ar/ 64 | 65 | Bug Tracker 66 | =========== 67 | 68 | Bugs are tracked on `GitHub Issues 69 | `_. In case of trouble, please 70 | check there if your issue has already been reported. If you spotted it first, 71 | help us smashing it by providing a detailed and welcomed feedback. 72 | 73 | Credits 74 | ======= 75 | 76 | Images 77 | ------ 78 | 79 | * |company| |icon| 80 | 81 | Contributors 82 | ------------ 83 | 84 | Maintainer 85 | ---------- 86 | 87 | |company_logo| 88 | 89 | This module is maintained by the |company|. 90 | 91 | To contribute to this module, please visit https://www.adhoc.com.ar. 92 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/README.rst: -------------------------------------------------------------------------------- 1 | .. |company| replace:: ADHOC SA 2 | 3 | .. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png 4 | :alt: ADHOC SA 5 | :target: https://www.adhoc.com.ar 6 | 7 | .. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png 8 | 9 | .. image:: https://img.shields.io/badge/license-AGPL--3-blue.png 10 | :target: https://www.gnu.org/licenses/agpl 11 | :alt: License: AGPL-3 12 | 13 | =========================================================== 14 | Integración del módulo de stock a requerimientos argentinos 15 | =========================================================== 16 | 17 | #. Remito Argentino (no electrónico) a través de Talonarios de Remitos 18 | #. Implementacion de la generación del COT via Web Service y se suma al remito 19 | #. Número de despacho en lotes 20 | #. Crea Talonarios de Remitos en caso de que no exista 21 | 22 | Sobre COT 23 | --------- 24 | 25 | PENDIENTE: 26 | 27 | * parsear datetime_out y validar fecha >= hoy-1 y menor= a hoy mas 30 (no tan necesario, ya lo valida la respuesta, por ahora en el help) 28 | * Implementar, si es necesario, nro_planta y nro_puerta 29 | * Si es necesario o mejor imprimir el número obtenido en el remito, entonces tenemos que ver que las dos cosas se hagan en el mismo momento (reporte de remito y solicitud de cot) 30 | 31 | 32 | IMPORTANTE: por ahora está implementado para stock.picking pero no seria muy dificil implementarlo también para facturas ya que la factura puede ser el comprobante de entrega (ver documentos de más abajo) 33 | 34 | Por ahora implementados ARBA y Santa Fe. 35 | 36 | Links Importantes: 37 | 38 | * Tabla de códigos (Según arba - aplican igual para Santa Fe): http://www.arba.gov.ar/bajadas/Fiscalizacion/Operativos/TransporteBienes/Documentacion/20080701-TB-TablasDeValidacion.pdf 39 | * Nomenclador productos: https://www.arba.gov.ar/Aplicaciones/NomencladorTB/NomencladorTB.asp 40 | 41 | Links Devs: 42 | 43 | * Nuevo diseño archivo txt: https://www.arba.gov.ar/archivos/Publicaciones/nuevodiseniodearchivotxt.pdf (vigencia desde el 05/08/2019) 44 | * Instructivo: https://www.arba.gov.ar/archivos/Publicaciones/especificacionesparalaaplicacioncliente.pdf (actualizado el 24/04/2019) 45 | * Especificación archivo txt (viejo): http://www.arba.gov.ar/Transporte_Bienes/VerPDF.asp?param=DA (desde el 17/8/2011) 46 | * Tabla en sistemas ágiles: http://www.sistemasagiles.com.ar/trac/wiki/RemitoElectronicoCotArba?format=pdf 47 | 48 | Installation 49 | ============ 50 | 51 | To install this module, you need to: 52 | 53 | #. Only need to install the module 54 | 55 | Configuration 56 | ============= 57 | 58 | To configure this module, you need to: 59 | 60 | #. Nothing to configure 61 | 62 | Usage 63 | ===== 64 | 65 | To use this module, you need to: 66 | 67 | 68 | .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas 69 | :alt: Try me on Runbot 70 | :target: http://runbot.adhoc.com.ar/ 71 | 72 | Bug Tracker 73 | =========== 74 | 75 | Bugs are tracked on `GitHub Issues 76 | `_. In case of trouble, please 77 | check there if your issue has already been reported. If you spotted it first, 78 | help us smashing it by providing a detailed and welcomed feedback. 79 | 80 | Credits 81 | ======= 82 | 83 | Images 84 | ------ 85 | 86 | * |company| |icon| 87 | 88 | Contributors 89 | ------------ 90 | 91 | Maintainer 92 | ---------- 93 | 94 | |company_logo| 95 | 96 | This module is maintained by the |company|. 97 | 98 | To contribute to this module, please visit https://www.adhoc.com.ar. 99 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/wizards/arba_cot_wizard.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | import re 6 | 7 | from odoo import api, fields, models 8 | from odoo.exceptions import ValidationError 9 | 10 | 11 | class ArbaCotWizard(models.TransientModel): 12 | _name = "arba.cot.wizard" 13 | _description = "arba.cot.wizard" 14 | 15 | datetime_out = fields.Datetime( 16 | required=True, help="Fecha de salida. No debe ser inferior a ayer ni superior a dentro de 30 días." 17 | ) 18 | tipo_recorrido = fields.Selection( 19 | [("U", "Urbano"), ("R", "Rural"), ("M", "Mixto")], 20 | required=True, 21 | default="M", 22 | ) 23 | partner_id = fields.Many2one( 24 | "res.partner", 25 | string="Transportista", 26 | required=True, 27 | ) 28 | 29 | patente_vehiculo = fields.Char( 30 | help="Requerido si CUIT Transportista = CUIT Compañía\n3 letras y 3 numeros o 2 letras, 3 números y 2 letras" 31 | ) 32 | patente_acoplado = fields.Char(help="3 letras y 3 numeros o 2 letras, 3 números y 2 letras") 33 | prod_no_term_dev = fields.Selection( 34 | [("0", "No"), ("1", "Si")], 35 | string="Productos no terminados / devoluciones", 36 | default="0", 37 | required=True, 38 | ) 39 | importe = fields.Float( 40 | string="Importe Neto", 41 | ) 42 | 43 | @api.constrains("patente_vehiculo", "patente_acoplado") 44 | def _constrain_check_format_patente(self): 45 | formato_antiguo = r"^[A-Z]{2}\d{3}[A-Z]{2}$" # LLNNNLL 46 | formato_nuevo = r"^[A-Z]{3}\d{3}$" # LLLNNN 47 | patente_vehiculo_valida = patente_acoplado_valida = False 48 | 49 | if not self.patente_vehiculo and not self.patente_acoplado: 50 | return True 51 | 52 | if self.patente_vehiculo and ( 53 | re.match(formato_antiguo, self.patente_vehiculo.upper()) or re.match(formato_nuevo, self.patente_vehiculo) 54 | ): 55 | patente_vehiculo_valida = True 56 | 57 | if self.patente_acoplado: 58 | if bool(re.match(formato_antiguo, self.patente_acoplado.upper())) or bool( 59 | re.match(formato_nuevo, self.patente_acoplado) 60 | ): 61 | patente_acoplado_valida = True 62 | 63 | error = [] 64 | if not patente_acoplado_valida: 65 | error.append("Patente Acoplado") 66 | if not patente_vehiculo_valida: 67 | error.append("Patente Vehiculo") 68 | if error: 69 | raise ValidationError(self.env._("El formato de patente no es válido (%s)" % ", ".join(error))) 70 | 71 | def confirm(self): 72 | self.ensure_one() 73 | ctx = self.env.context or {} 74 | pickings = self.env["stock.picking"] 75 | 76 | # Soporta acción desde remitos individuales o múltiples 77 | if ctx.get("active_model") == "stock.picking": 78 | picking_ids = ctx.get("active_ids", []) 79 | pickings = self.env["stock.picking"].browse(picking_ids) 80 | else: 81 | # Fallback para compatibilidad 82 | picking_ids = ctx.get("active_ids", []) 83 | pickings = self.env["stock.picking"].browse(picking_ids) 84 | 85 | for pick in pickings: 86 | pick._arba_send_picking( 87 | fields.Date.from_string(self.datetime_out), 88 | self.tipo_recorrido, 89 | self.partner_id, 90 | self.patente_vehiculo, 91 | self.patente_acoplado, 92 | self.prod_no_term_dev, 93 | self.importe, 94 | ) 95 | 96 | return True 97 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/stock_picking_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | stock.picking.internal.search 4 | stock.picking 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | stock.picking.tree 17 | stock.picking 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | stock.picking.form.inherit 28 | stock.picking 29 | 30 | 31 | 32 | False 33 | 34 | 35 | 36 | 39 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | Obtener COT para múltiples remitos 62 | arba.cot.wizard 63 | form 64 | new 65 | {'active_ids': active_ids, 'active_model': 'stock.picking'} 66 | 67 | list 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.ruff] 2 | line-length = 120 3 | 4 | [tool.ruff.lint] 5 | select = [ 6 | "E", # pycodestyle errors 7 | "W", # pycodestyle warnings 8 | "C90", # mccabe 9 | "F", # pyflakes 10 | "UP", # pyupgrade 11 | "I", # isort 12 | ] 13 | ignore = [ 14 | "UP008", # pyupgrade: Use `super()` instead of `super(__class__, self)` (no autofix) 15 | "UP031", # pyupgrade: use format specifiers instead of percent format (no autofix) 16 | "E712", # avoid equality comparisons to False (no autofix) 17 | "E721", # do not compare types, use 'isinstance()' (no autofix) 18 | "E722", # do not use bare `except` (no autofix) 19 | "E731", # do not assign `lambda` expression, use a `def` (no autofix) 20 | "E741", # ambiguos variable name (no autofix) 21 | ] 22 | 23 | [tool.ruff.lint.per-file-ignores] 24 | "__init__.py" = ["F401", "I001"] 25 | "__manifest__.py" = ["B018"] 26 | 27 | [tool.ruff.lint.pycodestyle] 28 | # line-length is set in [tool.ruff], and it's used by the formatter 29 | # in case the formatted can't autofix the line length, it will be reported as an error 30 | # only if it exceeds the max-line-length set here. We use 320 (max available value) to disable 31 | # this check. 32 | max-line-length = 320 33 | 34 | [tool.ruff.lint.isort] 35 | combine-as-imports = true 36 | force-wrap-aliases = true 37 | known-third-party = [ 38 | "dateutil", 39 | "git", 40 | "gnupg", 41 | "openupgradelib", 42 | "pkg_resources", 43 | "psycopg2", 44 | "requests", 45 | "setuptools", 46 | "urllib2", 47 | "yaml", 48 | ] 49 | section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"] 50 | 51 | [tool.ruff.lint.mccabe] 52 | max-complexity = 20 53 | 54 | [tool.pylint.master] 55 | load-plugins = ["pylint_odoo"] 56 | score = false 57 | 58 | [tool.pylint.odoolint] 59 | manifest-required-authors = "ADHOC SA" 60 | manifest-required-keys = ["license"] 61 | manifest-deprecated-keys = ["description", "active"] 62 | license-allowed = [ 63 | "AGPL-3", 64 | "GPL-2", 65 | "GPL-2 or any later version", 66 | "GPL-3", 67 | "GPL-3 or any later version", 68 | "LGPL-3", 69 | ] 70 | 71 | [tool.pylint."messages control"] 72 | disable = "all" 73 | enable = [ 74 | "anomalous-backslash-in-string", 75 | "api-one-deprecated", 76 | "api-one-multi-together", 77 | "assignment-from-none", 78 | "attribute-deprecated", 79 | "attribute-string-redundant", 80 | "character-not-valid-in-resource-link", 81 | "class-camelcase", 82 | "consider-merging-classes-inherited", 83 | "context-overridden", 84 | "create-user-wo-reset-password", 85 | "dangerous-default-value", 86 | "dangerous-filter-wo-user", 87 | "dangerous-qweb-replace-wo-priority", 88 | "dangerous-view-replace-wo-priority", 89 | "deprecated-data-xml-node", 90 | "deprecated-openerp-xml-node", 91 | "development-status-allowed", 92 | "duplicate-id-csv", 93 | "duplicate-key", 94 | "duplicate-po-message-definition", 95 | "duplicate-xml-fields", 96 | "duplicate-xml-record-id", 97 | "eval-referenced", 98 | "eval-used", 99 | # "except-pass", # Annoying 100 | "external-request-timeout", 101 | "file-not-used", 102 | "incoherent-interpreter-exec-perm", 103 | "invalid-commit", 104 | "license-allowed", 105 | "manifest-author-string", 106 | "manifest-deprecated-key", 107 | "manifest-maintainers-list", 108 | "manifest-required-author", 109 | "manifest-required-key", 110 | # "manifest-version-format", # Errors on non-migrated modules, and redundant with runbot 111 | "method-compute", 112 | "method-inverse", 113 | "method-required-super", 114 | "method-search", 115 | "missing-newline-extrafiles", 116 | # "missing-return", # Annoying. Not applicable for computed field methods 117 | "odoo-addons-relative-import", 118 | "old-api7-method-defined", 119 | "openerp-exception-warning", 120 | "po-msgstr-variables", 121 | "po-syntax-error", 122 | "pointless-statement", 123 | "pointless-string-statement", 124 | "print-used", 125 | "redundant-keyword-arg", 126 | "redundant-modulename-xml", 127 | "reimported", 128 | "relative-import", 129 | "renamed-field-parameter", 130 | "resource-not-exist", 131 | "return-in-init", 132 | "rst-syntax-error", 133 | "sql-injection", 134 | "str-format-used", 135 | "test-folder-imported", 136 | "too-few-format-args", 137 | "translation-contains-variable", 138 | "translation-field", 139 | # "translation-positional-used", # Annoying in our use case 140 | # "translation-required", # We don't always translate everything, and that's fine 141 | "unnecessary-utf8-coding-comment", 142 | "unreachable", 143 | "use-vim-comment", 144 | "wrong-tabs-instead-of-spaces", 145 | "xml-attribute-translatable", 146 | "xml-deprecated-qweb-directive", 147 | "xml-deprecated-tree-attribute", 148 | "xml-syntax-error" 149 | ] 150 | 151 | [tool.pylint.reports] 152 | output-format = "colorized" 153 | msg-template = "{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" 154 | -------------------------------------------------------------------------------- /l10n_ar_sale/models/sale_order.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | import logging 6 | 7 | from odoo import api, fields, models 8 | 9 | _logger = logging.getLogger(__name__) 10 | 11 | 12 | class SaleOrder(models.Model): 13 | _inherit = "sale.order" 14 | 15 | vat_discriminated = fields.Boolean( 16 | compute="_compute_vat_discriminated", 17 | ) 18 | 19 | @api.depends( 20 | "partner_id.l10n_ar_afip_responsibility_type_id", 21 | "company_id.l10n_ar_company_requires_vat", 22 | ) 23 | def _compute_vat_discriminated(self): 24 | for rec in self: 25 | rec.vat_discriminated = ( 26 | rec.company_id.l10n_ar_company_requires_vat 27 | and rec.partner_id.l10n_ar_afip_responsibility_type_id.code in ["1"] 28 | or False 29 | ) 30 | 31 | def _compute_tax_totals(self): 32 | super()._compute_tax_totals() 33 | # discriminamos o no impuestos solo en pdf y portal. En backend siempre los mostramos. Para esto evaluamos: 34 | # commit_assetsbundle viene cuando sacamos pdf 35 | # portal_view lo mandamos cuando mostramos campo en portal 36 | report_or_portal_view = "commit_assetsbundle" in self.env.context or "from_portal_view" in self.env.context 37 | if not report_or_portal_view: 38 | return 39 | 40 | for order in self.filtered(lambda x: not x.vat_discriminated): 41 | tax_groups = order.order_line.mapped("tax_ids.tax_group_id") 42 | if not tax_groups: 43 | continue 44 | to_remove_ids = tax_groups.filtered(lambda x: x.l10n_ar_vat_afip_code).ids 45 | tax_group_vals = order.tax_totals["subtotals"][0]["tax_groups"] 46 | # TODO revisar si es discriminar / no discrminar 47 | updated_tax_group_vals = list(filter(lambda x: x.get("id") not in to_remove_ids, tax_group_vals)) 48 | order.tax_totals["subtotals"][0]["tax_groups"] = updated_tax_group_vals 49 | 50 | def _get_name_sale_report(self, report_xml_id): 51 | """Method similar to the '_get_name_invoice_report' of l10n_latam_invoice_document 52 | Basically it allows different localizations to define it's own report 53 | This method should actually go in a sale_ux module that later can be extended by different localizations 54 | Another option would be to use report_substitute module and setup a subsitution with a domain 55 | """ 56 | self.ensure_one() 57 | if self.company_id.country_id.code == "AR": 58 | return "l10n_ar_sale.report_saleorder_document" 59 | return report_xml_id 60 | 61 | def _create_invoices(self, grouped=False, final=False, date=None): 62 | """Por alguna razon cuando voy a crear la factura a traves de una devolucion, no me esta permitiendo crearla 63 | y validarla porque resulta el campo tipo de documento esta quedando vacio. Este campo se llena y computa 64 | automaticamente al generar al modificar el diaro de una factura. 65 | 66 | Si hacemos la prueba funcional desde la interfaz funciona, si intento importar la factura con el importador de 67 | Odoo funciona, pero si la voy a crear desde la devolucion inventario no se rellena dicho campo. 68 | 69 | Para solventar decimos si tenemos facturas que usan documentos y que no tienen un tipo de documento, intentamos 70 | computarlo y asignarlo, esto aplica para cuando generamos una factura desde una orden de venta o suscripcion""" 71 | invoices = super()._create_invoices(grouped=grouped, final=final, date=date) 72 | 73 | # Intentamos Completar el dato tipo de documento si no seteado 74 | to_fix = invoices.filtered(lambda x: x.l10n_latam_use_documents and not x.l10n_latam_document_type_id) 75 | to_fix._compute_l10n_latam_available_document_types() 76 | if self.is_module_installed("sale_subscription_ux"): 77 | for invoice in invoices: 78 | so = invoice.invoice_line_ids[0].sale_line_ids.order_id or False 79 | if so and so.plan_id.bill_end_period: 80 | new_period_start, new_period_stop, ratio, number_of_days = so.order_line[ 81 | 0 82 | ]._get_invoice_line_parameters() 83 | invoice.l10n_ar_afip_service_start = new_period_start - so.plan_id.billing_period 84 | invoice.l10n_ar_afip_service_end = new_period_stop - so.plan_id.billing_period 85 | 86 | return invoices 87 | 88 | def is_module_installed(self, module): 89 | module_installed = self.env["ir.module.module"].search( 90 | [ 91 | ("name", "=", module), 92 | ("state", "=", "installed"), 93 | ] 94 | ) 95 | return True if module_installed else False 96 | 97 | @api.onchange("date_order") 98 | def _l10n_ar_recompute_fiscal_position_taxes(self): 99 | """Recalculamos las percepciones si cambiamos la fecha de la orden de venta. Para ello nos basamos en los 100 | impuestos de la posicion fiscal, buscamos si hay impuestos existentes para los tax groups involucrados y los 101 | reemplazamos por los nuevos impuestos. 102 | """ 103 | for rec in self.filtered( 104 | lambda x: x.fiscal_position_id.l10n_ar_tax_ids.filtered(lambda x: x.tax_type == "perception") 105 | and x.state not in ["cancel", "sale"] 106 | ): 107 | fp_tax_groups = rec.fiscal_position_id.l10n_ar_tax_ids.filtered( 108 | lambda x: x.tax_type == "perception" 109 | ).mapped("default_tax_id.tax_group_id") 110 | date = fields.Date.to_date(fields.Datetime.context_timestamp(rec, rec.date_order)) 111 | new_taxes = rec.fiscal_position_id._l10n_ar_add_taxes(rec.partner_id, rec.company_id, date, "perception") 112 | for line in rec.order_line: 113 | to_unlink = line.tax_ids.filtered(lambda x: x.tax_group_id in fp_tax_groups) 114 | if to_unlink._origin != new_taxes: 115 | line.tax_ids = [(3, tax.id) for tax in to_unlink] + [ 116 | (4, tax.id) for tax in new_taxes if tax not in line.tax_ids 117 | ] 118 | 119 | def copy(self, default=None): 120 | """Re computamos las percepciones al duplicar una venta porque puede ser que la orden venga de otro periodo 121 | o por alguna razón las percepciones hayan cambiado 122 | """ 123 | recs = super().copy(default=default) 124 | recs._l10n_ar_recompute_fiscal_position_taxes() 125 | return recs 126 | -------------------------------------------------------------------------------- /l10n_ar_sale/models/sale_order_line.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # For copyright and license notices, see __manifest__.py file in module root 3 | # directory 4 | ############################################################################## 5 | import logging 6 | 7 | from odoo import _, api, fields, models 8 | from odoo.exceptions import UserError 9 | 10 | _logger = logging.getLogger(__name__) 11 | 12 | 13 | class SaleOrderLine(models.Model): 14 | _inherit = "sale.order.line" 15 | 16 | report_price_unit = fields.Float( 17 | compute="_compute_report_prices_and_taxes", 18 | digits="Product Price", 19 | ) 20 | price_unit_with_tax = fields.Float( 21 | compute="_compute_report_prices_and_taxes", 22 | digits="Product Price", 23 | ) 24 | report_price_subtotal = fields.Monetary(compute="_compute_report_prices_and_taxes") 25 | report_price_net = fields.Float( 26 | compute="_compute_report_prices_and_taxes", 27 | digits="Report Product Price", 28 | ) 29 | report_tax_id = fields.One2many( 30 | compute="_compute_report_prices_and_taxes", 31 | comodel_name="account.tax", 32 | ) 33 | 34 | vat_tax_id = fields.Many2one( 35 | "account.tax", 36 | compute="_compute_vat_tax_id", 37 | ) 38 | report_price_reduce = fields.Monetary(compute="_compute_report_price_reduce") 39 | 40 | @api.depends("price_unit", "price_subtotal", "order_id.vat_discriminated") 41 | def _compute_report_price_reduce(self): 42 | for line in self: 43 | price_type = line.price_subtotal if line.order_id.vat_discriminated else line.price_total 44 | line.report_price_reduce = price_type / line.product_uom_qty if line.product_uom_qty else 0.0 45 | 46 | @api.depends( 47 | "tax_ids.tax_group_id.l10n_ar_vat_afip_code", 48 | ) 49 | def _compute_vat_tax_id(self): 50 | for rec in self: 51 | vat_tax_id = rec.tax_ids.filtered(lambda x: x.tax_group_id.l10n_ar_vat_afip_code) 52 | if len(vat_tax_id) > 1: 53 | raise UserError(_("Only one vat tax allowed per line")) 54 | rec.vat_tax_id = vat_tax_id 55 | 56 | @api.depends("price_unit", "price_subtotal", "order_id.vat_discriminated") 57 | def _compute_report_prices_and_taxes(self): 58 | for line in self: 59 | order = line.order_id 60 | taxes_included = not order.vat_discriminated 61 | price_digits = 10 ** self.env["decimal.precision"].precision_get("Product Price") 62 | price_unit = line.tax_ids.compute_all( 63 | line.price_unit * price_digits, order.currency_id, 1.0, line.product_id, order.partner_shipping_id 64 | ) 65 | if not taxes_included: 66 | report_price_unit = price_unit["total_excluded"] / price_digits 67 | report_price_subtotal = line.price_subtotal 68 | not_included_taxes = line.tax_ids 69 | report_price_net = report_price_unit * (1 - (line.discount or 0.0) / 100.0) 70 | else: 71 | included_taxes = line.tax_ids.filtered(lambda x: x.tax_group_id.l10n_ar_vat_afip_code) 72 | not_included_taxes = line.tax_ids - included_taxes 73 | report_price_unit = ( 74 | included_taxes.compute_all( 75 | line.price_unit * price_digits, 76 | order.currency_id, 77 | 1.0, 78 | line.product_id, 79 | order.partner_shipping_id, 80 | )["total_included"] 81 | / price_digits 82 | ) 83 | report_price_net = report_price_unit * (1 - (line.discount or 0.0) / 100.0) 84 | price = line.price_unit * (1 - (line.discount or 0.0) / 100.0) 85 | report_price_subtotal = included_taxes.compute_all( 86 | price, order.currency_id, line.product_uom_qty, line.product_id, order.partner_shipping_id 87 | )["total_included"] 88 | 89 | line.price_unit_with_tax = price_unit["total_included"] / price_digits 90 | line.report_price_subtotal = report_price_subtotal 91 | line.report_price_unit = report_price_unit 92 | line.report_price_net = report_price_net 93 | line.report_tax_id = not_included_taxes 94 | 95 | @api.model_create_multi 96 | def create(self, vals): 97 | rec = super(SaleOrderLine, self).create(vals) 98 | rec.check_vat_tax() 99 | return rec 100 | 101 | def check_vat_tax(self): 102 | """For recs of argentinian companies with l10n_ar_company_requires_vat (that 103 | comes from the responsability), we ensure one and only one vat tax is 104 | configured 105 | """ 106 | # por ahora, para no romper el install de sale_timesheet lo 107 | # desactivamos en la instalacion 108 | if self.env.context.get("install_mode"): 109 | return True 110 | for rec in self.filtered( 111 | lambda x: not x.display_type 112 | and x.company_id.country_id == self.env.ref("base.ar") 113 | and x.company_id.l10n_ar_company_requires_vat 114 | and x.product_type in ["consu", "service"] 115 | ): 116 | vat_taxes = rec.tax_ids.filtered(lambda x: x.tax_group_id.l10n_ar_vat_afip_code) 117 | if len(vat_taxes) != 1: 118 | raise UserError( 119 | _( 120 | 'Debe haber un único impuesto del grupo de impuestos "IVA" por línea, agréguelo a "%s". ' 121 | "En caso de tenerlo, revise la configuración del impuesto, en opciones avanzadas, " 122 | 'en el campo correspondiente "Grupo de Impuestos".', 123 | rec.product_id.name, 124 | ) 125 | ) 126 | 127 | def write(self, vals): 128 | res = super(SaleOrderLine, self).write(vals) 129 | # for performance we only check if tax or company is on vals 130 | if "tax_ids" in vals or "company_id" in vals: 131 | self.check_vat_tax() 132 | return res 133 | 134 | def _compute_tax_ids(self): 135 | """Agregado de taxes de modulo l10n_ar_tax segun fiscal position""" 136 | super()._compute_tax_ids() 137 | 138 | for rec in self.with_context(tz="America/Argentina/Buenos_Aires").filtered( 139 | "order_id.fiscal_position_id.l10n_ar_tax_ids" 140 | ): 141 | date = fields.Date.to_date(fields.Datetime.context_timestamp(rec, rec.order_id.date_order)) 142 | rec.tax_ids += rec.order_id.fiscal_position_id._l10n_ar_add_taxes( 143 | rec.order_partner_id, rec.company_id, date, "perception" 144 | ) 145 | -------------------------------------------------------------------------------- /l10n_ar_sale/i18n/l10n_ar_sale.pot: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_sale 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 19.0+e\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-11-21 11:01+0000\n" 10 | "PO-Revision-Date: 2025-11-21 11:01+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: l10n_ar_sale 19 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 20 | msgid "
Delivery Date: " 21 | msgstr "" 22 | 23 | #. module: l10n_ar_sale 24 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 25 | msgid "
Expiration: " 26 | msgstr "" 27 | 28 | #. module: l10n_ar_sale 29 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 30 | msgid "
Incoterm:" 31 | msgstr "" 32 | 33 | #. module: l10n_ar_sale 34 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 35 | msgid "
Payment Terms: " 36 | msgstr "" 37 | 38 | #. module: l10n_ar_sale 39 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 40 | msgid "
Your Reference:" 41 | msgstr "" 42 | 43 | #. module: l10n_ar_sale 44 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 45 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.sale_order_portal_content 46 | msgid "% VAT" 47 | msgstr "" 48 | 49 | #. module: l10n_ar_sale 50 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 51 | msgid "SubTotal" 52 | msgstr "" 53 | 54 | #. module: l10n_ar_sale 55 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 56 | msgid "Total" 57 | msgstr "" 58 | 59 | #. module: l10n_ar_sale 60 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 61 | msgid "Customer: " 62 | msgstr "" 63 | 64 | #. module: l10n_ar_sale 65 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 66 | msgid "Salesperson:" 67 | msgstr "" 68 | 69 | #. module: l10n_ar_sale 70 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 71 | msgid "VAT Cond: " 72 | msgstr "" 73 | 74 | #. module: l10n_ar_sale 75 | #: model:ir.model,name:l10n_ar_sale.model_res_config_settings 76 | msgid "Config Settings" 77 | msgstr "" 78 | 79 | #. module: l10n_ar_sale 80 | #. odoo-python 81 | #: code:addons/l10n_ar_sale/models/sale_order_line.py:0 82 | msgid "" 83 | "Debe haber un único impuesto del grupo de impuestos \"IVA\" por línea, " 84 | "agréguelo a \"%s\". En caso de tenerlo, revise la configuración del " 85 | "impuesto, en opciones avanzadas, en el campo correspondiente \"Grupo de " 86 | "Impuestos\"." 87 | msgstr "" 88 | 89 | #. module: l10n_ar_sale 90 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__display_name 91 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__display_name 92 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__display_name 93 | msgid "Display Name" 94 | msgstr "" 95 | 96 | #. module: l10n_ar_sale 97 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__id 98 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__id 99 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__id 100 | msgid "ID" 101 | msgstr "" 102 | 103 | #. module: l10n_ar_sale 104 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 105 | msgid "Invalid document as invoice" 106 | msgstr "" 107 | 108 | #. module: l10n_ar_sale 109 | #. odoo-python 110 | #: code:addons/l10n_ar_sale/models/sale_order_line.py:0 111 | msgid "Only one vat tax allowed per line" 112 | msgstr "" 113 | 114 | #. module: l10n_ar_sale 115 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 116 | msgid "Order" 117 | msgstr "" 118 | 119 | #. module: l10n_ar_sale 120 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 121 | msgid "Page: / " 122 | msgstr "" 123 | 124 | #. module: l10n_ar_sale 125 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__price_unit_with_tax 126 | msgid "Price Unit With Tax" 127 | msgstr "" 128 | 129 | #. module: l10n_ar_sale 130 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 131 | msgid "Pro-Forma Invoice" 132 | msgstr "" 133 | 134 | #. module: l10n_ar_sale 135 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 136 | msgid "Quotation" 137 | msgstr "" 138 | 139 | #. module: l10n_ar_sale 140 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_net 141 | msgid "Report Price Net" 142 | msgstr "" 143 | 144 | #. module: l10n_ar_sale 145 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_reduce 146 | msgid "Report Price Reduce" 147 | msgstr "" 148 | 149 | #. module: l10n_ar_sale 150 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_subtotal 151 | msgid "Report Price Subtotal" 152 | msgstr "" 153 | 154 | #. module: l10n_ar_sale 155 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_unit 156 | msgid "Report Price Unit" 157 | msgstr "" 158 | 159 | #. module: l10n_ar_sale 160 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_tax_id 161 | msgid "Report Tax" 162 | msgstr "" 163 | 164 | #. module: l10n_ar_sale 165 | #: model:res.groups,name:l10n_ar_sale.sale_price_unit_with_tax 166 | msgid "Sale Unit Prices w/ Taxes" 167 | msgstr "" 168 | 169 | #. module: l10n_ar_sale 170 | #: model:ir.model,name:l10n_ar_sale.model_sale_order 171 | msgid "Sales Order" 172 | msgstr "" 173 | 174 | #. module: l10n_ar_sale 175 | #: model:ir.model,name:l10n_ar_sale.model_sale_order_line 176 | msgid "Sales Order Line" 177 | msgstr "" 178 | 179 | #. module: l10n_ar_sale 180 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.res_config_settings_view_form 181 | msgid "Show Unit Price with Taxes included On sale Order Lines" 182 | msgstr "" 183 | 184 | #. module: l10n_ar_sale 185 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.res_config_settings_view_form 186 | msgid "Show Unit Price with Taxes included On sale Order Lines." 187 | msgstr "" 188 | 189 | #. module: l10n_ar_sale 190 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__group_price_unit_with_tax 191 | msgid "Unit Price w/ Taxes" 192 | msgstr "" 193 | 194 | #. module: l10n_ar_sale 195 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__vat_discriminated 196 | msgid "Vat Discriminated" 197 | msgstr "" 198 | 199 | #. module: l10n_ar_sale 200 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__vat_tax_id 201 | msgid "Vat Tax" 202 | msgstr "" 203 | -------------------------------------------------------------------------------- /.github/workflows/cleaner.yml: -------------------------------------------------------------------------------- 1 | # ⚠️ DO NOT EDIT THIS FILE, IT IS GENERATED BY COPIER ⚠️ 2 | # Changes here will be lost on a future update. 3 | # See: https://github.com/ingadhoc/addons-repo-template 4 | 5 | name: Delete PR branch from fork and base repo 6 | 7 | on: 8 | pull_request: 9 | types: [closed] 10 | pull_request_target: 11 | types: [closed] 12 | 13 | # Trigger manual 14 | workflow_dispatch: 15 | inputs: 16 | pull_request_number: 17 | description: 'Pull Request number to delete the branch' 18 | required: true 19 | type: number 20 | 21 | jobs: 22 | delete-branch: 23 | runs-on: ubuntu-latest 24 | if: > 25 | github.repository_owner == 'ingadhoc' && 26 | ( 27 | (github.event_name == 'pull_request' && github.event.pull_request.merged == false && github.event.sender.login == 'roboadhoc') || 28 | (github.event_name == 'pull_request_target' && github.event.pull_request.merged == false && github.event.sender.login == 'roboadhoc') || 29 | (github.event_name == 'workflow_dispatch') || 30 | (github.event_name == 'deployment_status' && github.event.deployment_status.state == 'success') 31 | ) 32 | steps: 33 | - name: Delete branch from base and fork repos 34 | uses: actions/github-script@v6 35 | id: pr_data_fetcher 36 | with: 37 | script: | 38 | // Get PR information 39 | core.info('Fetching PR data and validating conditions...'); 40 | 41 | // Debug info 42 | const eventName = context.eventName; 43 | core.info(`El nombre del evento es: ${eventName}`); 44 | core.info(JSON.stringify(context, null, 2)) 45 | // End Debug info 46 | 47 | let repoOwner = context.repo.owner; 48 | let repoName = context.repo.repo; 49 | let pullRequest; 50 | 51 | if (context.eventName === 'workflow_dispatch' || context.eventName === 'deployment_status') { 52 | let prNumber = 0; 53 | if (context.eventName === 'workflow_dispatch') { 54 | prNumber = context.payload.inputs.pull_request_number; 55 | core.info(`Manual trigger for PR #${prNumber}`); 56 | } 57 | 58 | if (context.eventName === 'deployment_status') { 59 | prNumber = context.payload.deployment_status.description.split("#")[1].split(" ")[0]; 60 | core.info(`deployment_status trigger for PR #${prNumber}`); 61 | } 62 | 63 | // Fetch the PR data using the number 64 | pullRequest = (await github.rest.pulls.get({ 65 | owner: repoOwner, 66 | repo: repoName, 67 | pull_number: prNumber, 68 | })).data; 69 | 70 | core.info(JSON.stringify(pullRequest, null, 2)) 71 | 72 | if (pullRequest.merged === true) { 73 | core.info(`PR #${prNumber} was merged. No action needed.`); 74 | core.setOutput('validation_passed', 'false'); 75 | return; 76 | } 77 | 78 | // Fetch the PR timeline to find the 'closed' event 79 | const timeline = await github.rest.issues.listEventsForTimeline({ 80 | owner: repoOwner, 81 | repo: repoName, 82 | issue_number: prNumber, 83 | }); 84 | 85 | // Find the 'closed' event in the timeline 86 | const closeEvent = timeline.data.find(event => event.event === 'closed'); 87 | 88 | // Get the user who closed the PR from the event 89 | const closedByLogin = closeEvent && closeEvent.actor ? closeEvent.actor.login : null; 90 | 91 | if (closedByLogin !== 'roboadhoc') { 92 | core.info(`PR #${prNumber} was not closed by 'roboadhoc' (${closedByLogin}). No action needed.`); 93 | core.setOutput('validation_passed', 'false'); 94 | return; 95 | } 96 | 97 | } else if (['pull_request', 'pull_request_target'].includes(context.eventName)) { 98 | pullRequest = context.payload.pull_request; 99 | } else { 100 | core.setOutput('validation_passed', 'false'); 101 | core.error(`Unsupported event type: ${context.eventName}`); 102 | return; 103 | } 104 | 105 | // Set outputs for subsequent steps 106 | core.setOutput('validation_passed', 'true'); 107 | core.setOutput('base_repo_owner', repoOwner); 108 | core.setOutput('base_repo_name', repoName); 109 | core.setOutput('base_branch_name', pullRequest.head.ref); 110 | core.setOutput('head_repo_full_name', pullRequest.head.repo.full_name); 111 | core.setOutput('head_repo_owner', pullRequest.head.repo.owner.login); 112 | core.setOutput('head_repo_name', pullRequest.head.repo.name); 113 | core.setOutput('is_fork', pullRequest.head.repo.full_name !== context.repo.owner + '/' + context.repo.repo); 114 | 115 | - name: Delete branch from the base repository 116 | uses: actions/github-script@v6 117 | if: ${{ steps.pr_data_fetcher.outputs.validation_passed == 'true' }} 118 | with: 119 | github-token: ${{ github.token }} 120 | script: | 121 | const baseBranchName = `${{ steps.pr_data_fetcher.outputs.base_branch_name }}`; 122 | const baseRepoOwner = `${{ steps.pr_data_fetcher.outputs.base_repo_owner }}`; 123 | const baseRepoName = `${{ steps.pr_data_fetcher.outputs.base_repo_name }}`; 124 | try { 125 | core.info(`Attempting to delete branch '${baseBranchName}' from base repo '${baseRepoOwner}/${baseRepoName}'`); 126 | await github.rest.git.deleteRef({ 127 | owner: baseRepoOwner, 128 | repo: baseRepoName, 129 | ref: `heads/${baseBranchName}`, 130 | }); 131 | core.info(`Branch '${baseBranchName}' deleted from base repo successfully.`); 132 | } catch (error) { 133 | if (error.status === 422) { 134 | core.info(`Branch '${baseBranchName}' in base repo already deleted. No action needed.`); 135 | } else { 136 | console.error(`Error deleting branch '${baseBranchName}' from base repo: ${error.message}`); 137 | } 138 | } 139 | 140 | - name: Delete branch from the fork repository (adhoc-dev) 141 | if: ${{ steps.pr_data_fetcher.outputs.validation_passed == 'true' }} 142 | uses: actions/github-script@v6 143 | with: 144 | github-token: ${{ secrets.EXTERNAL_REPO_TOKEN_CLEANER_ADHOC_DEV || github.token }} 145 | script: | 146 | const baseBranchName = `${{ steps.pr_data_fetcher.outputs.base_branch_name }}`; 147 | const headRepoOwner = 'adhoc-dev'; 148 | const headRepoName = `${{ steps.pr_data_fetcher.outputs.head_repo_name }}`; 149 | 150 | try { 151 | core.info(`PR comes from a fork. Attempting to delete branch from fork repo '${headRepoOwner}/${headRepoName}'`); 152 | await github.rest.git.deleteRef({ 153 | owner: headRepoOwner, 154 | repo: headRepoName, 155 | ref: `heads/${baseBranchName}`, 156 | }); 157 | core.info(`Branch '${baseBranchName}' deleted from fork repo successfully.`); 158 | } catch (error) { 159 | if (error.status === 422) { 160 | core.info(`Branch '${baseBranchName}' in fork repo already deleted. No action needed.`); 161 | } else { 162 | console.error(`Error deleting branch '${baseBranchName}' from fork repo: ${error.message}`); 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /l10n_ar_sale/i18n/es.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_sale 4 | # 5 | # Translators: 6 | # ADHOC - Bot , 2025 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Odoo Server 19.0+e\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2025-11-19 17:08+0000\n" 13 | "PO-Revision-Date: 2025-11-19 14:19+0000\n" 14 | "Last-Translator: ADHOC - Bot , 2025\n" 15 | "Language-Team: Spanish (https://app.transifex.com/adhoc/teams/46451/es/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: \n" 19 | "Language: es\n" 20 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" 21 | 22 | #. module: l10n_ar_sale 23 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 24 | msgid "
Delivery Date: " 25 | msgstr "
Fecha de Entrega: " 26 | 27 | #. module: l10n_ar_sale 28 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 29 | msgid "
Expiration: " 30 | msgstr "
Vencimiento: " 31 | 32 | #. module: l10n_ar_sale 33 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 34 | msgid "
Incoterm:" 35 | msgstr "" 36 | 37 | #. module: l10n_ar_sale 38 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 39 | msgid "
Payment Terms: " 40 | msgstr "
Términos de Pago: " 41 | 42 | #. module: l10n_ar_sale 43 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 44 | msgid "
Your Reference:" 45 | msgstr "
Su referencia:" 46 | 47 | #. module: l10n_ar_sale 48 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 49 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.sale_order_portal_content 50 | msgid "% VAT" 51 | msgstr "% IVA" 52 | 53 | #. module: l10n_ar_sale 54 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 55 | msgid "SubTotal" 56 | msgstr "" 57 | 58 | #. module: l10n_ar_sale 59 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 60 | msgid "Total" 61 | msgstr "" 62 | 63 | #. module: l10n_ar_sale 64 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 65 | msgid "Customer: " 66 | msgstr "Cliente: " 67 | 68 | #. module: l10n_ar_sale 69 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 70 | msgid "Salesperson:" 71 | msgstr "Comercial:" 72 | 73 | #. module: l10n_ar_sale 74 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 75 | msgid "VAT Cond: " 76 | msgstr "Cond. IVA: " 77 | 78 | #. module: l10n_ar_sale 79 | #: model:ir.model,name:l10n_ar_sale.model_res_config_settings 80 | msgid "Config Settings" 81 | msgstr "Ajustes de configuración" 82 | 83 | #. module: l10n_ar_sale 84 | #. odoo-python 85 | #: code:addons/l10n_ar_sale/models/sale_order_line.py:0 86 | msgid "" 87 | "Debe haber un único impuesto del grupo de impuestos \"IVA\" por línea, " 88 | "agréguelo a \"%s\". En caso de tenerlo, revise la configuración del " 89 | "impuesto, en opciones avanzadas, en el campo correspondiente \"Grupo de " 90 | "Impuestos\"." 91 | msgstr "" 92 | 93 | #. module: l10n_ar_sale 94 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__display_name 95 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__display_name 96 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__display_name 97 | msgid "Display Name" 98 | msgstr "Nombre para mostrar" 99 | 100 | #. module: l10n_ar_sale 101 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__id 102 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__id 103 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__id 104 | msgid "ID" 105 | msgstr "" 106 | 107 | #. module: l10n_ar_sale 108 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 109 | msgid "Invalid document as invoice" 110 | msgstr "Doc. no válido como factura" 111 | 112 | #. module: l10n_ar_sale 113 | #. odoo-python 114 | #: code:addons/l10n_ar_sale/models/sale_order_line.py:0 115 | msgid "Only one vat tax allowed per line" 116 | msgstr "Solo se permite un impuesto de IVA por línea" 117 | 118 | #. module: l10n_ar_sale 119 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 120 | msgid "Order" 121 | msgstr "Pedido" 122 | 123 | #. module: l10n_ar_sale 124 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 125 | msgid "Page: / " 126 | msgstr "Página: / " 127 | 128 | #. module: l10n_ar_sale 129 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__price_unit_with_tax 130 | msgid "Price Unit With Tax" 131 | msgstr "Precio Unitario Con Impuestos" 132 | 133 | #. module: l10n_ar_sale 134 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 135 | msgid "Pro-Forma Invoice" 136 | msgstr "Factura Pro-Forma" 137 | 138 | #. module: l10n_ar_sale 139 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.report_saleorder_document 140 | msgid "Quotation" 141 | msgstr "Presupuesto" 142 | 143 | #. module: l10n_ar_sale 144 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_net 145 | msgid "Report Price Net" 146 | msgstr "Informe del Precio Neto" 147 | 148 | #. module: l10n_ar_sale 149 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_reduce 150 | msgid "Report Price Reduce" 151 | msgstr "Informe de Reducción de Precios" 152 | 153 | #. module: l10n_ar_sale 154 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_subtotal 155 | msgid "Report Price Subtotal" 156 | msgstr "Informe del Subtotal de Precios" 157 | 158 | #. module: l10n_ar_sale 159 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_price_unit 160 | msgid "Report Price Unit" 161 | msgstr "Informe del Precio Unitario" 162 | 163 | #. module: l10n_ar_sale 164 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__report_tax_id 165 | msgid "Report Tax" 166 | msgstr "Informe de Impuestos" 167 | 168 | #. module: l10n_ar_sale 169 | #: model:res.groups,name:l10n_ar_sale.sale_price_unit_with_tax 170 | msgid "Sale Unit Prices w/ Taxes" 171 | msgstr "Precio Unitario con Impuestos" 172 | 173 | #. module: l10n_ar_sale 174 | #: model:ir.model,name:l10n_ar_sale.model_sale_order 175 | msgid "Sales Order" 176 | msgstr "Pedido de venta" 177 | 178 | #. module: l10n_ar_sale 179 | #: model:ir.model,name:l10n_ar_sale.model_sale_order_line 180 | msgid "Sales Order Line" 181 | msgstr "Línea de pedido de venta" 182 | 183 | #. module: l10n_ar_sale 184 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.res_config_settings_view_form 185 | msgid "Show Unit Price with Taxes included On sale Order Lines" 186 | msgstr "" 187 | "Mostrar precio unitario con impuestos incluidos en las líneas de venta" 188 | 189 | #. module: l10n_ar_sale 190 | #: model_terms:ir.ui.view,arch_db:l10n_ar_sale.res_config_settings_view_form 191 | msgid "Show Unit Price with Taxes included On sale Order Lines." 192 | msgstr "" 193 | "Mostrar el precio unitario con impuestos incluidos en las líneas de la orden" 194 | " de venta." 195 | 196 | #. module: l10n_ar_sale 197 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_res_config_settings__group_price_unit_with_tax 198 | msgid "Unit Price w/ Taxes" 199 | msgstr "Precio unitario con impuestos" 200 | 201 | #. module: l10n_ar_sale 202 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order__vat_discriminated 203 | msgid "Vat Discriminated" 204 | msgstr "IVA Discriminado" 205 | 206 | #. module: l10n_ar_sale 207 | #: model:ir.model.fields,field_description:l10n_ar_sale.field_sale_order_line__vat_tax_id 208 | msgid "Vat Tax" 209 | msgstr "IVA" 210 | -------------------------------------------------------------------------------- /l10n_ar_sale/views/sale_report_templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 16 | 17 | 158 | 165 | 166 | 167 | 172 | 173 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /.github/copilot-instructions.md: -------------------------------------------------------------------------------- 1 | # Instrucciones para Copilot – Revisión de código Odoo (v19.0) 2 | 3 | ## Contexto 4 | 5 | * El repositorio contiene **módulos Odoo preparados para Odoo 19** (rama `19.0`). 6 | * A nivel técnico, Odoo 19 trae **mejoras importantes en el ORM**: 7 | 8 | * nueva API de constraints e índices (`models.Constraint`, `models.Index`, `models.UniqueIndex`), 9 | * nueva forma de definir dominios via clase `Domain`, 10 | 11 | * Permite utilizar operadores &, | y ~ para combinar condiciones de forma más legible y mantenible. 12 | * Se pueden utilizar sobre función `filtered`. 13 | * nueva API para manejo de progresos en crons, 14 | 15 | * Se cambia `notify_progress` por `commit_progress` en crons, ej. 16 | 17 | ```python 18 | self.env["ir.cron"]._commit_progress(remaining=n) 19 | ... 20 | self.env["ir.cron"]._commit_progress(processed=m) 21 | ``` 22 | 23 | --- 24 | 25 | ## Reglas generales (aplican a todo el código) 26 | 27 | 1. **Responder siempre en español.** 28 | 2. Detectar y corregir **errores de tipeo u ortografía evidentes** en nombres de variables, métodos o comentarios (cuando sean claros). 29 | 3. No sugerir traducciones de docstrings o comentarios entre idiomas (no proponer pasar del inglés al español o viceversa). 30 | 4. No proponer agregar docstrings si el método no tiene uno. 31 | 32 | * Si ya existe un docstring, puede sugerirse un estilo básico acorde a PEP8, pero **no será un error** si faltan `return`, tipos o parámetros documentados. 33 | 5. No proponer cambios puramente estéticos (espacios, comillas simples vs dobles, orden de imports, etc.). 34 | 35 | --- 36 | 37 | ## Revisión de modelos (`models/*.py`) – cuestiones generales 38 | 39 | * Verificar que: 40 | 41 | * Los campos (`fields.*`) tengan nombres claros, consistentes y sin conflictos. 42 | * Las relaciones (`Many2one`, `One2many`, `Many2many`) tengan `comodel_name` y `ondelete` adecuados. 43 | * Las constraints (`_sql_constraints`, `@api.constrains`) mantengan integridad y mensajes claros. 44 | * Sugerir `@api.depends` cuando un campo `compute` no lo tenga y dependa de otros campos. 45 | * En métodos redefinidos, verificar uso de `super()` y respeto del contrato original. 46 | * Evitar patrones ineficientes (búsquedas dentro de loops, write uno a uno, etc.) y favorecer operaciones vectorizadas. 47 | 48 | ### Notas específicas Odoo 19 (modelos / ORM) 49 | 50 | * En Odoo 19 se recomienda usar las nuevas clases `models.Constraint`, `models.Index` y `models.UniqueIndex` para definir constraints e índices a nivel de modelo, en lugar de depender exclusivamente de `_sql_constraints`.([Odoo][4]) 51 | 52 | * Copilot puede sugerir migrar definiciones nuevas de `_sql_constraints` a la nueva API cuando el diff ya está tocando esas partes. 53 | * El tiempo de inicialización del registro de modelos se ha reducido de manera notable, lo que vuelve todavía más relevante evitar invalidaciones innecesarias y recomputes costosos en métodos `create`/`write`/`unlink`.([glo][2]) 54 | 55 | --- 56 | 57 | ## 🧾 Revisión del manifest (`__manifest__.py`) – reglas generales 58 | 59 | * Confirmar que todos los archivos usados (vistas, seguridad, datos, reportes, wizards) estén referenciados en el manifest. 60 | * Verificar dependencias declaradas: que no falten módulos requeridos ni se declaren innecesarios. 61 | * **Regla de versión (obligatoria):** 62 | Siempre que el diff incluya **modificaciones en**: 63 | 64 | * definición de campos o modelos (`models/*.py`, `wizards/*.py`), 65 | * vistas o datos XML (`views/*.xml`, `data/*.xml`, `report/*.xml`, `wizards/*.xml`), 66 | * seguridad (`security/*.csv`, `security/*.xml`), 67 | 68 | **y el `__manifest__.py` no incrementa `version`, sugerir el bump de versión** (por ejemplo, `1.0.0 → 1.0.1`). 69 | * Solo hacerlo una vez por revisión, aunque haya múltiples archivos afectados. 70 | 71 | --- 72 | 73 | ## Revisión de vistas XML (`views/*.xml`) – reglas generales 74 | 75 | * Confirmar que se usen herencias (`inherit_id`, `xpath`) en lugar de redefinir vistas completas sin necesidad. 76 | * Validar que los campos referenciados existan en los modelos correspondientes. 77 | * Evitar duplicar gran parte del `arch`; prioriza `xpath` específicos y claros. 78 | 79 | --- 80 | 81 | ## Seguridad y acceso – reglas generales 82 | 83 | * Verificar los archivos `ir.model.access.csv` para nuevos modelos: deben tener permisos mínimos necesarios. 84 | * No proponer abrir acceso global sin justificación. 85 | * Si se agregan nuevos modelos o campos de control de acceso, **recordar el bump de versión** (ver sección de manifest). 86 | * En Odoo 19, poner atención especial a cambios de seguridad ligados a: 87 | 88 | * integraciones de IA, 89 | * VOIP, WhatsApp y mensajería, 90 | * nuevos objetos de Equity/ESG. 91 | 92 | Cambios en estos modelos pueden requerir migración de ownership/tokens o datos de permisos.([Odoo][1]) 93 | 94 | ### Seguridad y rendimiento del ORM 95 | 96 | * Detectar cualquier `self.env.cr.execute` con interpolación directa de parámetros y reemplazarlo por dominios ORM o queries parametrizadas (`execute(sql, params)`). 97 | * Marcar ejemplos como `self.env.cr.execute("SELECT id FROM res_partner WHERE name = '%s'" % name)` y sugerir el dominio equivalente `self.env['res.partner'].search([('name', '=', name)])`. 98 | * Si se ve `eval()` o domains construidos como strings a partir de input externo, advertir del riesgo de ejecución arbitraria y sugerir el uso de objetos `Domain` o listas de tuplas. 99 | * Ejemplo a evitar: `domain = "[('name','ilike','%s')]" % user_input; records = self.env['res.partner'].search(eval(domain))`. 100 | * Alternativa segura: `records = self.env['res.partner'].search([('name', 'ilike', user_input)])` o `Domain([('name', 'ilike', user_input)])`. 101 | * Reforzar las recomendaciones de rendimiento conocidas: evitar `search([])` seguido de filtrado en Python, evitar loops con `write`/`search` uno a uno, y proponer alternativas como `search_count`, `mapped`, `filtered`, `browse(ids)` o `search_fetch` para lecturas planas. 102 | * Ejemplo de mejora: usar `gmail_count = self.env['res.partner'].search_count([('email', 'ilike', 'gmail')])` en lugar de recorrer todos los partners buscando “gmail”. 103 | * Para lecturas masivas, preferir `names = partners.mapped('name')` frente a acumular manualmente en un bucle, y usar `search_fetch` cuando se necesiten diccionarios planos. 104 | * En operaciones masivas, promover writes vectorizados y recomputes en lotes; en v19 se pueden combinar con `env.cr.commit()` controlado o helpers de progreso (`_commit_progress`) cuando el diff ya manipula crons. 105 | * Ejemplo sugerido: `partners.write({'comment': 'Actualizado masivamente'})` y `_commit_progress(processed=len(partners))` en jobs largos. 106 | * Recordar que estas prácticas no solo mejoran performance: al mantenerse dentro del ORM se heredan los controles de acceso, auditoría y reglas multi-compañía. 107 | 108 | --- 109 | 110 | ## Cambios estructurales y scripts de migración – **cuestiones generales (v18+v19)** 111 | 112 | Las mismas reglas generales descritas en la sección de Odoo 18 se aplican también aquí. Copilot debe reutilizar la misma lógica para decidir si pide migración o no: 113 | 114 | 1. Renombres de campos **almacenados** y de modelos. 115 | 2. Cambios de tipo con impacto real en la representación en DB (no para `Char → Text` u otros cambios triviales). 116 | 3. Eliminación de campos con reestructuración de datos. 117 | 4. Nuevos campos `compute` con `store=True` que requieren backfill, con advertencias en modelos muy grandes. 118 | 5. Cambios de dominios o **eliminación/renombre** de valores de `selection` (añadir keys nuevas no requiere script en general). 119 | 6. Cambios o adición de `_sql_constraints` / índices con riesgo de conflicto con datos existentes (al menos emitir **advertencia**). 120 | 7. Cambios en `ir.model.data` / XML IDs, especialmente con `no_update="1"` cuando el contenido lógico cambia (sugerir forzar el cambio). 121 | 8. Cambios de reglas de acceso / propiedad que requieran recalcular ownership o multi-company. 122 | 123 | En caso de duda, Copilot debe: 124 | 125 | * describir el riesgo, 126 | * sugerir un posible enfoque de migración, 127 | * pero **no exagerar**: si el cambio es claramente no rompedor (ej. añadir un valor extra de `selection` sin tocar los anteriores), no pedir migración. 128 | 129 | --- 130 | 131 | ## Scripts de migración en `migrations/`: pre / post / end (v19) 132 | 133 | * Mismas definiciones y mapeo que en la sección de Odoo 18. 134 | * En Odoo 19 se pueden mencionar utilidades de `odoo.upgrade.util` (p.ej. `change_field_selection_values`, helpers para índices y constraints) cuando el diff ya usa el módulo de upgrade.([Odoo][5]) 135 | 136 | --- 137 | 138 | ## Convenciones de scripts en `migrations/` (v19) 139 | 140 | Iguales que en 18: 141 | 142 | * Scripts idempotentes, por lotes, con logs claros. 143 | * Carpeta `migrations//` alineada con la versión del manifest. 144 | * `pre_*.py`, `post_*.py` y/o scripts `end` según corresponda. 145 | 146 | --- 147 | 148 | ## Checklist rápida para el review (v19) 149 | 150 | | Categoría | Qué comprobar Copilot | 151 | | ------------------ | ------------------------------------------------------------------------------------------------------------ | 152 | | Modelos | Relaciones válidas; constraints; uso de `@api.depends`; `super()` correcto | 153 | | Vistas XML | Herencias correctas; campos válidos; adaptación a componentes modernos (IA, secciones, etc.) | 154 | | Manifest | **Bump de versión obligatorio** si hay cambios en modelos/vistas/seguridad/datos; archivos referenciados | 155 | | Seguridad | Accesos mínimos necesarios; reglas revisadas, en especial para IA/VOIP/WhatsApp | 156 | | Migraciones | **Si hay cambios estructurales (lista actualizada), sugerir scripts en `migrations/` y describir qué hacen** | 157 | | Rendimiento / ORM | Evitar patrones anti-ORM; aprovechar las mejoras del ORM/registro en v19 | 158 | | Ortografía & typos | Errores evidentes corregibles sin cambiar estilo | 159 | 160 | --- 161 | 162 | ## Heurística práctica para el bump de versión (v19) 163 | 164 | * **SI** el diff toca cualquiera de: `models/`, `views/`, `data/`, `report/`, `security/`, `wizards/` 165 | **Y** `__manifest__.py` no cambia `version` → **Sugerir bump**. 166 | * **SI** hay scripts `migrations/pre_*.py` o `migrations/post_*.py` nuevos → **Sugerir al menos minor bump**. 167 | * **SI** hay cambios que rompen compatibilidad (renombres, tipos, limpieza agresiva de datos) → **Sugerir minor/major** según impacto. 168 | 169 | --- 170 | 171 | ## Estilo del feedback (v19) 172 | 173 | * El feedback debe ser **breve, concreto y accionable**. 174 | * Ejemplos rápidos: 175 | 176 | * “La constraint nueva podría definirse como `models.Constraint` en lugar de `_sql_constraints`.” 177 | * “La vista de cotización no está aprovechando las secciones configurables introducidas en 19.” 178 | * “Se renombra el campo `state` almacenado; falta bump de versión y script de migración para copiar valores antes del upgrade.” 179 | 180 | --- 181 | 182 | ## Resumen operativo para Copilot (v19) 183 | 184 | 1. **Aplicar las mismas reglas generales** que en v18 para revisión de código, manifest y migraciones. 185 | 2. **Diferenciar claramente**: 186 | 187 | * cambios estructurales que requieren migración (según la lista ajustada), 188 | * de ajustes menores que no la necesitan (p.ej. `Char → Text`, añadir valores de `selection`). 189 | 3. Tener en cuenta las **novedades de Odoo 19**: 190 | 191 | * preferir la nueva API de constraints/índices cuando corresponda, 192 | * revisar cuidadosamente vistas y permisos ligados a IA, Equity, ESG, WhatsApp, VOIP, etc. 193 | 4. Mantener un feedback **conciso y orientado a acción**, evitando micro-comentarios. 194 | 195 | [^odoo19]: Resumen basado en las Odoo 19 Release Notes oficiales y artículos técnicos sobre cambios del ORM e índice/constraints en Odoo 19. -------------------------------------------------------------------------------- /l10n_ar_stock_ux/views/report_deliveryslip.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | Delivery Guide (DEPRECATED) 12 | 13 | 14 | 24 | 25 | 26 | 27 | 227 | 228 | 229 | -------------------------------------------------------------------------------- /l10n_ar_stock_delivery/views/picking_templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 148 | 320 | 321 | 322 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/i18n/ru.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_stock_ux 4 | # 5 | # Translators: 6 | # Irina Fedulova , 2020 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Odoo Server 13.0\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2020-12-30 20:29+0000\n" 13 | "PO-Revision-Date: 2020-04-10 19:14+0000\n" 14 | "Last-Translator: Irina Fedulova , 2020\n" 15 | "Language-Team: Russian (https://www.transifex.com/adhoc/teams/46451/ru/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: \n" 19 | "Language: ru\n" 20 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" 21 | 22 | #. module: l10n_ar_stock_ux 23 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 24 | msgid "" 25 | "(el usuario es el CUIT). Si da error en nombre de archivo entonces la clave " 26 | "es correcta." 27 | msgstr "" 28 | 29 | #. module: l10n_ar_stock_ux 30 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__acoplado 31 | msgid "3 letras y 3 numeros o 2 letras, 3 números y 2 letras" 32 | msgstr "" 33 | 34 | #. module: l10n_ar_stock_ux 35 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 36 | msgid "
Customer Reference:" 37 | msgstr "" 38 | 39 | #. module: l10n_ar_stock_ux 40 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 41 | msgid "
Declared Value:" 42 | msgstr "" 43 | 44 | #. module: l10n_ar_stock_ux 45 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 46 | msgid "" 47 | "" 49 | msgstr "" 50 | 51 | #. module: l10n_ar_stock_ux 52 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 53 | msgid "Customer: " 54 | msgstr "" 55 | 56 | #. module: l10n_ar_stock_ux 57 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 58 | msgid "Deliver to: " 59 | msgstr "" 60 | 61 | #. module: l10n_ar_stock_ux 62 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 63 | msgid "Order:" 64 | msgstr "" 65 | 66 | #. module: l10n_ar_stock_ux 67 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 68 | msgid "VAT Cond: " 69 | msgstr "" 70 | 71 | #. module: l10n_ar_stock_ux 72 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__l10n_ar_afip_barcode 73 | msgid "AFIP Barcode" 74 | msgstr "" 75 | 76 | #. module: l10n_ar_stock_ux 77 | #: model:ir.model,name:l10n_ar_stock_ux.model_account_chart_template 78 | msgid "Account Chart Template" 79 | msgstr "" 80 | 81 | #. module: l10n_ar_stock_ux 82 | #: model:res.groups,name:l10n_ar_stock_ux.arba_cot_enabled 83 | msgid "Arba COT enabled" 84 | msgstr "" 85 | 86 | #. module: l10n_ar_stock_ux 87 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_product__arba_code 88 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_template__arba_code 89 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_uom_uom__arba_code 90 | msgid "Arba Code" 91 | msgstr "" 92 | 93 | #. module: l10n_ar_stock_ux 94 | #: model:ir.actions.act_window,name:l10n_ar_stock_ux.action_arba_cot_wizard 95 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 96 | msgid "Asistente para Código de Operaciones de Traslado" 97 | msgstr "" 98 | 99 | #. module: l10n_ar_stock_ux 100 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 101 | msgid "Barcode" 102 | msgstr "" 103 | 104 | #. module: l10n_ar_stock_ux 105 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 106 | msgid "CAI Due Date:" 107 | msgstr "" 108 | 109 | #. module: l10n_ar_stock_ux 110 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 111 | msgid "CAI:" 112 | msgstr "" 113 | 114 | #. module: l10n_ar_stock_ux 115 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_book__l10n_ar_cai 116 | msgid "CAI" 117 | msgstr "" 118 | 119 | #. module: l10n_ar_stock_ux 120 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot 121 | msgid "COT" 122 | msgstr "" 123 | 124 | #. module: l10n_ar_stock_ux 125 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot_numero_comprobante 126 | msgid "COT - Nro Comprobante" 127 | msgstr "" 128 | 129 | #. module: l10n_ar_stock_ux 130 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot_numero_unico 131 | msgid "COT - Nro Único" 132 | msgstr "" 133 | 134 | #. module: l10n_ar_stock_ux 135 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 136 | msgid "Cancel" 137 | msgstr "" 138 | 139 | #. module: l10n_ar_stock_ux 140 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_company__arba_cot 141 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__arba_cot 142 | msgid "Clave COT" 143 | msgstr "" 144 | 145 | #. module: l10n_ar_stock_ux 146 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 147 | msgid "Clave COT ARBA" 148 | msgstr "" 149 | 150 | #. module: l10n_ar_stock_ux 151 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_company__arba_cot 152 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_config_settings__arba_cot 153 | msgid "Clave para generación de remito electŕonico" 154 | msgstr "" 155 | 156 | #. module: l10n_ar_stock_ux 157 | #: model:ir.model,name:l10n_ar_stock_ux.model_res_company 158 | msgid "Companies" 159 | msgstr "" 160 | 161 | #. module: l10n_ar_stock_ux 162 | #: model:ir.model,name:l10n_ar_stock_ux.model_res_config_settings 163 | msgid "Config Settings" 164 | msgstr "" 165 | 166 | #. module: l10n_ar_stock_ux 167 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 168 | msgid "Confirm" 169 | msgstr "" 170 | 171 | #. module: l10n_ar_stock_ux 172 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__create_uid 173 | msgid "Created by" 174 | msgstr "" 175 | 176 | #. module: l10n_ar_stock_ux 177 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__create_date 178 | msgid "Created on" 179 | msgstr "" 180 | 181 | #. module: l10n_ar_stock_ux 182 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__datetime_out 183 | msgid "Datetime Out" 184 | msgstr "" 185 | 186 | #. module: l10n_ar_stock_ux 187 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__dispatch_number 188 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_production_lot__dispatch_number 189 | msgid "Dispatch Number" 190 | msgstr "" 191 | 192 | #. module: l10n_ar_stock_ux 193 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__display_name 194 | msgid "Display Name" 195 | msgstr "" 196 | 197 | #. module: l10n_ar_stock_ux 198 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_book__document_type_id 199 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__document_type_id 200 | msgid "Document Type" 201 | msgstr "" 202 | 203 | #. module: l10n_ar_stock_ux 204 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 205 | #, python-format 206 | msgid "Document type has no validator, code or letter configured (Id: %s" 207 | msgstr "" 208 | 209 | #. module: l10n_ar_stock_ux 210 | #: code:addons/l10n_ar_stock_ux/models/product_template.py:0 211 | #, python-format 212 | msgid "El código según nomenclador de arba debe ser de 6 dígitos numéricos" 213 | msgstr "" 214 | 215 | #. module: l10n_ar_stock_ux 216 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 217 | #, python-format 218 | msgid "" 219 | "Error al presentar remito:\n" 220 | "%s" 221 | msgstr "" 222 | 223 | #. module: l10n_ar_stock_ux 224 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 225 | #, python-format 226 | msgid "" 227 | "Error al presentar remito:\n" 228 | "* %s" 229 | msgstr "" 230 | 231 | #. module: l10n_ar_stock_ux 232 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 233 | #, python-format 234 | msgid "" 235 | "Error al presentar remito:\n" 236 | "* Tipo Error: %s\n" 237 | "* Codigo Error: %s\n" 238 | "* Mensaje Error: %s" 239 | msgstr "" 240 | 241 | #. module: l10n_ar_stock_ux 242 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__datetime_out 243 | msgid "" 244 | "Fecha de salida. No debe ser inferior a ayer ni superior a dentro de 30 " 245 | "días." 246 | msgstr "" 247 | 248 | #. module: l10n_ar_stock_ux 249 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__id 250 | msgid "ID" 251 | msgstr "" 252 | 253 | #. module: l10n_ar_stock_ux 254 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__importe 255 | msgid "Importe Neto" 256 | msgstr "" 257 | 258 | #. module: l10n_ar_stock_ux 259 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 260 | msgid "" 261 | "Indique la clave COT utilizada para generación de remito electrónico / COT. " 262 | "Puede probarla intentando subir cualquier archivo en este" 263 | msgstr "" 264 | 265 | #. module: l10n_ar_stock_ux 266 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 267 | #, python-format 268 | msgid "" 269 | "Las provincias de origen y destino son obligatorias y deben tener un código " 270 | "válido" 271 | msgstr "" 272 | 273 | #. module: l10n_ar_stock_ux 274 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard____last_update 275 | msgid "Last Modified on" 276 | msgstr "" 277 | 278 | #. module: l10n_ar_stock_ux 279 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__write_uid 280 | msgid "Last Updated by" 281 | msgstr "" 282 | 283 | #. module: l10n_ar_stock_ux 284 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__write_date 285 | msgid "Last Updated on" 286 | msgstr "" 287 | 288 | #. module: l10n_ar_stock_ux 289 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 290 | #, python-format 291 | msgid "Los remitos seleccionados deben pertenecer a la misma compañía" 292 | msgstr "" 293 | 294 | #. module: l10n_ar_stock_ux 295 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_production_lot 296 | msgid "Lot/Serial" 297 | msgstr "" 298 | 299 | #. module: l10n_ar_stock_ux 300 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__m 301 | msgid "Mixto" 302 | msgstr "" 303 | 304 | #. module: l10n_ar_stock_ux 305 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__prod_no_term_dev__0 306 | msgid "No" 307 | msgstr "" 308 | 309 | #. module: l10n_ar_stock_ux 310 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 311 | #, python-format 312 | msgid "No arba code for product \"%s\" (Id: %s)" 313 | msgstr "" 314 | 315 | #. module: l10n_ar_stock_ux 316 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 317 | #, python-format 318 | msgid "No arba code for uom \"%s\" (Id: %s) or any uom in category \"%s\"" 319 | msgstr "" 320 | 321 | #. module: l10n_ar_stock_ux 322 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 323 | #, python-format 324 | msgid "No se asignó número de remito" 325 | msgstr "" 326 | 327 | #. module: l10n_ar_stock_ux 328 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 329 | #, python-format 330 | msgid "No sequence found for COT files (code = \"arba.cot.file\") on company \"%s" 331 | msgstr "" 332 | 333 | #. module: l10n_ar_stock_ux 334 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot 335 | msgid "Número de COT del último COT solicitado" 336 | msgstr "" 337 | 338 | #. module: l10n_ar_stock_ux 339 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot_numero_comprobante 340 | msgid "Número de comprobante del último COT solicitado" 341 | msgstr "" 342 | 343 | #. module: l10n_ar_stock_ux 344 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot_numero_unico 345 | msgid "Número único del último COT solicitado" 346 | msgstr "" 347 | 348 | #. module: l10n_ar_stock_ux 349 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 350 | msgid "Obtener COT (BETA)" 351 | msgstr "" 352 | 353 | #. module: l10n_ar_stock_ux 354 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 355 | msgid "Obtener Código de Operaciones de Traslado (ARBA / Santa Fe)" 356 | msgstr "" 357 | 358 | #. module: l10n_ar_stock_ux 359 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 360 | msgid "Page: / " 361 | msgstr "" 362 | 363 | #. module: l10n_ar_stock_ux 364 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__patente_acoplado 365 | msgid "Patente Acoplado" 366 | msgstr "" 367 | 368 | #. module: l10n_ar_stock_ux 369 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__patente_vehiculo 370 | msgid "Patente Vehiculo" 371 | msgstr "" 372 | 373 | #. module: l10n_ar_stock_ux 374 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_config_settings__group_arba_cot_enabled 375 | msgid "" 376 | "Permite generar el COT de arba una vez que se han asignado números de " 377 | "remitos en las entregas" 378 | msgstr "" 379 | 380 | #. module: l10n_ar_stock_ux 381 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 382 | msgid "" 383 | "Permite generar el COT de arba una vez que se han asignado números de " 384 | "remitos en las entregas." 385 | msgstr "" 386 | 387 | #. module: l10n_ar_stock_ux 388 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 389 | #, python-format 390 | msgid "Picking has no \"Document type\" linked (Id: %s)" 391 | msgstr "" 392 | 393 | #. module: l10n_ar_stock_ux 394 | #: model:ir.model,name:l10n_ar_stock_ux.model_product_template 395 | msgid "Product Template" 396 | msgstr "" 397 | 398 | #. module: l10n_ar_stock_ux 399 | #: model:ir.model,name:l10n_ar_stock_ux.model_uom_uom 400 | msgid "Product Unit of Measure" 401 | msgstr "" 402 | 403 | #. module: l10n_ar_stock_ux 404 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__prod_no_term_dev 405 | msgid "Productos no terminados / devoluciones" 406 | msgstr "" 407 | 408 | #. module: l10n_ar_stock_ux 409 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 410 | #, python-format 411 | msgid "Remito Electrónico Solicitado" 412 | msgstr "" 413 | 414 | #. module: l10n_ar_stock_ux 415 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 416 | msgid "Remito electrónico (COT)" 417 | msgstr "" 418 | 419 | #. module: l10n_ar_stock_ux 420 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__patente_vehiculo 421 | msgid "" 422 | "Requerido si CUIT Transportista = CUIT Compañía\n" 423 | "3 letras y 3 numeros o 2 letras, 3 números y 2 letras" 424 | msgstr "" 425 | 426 | #. module: l10n_ar_stock_ux 427 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__r 428 | msgid "Rural" 429 | msgstr "" 430 | 431 | #. module: l10n_ar_stock_ux 432 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__prod_no_term_dev__1 433 | msgid "Si" 434 | msgstr "" 435 | 436 | #. module: l10n_ar_stock_ux 437 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__dispatch_number 438 | msgid "" 439 | "Si define un número de despacho, al validar la transferencia, el mismo será " 440 | "asociado a los lotes sin número de despacho vinculados a la transferencia." 441 | msgstr "" 442 | 443 | #. module: l10n_ar_stock_ux 444 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 445 | #, python-format 446 | msgid "" 447 | "Si el CUIT de la compañía y el cuit del transportista son el mismo, se debe " 448 | "informar la patente del vehículo." 449 | msgstr "" 450 | 451 | #. module: l10n_ar_stock_ux 452 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_book__l10n_ar_cai 453 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_book__l10n_ar_cai_due 454 | msgid "Solo complete este dato si es auto-impresor" 455 | msgstr "" 456 | 457 | #. module: l10n_ar_stock_ux 458 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_book 459 | msgid "Stock Voucher Book" 460 | msgstr "" 461 | 462 | #. module: l10n_ar_stock_ux 463 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__tipo_recorrido 464 | msgid "Tipo Recorrido" 465 | msgstr "" 466 | 467 | #. module: l10n_ar_stock_ux 468 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_picking 469 | msgid "Transfer" 470 | msgstr "" 471 | 472 | #. module: l10n_ar_stock_ux 473 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__partner_id 474 | msgid "Transportista" 475 | msgstr "" 476 | 477 | #. module: l10n_ar_stock_ux 478 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__u 479 | msgid "Urbano" 480 | msgstr "" 481 | 482 | #. module: l10n_ar_stock_ux 483 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__group_arba_cot_enabled 484 | msgid "Usar COT de ARBA?" 485 | msgstr "" 486 | 487 | #. module: l10n_ar_stock_ux 488 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_book__l10n_ar_cai_due 489 | msgid "Vencimiento CAI" 490 | msgstr "" 491 | 492 | #. module: l10n_ar_stock_ux 493 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.product_template_form_view 494 | msgid "Ver Nomenclador" 495 | msgstr "" 496 | 497 | #. module: l10n_ar_stock_ux 498 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.product_uom_form_view 499 | msgid "Ver códigos" 500 | msgstr "" 501 | 502 | #. module: l10n_ar_stock_ux 503 | #: code:addons/l10n_ar_stock_ux/models/res_company.py:0 504 | #, python-format 505 | msgid "You must configure ARBA COT on company %s" 506 | msgstr "" 507 | 508 | #. module: l10n_ar_stock_ux 509 | #: model:ir.model,name:l10n_ar_stock_ux.model_arba_cot_wizard 510 | msgid "arba.cot.wizard" 511 | msgstr "arba.cot.wizard" 512 | 513 | #. module: l10n_ar_stock_ux 514 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 515 | msgid "link" 516 | msgstr "" 517 | -------------------------------------------------------------------------------- /l10n_ar_stock_ux/i18n/l10n_ar_stock_ux.pot: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * l10n_ar_stock_ux 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 19.0+e\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-12-16 11:14+0000\n" 10 | "PO-Revision-Date: 2025-12-16 11:14+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: l10n_ar_stock_ux 19 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 20 | msgid "" 21 | "(el usuario es el CUIT). Si da error en nombre de archivo entonces la clave " 22 | "es correcta." 23 | msgstr "" 24 | 25 | #. module: l10n_ar_stock_ux 26 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__patente_acoplado 27 | msgid "3 letras y 3 numeros o 2 letras, 3 números y 2 letras" 28 | msgstr "" 29 | 30 | #. module: l10n_ar_stock_ux 31 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 32 | msgid "" 33 | "
\n" 34 | " COT:" 35 | msgstr "" 36 | 37 | #. module: l10n_ar_stock_ux 38 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 39 | msgid "" 40 | "
\n" 41 | " Customer Reference:" 42 | msgstr "" 43 | 44 | #. module: l10n_ar_stock_ux 45 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 46 | msgid "" 47 | "
\n" 48 | " Declared Value:" 49 | msgstr "" 50 | 51 | #. module: l10n_ar_stock_ux 52 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 53 | msgid "" 54 | "
\n" 55 | " PO Number:" 56 | msgstr "" 57 | 58 | #. module: l10n_ar_stock_ux 59 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 60 | msgid "" 61 | "
\n" 62 | " Packages Qty:" 63 | msgstr "" 64 | 65 | #. module: l10n_ar_stock_ux 66 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_invoice_document 67 | msgid "" 68 | "
\n" 69 | " Remitos:" 70 | msgstr "" 71 | 72 | #. module: l10n_ar_stock_ux 73 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 74 | msgid "" 75 | "" 77 | msgstr "" 78 | 79 | #. module: l10n_ar_stock_ux 80 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 81 | msgid "Customer: " 82 | msgstr "" 83 | 84 | #. module: l10n_ar_stock_ux 85 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 86 | msgid "Deliver to: " 87 | msgstr "" 88 | 89 | #. module: l10n_ar_stock_ux 90 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 91 | msgid "Order:" 92 | msgstr "" 93 | 94 | #. module: l10n_ar_stock_ux 95 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 96 | msgid "VAT Cond: " 97 | msgstr "" 98 | 99 | #. module: l10n_ar_stock_ux 100 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__l10n_ar_afip_barcode 101 | msgid "AFIP Barcode" 102 | msgstr "" 103 | 104 | #. module: l10n_ar_stock_ux 105 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 106 | msgid "Aclaración" 107 | msgstr "" 108 | 109 | #. module: l10n_ar_stock_ux 110 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking_type__report_signature_section 111 | msgid "" 112 | "Agregar al reporte una sección para añadir firma de confirmación de " 113 | "recepción." 114 | msgstr "" 115 | 116 | #. module: l10n_ar_stock_ux 117 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking_type__auto_assign_delivery_guide 118 | msgid "" 119 | "Al validar una transferencia de este tipo, se asignará automáticamente un " 120 | "número de remito." 121 | msgstr "" 122 | 123 | #. module: l10n_ar_stock_ux 124 | #: model:res.groups,name:l10n_ar_stock_ux.arba_cot_enabled 125 | msgid "Arba COT enabled" 126 | msgstr "" 127 | 128 | #. module: l10n_ar_stock_ux 129 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_product__arba_code 130 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_template__arba_code 131 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_uom_uom__arba_code 132 | msgid "Arba Code" 133 | msgstr "" 134 | 135 | #. module: l10n_ar_stock_ux 136 | #: model:ir.actions.act_window,name:l10n_ar_stock_ux.action_arba_cot_wizard 137 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 138 | msgid "Asistente para Código de Operaciones de Traslado" 139 | msgstr "" 140 | 141 | #. module: l10n_ar_stock_ux 142 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking_type__auto_assign_delivery_guide 143 | msgid "Auto Assign Delivery Guide Number" 144 | msgstr "" 145 | 146 | #. module: l10n_ar_stock_ux 147 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking_type__report_signature_section 148 | msgid "Añadir sección firma" 149 | msgstr "" 150 | 151 | #. module: l10n_ar_stock_ux 152 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 153 | msgid "Barcode" 154 | msgstr "" 155 | 156 | #. module: l10n_ar_stock_ux 157 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 158 | msgid "CAI Due Date:" 159 | msgstr "" 160 | 161 | #. module: l10n_ar_stock_ux 162 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__l10n_ar_cai_expiration_date 163 | msgid "CAI Expiration Date" 164 | msgstr "" 165 | 166 | #. module: l10n_ar_stock_ux 167 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 168 | msgid "CAI:" 169 | msgstr "" 170 | 171 | #. module: l10n_ar_stock_ux 172 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot 173 | msgid "COT" 174 | msgstr "" 175 | 176 | #. module: l10n_ar_stock_ux 177 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot_numero_comprobante 178 | msgid "COT - Nro Comprobante" 179 | msgstr "" 180 | 181 | #. module: l10n_ar_stock_ux 182 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__cot_numero_unico 183 | msgid "COT - Nro Único" 184 | msgstr "" 185 | 186 | #. module: l10n_ar_stock_ux 187 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 188 | msgid "Cancel" 189 | msgstr "" 190 | 191 | #. module: l10n_ar_stock_ux 192 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_company__arba_cot 193 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__arba_cot 194 | msgid "Clave COT" 195 | msgstr "" 196 | 197 | #. module: l10n_ar_stock_ux 198 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 199 | msgid "Clave COT ARBA" 200 | msgstr "" 201 | 202 | #. module: l10n_ar_stock_ux 203 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_company__arba_cot 204 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_config_settings__arba_cot 205 | msgid "Clave para generación de remito electŕonico" 206 | msgstr "" 207 | 208 | #. module: l10n_ar_stock_ux 209 | #: model:ir.model,name:l10n_ar_stock_ux.model_res_company 210 | msgid "Companies" 211 | msgstr "" 212 | 213 | #. module: l10n_ar_stock_ux 214 | #: model:ir.model,name:l10n_ar_stock_ux.model_res_config_settings 215 | msgid "Config Settings" 216 | msgstr "" 217 | 218 | #. module: l10n_ar_stock_ux 219 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_arba_cot_wizard 220 | msgid "Confirm" 221 | msgstr "" 222 | 223 | #. module: l10n_ar_stock_ux 224 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking_type__report_partner_id 225 | msgid "Contacto para Encabezado" 226 | msgstr "" 227 | 228 | #. module: l10n_ar_stock_ux 229 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__create_uid 230 | msgid "Created by" 231 | msgstr "" 232 | 233 | #. module: l10n_ar_stock_ux 234 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__create_date 235 | msgid "Created on" 236 | msgstr "" 237 | 238 | #. module: l10n_ar_stock_ux 239 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 240 | msgid "DNI" 241 | msgstr "" 242 | 243 | #. module: l10n_ar_stock_ux 244 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__datetime_out 245 | msgid "Datetime Out" 246 | msgstr "" 247 | 248 | #. module: l10n_ar_stock_ux 249 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__l10n_ar_delivery_guide_number 250 | msgid "Delivery Guide No." 251 | msgstr "" 252 | 253 | #. module: l10n_ar_stock_ux 254 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_lot__dispatch_number 255 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__dispatch_number 256 | msgid "Dispatch Number" 257 | msgstr "" 258 | 259 | #. module: l10n_ar_stock_ux 260 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__display_name 261 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_template__display_name 262 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_company__display_name 263 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__display_name 264 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_lot__display_name 265 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__display_name 266 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking_type__display_name 267 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_uom_uom__display_name 268 | msgid "Display Name" 269 | msgstr "" 270 | 271 | #. module: l10n_ar_stock_ux 272 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__document_type_id 273 | msgid "Document Type (AR)" 274 | msgstr "" 275 | 276 | #. module: l10n_ar_stock_ux 277 | #. odoo-python 278 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 279 | msgid "Document type has no validator, code or letter configured (Id: %s" 280 | msgstr "" 281 | 282 | #. module: l10n_ar_stock_ux 283 | #. odoo-python 284 | #: code:addons/l10n_ar_stock_ux/models/product_template.py:0 285 | msgid "El código según nomenclador de arba debe ser de 6 dígitos numéricos" 286 | msgstr "" 287 | 288 | #. module: l10n_ar_stock_ux 289 | #. odoo-python 290 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 291 | msgid "Error al conectar con ARBA COT. Estado: %(status)s. Mensaje: %(msg)s" 292 | msgstr "" 293 | 294 | #. module: l10n_ar_stock_ux 295 | #. odoo-python 296 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 297 | msgid "Error al presentar remito:\n" 298 | msgstr "" 299 | 300 | #. module: l10n_ar_stock_ux 301 | #. odoo-python 302 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 303 | msgid "Error parsing ARBA COT response" 304 | msgstr "" 305 | 306 | #. module: l10n_ar_stock_ux 307 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 308 | msgid "Fecha" 309 | msgstr "" 310 | 311 | #. module: l10n_ar_stock_ux 312 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__datetime_out 313 | msgid "" 314 | "Fecha de salida. No debe ser inferior a ayer ni superior a dentro de 30 " 315 | "días." 316 | msgstr "" 317 | 318 | #. module: l10n_ar_stock_ux 319 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 320 | msgid "Fecha: ____ / ____ / ____" 321 | msgstr "" 322 | 323 | #. module: l10n_ar_stock_ux 324 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 325 | msgid "Firma" 326 | msgstr "" 327 | 328 | #. module: l10n_ar_stock_ux 329 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__id 330 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_product_template__id 331 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_company__id 332 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__id 333 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_lot__id 334 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking__id 335 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_stock_picking_type__id 336 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_uom_uom__id 337 | msgid "ID" 338 | msgstr "" 339 | 340 | #. module: l10n_ar_stock_ux 341 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__importe 342 | msgid "Importe Neto" 343 | msgstr "" 344 | 345 | #. module: l10n_ar_stock_ux 346 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 347 | msgid "" 348 | "Indique la clave COT utilizada para generación de remito electrónico / COT. " 349 | "Puede probarla intentando subir cualquier archivo en este" 350 | msgstr "" 351 | 352 | #. module: l10n_ar_stock_ux 353 | #. odoo-python 354 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 355 | msgid "" 356 | "Las provincias de origen y destino son obligatorias y deben tener un código " 357 | "válido" 358 | msgstr "" 359 | 360 | #. module: l10n_ar_stock_ux 361 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__write_uid 362 | msgid "Last Updated by" 363 | msgstr "" 364 | 365 | #. module: l10n_ar_stock_ux 366 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__write_date 367 | msgid "Last Updated on" 368 | msgstr "" 369 | 370 | #. module: l10n_ar_stock_ux 371 | #. odoo-python 372 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 373 | msgid "Los remitos seleccionados deben pertenecer a la misma compañía" 374 | msgstr "" 375 | 376 | #. module: l10n_ar_stock_ux 377 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_lot 378 | msgid "Lot/Serial" 379 | msgstr "" 380 | 381 | #. module: l10n_ar_stock_ux 382 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__m 383 | msgid "Mixto" 384 | msgstr "" 385 | 386 | #. module: l10n_ar_stock_ux 387 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__prod_no_term_dev__0 388 | msgid "No" 389 | msgstr "" 390 | 391 | #. module: l10n_ar_stock_ux 392 | #. odoo-python 393 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 394 | msgid "No arba code for product \"%(product)s\" (Id: %(id)s)" 395 | msgstr "" 396 | 397 | #. module: l10n_ar_stock_ux 398 | #. odoo-python 399 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 400 | msgid "" 401 | "No arba code for uom \"%(uom)s\" (Id: %(id)s) or any uom in category " 402 | "\"%(category)s\"" 403 | msgstr "" 404 | 405 | #. module: l10n_ar_stock_ux 406 | #. odoo-python 407 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 408 | msgid "No se asignó número de remito" 409 | msgstr "" 410 | 411 | #. module: l10n_ar_stock_ux 412 | #. odoo-python 413 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 414 | msgid "No sequence found for COT files (code = \"arba.cot.file\") on company \"%s" 415 | msgstr "" 416 | 417 | #. module: l10n_ar_stock_ux 418 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot 419 | msgid "Número de COT del último COT solicitado" 420 | msgstr "" 421 | 422 | #. module: l10n_ar_stock_ux 423 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot_numero_comprobante 424 | msgid "Número de comprobante del último COT solicitado" 425 | msgstr "" 426 | 427 | #. module: l10n_ar_stock_ux 428 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__l10n_ar_delivery_guide_number 429 | msgid "" 430 | "Número o lista de números de remitos separadas por \",\". Por ejempplo:\n" 431 | "* 0001-00000001\n" 432 | "* 0001-00000001,0001-00000002" 433 | msgstr "" 434 | 435 | #. module: l10n_ar_stock_ux 436 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__cot_numero_unico 437 | msgid "Número único del último COT solicitado" 438 | msgstr "" 439 | 440 | #. module: l10n_ar_stock_ux 441 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 442 | msgid "Obtener COT" 443 | msgstr "" 444 | 445 | #. module: l10n_ar_stock_ux 446 | #: model:ir.actions.act_window,name:l10n_ar_stock_ux.stock_picking_action_arba_cot_wizard_batch 447 | msgid "Obtener COT para múltiples remitos" 448 | msgstr "" 449 | 450 | #. module: l10n_ar_stock_ux 451 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 452 | msgid "Obtener Código de Operaciones de Traslado (ARBA / Santa Fe)" 453 | msgstr "" 454 | 455 | #. module: l10n_ar_stock_ux 456 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 457 | msgid "" 458 | "Page: \n" 459 | " / " 460 | msgstr "" 461 | 462 | #. module: l10n_ar_stock_ux 463 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking_type__report_partner_id 464 | msgid "" 465 | "Para el encabezado de los remitos/comprobantes de entrega, la información a utilizar se obtendrá del primer datos definido de estos lugares:\n" 466 | "* Este campo\n" 467 | "* Dirección del Almacen de la transferencia\n" 468 | "* Información de la compañía de la transferencia" 469 | msgstr "" 470 | 471 | #. module: l10n_ar_stock_ux 472 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__patente_acoplado 473 | msgid "Patente Acoplado" 474 | msgstr "" 475 | 476 | #. module: l10n_ar_stock_ux 477 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__patente_vehiculo 478 | msgid "Patente Vehiculo" 479 | msgstr "" 480 | 481 | #. module: l10n_ar_stock_ux 482 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_res_config_settings__group_arba_cot_enabled 483 | msgid "" 484 | "Permite generar el COT de arba una vez que se han asignado números de " 485 | "remitos en las entregas" 486 | msgstr "" 487 | 488 | #. module: l10n_ar_stock_ux 489 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 490 | msgid "" 491 | "Permite generar el COT de arba una vez que se han asignado números de " 492 | "remitos en las entregas." 493 | msgstr "" 494 | 495 | #. module: l10n_ar_stock_ux 496 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_picking_type 497 | msgid "Picking Type" 498 | msgstr "" 499 | 500 | #. module: l10n_ar_stock_ux 501 | #. odoo-python 502 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 503 | msgid "Picking has no \"Document type\" linked (Id: %s)" 504 | msgstr "" 505 | 506 | #. module: l10n_ar_stock_ux 507 | #: model:ir.model,name:l10n_ar_stock_ux.model_product_template 508 | msgid "Product" 509 | msgstr "" 510 | 511 | #. module: l10n_ar_stock_ux 512 | #: model:ir.model,name:l10n_ar_stock_ux.model_uom_uom 513 | msgid "Product Unit of Measure" 514 | msgstr "" 515 | 516 | #. module: l10n_ar_stock_ux 517 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__prod_no_term_dev 518 | msgid "Productos no terminados / devoluciones" 519 | msgstr "" 520 | 521 | #. module: l10n_ar_stock_ux 522 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 523 | msgid "Recibí conforme:" 524 | msgstr "" 525 | 526 | #. module: l10n_ar_stock_ux 527 | #. odoo-python 528 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 529 | msgid "Remito Electrónico Solicitado" 530 | msgstr "" 531 | 532 | #. module: l10n_ar_stock_ux 533 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.view_picking_cot_form 534 | msgid "Remito electrónico (COT)" 535 | msgstr "" 536 | 537 | #. module: l10n_ar_stock_ux 538 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_arba_cot_wizard__patente_vehiculo 539 | msgid "" 540 | "Requerido si CUIT Transportista = CUIT Compañía\n" 541 | "3 letras y 3 numeros o 2 letras, 3 números y 2 letras" 542 | msgstr "" 543 | 544 | #. module: l10n_ar_stock_ux 545 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__r 546 | msgid "Rural" 547 | msgstr "" 548 | 549 | #. module: l10n_ar_stock_ux 550 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__prod_no_term_dev__1 551 | msgid "Si" 552 | msgstr "" 553 | 554 | #. module: l10n_ar_stock_ux 555 | #: model:ir.model.fields,help:l10n_ar_stock_ux.field_stock_picking__dispatch_number 556 | msgid "" 557 | "Si define un número de despacho, al validar la transferencia, el mismo será " 558 | "asociado a los lotes sin número de despacho vinculados a la transferencia." 559 | msgstr "" 560 | 561 | #. module: l10n_ar_stock_ux 562 | #. odoo-python 563 | #: code:addons/l10n_ar_stock_ux/models/stock_picking.py:0 564 | msgid "" 565 | "Si el CUIT de la compañía y el cuit del transportista son el mismo, se debe " 566 | "informar la patente del vehículo." 567 | msgstr "" 568 | 569 | #. module: l10n_ar_stock_ux 570 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__tipo_recorrido 571 | msgid "Tipo Recorrido" 572 | msgstr "" 573 | 574 | #. module: l10n_ar_stock_ux 575 | #: model:ir.model,name:l10n_ar_stock_ux.model_stock_picking 576 | msgid "Transfer" 577 | msgstr "" 578 | 579 | #. module: l10n_ar_stock_ux 580 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_arba_cot_wizard__partner_id 581 | msgid "Transportista" 582 | msgstr "" 583 | 584 | #. module: l10n_ar_stock_ux 585 | #: model:ir.model.fields.selection,name:l10n_ar_stock_ux.selection__arba_cot_wizard__tipo_recorrido__u 586 | msgid "Urbano" 587 | msgstr "" 588 | 589 | #. module: l10n_ar_stock_ux 590 | #: model:ir.model.fields,field_description:l10n_ar_stock_ux.field_res_config_settings__group_arba_cot_enabled 591 | msgid "Usar COT de ARBA?" 592 | msgstr "" 593 | 594 | #. module: l10n_ar_stock_ux 595 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.product_template_form_view 596 | msgid "Ver Nomenclador" 597 | msgstr "" 598 | 599 | #. module: l10n_ar_stock_ux 600 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.product_uom_form_view 601 | msgid "Ver códigos" 602 | msgstr "" 603 | 604 | #. module: l10n_ar_stock_ux 605 | #. odoo-python 606 | #: code:addons/l10n_ar_stock_ux/models/res_company.py:0 607 | msgid "You must configure ARBA COT on company %s" 608 | msgstr "" 609 | 610 | #. module: l10n_ar_stock_ux 611 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.report_delivery_document 612 | msgid "____ / ____ / ____" 613 | msgstr "" 614 | 615 | #. module: l10n_ar_stock_ux 616 | #: model:ir.model,name:l10n_ar_stock_ux.model_arba_cot_wizard 617 | msgid "arba.cot.wizard" 618 | msgstr "" 619 | 620 | #. module: l10n_ar_stock_ux 621 | #: model_terms:ir.ui.view,arch_db:l10n_ar_stock_ux.res_config_settings_view_form 622 | msgid "link" 623 | msgstr "" 624 | --------------------------------------------------------------------------------