fix:Tasks with duration less than a day not displayed correctly#15554 (#41633)

* fix: Tasks with duration less than a day not displayed correctly#15554

* fix: Tasks with duration less than a day not displayed correctly#15554
This commit is contained in:
Poorvi-R-Bhat
2024-06-10 17:30:35 +05:30
committed by GitHub
parent cf0a29b05f
commit d9ddad0f1f
4 changed files with 24 additions and 17 deletions

View File

@@ -13,7 +13,6 @@ frappe.ui.form.on("Task", {
}), }),
}; };
}, },
onload: function (frm) { onload: function (frm) {
frm.set_query("task", "depends_on", function () { frm.set_query("task", "depends_on", function () {
let filters = { let filters = {

View File

@@ -147,7 +147,7 @@
}, },
{ {
"collapsible": 1, "collapsible": 1,
"collapsible_depends_on": "eval:doc.__islocal", "collapsible_depends_on": "exp_start_date",
"fieldname": "sb_timeline", "fieldname": "sb_timeline",
"fieldtype": "Section Break", "fieldtype": "Section Break",
"label": "Timeline" "label": "Timeline"
@@ -155,7 +155,7 @@
{ {
"bold": 1, "bold": 1,
"fieldname": "exp_start_date", "fieldname": "exp_start_date",
"fieldtype": "Date", "fieldtype": "Datetime",
"label": "Expected Start Date", "label": "Expected Start Date",
"oldfieldname": "exp_start_date", "oldfieldname": "exp_start_date",
"oldfieldtype": "Date" "oldfieldtype": "Date"
@@ -181,7 +181,7 @@
{ {
"bold": 1, "bold": 1,
"fieldname": "exp_end_date", "fieldname": "exp_end_date",
"fieldtype": "Date", "fieldtype": "Datetime",
"label": "Expected End Date", "label": "Expected End Date",
"oldfieldname": "exp_end_date", "oldfieldname": "exp_end_date",
"oldfieldtype": "Date", "oldfieldtype": "Date",
@@ -399,7 +399,7 @@
"is_tree": 1, "is_tree": 1,
"links": [], "links": [],
"max_attachments": 5, "max_attachments": 5,
"modified": "2024-03-27 13:10:51.476856", "modified": "2024-05-24 12:36:12.214577",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Task", "name": "Task",

View File

@@ -8,7 +8,7 @@ import frappe
from frappe import _, throw from frappe import _, throw
from frappe.desk.form.assign_to import clear, close_all_assignments from frappe.desk.form.assign_to import clear, close_all_assignments
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
from frappe.utils import add_days, cstr, date_diff, flt, get_link_to_form, getdate, today from frappe.utils import add_days, add_to_date, cstr, date_diff, flt, get_link_to_form, getdate, today
from frappe.utils.data import format_date from frappe.utils.data import format_date
from frappe.utils.nestedset import NestedSet from frappe.utils.nestedset import NestedSet
@@ -41,8 +41,8 @@ class Task(NestedSet):
depends_on_tasks: DF.Code | None depends_on_tasks: DF.Code | None
description: DF.TextEditor | None description: DF.TextEditor | None
duration: DF.Int duration: DF.Int
exp_end_date: DF.Date | None exp_end_date: DF.Datetime | None
exp_start_date: DF.Date | None exp_start_date: DF.Datetime | None
expected_time: DF.Float expected_time: DF.Float
is_group: DF.Check is_group: DF.Check
is_milestone: DF.Check is_milestone: DF.Check
@@ -83,6 +83,7 @@ class Task(NestedSet):
self.update_depends_on() self.update_depends_on()
self.validate_dependencies_for_template_task() self.validate_dependencies_for_template_task()
self.validate_completed_on() self.validate_completed_on()
self.set_default_end_date_if_missing()
def validate_dates(self): def validate_dates(self):
self.validate_from_to_dates("exp_start_date", "exp_end_date") self.validate_from_to_dates("exp_start_date", "exp_end_date")
@@ -90,6 +91,10 @@ class Task(NestedSet):
self.validate_parent_expected_end_date() self.validate_parent_expected_end_date()
self.validate_parent_project_dates() self.validate_parent_project_dates()
def set_default_end_date_if_missing(self):
if self.exp_start_date and self.expected_time:
self.exp_end_date = add_to_date(self.exp_start_date, hours=self.expected_time)
def validate_parent_expected_end_date(self): def validate_parent_expected_end_date(self):
if not self.parent_task or not self.exp_end_date: if not self.parent_task or not self.exp_end_date:
return return
@@ -248,7 +253,7 @@ class Task(NestedSet):
if ( if (
task.exp_start_date task.exp_start_date
and task.exp_end_date and task.exp_end_date
and task.exp_start_date < getdate(end_date) and task.exp_start_date < end_date
and task.status == "Open" and task.status == "Open"
): ):
task_duration = date_diff(task.exp_end_date, task.exp_start_date) task_duration = date_diff(task.exp_end_date, task.exp_start_date)
@@ -286,7 +291,7 @@ class Task(NestedSet):
if self.status not in ("Cancelled", "Completed") and self.exp_end_date: if self.status not in ("Cancelled", "Completed") and self.exp_end_date:
from datetime import datetime from datetime import datetime
if self.exp_end_date < datetime.now().date(): if self.exp_end_date < datetime.now():
self.db_set("status", "Overdue", update_modified=False) self.db_set("status", "Overdue", update_modified=False)
self.update_project() self.update_project()

View File

@@ -1,6 +1,5 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt # License: GNU General Public License v3. See license.txt
import unittest import unittest
import frappe import frappe
@@ -44,17 +43,21 @@ class TestTask(unittest.TestCase):
task1.save() task1.save()
self.assertEqual( self.assertEqual(
frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate(add_days(nowdate(), 21)) getdate(frappe.db.get_value("Task", task2.name, "exp_start_date")),
) getdate(add_days(nowdate(), 21)),
self.assertEqual(
frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate(add_days(nowdate(), 25))
) )
self.assertEqual( self.assertEqual(
frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate(add_days(nowdate(), 26)) getdate(frappe.db.get_value("Task", task2.name, "exp_end_date")), getdate(add_days(nowdate(), 25))
) )
self.assertEqual( self.assertEqual(
frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate(add_days(nowdate(), 30)) getdate(frappe.db.get_value("Task", task3.name, "exp_start_date")),
getdate(add_days(nowdate(), 26)),
)
self.assertEqual(
getdate(frappe.db.get_value("Task", task3.name, "exp_end_date")), getdate(add_days(nowdate(), 30))
) )
def test_close_assignment(self): def test_close_assignment(self):