From 14e904d849c74f7599dfdba488b172b9a22c2a51 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:19:06 +0100 Subject: [PATCH 1/2] refactor: update status --- .../doctype/member_function/member_function.py | 10 +++++----- .../doctype/lease_contract/lease_contract.py | 13 +++++-------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/landa/organization_management/doctype/member_function/member_function.py b/landa/organization_management/doctype/member_function/member_function.py index 41b1dd6b..fc63ab7a 100644 --- a/landa/organization_management/doctype/member_function/member_function.py +++ b/landa/organization_management/doctype/member_function/member_function.py @@ -11,7 +11,7 @@ class MemberFunction(Document): def before_validate(self): - self.update_is_active() + self.status = self.get_status() def validate(self): if self.start_date and self.end_date and date_diff(self.start_date, self.end_date) > 0: @@ -87,13 +87,13 @@ def update_user_roles(self): self.member, disabled_member_function=self.name ) - def update_is_active(self): + def get_status(self): if self.is_planned(): - self.status = "Planned" + return "Planned" elif self.is_inactive(): - self.status = "Inactive" + return "Inactive" else: - self.status = "Active" + return "Active" def is_planned(self): return self.start_date and date_diff(today(), self.start_date) < 0 diff --git a/landa/water_body_management/doctype/lease_contract/lease_contract.py b/landa/water_body_management/doctype/lease_contract/lease_contract.py index d873c10e..19c33503 100644 --- a/landa/water_body_management/doctype/lease_contract/lease_contract.py +++ b/landa/water_body_management/doctype/lease_contract/lease_contract.py @@ -10,7 +10,7 @@ class LeaseContract(Document): def before_validate(self): - self.update_is_active() + self.status = self.get_status() def validate(self): if self.start_date and self.end_date and date_diff(self.start_date, self.end_date) > 0: @@ -21,16 +21,13 @@ def validate(self): _("Lease Contract must belong to the same regional Organization as the Water Body.") ) - def on_trash(self): - self.status = "Inactive" - - def update_is_active(self): + def get_status(self): if self.is_planned(): - self.status = "Planned" + return "Planned" elif self.is_inactive(): - self.status = "Inactive" + return "Inactive" else: - self.status = "Active" + return "Active" def is_planned(self): return self.start_date and date_diff(today(), self.start_date) < 0 From d6f954d231bd44e03f65323a17db04881753a443 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:29:25 +0100 Subject: [PATCH 2/2] fix: enable/disable lease contracts every day --- landa/tasks.py | 6 ++++- .../doctype/lease_contract/lease_contract.py | 27 ++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/landa/tasks.py b/landa/tasks.py index ca0ef437..38ae02f8 100644 --- a/landa/tasks.py +++ b/landa/tasks.py @@ -7,7 +7,11 @@ def daily(): queue="long", ) enqueue( - "landa.water_body_management.doctype.lease_contract.lease_contract.disable_expired_lease_contracts", + "landa.water_body_management.doctype.lease_contract.lease_contract.deactivate_lease_contracts", + queue="long", + ) + enqueue( + "landa.water_body_management.doctype.lease_contract.lease_contract.activate_lease_contracts", queue="long", ) enqueue( diff --git a/landa/water_body_management/doctype/lease_contract/lease_contract.py b/landa/water_body_management/doctype/lease_contract/lease_contract.py index 19c33503..ac71ac60 100644 --- a/landa/water_body_management/doctype/lease_contract/lease_contract.py +++ b/landa/water_body_management/doctype/lease_contract/lease_contract.py @@ -36,32 +36,35 @@ def is_inactive(self): return self.end_date and date_diff(today(), self.end_date) > 0 -def disable_expired_lease_contracts(): - for lease_contract in get_expired_lease_contracts(): - doc = frappe.get_doc("Lease Contract", lease_contract.name) - doc.save() +def deactivate_lease_contracts(): + for lease_contract in get_lease_contracts_to_deactivate(): + frappe.db.set_value("Lease Contract", lease_contract, "status", "Inactive") -def apply_active_lease_contracts(filters): - for lease_contract in get_active_lease_contracts(filters=filters, pluck="name"): - doc = frappe.get_doc("Lease Contract", lease_contract) - doc.save() +def activate_lease_contracts(): + for lease_contract in get_lease_contracts_to_activate(): + frappe.db.set_value("Lease Contract", lease_contract, "status", "Active") -def get_expired_lease_contracts(): +def get_lease_contracts_to_deactivate(): return frappe.get_all( "Lease Contract", filters=[ ["end_date", "<", today()], ["end_date", "is", "set"], + ["status", "!=", "Inactive"], ], + pluck="name", ) -def get_active_lease_contracts(filters: dict = None, pluck: str = None): +def get_lease_contracts_to_activate(): return frappe.get_all( "Lease Contract", - filters=filters, + filters=[ + ["start_date", "<=", today()], + ["status", "!=", "Active"], + ], or_filters=[["end_date", "is", "not set"], ["end_date", ">=", today()]], - pluck=pluck, + pluck="name", )