Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .copier-answers.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Do NOT update manually; changes here will be overwritten by Copier
_commit: 2f2f7c4
_commit: a740779
_src_path: https://github.com/ingadhoc/addons-repo-template.git
description: ADHOC Odoo purchase Modules
is_private: false
Expand Down
25 changes: 6 additions & 19 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@

* Confirmar que todos los archivos usados (vistas, seguridad, datos, reportes, wizards) estén referenciados en el manifest.
* Verificar dependencias declaradas: que no falten módulos requeridos ni se declaren innecesarios.
* **Regla de versión (obligatoria):**
Solo sugerir bump de versión si el `__manifest__.py` no incrementa `version` y se modificó la estructura de un modelo, una vista, o algún record .xml (ej. cambios en definición de campos, vistas XML, datos XML, seguridad).
* Solo hacerlo una vez por revisión, aunque haya múltiples archivos afectados.

---
Expand All @@ -61,7 +59,6 @@

* Verificar los archivos `ir.model.access.csv` para nuevos modelos: deben tener permisos mínimos necesarios.
* No proponer abrir acceso global sin justificación.
* Si se agregan nuevos modelos o campos de control de acceso, **recordar el bump de versión** (ver sección de manifest).
* Si se cambian `record rules`, revisar especialmente combinaciones multi-compañía y multi-website.

### Seguridad y rendimiento del ORM
Expand All @@ -86,7 +83,7 @@

## Cambios estructurales y scripts de migración – **cuestiones generales**

Cuando el diff sugiera **cambios de estructura de datos**, **siempre evaluar** si corresponde proponer un **script de migración** en `migrations/` (pre/post/end) **y recordar el bump de versión**.
Cuando el diff sugiera **cambios de estructura de datos**, **siempre evaluar** si corresponde proponer un **script de migración** en `migrations/` (pre/post/end).

### Reglas generales de estructura de `migrations/`

Expand Down Expand Up @@ -283,31 +280,21 @@ def migrate(cr, registry):
| ------------------ | -------------------------------------------------------------------------------------------------------- |
| Modelos | Relaciones válidas; constraints; uso adecuado de `@api.depends`; `super()` correcto |
| Vistas XML | Herencias correctas; campos válidos; adaptación a cambios de versión (p.ej. `<list>` vs `<tree>`) |
| Manifest | **Bump de versión obligatorio** si hay cambios estructurales en modelos/vistas/records .xml; archivos referenciados |
| Seguridad | Accesos mínimos necesarios; reglas revisadas |
| Migraciones | **Si hay cambios estructurales, sugerir script en `migrations/` (pre/post/end)** y describir qué hace |
| Rendimiento / ORM | Evitar loops costosos; no SQL innecesario; aprovechar las optimizaciones del ORM de la versión |
| Ortografía & typos | Errores evidentes corregibles sin modificar idioma ni estilo |

---

## Heurística práctica para el bump de versión (general)

* **SI** el diff modifica la estructura de un modelo, una vista, o algún record .xml (ej. cambios en definición de campos, vistas XML, datos XML, seguridad)
**Y** `__manifest__.py` no cambia `version`**Sugerir bump**.
* **SI** hay scripts `migrations/pre_*.py` o `migrations/post_*.py` nuevos → **Sugerir al menos minor bump**.
* **SI** hay cambios que rompen compatibilidad (renombres, cambios de tipo con impacto, limpieza masiva de datos) → **Sugerir minor/major** según impacto.

---

## Estilo del feedback (general)

* Ser breve, claro y útil. Ejemplos:

* “El campo `partner_id` no se encuentra referenciado en la vista.”
* “Este método redefine `write()` sin usar `super()`.”
* “Tip: hay un error ortográfico en el nombre del parámetro.”
* **Bump + migración:** “Se renombra `old_ref``new_ref`: falta **bump de versión** y **pre-script** en `migrations/` para copiar valores antes del upgrade; añadir **post-script** para recompute del stored.”
* **Migración:** “Se renombra `old_ref``new_ref`: falta **pre-script** en `migrations/` para copiar valores antes del upgrade; añadir **post-script** para recompute del stored.”

* Evitar explicaciones largas o reescrituras completas salvo que el cambio sea claro y necesario.
* Priorizar comentarios en forma de **lista corta de puntos** (3–7 ítems) y frases breves en lugar de bloques de texto extensos.
Expand All @@ -316,10 +303,10 @@ def migrate(cr, registry):

## Resumen operativo para Copilot

1. **Detecta cambios estructurales en modelos, vistas o records .xml → exige bump de `version` en `__manifest__.py` si no está incrementada.**
2. **Si hay cambio estructural (según la lista actualizada) → propone y describe script(s) de migración en `migrations/` (pre/post/end)**, con enfoque idempotente y en lotes.
3. Distingue entre:
1. **Si hay cambio estructural (según la lista actualizada) → propone y describe script(s) de migración en `migrations/` (pre/post/end)**, con enfoque idempotente y en lotes.
2. Distingue entre:

* **cuestiones generales** (válidas para cualquier versión),
* y **matices específicos de Odoo 18** (por ejemplo, uso de `<list>`, passkeys, tours y comportamiento del framework).
4. Mantén el feedback **concreto, breve y accionable**.

3. Mantén el feedback **concreto, breve y accionable**.
7 changes: 6 additions & 1 deletion .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@ name: pre-commit

on:
push:
branches: "[0-9][0-9].0"
branches:
- "1[8-9].0"
- "[2-9][0-9].0"
pull_request_target:
branches:
- "1[8-9].0*"
- "[2-9][0-9].0*"

jobs:
pre-commit:
Expand Down
2 changes: 2 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ repos:
- id: check-docstring-first
- id: check-executables-have-shebangs
- id: check-merge-conflict
args: ['--assume-in-merge']
exclude: '\.rst$'
- id: check-symlinks
- id: check-xml
- id: check-yaml
Expand Down
3 changes: 2 additions & 1 deletion purchase_ux/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
##############################################################################
{
"name": "Purchase UX",
"version": "18.0.1.1.0",
"version": "18.0.1.2.0",
"category": "Purchases",
"sequence": 14,
"summary": "",
Expand All @@ -41,6 +41,7 @@
"views/purchase_line_views.xml",
"views/product_template_views.xml",
"views/product_supplierinfo_views.xml",
"views/purchase_bill_line_match_views.xml",
],
"demo": [
"demo/purchase_order_demo.xml",
Expand Down
5 changes: 5 additions & 0 deletions purchase_ux/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -380,3 +380,8 @@ msgstr "o"
#: model:ir.model,name:purchase_ux.model_purchase_order_line_add_to_invoice
msgid "purchase.order.line.add_to_invoice"
msgstr ""

#. module: purchase_ux
#: model:ir.model,name:purchase_ux.model_purchase_bill_line_match
msgid "Received"
msgstr "Recibido"
1 change: 1 addition & 0 deletions purchase_ux/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
from . import purchase_order
from . import purchase_order_line
from . import product_template
from . import purchase_bill_line_match
12 changes: 12 additions & 0 deletions purchase_ux/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,15 @@ def update_prices_with_supplier_cost(self):

def get_product_lines_to_update(self):
return self.with_company(self.company_id.id).invoice_line_ids.filtered(lambda x: x.product_id and x.price_unit)

def action_purchase_matching(self):
result = super().action_purchase_matching()
result["context"] = result.get("context", {})
result["context"].update(
{
"search_default_pol_id": 1,
"search_default_not_invoiced": 1,
"search_default_current_invoice": 1,
}
)
return result
39 changes: 39 additions & 0 deletions purchase_ux/models/purchase_bill_line_match.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
##############################################################################
# For copyright and license notices, see __manifest__.py file in module root
# directory
##############################################################################
from odoo import api, fields, models


class PurchaseBillLineMatch(models.Model):
_inherit = "purchase.bill.line.match"

reference_description = fields.Char(
string="Description",
compute="_compute_reference_description",
)

qty_received = fields.Float(
string="Received",
related="pol_id.qty_received",
readonly=True,
)

@api.depends("pol_id", "product_id", "display_name")
def _compute_reference_description(self):
for rec in self:
if rec.pol_id and rec.product_id:
pol_name = rec.pol_id.name or ""
product_name = rec.product_id.display_name or ""
if pol_name.startswith(product_name):
remaining = pol_name[len(product_name) :].strip()
if remaining:
rec.reference_description = f"{product_name} - {remaining}"
else:
rec.reference_description = product_name
else:
rec.reference_description = pol_name
elif rec.pol_id:
rec.reference_description = rec.pol_id.name
else:
rec.reference_description = rec.display_name
12 changes: 12 additions & 0 deletions purchase_ux/models/purchase_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,15 @@ def _prepare_invoice(self):
if self.internal_notes:
result["internal_notes"] = self.internal_notes
return result

def action_bill_matching(self):
result = super().action_bill_matching()
result["context"] = result.get("context", {})
result["context"].update(
{
"search_default_pol_id": 1,
"search_default_not_invoiced": 1,
"search_default_current_invoice": 1,
}
)
return result
29 changes: 29 additions & 0 deletions purchase_ux/views/purchase_bill_line_match_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="purchase_bill_line_match_tree_ux" model="ir.ui.view">
<field name="name">purchase.bill.line.match.list</field>
<field name="model">purchase.bill.line.match</field>
<field name="inherit_id" ref="purchase.purchase_bill_line_match_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='display_name']" position="replace">
<field name="reference_description" string="Description" decoration-it="not product_id"/>
</xpath>
<xpath expr="//field[@name='product_uom_qty']" position="after">
<field name="qty_received" string="Qty Received" optional="show"/>
</xpath>
</field>
</record>

<record id="purchase_bill_line_match_search" model="ir.ui.view">
<field name="name">purchase.bill.line.match.search</field>
<field name="model">purchase.bill.line.match</field>
<field name="arch" type="xml">
<search>
<filter string="Órdenes de Compra" name="pol_id" domain="[('pol_id', '!=', False)]"/>
<separator/>
<filter string="No Facturado" name="not_invoiced" domain="[('account_move_id', '=', False)]"/>
<filter string="En Factura Actual" name="current_invoice" domain="[('account_move_id', '!=', False), ('state', '=', 'draft')]"/>
</search>
</field>
</record>
</odoo>