Просмотр исходного кода

fix: set system time on doc for `Now` (#18288) (#18328)

(cherry picked from commit 4a3259ed92)

Co-authored-by: Ankush Menat <ankush@frappe.io>
version-14
mergify[bot] 2 лет назад
committed by GitHub
Родитель
Сommit
e7ff04c4e7
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 4AEE18F83AFDEB23
2 измененных файлов: 21 добавлений и 12 удалений
  1. +6
    -1
      frappe/public/js/frappe/model/create_new.js
  2. +15
    -11
      frappe/public/js/frappe/utils/datetime.js

+ 6
- 1
frappe/public/js/frappe/model/create_new.js Просмотреть файл

@@ -190,7 +190,12 @@ $.extend(frappe.model, {
} else if (default_val == "Today") {
value = frappe.datetime.get_today();
} else if ((default_val || "").toLowerCase() === "now") {
value = frappe.datetime.now_datetime();
if (df.fieldtype == "Time") {
value = frappe.datetime.now_time();
} else {
// datetime fields are stored in system tz
value = frappe.datetime.system_datetime();
}
} else if (default_val[0] === ":") {
var boot_doc = frappe.model.get_default_from_boot_docs(df, doc, parent_doc);
var is_allowed_boot_doc =


+ 15
- 11
frappe/public/js/frappe/utils/datetime.js Просмотреть файл

@@ -211,17 +211,21 @@ $.extend(frappe.datetime, {
return frappe.datetime._date(frappe.defaultDatetimeFormat, as_obj);
},

_date: function (format, as_obj = false) {
/**
* Whenever we are getting now_date/datetime, always make sure dates are fetched using user time zone.
* This is to make sure that time is as per user time zone set in User doctype, If a user had to change the timezone,
* we will end up having multiple timezone by not honouring timezone in User doctype.
* This will make sure that at any point we know which timezone the user if following and not have random timezone
* when the timezone of the local machine changes.
*/
let time_zone = frappe.boot.time_zone
? frappe.boot.time_zone.user || frappe.boot.time_zone.system
: frappe.sys_defaults.time_zone;
system_datetime: function (as_obj = false) {
return frappe.datetime._date(frappe.defaultDatetimeFormat, as_obj, true);
},

_date: function (format, as_obj = false, system_time = false) {
let time_zone = frappe.boot.time_zone?.system || frappe.sys_defaults.time_zone;

// Whenever we are getting now_date/datetime, always make sure dates are fetched using user time zone.
// This is to make sure that time is as per user time zone set in User doctype, If a user had to change the timezone,
// we will end up having multiple timezone by not honouring timezone in User doctype.
// This will make sure that at any point we know which timezone the user if following and not have random timezone
// when the timezone of the local machine changes.
if (!system_time) {
time_zone = frappe.boot.time_zone?.user || time_zone;
}
let date = moment.tz(time_zone);

return as_obj ? frappe.datetime.moment_to_date_obj(date) : date.format(format);


Загрузка…
Отмена
Сохранить