fix!: Switch to creation as default sort order
This commit is contained in:
parent
7f4bcf37ce
commit
071e269548
23 changed files with 54 additions and 60 deletions
|
|
@ -34,7 +34,7 @@ class TestMilestoneTracker(FrappeTestCase):
|
|||
"Milestone",
|
||||
fields=["track_field", "value", "milestone_tracker"],
|
||||
filters=dict(reference_type=todo.doctype, reference_name=todo.name),
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(milestones), 2)
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ def get_files_by_search_text(text: str) -> list[dict]:
|
|||
"file_url": text,
|
||||
"name": ("like", text),
|
||||
},
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
limit=20,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ frappe.listview_settings["Error Log"] = {
|
|||
return [__("Not Seen"), "red", "seen,=,0"];
|
||||
}
|
||||
},
|
||||
order_by: "seen asc, modified desc",
|
||||
order_by: "creation desc",
|
||||
onload: function (listview) {
|
||||
listview.page.add_menu_item(__("Clear Error Logs"), function () {
|
||||
frappe.call({
|
||||
|
|
|
|||
|
|
@ -315,7 +315,7 @@ class Report(Document):
|
|||
elif params.get("order_by"):
|
||||
order_by = params.get("order_by")
|
||||
else:
|
||||
order_by = Report._format([self.ref_doctype, "modified"]) + " desc"
|
||||
order_by = Report._format([self.ref_doctype, "creation"]) + " desc"
|
||||
|
||||
if params.get("sort_by_next"):
|
||||
order_by += (
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
"doctype": "Report",
|
||||
"is_standard": "No",
|
||||
"javascript": null,
|
||||
"json": "{\"filters\":[],\"columns\":[[\"name\",\"User\"],[\"user_type\",\"User\"],[\"first_name\",\"User\"],[\"last_name\",\"User\"],[\"last_active\",\"User\"],[\"role\",\"Has Role\"]],\"sort_by\":\"User.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}",
|
||||
"json": "{\"filters\":[],\"columns\":[[\"name\",\"User\"],[\"user_type\",\"User\"],[\"first_name\",\"User\"],[\"last_name\",\"User\"],[\"last_active\",\"User\"],[\"role\",\"Has Role\"]],\"sort_by\":\"User.creation\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}",
|
||||
"modified": "2016-09-01 02:59:07.728890",
|
||||
"module": "Core",
|
||||
"name": "User Activity Report",
|
||||
|
|
@ -14,4 +14,4 @@
|
|||
"ref_doctype": "User",
|
||||
"report_name": "User Activity Report",
|
||||
"report_type": "Report Builder"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,14 +76,14 @@ class RQJob(Document):
|
|||
return self._job_obj
|
||||
|
||||
@staticmethod
|
||||
def get_list(filters=None, start=0, page_length=20, order_by="modified desc"):
|
||||
def get_list(filters=None, start=0, page_length=20, order_by="creation desc"):
|
||||
matched_job_ids = RQJob.get_matching_job_ids(filters=filters)[start : start + page_length]
|
||||
|
||||
conn = get_redis_conn()
|
||||
jobs = [serialize_job(job) for job in Job.fetch_many(job_ids=matched_job_ids, connection=conn) if job]
|
||||
|
||||
order_desc = "desc" in order_by
|
||||
return sorted(jobs, key=lambda j: j.modified, reverse=order_desc)
|
||||
return sorted(jobs, key=lambda j: j.creation, reverse=order_desc)
|
||||
|
||||
@staticmethod
|
||||
def get_matching_job_ids(filters) -> list[str]:
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
{
|
||||
"add_total_row": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"creation": "2015-02-05 06:01:35.060098",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 2,
|
||||
"is_standard": "Yes",
|
||||
"json": "{\"add_total_row\": 0, \"sort_by\": \"DocShare.modified\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"DocShare\"], [\"user\", \"DocShare\"], [\"share_doctype\", \"DocShare\"], [\"share_name\", \"DocShare\"], [\"read\", \"DocShare\"], [\"write\", \"DocShare\"], [\"share\", \"DocShare\"]]}",
|
||||
"modified": "2017-02-24 20:01:16.232286",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Document Share Report",
|
||||
"owner": "Administrator",
|
||||
"ref_doctype": "DocShare",
|
||||
"report_name": "Document Share Report",
|
||||
"report_type": "Report Builder",
|
||||
"add_total_row": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"creation": "2015-02-05 06:01:35.060098",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 2,
|
||||
"is_standard": "Yes",
|
||||
"json": "{\"add_total_row\": 0, \"sort_by\": \"DocShare.creation\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"DocShare\"], [\"user\", \"DocShare\"], [\"share_doctype\", \"DocShare\"], [\"share_name\", \"DocShare\"], [\"read\", \"DocShare\"], [\"write\", \"DocShare\"], [\"share\", \"DocShare\"]]}",
|
||||
"modified": "2017-02-24 20:01:16.232286",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Document Share Report",
|
||||
"owner": "Administrator",
|
||||
"ref_doctype": "DocShare",
|
||||
"report_name": "Document Share Report",
|
||||
"report_type": "Report Builder",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -609,7 +609,7 @@ class Database:
|
|||
if (filters is not None) and (filters != doctype or doctype == "DocType"):
|
||||
try:
|
||||
if order_by:
|
||||
order_by = "modified" if order_by == DefaultOrderBy else order_by
|
||||
order_by = "creation" if order_by == DefaultOrderBy else order_by
|
||||
out = self._get_values_from_table(
|
||||
fields=fields,
|
||||
filters=filters,
|
||||
|
|
|
|||
|
|
@ -133,8 +133,7 @@ CREATE TABLE `tabDocType Action` (
|
|||
`action_type` varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`action` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`),
|
||||
KEY `modified` (`modified`)
|
||||
KEY `parent` (`parent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
|
||||
|
||||
--
|
||||
|
|
@ -157,8 +156,7 @@ CREATE TABLE `tabDocType Link` (
|
|||
`link_doctype` varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`link_fieldname` varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`),
|
||||
KEY `modified` (`modified`)
|
||||
KEY `parent` (`parent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
|
||||
|
||||
--
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class MariaDBTable(DBTable):
|
|||
]
|
||||
else:
|
||||
# parent types
|
||||
additional_definitions.append("index modified(modified)")
|
||||
additional_definitions.append("index creation(creation)")
|
||||
|
||||
# creating sequence(s)
|
||||
if not self.meta.issingle and self.meta.autoname == "autoincrement":
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ def get_email_header(doc, language: str | None = None):
|
|||
@frappe.whitelist()
|
||||
def get_notification_logs(limit=20):
|
||||
notification_logs = frappe.db.get_list(
|
||||
"Notification Log", fields=["*"], limit=limit, order_by="modified desc"
|
||||
"Notification Log", fields=["*"], limit=limit, order_by="creation desc"
|
||||
)
|
||||
|
||||
users = [log.from_user for log in notification_logs]
|
||||
|
|
|
|||
|
|
@ -1086,7 +1086,7 @@ class DatabaseQuery:
|
|||
sort_order = (self.doctype_meta.sort_field and self.doctype_meta.sort_order) or "desc"
|
||||
if self.order_by:
|
||||
args.order_by = (
|
||||
f"`tab{self.doctype}`.`{sort_field or 'modified'}` {sort_order or 'desc'}"
|
||||
f"`tab{self.doctype}`.`{sort_field or 'creation'}` {sort_order or 'desc'}"
|
||||
)
|
||||
|
||||
def validate_order_by_and_group_by(self, parameters: str):
|
||||
|
|
@ -1215,11 +1215,7 @@ def get_order_by(doctype, meta):
|
|||
else:
|
||||
sort_field = meta.sort_field or "modified"
|
||||
sort_order = (meta.sort_field and meta.sort_order) or "desc"
|
||||
order_by = f"`tab{doctype}`.`{sort_field or 'modified'}` {sort_order or 'desc'}"
|
||||
|
||||
# draft docs always on top
|
||||
if meta.is_submittable:
|
||||
order_by = f"`tab{doctype}`.docstatus asc, {order_by}"
|
||||
order_by = f"`tab{doctype}`.`{sort_field or 'creation'}` {sort_order or 'desc'}"
|
||||
|
||||
return order_by
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ def execute():
|
|||
settings.pop("columns", None)
|
||||
|
||||
# sort_by + order_by -> order_by
|
||||
settings.order_by = (settings.sort_by or "modified") + " " + (settings.order_by or "desc")
|
||||
settings.order_by = (settings.sort_by or "creation") + " " + (settings.order_by or "desc")
|
||||
|
||||
# add_total_row -> add_totals_row
|
||||
settings.add_totals_row = settings.add_total_row
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ frappe.views.BaseList = class BaseList {
|
|||
|
||||
this.fields = [];
|
||||
this.filters = [];
|
||||
this.sort_by = this.meta.sort_field || "modified";
|
||||
this.sort_by = this.meta.sort_field || "creation";
|
||||
this.sort_order = this.meta.sort_order || "desc";
|
||||
|
||||
// Setup buttons
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
|
||||
this.view = "List";
|
||||
// initialize with saved order by
|
||||
this.sort_by = this.view_user_settings.sort_by || this.sort_by || "modified";
|
||||
this.sort_by = this.view_user_settings.sort_by || this.sort_by || "creation";
|
||||
this.sort_order = this.view_user_settings.sort_order || this.sort_order || "desc";
|
||||
|
||||
// build menu items
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ frappe.ui.SortSelector = class SortSelector {
|
|||
this.args.sort_order = meta_sort_order;
|
||||
} else {
|
||||
// default
|
||||
this.args.sort_by = "modified";
|
||||
this.args.sort_by = "creation";
|
||||
this.args.sort_order = "desc";
|
||||
}
|
||||
}
|
||||
|
|
@ -183,7 +183,7 @@ frappe.ui.SortSelector = class SortSelector {
|
|||
};
|
||||
} else {
|
||||
return {
|
||||
meta_sort_field: meta.sort_field || "modified",
|
||||
meta_sort_field: meta.sort_field || "creation",
|
||||
meta_sort_order: meta.sort_order ? meta.sort_order.toLowerCase() : "",
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
|
|||
this.add_totals_row = this.report_doc.json.add_totals_row;
|
||||
this.page_title = __(this.report_name);
|
||||
this.page_length = this.report_doc.json.page_length || 20;
|
||||
this.order_by = this.report_doc.json.order_by || "modified desc";
|
||||
this.order_by = this.report_doc.json.order_by || "creation desc";
|
||||
this.chart_args = this.report_doc.json.chart_args;
|
||||
});
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ export default class QuickListWidget extends Widget {
|
|||
doctype: this.document_type,
|
||||
fields: fields,
|
||||
filters: quick_list_filter,
|
||||
order_by: "modified desc",
|
||||
order_by: "creation desc",
|
||||
start: 0,
|
||||
page_length: 4,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ class TestQuery(FrappeTestCase):
|
|||
"Test Tree DocType",
|
||||
fields=["name"],
|
||||
filters={"name": ("descendants of", "Parent 1")},
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
).run(as_list=1)
|
||||
|
||||
# Format decendants result
|
||||
|
|
@ -382,7 +382,7 @@ class TestQuery(FrappeTestCase):
|
|||
"Test Tree DocType",
|
||||
fields=["name"],
|
||||
filters={"name": ("ancestors of", "Child 2")},
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
).run(as_list=1)
|
||||
|
||||
# Format ancestors result
|
||||
|
|
@ -393,7 +393,7 @@ class TestQuery(FrappeTestCase):
|
|||
"Test Tree DocType",
|
||||
fields=["name"],
|
||||
filters={"name": ("not descendants of", "Parent 1")},
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
).run(as_dict=1)
|
||||
|
||||
self.assertListEqual(
|
||||
|
|
@ -409,7 +409,7 @@ class TestQuery(FrappeTestCase):
|
|||
"Test Tree DocType",
|
||||
fields=["name"],
|
||||
filters={"name": ("not ancestors of", "Child 2")},
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
).run(as_dict=1)
|
||||
|
||||
self.assertListEqual(
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from frappe.core.doctype.scheduled_job_type.scheduled_job_type import ScheduledJ
|
|||
from frappe.utils import add_days, get_datetime
|
||||
from frappe.utils.doctor import purge_pending_jobs
|
||||
from frappe.utils.scheduler import (
|
||||
_get_last_modified_timestamp,
|
||||
_get_last_creation_timestamp,
|
||||
enqueue_events,
|
||||
is_dormant,
|
||||
schedule_jobs_based_on_activity,
|
||||
|
|
@ -75,20 +75,20 @@ class TestScheduler(TestCase):
|
|||
job.execute()
|
||||
job_log = frappe.get_doc("Scheduled Job Log", dict(scheduled_job_type=job.name))
|
||||
job_log.db_set(
|
||||
"modified", add_days(_get_last_modified_timestamp("Activity Log"), 5), update_modified=False
|
||||
"creation", add_days(_get_last_creation_timestamp("Activity Log"), 5), update_modified=False
|
||||
)
|
||||
|
||||
# inactive site with recent job, don't run
|
||||
self.assertFalse(
|
||||
schedule_jobs_based_on_activity(
|
||||
check_time=add_days(_get_last_modified_timestamp("Activity Log"), 5)
|
||||
check_time=add_days(_get_last_creation_timestamp("Activity Log"), 5)
|
||||
)
|
||||
)
|
||||
|
||||
# one more day has passed
|
||||
self.assertTrue(
|
||||
schedule_jobs_based_on_activity(
|
||||
check_time=add_days(_get_last_modified_timestamp("Activity Log"), 6)
|
||||
check_time=add_days(_get_last_creation_timestamp("Activity Log"), 6)
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,6 @@ def version_query(doctype, txt, searchfield, start, page_len, filters):
|
|||
filters=version_filters,
|
||||
limit_start=start,
|
||||
limit_page_length=page_len,
|
||||
order_by="modified desc",
|
||||
order_by="creation desc",
|
||||
)
|
||||
return [(d.name, pretty_date(d.modified), d.modified, d.owner) for d in results]
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ def schedule_jobs_based_on_activity(check_time=None):
|
|||
Also return True for inactive sites once every 24 hours based on `Scheduled Job Log`."""
|
||||
if is_dormant(check_time=check_time):
|
||||
# ensure last job is one day old
|
||||
last_job_timestamp = _get_last_modified_timestamp("Scheduled Job Log")
|
||||
last_job_timestamp = _get_last_creation_timestamp("Scheduled Job Log")
|
||||
if not last_job_timestamp:
|
||||
return True
|
||||
else:
|
||||
|
|
@ -171,7 +171,7 @@ def schedule_jobs_based_on_activity(check_time=None):
|
|||
|
||||
|
||||
def is_dormant(check_time=None):
|
||||
last_activity_log_timestamp = _get_last_modified_timestamp("Activity Log")
|
||||
last_activity_log_timestamp = _get_last_creation_timestamp("Activity Log")
|
||||
since = (frappe.get_system_settings("dormant_days") or 4) * 86400
|
||||
if not last_activity_log_timestamp:
|
||||
return True
|
||||
|
|
@ -180,8 +180,8 @@ def is_dormant(check_time=None):
|
|||
return False
|
||||
|
||||
|
||||
def _get_last_modified_timestamp(doctype):
|
||||
timestamp = frappe.db.get_value(doctype, filters={}, fieldname="modified", order_by="modified desc")
|
||||
def _get_last_creation_timestamp(doctype):
|
||||
timestamp = frappe.db.get_value(doctype, filters={}, fieldname="creation", order_by="creation desc")
|
||||
if timestamp:
|
||||
return get_datetime(timestamp)
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ def get_list_data(
|
|||
filters=filters,
|
||||
limit_start=limit_start,
|
||||
limit_page_length=limit,
|
||||
order_by=list_context.order_by or "modified desc",
|
||||
order_by=list_context.order_by or "creation desc",
|
||||
)
|
||||
|
||||
# allow guest if flag is set
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue