From a76c454e7b05c908b607412523479ea9994295a8 Mon Sep 17 00:00:00 2001 From: Unai Beristain Date: Fri, 24 Jan 2025 09:10:08 +0100 Subject: [PATCH] [ADD] purchase_requisition_filter_date: Add fields filter_date_from and filter_date_to --- purchase_requisition_filter_date/README.rst | 50 +++++++++++++++++++ purchase_requisition_filter_date/__init__.py | 3 ++ .../__manifest__.py | 14 ++++++ .../models/__init__.py | 3 ++ .../models/purchase_order.py | 36 +++++++++++++ .../models/purchase_order_line.py | 19 +++++++ .../models/purchase_requisition.py | 8 +++ .../views/purchase_requisition_views.xml | 16 ++++++ .../addons/purchase_requisition_filter_date | 1 + .../purchase_requisition_filter_date/setup.py | 6 +++ 10 files changed, 156 insertions(+) create mode 100644 purchase_requisition_filter_date/README.rst create mode 100644 purchase_requisition_filter_date/__init__.py create mode 100644 purchase_requisition_filter_date/__manifest__.py create mode 100644 purchase_requisition_filter_date/models/__init__.py create mode 100644 purchase_requisition_filter_date/models/purchase_order.py create mode 100644 purchase_requisition_filter_date/models/purchase_order_line.py create mode 100644 purchase_requisition_filter_date/models/purchase_requisition.py create mode 100644 purchase_requisition_filter_date/views/purchase_requisition_views.xml create mode 120000 setup/purchase_requisition_filter_date/odoo/addons/purchase_requisition_filter_date create mode 100644 setup/purchase_requisition_filter_date/setup.py diff --git a/purchase_requisition_filter_date/README.rst b/purchase_requisition_filter_date/README.rst new file mode 100644 index 0000000000..88f033c8bb --- /dev/null +++ b/purchase_requisition_filter_date/README.rst @@ -0,0 +1,50 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg + :target: https://opensource.org/licenses/LGPL-3.0 + :alt: License: LGPL-3 + +=================================== +Purchase Requisition Filter by Date +=================================== + +Overview +======== + +The **Purchase Requisition Filter by Date** module allows users to filter purchase requisition lines by a date range. This is particularly helpful in managing large purchase requisitions by focusing on specific scheduled dates. + +Features +======== + +- **Date Range Filters**: + + - Add fields for "From Date" and "To Date" on the purchase requisition form. + + - Filter purchase requisition lines based on the provided date range. + +- **Enhanced Workflow**: + + - Update the wizard for creating purchase orders to respect the filtered date range. + +- **Automatic Grouping**: + + - Group requisition lines by scheduled date and create purchase orders with the appropriate planned dates. + +Bug Tracker +=========== + +If you encounter any issues, please report them on the GitHub repository at `GitHub Issues `_. + +Credits +======= + +Contributors +------------ + +* Ana Juaristi +* Unai Beristain + +For specific questions or support, please contact the contributors. + +License +======= + +This project is licensed under the LGPL-3 License. For more details, refer to the LICENSE file or visit . diff --git a/purchase_requisition_filter_date/__init__.py b/purchase_requisition_filter_date/__init__.py new file mode 100644 index 0000000000..95c7515fda --- /dev/null +++ b/purchase_requisition_filter_date/__init__.py @@ -0,0 +1,3 @@ +from . import models + +# from . import wizard diff --git a/purchase_requisition_filter_date/__manifest__.py b/purchase_requisition_filter_date/__manifest__.py new file mode 100644 index 0000000000..735292949c --- /dev/null +++ b/purchase_requisition_filter_date/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "Purchase Requisition Filter by Date", + "version": "16.0.1.0.0", + "category": "Purchases", + "author": "Avanzosc", + "license": "LGPL-3", + "depends": ["purchase_requisition"], + "data": [ + "views/purchase_requisition_views.xml", + ], + "installable": True, + "application": False, + "website": "https://github.com/avanzosc/odoo-addons", +} diff --git a/purchase_requisition_filter_date/models/__init__.py b/purchase_requisition_filter_date/models/__init__.py new file mode 100644 index 0000000000..09ea7cdd97 --- /dev/null +++ b/purchase_requisition_filter_date/models/__init__.py @@ -0,0 +1,3 @@ +from . import purchase_order_line +from . import purchase_order +from . import purchase_requisition diff --git a/purchase_requisition_filter_date/models/purchase_order.py b/purchase_requisition_filter_date/models/purchase_order.py new file mode 100644 index 0000000000..ef364a01b0 --- /dev/null +++ b/purchase_requisition_filter_date/models/purchase_order.py @@ -0,0 +1,36 @@ +from datetime import datetime, time + +from odoo import api, models + + +class PurchaseOrder(models.Model): + _inherit = "purchase.order" + + @api.onchange("requisition_id") + def _onchange_requisition_id(self): + if self.requisition_id: + valid_lines = self.requisition_id.line_ids.filtered( + lambda line: self.requisition_id.date_from + <= line.schedule_date + <= self.requisition_id.date_to + ) + + result = super()._onchange_requisition_id() + + for sale_order_line in self.order_line: + matching_requisition_line = valid_lines.filtered( + lambda line: line.product_id == sale_order_line.product_id + ) + if matching_requisition_line: + schedule_datetime = datetime.combine( + matching_requisition_line.schedule_date, time.min + ) + + sale_order_line.date_planned = schedule_datetime + + self.order_line = self.order_line - sale_order_line + self.order_line |= sale_order_line + + else: + self.order_line = self.order_line - sale_order_line + return result diff --git a/purchase_requisition_filter_date/models/purchase_order_line.py b/purchase_requisition_filter_date/models/purchase_order_line.py new file mode 100644 index 0000000000..009717cb8b --- /dev/null +++ b/purchase_requisition_filter_date/models/purchase_order_line.py @@ -0,0 +1,19 @@ +from odoo import models + + +class PurchaseOrderLine(models.Model): + _inherit = "purchase.order.line" + + def _compute_price_unit_and_date_planned_and_name(self): + for pol in self: + if pol.product_id.id in pol.order_id.requisition_id.line_ids.product_id.ids: + matching_requisition_line = ( + pol.order_id.requisition_id.line_ids.filtered( + lambda line: line.product_id == pol.product_id + ) + ) + + if matching_requisition_line: + pol.date_planned = matching_requisition_line.schedule_date + + return super()._compute_price_unit_and_date_planned_and_name() diff --git a/purchase_requisition_filter_date/models/purchase_requisition.py b/purchase_requisition_filter_date/models/purchase_requisition.py new file mode 100644 index 0000000000..2dfd6137a0 --- /dev/null +++ b/purchase_requisition_filter_date/models/purchase_requisition.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class PurchaseRequisition(models.Model): + _inherit = "purchase.requisition" + + date_from = fields.Date(string="From") + date_to = fields.Date(string="To") diff --git a/purchase_requisition_filter_date/views/purchase_requisition_views.xml b/purchase_requisition_filter_date/views/purchase_requisition_views.xml new file mode 100644 index 0000000000..3d98f5135c --- /dev/null +++ b/purchase_requisition_filter_date/views/purchase_requisition_views.xml @@ -0,0 +1,16 @@ + + + purchase.requisition.form.inherit.filter.date + purchase.requisition + + + + + + + + + diff --git a/setup/purchase_requisition_filter_date/odoo/addons/purchase_requisition_filter_date b/setup/purchase_requisition_filter_date/odoo/addons/purchase_requisition_filter_date new file mode 120000 index 0000000000..44bc7404f0 --- /dev/null +++ b/setup/purchase_requisition_filter_date/odoo/addons/purchase_requisition_filter_date @@ -0,0 +1 @@ +../../../../purchase_requisition_filter_date \ No newline at end of file diff --git a/setup/purchase_requisition_filter_date/setup.py b/setup/purchase_requisition_filter_date/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/purchase_requisition_filter_date/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)