From 8c1736f4fde596451ce5f62b9aa1d9e0df93a6bf Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Mon, 8 Apr 2024 04:49:17 +0700 Subject: [PATCH] resolved #100, resolved #101, resolved #103, resolved #104 --- mirzaev/ebala/system/controllers/account.php | 2 +- mirzaev/ebala/system/controllers/task.php | 88 +++++++++++++------- mirzaev/ebala/system/public/js/tasks.js | 21 ++++- 3 files changed, 78 insertions(+), 33 deletions(-) diff --git a/mirzaev/ebala/system/controllers/account.php b/mirzaev/ebala/system/controllers/account.php index 54f0c28..d440252 100755 --- a/mirzaev/ebala/system/controllers/account.php +++ b/mirzaev/ebala/system/controllers/account.php @@ -94,7 +94,7 @@ final class account extends core if (mb_strlen($parameters['number']) === 11) $account->number = $parameters['number']; else throw new exception('Номер должен состоять из 11 символов'); if ($parameters['mail'] !== $account->mail) $account->mail = $parameters['mail']; - if (!empty($parameters['password']) && !sodium_crypto_pwhash_str_verify($parameters['password'], $account->password) && $password = true) + if (!empty($parameters['password']) && !@sodium_crypto_pwhash_str_verify($parameters['password'], $account->password ?? '') && $password = true) if (mb_strlen($parameters['password']) > 6) $account->password = sodium_crypto_pwhash_str( $parameters['password'], SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE, diff --git a/mirzaev/ebala/system/controllers/task.php b/mirzaev/ebala/system/controllers/task.php index dbe1ac6..84b8c7f 100755 --- a/mirzaev/ebala/system/controllers/task.php +++ b/mirzaev/ebala/system/controllers/task.php @@ -2077,24 +2077,40 @@ final class task extends core // Заявка подтверждена? if ($task->confirmed) throw new exception('Запрещено редактировать тип работы у подтверждённой заявки'); - // Инициализация даты - $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); + if ($this->account->type === 'market') { + // Магазин - // Инициализация времени - $start = datetime::createFromFormat('H:i', (string) $task->start); - $end = datetime::createFromFormat('H:i', (string) $task->end); + // Инициализация даты + $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); - // Перенос времени в дату - $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); - $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); + // Инициализация времени + $start = datetime::createFromFormat('H:i', (string) $task->start); + $end = datetime::createFromFormat('H:i', (string) $task->end); - // Заявка уже начата - if ($this->account->type === 'market' and time() - $start > 0) - throw new exception('Запрещено редактировать тип работы начатой заявки'); + // Перенос времени в дату + $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); + $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); - // Заявка уже завершена - if ($this->account->type === 'market' and $task->completed === true || time() - $end > 0) - throw new exception('Запрещено редактировать тип работы завершённой заявки'); + // Заявка уже начата? + if (time() - $start > 0) + throw new exception('Запрещено редактировать тип работы начатой заявки'); + + // Заявка уже прошла? + if (time() - $end > 0) + throw new exception('Запрещено редактировать тип работы прошедшей заявки'); + + // Заявка уже завершена? + if ($task->completed === true) + throw new exception('Запрещено редактировать тип работы завершённой заявки'); + + // Прошло более 30 минут после создания заявки? (1800 секунд = 30 минут) + /* if (time() - $task->created > 1800) + throw new exception('Запрещено редактировать заявку спустя 30 минут после создания'); */ + + // До начала заявки осталось менее 16 часов? (57600 секунд = 16 часов) + if ($start - time() < 57600) + throw new exception('Запрещено редактировать тип работы заявки за менее 16 часов до её начала'); + } if ($task instanceof _document) { // Найдена заявка @@ -2317,24 +2333,40 @@ final class task extends core // Заявка подтверждена? if ($task->confirmed) throw new exception('Запрещено редактировать дату и время у подтверждённой заявки'); - // Инициализация даты - $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); + if ($this->account->type === 'market') { + // Магазин - // Инициализация времени - $start = datetime::createFromFormat('H:i', (string) $task->start); - $end = datetime::createFromFormat('H:i', (string) $task->end); + // Инициализация даты + $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); - // Перенос времени в дату - $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); - $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); + // Инициализация времени + $start = datetime::createFromFormat('H:i', (string) $task->start); + $end = datetime::createFromFormat('H:i', (string) $task->end); - // Заявка уже начата - if ($this->account->type === 'market' and time() - $start > 0) - throw new exception('Запрещено редактировать дату и время начатой заявки'); + // Перенос времени в дату + $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); + $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); - // Заявка уже завершена - if ($this->account->type === 'market' and $task->completed === true || time() - $end > 0) - throw new exception('Запрещено редактировать дату и время завершённой заявки'); + // Заявка уже начата? + if (time() - $start > 0) + throw new exception('Запрещено редактировать дату и время начатой заявки'); + + // Заявка уже прошла? + if (time() - $end > 0) + throw new exception('Запрещено редактировать дату и время прошедшей заявки'); + + // Заявка уже завершена? + if ($task->completed === true) + throw new exception('Запрещено редактировать дату и время завершённой заявки'); + + // Прошло более 30 минут после создания заявки? (1800 секунд = 30 минут) + /* if (time() - $task->created > 1800) + throw new exception('Запрещено редактировать заявку спустя 30 минут после создания'); */ + + // До начала заявки осталось менее 16 часов? (57600 секунд = 16 часов) + if ($start - time() < 57600) + throw new exception('Запрещено редактировать дату и время заявки за менее 16 часов до её начала'); + } if ($task instanceof _document) { // Найдена заявка diff --git a/mirzaev/ebala/system/public/js/tasks.js b/mirzaev/ebala/system/public/js/tasks.js index e09fd53..b453353 100755 --- a/mirzaev/ebala/system/public/js/tasks.js +++ b/mirzaev/ebala/system/public/js/tasks.js @@ -2606,6 +2606,10 @@ if (typeof window.tasks !== "function") { work.classList.add("row", "connected", "stretched"); this.works(task).then((html) => (work.innerHTML = html)); work.setAttribute("title", "Тип работы"); + work.setAttribute( + 'onchange', + `tasks.work(document.getElementById('${task}'), this)` + ); // Инициализация поля ввода описания const description = document.createElement("textarea"); @@ -2938,8 +2942,19 @@ if (typeof window.tasks !== "function") { // Блокировка закрытия окна (чтобы не вызвался click() через событие onclick) this.freeze = true; - // Активация виртуальной кнопки "подтвердить" - confirm.click(); + if ( + typeof core === "function" && + core.interface === "operator" && + core.interface === "administrator" + ) { + // Оператор или администратор + + // Активация виртуальной кнопки "подтвердить" + confirm.click(); + } else { + // Магазин или сотрудник + + } // Возвращение статуса блокировки закрытия окна this.freeze = freeze; @@ -3783,8 +3798,6 @@ if (typeof window.tasks !== "function") { // Инициализация идентификатора строки const id = row.getAttribute("id"); - alert(228); - if (typeof id === "string") { // Инициализирован идентификатор