Skip to content

Attendance Calendar Fields Uk

Налаштування Полів Календаря

У ERPNext важливо ефективно передавати інформацію про проєкт користувачам у візуальний спосіб, враховуючи чутливий до часу характер проектів. Окрім стандартних переглядів списку та звітів для проектів і завдань, ERPNext пропонує додаткові перегляди, як-от Gantt, Kanban і Calendar.

Перегляд календаря в ERPNext — це потужний інструмент для керування завданнями та проектами у візуальний та інтуїтивно зрозумілий спосіб. Він пропонує представлення завдань на основі календаря, що дозволяє користувачам легко відстежувати розклади, терміни виконання та розподіл ресурсів. Під час доступу до перегляду календаря в ERPNext ви побачите знайомий макет місячного календаря. Завдання та події відображаються у вигляді кольорових блоків у клітинках календаря. Це візуальне представлення забезпечує швидкий огляд розподілу та часу виконання завдань у різні дати.

Як налаштувати Вигляд Календаря в Frappe Framework

Щоб налаштувати перегляд календаря за допомогою фреймворку Frappe, ви можете виконати такі дії (усі кроки будуть представлені на прикладі Календаря Відвідувань):

  1. Отримайте доступ до файлової системи Frappe, де розміщено ваш проєкт.

  2. Знайдіть файл, який визначає конфігурацію перегляду календаря. У нашому випадку це:

    frappe-bench/apps/hrms/hrms/hr/doctype/attendance/attendance_calendar.js

    Цей файл зазвичай називається *назва_документа*_calendar.js і знаходиться він у каталозі доктайпу (якщо такого файлу не існує, ви можете створити його під назвою *назва_документа*_calendar.js)

  3. Відкрийте файл *назва_документа*_calendar.js у текстовому редакторі або інтегрованому середовищі розробки (IDE).

    У цьому файлі ви знайдете параметри конфігурації для перегляду календаря. Ці параметри дозволяють налаштувати поведінку та зовнішній вигляд перегляду календаря.

    frappe.views.calendar["Attendance"] = {
    options: {
    header: {
    left: "prev, title, next",
    right: "today, month, agendaWeek, agendaDay",
    },
    color_map: {
    danger: "red",
    },
    color: "greeb",
    displayEventTime: false,
    },
    field_map: {
    start: "attendance_date",
    end: "attendance_date",
    title: "employee_name",
    allDay: 1,
    }
    }
  4. Змініть параметри конфігурації відповідно до ваших вимог. Деякі поширені параметри конфігурації включають:

    • Діапазон дат: Ви можете визначити діапазон дат за замовчуванням, який відображатиметься спочатку під час завантаження перегляду календаря.
    • Кольори та відображення кольорів: ви можете вказати власні кольори для подій на основі певних критеріїв або категорій. Наприклад, ви можете призначити певний колір подіям, позначеним як «Високий пріоритет» або «Терміново».
    • Заголовки та поля подій: ви можете вказати, які поля відображати як заголовки подій у поданні календаря. Ці поля можуть містити назву події, призначеного користувача або будь-яку іншу відповідну інформацію.
    • Перегляди та навігація: ви можете налаштувати доступні перегляди (наприклад, щомісяця, щотижня, щодня) і параметри навігації (наприклад, попередній, наступний), щоб користувачі могли перемикатися між різними періодами часу.
    • Створення та редагування подій: ви можете визначити поведінку та параметри, доступні під час створення або редагування подій у поданні календаря, як-от зазначення обов’язкових полів або ввімкнення певних функцій, як-от функція перетягування.

Збережіть зміни у файлі calendar.js.

Як додати потрібні поля до таблиці подій у Перегляді Календаря

Припустімо, ви хочете додати кілька полів у заголовок перегляду календаря. Ви не можете зробити це за допомогою стандартних інструментів Frappe Framework, але ви можете створити таку функціональність покроково.

Є два файли, які працюють із переглядом календаря у Frappe Framework. Перший файл — це calendar.py, який аналізує файл *назва_документа*_calendar.js і повертає всі поля для відображення в події. Другий файл — це файл calendar.js, який отримує поля з файлу calendar.py і перетворює їх у формат HTML.

Ми можемо створити список other_field, який міститиме поля, які ми повинні відображати в події.

  1. Перейдіть до функції get_events у calendar.py, розташованому за цим шляхом:

    frappe-bench/apps/frappe/frappe/desk/calendar.py
  2. До параметрів get_events додайте параметр other_field і призначте йому значення None

  3. Потім вам потрібно проаналізувати attendance_calendar.js, щоб отримати з нього значення. Введіть наступний код після оголошених змінних field_map і fields:

    other_fields = frappe.parse_json(other_fields)

    Функція frappe.parse_json(other_fields) аналізує список other_fields у файлі *назва_документу*_calendar.js і повертає результат до змінної other_fields

  4. Тепер нам потрібно передати other_fields до списку повернення. Тож нам потрібно додати їх до змінної fields, яку повертатиме функція get_events. Введіть наступний код після оператора if not fields:

    if other_fields:
    [fields.append(item) for item in list(other_fields)]

    Якщо список other_fields не порожній, його значення додаються до списку fields

    Функція get_events має виглядати так:

    def get_events(doctype, start, end, field_map, filters=None, fields=None, other_fields=None):
    field_map = frappe._dict(json.loads(field_map))
    fields = frappe.parse_json(fields)
    other_fields = frappe.parse_json(other_fields)
    doc_meta = frappe.get_meta(doctype)
    for d in doc_meta.fields:
    if d.fieldtype == "Color":
    field_map.update({"color": d.fieldname})
    filters = json.loads(filters) if filters else []
    if not fields:
    fields = [field_map.start, field_map.end, field_map.title, "name"]
    if other_fields:
    [fields.append(item) for item in list(other_fields)]
    if field_map.color:
    fields.append(field_map.color)
    start_date = "ifnull(%s, '0001-01-01 00:00:00')" % field_map.start
    end_date = "ifnull(%s, '2199-12-31 00:00:00')" % field_map.end
    filters += [
    [doctype, start_date, "<=", end],
    [doctype, end_date, ">=", start],
    ]
    fields = list({field for field in fields if field})
    return frappe.get_list(doctype, fields=fields, filters=filters)
  5. Перейдіть до функції get_events у calendar.py, розташованому за цим шляхом:

    frappe-bench/apps/frappe/frappe/public/js/frappe/views/calendar/calendar.js
  6. У методі get_args класу Calendar додайте нове поле під назвою other_fields до словника args, щоб метод виглядав так:

    get_args(start, end) {
    var args = {
    doctype: this.doctype,
    start: this.get_system_datetime(start),
    end: this.get_system_datetime(end),
    fields: this.fields,
    filters: this.list_view.filter_area.get(),
    field_map: this.field_map,
    other_fields: this.other_fields
    };
    return args;
  7. Тепер нам потрібно додати наступний код у кінець методу prepare_events:

    if (this.other_fields) {
    this.other_fields.forEach((item) => {
    if (item in d) {
    if (item == "leave_type" && d[item] === null) {
    return;
    }
    d.title += frappe.utils.html2text(d[item] + "\n")
    }
    })
    }
    • Змінна values містить усі значення об’єкта d
    • Якщо список other_fields не пустий, кожне його значення записується в назву події d.title

    Метод prepare_events має виглядати так:

    prepare_events(events) {
    var me = this;
    return (events || []).map((d) => {
    d.id = d.name;
    d.editable = frappe.model.can_write(d.doctype || me.doctype);
    // do not allow submitted/cancelled events to be moved / extended
    if (d.docstatus && d.docstatus > 0) {
    d.editable = false;
    }
    $.each(me.field_map, function (target, source) {
    d[target] = d[source];
    });
    if (!me.field_map.allDay) d.allDay = 1;
    if (!me.field_map.convertToUserTz) d.convertToUserTz = 1;
    // convert to user tz
    if (d.convertToUserTz) {
    d.start = frappe.datetime.convert_to_user_tz(d.start);
    d.end = frappe.datetime.convert_to_user_tz(d.end);
    }
    // show event on single day if start or end date is invalid
    if (!frappe.datetime.validate(d.start) && d.end) {
    d.start = frappe.datetime.add_days(d.end, -1);
    }
    if (d.start && !frappe.datetime.validate(d.end)) {
    d.end = frappe.datetime.add_days(d.start, 1);
    }
    me.fix_end_date_for_event_render(d);
    me.prepare_colors(d);
    d.title= frappe.utils.html2text(d.title + "\n");
    if (this.other_fields) {
    this.other_fields.forEach((item) => {
    if (item in d) {
    if (item == "leave_type" && d[item] === null) {
    return;
    }
    d.title += frappe.utils.html2text(d[item] + "\n")
    }
    })
    }
    return d;
    });
  8. Тепер ми можемо додати список other_fields до attendance_calendar.js і вказати поля, які мають відображатися в події:

    other_fields: [
    "status",
    "leave_type"
    ]

    attendance_calendar.js має виглядати наступним чином:

    frappe.views.calendar["Attendance"] = {
    options: {
    header: {
    left: "prev, title, next",
    right: "today, month, agendaWeek, agendaDay",
    },
    color_map: {
    danger: "red",
    },
    color: "greeb",
    displayEventTime: false,
    },
    field_map: {
    start: "attendance_date",
    end: "attendance_date",
    title: "employee_name",
    allDay: 1,
    },
    other_fields: [
    "status",
    "leave_type"
    ],
    }

Тепер ми бачимо, що події мають вміст полів status і leave_type