diff --git a/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py b/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py index 2fba6bf4ad..aff6a4863a 100644 --- a/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py +++ b/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py @@ -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) diff --git a/frappe/core/api/file.py b/frappe/core/api/file.py index 7756fd274b..5e29ba9f99 100644 --- a/frappe/core/api/file.py +++ b/frappe/core/api/file.py @@ -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, ) diff --git a/frappe/core/doctype/error_log/error_log_list.js b/frappe/core/doctype/error_log/error_log_list.js index dabe95d6d7..b48b2cd77f 100644 --- a/frappe/core/doctype/error_log/error_log_list.js +++ b/frappe/core/doctype/error_log/error_log_list.js @@ -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({ diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index c108c8ee6e..0928057e17 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -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 += ( diff --git a/frappe/core/doctype/report/user_activity_report.json b/frappe/core/doctype/report/user_activity_report.json index 5339bbe37d..ee5ec7f7ae 100644 --- a/frappe/core/doctype/report/user_activity_report.json +++ b/frappe/core/doctype/report/user_activity_report.json @@ -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" -} \ No newline at end of file +} diff --git a/frappe/core/doctype/rq_job/rq_job.py b/frappe/core/doctype/rq_job/rq_job.py index 93ca331443..ac7641b31d 100644 --- a/frappe/core/doctype/rq_job/rq_job.py +++ b/frappe/core/doctype/rq_job/rq_job.py @@ -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]: diff --git a/frappe/core/report/document_share_report/document_share_report.json b/frappe/core/report/document_share_report/document_share_report.json index db2f2b6be8..653c9b4d32 100644 --- a/frappe/core/report/document_share_report/document_share_report.json +++ b/frappe/core/report/document_share_report/document_share_report.json @@ -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" } ] -} \ No newline at end of file +} diff --git a/frappe/database/database.py b/frappe/database/database.py index d56d35e5be..70444acee2 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -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, diff --git a/frappe/database/mariadb/framework_mariadb.sql b/frappe/database/mariadb/framework_mariadb.sql index 91ef69645c..d9f5c9edc5 100644 --- a/frappe/database/mariadb/framework_mariadb.sql +++ b/frappe/database/mariadb/framework_mariadb.sql @@ -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; -- diff --git a/frappe/database/mariadb/schema.py b/frappe/database/mariadb/schema.py index 22b88b2639..7496e5b955 100644 --- a/frappe/database/mariadb/schema.py +++ b/frappe/database/mariadb/schema.py @@ -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": diff --git a/frappe/desk/doctype/notification_log/notification_log.py b/frappe/desk/doctype/notification_log/notification_log.py index 70e726fd97..d8a09d6a1c 100644 --- a/frappe/desk/doctype/notification_log/notification_log.py +++ b/frappe/desk/doctype/notification_log/notification_log.py @@ -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] diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index b73e691245..2f64b8f256 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -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 diff --git a/frappe/patches/v11_0/migrate_report_settings_for_new_listview.py b/frappe/patches/v11_0/migrate_report_settings_for_new_listview.py index c867502fde..83c6ac0d55 100644 --- a/frappe/patches/v11_0/migrate_report_settings_for_new_listview.py +++ b/frappe/patches/v11_0/migrate_report_settings_for_new_listview.py @@ -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 diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js index 228e9eb7bf..fde374ad16 100644 --- a/frappe/public/js/frappe/list/base_list.js +++ b/frappe/public/js/frappe/list/base_list.js @@ -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 diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index f28ccc6fe0..8e619947eb 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -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 diff --git a/frappe/public/js/frappe/ui/sort_selector.js b/frappe/public/js/frappe/ui/sort_selector.js index e62a3d8af0..cdad267eea 100644 --- a/frappe/public/js/frappe/ui/sort_selector.js +++ b/frappe/public/js/frappe/ui/sort_selector.js @@ -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() : "", }; } diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index 0619aefa29..9cb10aba87 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -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 { diff --git a/frappe/public/js/frappe/widgets/quick_list_widget.js b/frappe/public/js/frappe/widgets/quick_list_widget.js index 40bac6d967..b7b84f59bc 100644 --- a/frappe/public/js/frappe/widgets/quick_list_widget.js +++ b/frappe/public/js/frappe/widgets/quick_list_widget.js @@ -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, }, diff --git a/frappe/tests/test_query.py b/frappe/tests/test_query.py index 514ac534f7..fe598b3873 100644 --- a/frappe/tests/test_query.py +++ b/frappe/tests/test_query.py @@ -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( diff --git a/frappe/tests/test_scheduler.py b/frappe/tests/test_scheduler.py index a697846b33..0ff128c454 100644 --- a/frappe/tests/test_scheduler.py +++ b/frappe/tests/test_scheduler.py @@ -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) ) ) diff --git a/frappe/utils/diff.py b/frappe/utils/diff.py index dab85842a2..793de389e8 100644 --- a/frappe/utils/diff.py +++ b/frappe/utils/diff.py @@ -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] diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 03368f956f..d9e1259668 100644 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -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) diff --git a/frappe/www/list.py b/frappe/www/list.py index 4682302214..d7c0b03b1a 100644 --- a/frappe/www/list.py +++ b/frappe/www/list.py @@ -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