From 90c489365921cbbdaff6e7e355b117e460a5c973 Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Sun, 4 Feb 2024 16:15:04 +0100 Subject: [PATCH] fix: Add rule to allow auto repeat for purchase orders --- .../doctype/purchase_order/purchase_order.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 4c3deaa0f0a..400c4991e9b 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -6,6 +6,7 @@ import json import frappe from frappe import _, msgprint +from frappe.automation.doctype.auto_repeat.auto_repeat import AutoRepeatScheduler from frappe.desk.notifications import clear_doctype_notifications from frappe.model.mapper import get_mapped_doc from frappe.utils import cint, cstr, flt, get_link_to_form @@ -509,6 +510,37 @@ class PurchaseOrder(BuyingController): if sco: update_sco_status(sco, "Closed" if self.status == "Closed" else None) + def on_recurring(self, reference_doc, auto_repeat_doc): + def _get_schedule_date(ref_doc_schedule_date, red_doc_transaction_date, transaction_date): + schedule_date = AutoRepeatScheduler(auto_repeat_doc).get_next_scheduled_date() + + if schedule_date <= transaction_date: + schedule_date_diff = frappe.utils.date_diff(ref_doc_schedule_date, red_doc_transaction_date) + schedule_date = frappe.utils.add_days(transaction_date, schedule_date_diff) + + return schedule_date + + self.set( + "schedule_date", + _get_schedule_date( + reference_doc.schedule_date, reference_doc.transaction_date, self.transaction_date + ), + ) + + for d in self.get("items"): + reference_schedule_date = frappe.db.get_value( + "Purchase Order Item", + {"parent": reference_doc.name, "item_code": d.item_code, "idx": d.idx}, + "schedule_date", + ) + + d.set( + "schedule_date", + _get_schedule_date( + reference_schedule_date, reference_doc.transaction_date, self.transaction_date + ), + ) + def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor=1.0): """get last purchase rate for an item""" -- GitLab