diff --git a/mirzaev/ebala/system/controllers/market.php b/mirzaev/ebala/system/controllers/market.php
index 9141c76..e87ac01 100755
--- a/mirzaev/ebala/system/controllers/market.php
+++ b/mirzaev/ebala/system/controllers/market.php
@@ -238,6 +238,7 @@ final class market extends core
else if (!empty($parameters['account_number']) && strlen($parameters['account_number']) < 11) throw new exception('Несоответствие формату SIM-номера аккаунта представителя');
else if (!empty($parameters['market_mail']) && preg_match('/^.+@.+\.\w+$/', $parameters['market_mail']) === 0) throw new exception('Несоответствие формату почты представителя');
else if (!empty($parameters['account_mail']) && preg_match('/^.+@.+\.\w+$/', $parameters['account_mail']) === 0) throw new exception('Несоответствие формату почты аккаунта представителя');
+ else if (!empty($parameters['market_id']) && model::read('d.id == "' . $parameters['market_id'] . '"', errors: $this->errors['account']) instanceof _document) throw new exception('Уже существует магазин с данным идентификатором');
// Универсализация
/* $parameters['market_number'] = (int) $parameters['market_number']; */
@@ -277,7 +278,7 @@ final class market extends core
}
// Инициализация идентификатора магазина
- $id = model::id();
+ $id = empty($parameters['market_id']) ? model::id() : $parameters['market_id'];
// Запись заголовков ответа
header('Content-Type: application/json');
@@ -306,30 +307,35 @@ final class market extends core
flush();
try {
- // Создание магазина
- $market = model::create(
- data: [
- 'id' => (string) $id,
- 'name' => [
- 'first' => $parameters['market_name_first'],
- 'second' => $parameters['market_name_second'],
- 'last' => $parameters['market_name_last']
+ if (isset($account)) {
+ // Инициализирован аккаунт
+
+ // Создание магазина
+ $market = model::create(
+ data: [
+ 'id' => (string) $id,
+ 'name' => [
+ 'first' => $parameters['market_name_first'],
+ 'second' => $parameters['market_name_second'],
+ 'last' => $parameters['market_name_last']
+ ],
+ 'number' => $parameters['market_number'] === 0 ? '' : $parameters['market_number'],
+ 'mail' => $parameters['market_mail'],
+ 'type' => $parameters['market_type'],
+ 'city' => $parameters['market_city'],
+ 'district' => $parameters['market_district'],
+ 'address' => $parameters['market_address'],
],
- 'number' => $parameters['market_number'] === 0 ? '' : $parameters['market_number'],
- 'mail' => $parameters['market_mail'],
- 'type' => $parameters['market_type'],
- 'city' => $parameters['market_city'],
- 'district' => $parameters['market_district'],
- 'address' => $parameters['market_address'],
- ],
- errors: $this->errors['account']
- );
+ errors: $this->errors['account']
+ );
- // Проверка существования созданного магазина
- if (empty($market)) throw new exception('Не удалось создать магазин');
+ // Проверка существования созданного магазина
+ if (empty($market)) throw new exception('Не удалось создать магазин');
- // Создание ребра: account -> market
- account::connect($account, $market, 'market', $this->errors['account']);
+ // Создание ребра: account -> market
+ account::connect($account, $market, 'market', $this->errors['account']);
+ }
+ throw new exception('Не инициализирован аккаунт');
} catch (exception $e) {
// Write to the errors registry
$this->errors['account'][] = [
@@ -397,8 +403,8 @@ final class market extends core
if (!empty($market)) {
// Найден магазин
-
- // Инициализация параметров (перезапись переданными значениями)
+
+ // Инициализация параметров (перезапись переданными значениями)
if ($parameters['name_first'] !== $market->name['first']) $market->name = ['first' => $parameters['name_first']] + $market->name;
if ($parameters['name_second'] !== $market->name['second']) $market->name = ['second' => $parameters['name_second']] + $market->name;
if ($parameters['name_last'] !== $market->name['last']) $market->name = ['last' => $parameters['name_last']] + $market->name;
diff --git a/mirzaev/ebala/system/controllers/worker.php b/mirzaev/ebala/system/controllers/worker.php
index 62a5903..88111f1 100755
--- a/mirzaev/ebala/system/controllers/worker.php
+++ b/mirzaev/ebala/system/controllers/worker.php
@@ -39,7 +39,7 @@ final class worker extends core
// Авторизация
if ($this->account->status() && ($this->account->type === 'administrator' || $this->account->type === 'operator')) {
// Авторизован аккаунт оператора или администратора
-
+
foreach (['active', 'inactive', 'fined', 'decent', 'hided', 'fired'] as $name) {
// Перебор фильтров статусов
@@ -253,6 +253,7 @@ final class worker extends core
else if (!empty($parameters['account_number']) && strlen($parameters['account_number']) < 11) throw new exception('Несоответствие формату SIM-номера аккаунта сотрудника');
else if (!empty($parameters['worker_mail']) && preg_match('/^.+@.+\.\w+$/', $parameters['worker_mail']) === 0) throw new exception('Несоответствие формату почты сотрудника');
else if (!empty($parameters['account_mail']) && preg_match('/^.+@.+\.\w+$/', $parameters['account_mail']) === 0) throw new exception('Несоответствие формату почты аккаунта сотрудника');
+ else if (!empty($parameters['worker_id']) && model::read('d.id == "' . $parameters['worker_id'] . '"', errors: $this->errors['account']) instanceof _document) throw new exception('Уже существует сотрудник с данным идентификатором');
// Универсализация
/* $parameters['worker_number'] = (int) $parameters['worker_number']; */
@@ -295,6 +296,9 @@ final class worker extends core
];
}
+ // Инициализация идентификатора сотрудника
+ $id = empty($parameters['worker_id']) ? model::id() : $parameters['worker_id'];
+
// Запись заголовков ответа
header('Content-Type: application/json');
header('Content-Encoding: none');
@@ -322,41 +326,46 @@ final class worker extends core
flush();
try {
- // Создание сотрудника
- $worker = model::create(
- data: [
- 'id' => model::id(),
- 'name' => [
- 'first' => $parameters['worker_name_first'],
- 'second' => $parameters['worker_name_second'],
- 'last' => $parameters['worker_name_last']
- ],
- 'number' => $parameters['worker_number'],
- 'mail' => $parameters['worker_mail'],
- 'birth' => $parameters['worker_birth'],
- 'passport' => $parameters['worker_passport'],
- 'issued' => $parameters['worker_issued'],
- 'department' => [
- 'number' => $parameters['worker_department_number'],
- 'address' => $parameters['worker_department_address']
- ],
- 'requisites' => $parameters['worker_requisites'],
- 'payment' => $parameters['worker_payment'],
- 'tax' => $parameters['worker_tax'],
- 'city' => $parameters['worker_city'],
- 'district' => $parameters['worker_district'],
- 'address' => $parameters['worker_address'],
- 'hiring' => $parameters['worker_hiring'],
- 'rating' => 3
- ],
- errors: $this->errors['account']
- );
+ if (isset($account)) {
+ // Инициализирован аккаунт
- // Проверка существования созданного сотрудника
- if (empty($worker)) throw new exception('Не удалось создать сотрудника');
+ // Создание сотрудника
+ $worker = model::create(
+ data: [
+ 'id' => (string) $id,
+ 'name' => [
+ 'first' => $parameters['worker_name_first'],
+ 'second' => $parameters['worker_name_second'],
+ 'last' => $parameters['worker_name_last']
+ ],
+ 'number' => $parameters['worker_number'],
+ 'mail' => $parameters['worker_mail'],
+ 'birth' => $parameters['worker_birth'],
+ 'passport' => $parameters['worker_passport'],
+ 'issued' => $parameters['worker_issued'],
+ 'department' => [
+ 'number' => $parameters['worker_department_number'],
+ 'address' => $parameters['worker_department_address']
+ ],
+ 'requisites' => $parameters['worker_requisites'],
+ 'payment' => $parameters['worker_payment'],
+ 'tax' => $parameters['worker_tax'],
+ 'city' => $parameters['worker_city'],
+ 'district' => $parameters['worker_district'],
+ 'address' => $parameters['worker_address'],
+ 'hiring' => $parameters['worker_hiring'],
+ 'rating' => 3
+ ],
+ errors: $this->errors['account']
+ );
- // Создание ребра: account -> worker
- account::connect($account, $worker, 'worker', $this->errors['account']);
+ // Проверка существования созданного сотрудника
+ if (empty($worker)) throw new exception('Не удалось создать сотрудника');
+
+ // Создание ребра: account -> worker
+ account::connect($account, $worker, 'worker', $this->errors['account']);
+ }
+ throw new exception('Не инициализирован аккаунт');
} catch (exception $e) {
// Write to the errors registry
$this->errors['account'][] = [
@@ -424,7 +433,7 @@ final class worker extends core
if (!empty($worker)) {
// Найден сотрудник
-
+
// Универсализация
if (!empty($parameters['birth'])) $parameters['birth'] = DateTime::createFromFormat('Y-m-d', $parameters['birth'])->getTimestamp();
if (!empty($parameters['issued'])) $parameters['issued'] = DateTime::createFromFormat('Y-m-d', $parameters['issued'])->getTimestamp();
diff --git a/mirzaev/ebala/system/models/core.php b/mirzaev/ebala/system/models/core.php
index 45f2105..37a73bf 100755
--- a/mirzaev/ebala/system/models/core.php
+++ b/mirzaev/ebala/system/models/core.php
@@ -171,18 +171,29 @@ class core extends model
}
/**
- * Сгенерировать идентификатор
+ * Generate identifier
*
* @param array &$errors Реестр ошибок
*
- * @return int Свободный идентификатор (подразумевается)
+ * @return int Идентиикатор (свободный)
*/
public static function id(array &$errors = []): int
{
try {
- if (collection::init(static::$arangodb->session, static::COLLECTION))
- return static::count(static::COLLECTION, $errors) ?? 0;
- else throw new exception('Не удалось инициализировать коллекцию');
+ if (collection::init(static::$arangodb->session, static::COLLECTION)) {
+ // Инициализирована коллекция
+
+ // Exit (success)
+ return collection::search(
+ static::$arangodb->session,
+ sprintf(
+ <<<'AQL'
+ RETURN MAX((FOR d in %s RETURN +d.id))
+ AQL,
+ $collection ?? static::COLLECTION
+ )
+ ) + 1;
+ } else throw new exception('Не удалось инициализировать коллекцию');
} catch (exception $e) {
// Запись в реестр ошибок
$errors[] = [
@@ -193,10 +204,10 @@ class core extends model
];
}
+ // Exit (fail)
return 0;
}
-
/**
* Delete from ArangoDB
*
diff --git a/mirzaev/ebala/system/models/worker.php b/mirzaev/ebala/system/models/worker.php
index 9e152cb..9e976d7 100755
--- a/mirzaev/ebala/system/models/worker.php
+++ b/mirzaev/ebala/system/models/worker.php
@@ -90,45 +90,6 @@ final class worker extends core
return null;
}
- /**
- * Generate identifier
- *
- * @param array &$errors Реестр ошибок
- *
- * @return int Идентиикатор (свободный)
- */
- public static function id(array &$errors = []): int
- {
- try {
- if (collection::init(static::$arangodb->session, static::COLLECTION)) {
- // Инициализирована коллекция
-
- // Exit (success)
- return collection::search(
- static::$arangodb->session,
- sprintf(
- <<<'AQL'
- RETURN MAX((FOR d in %s RETURN +d.id))
- AQL,
- $collection ?? static::COLLECTION
- )
- );
- } else throw new exception('Не удалось инициализировать коллекцию');
- } catch (exception $e) {
- // Запись в реестр ошибок
- $errors[] = [
- 'text' => $e->getMessage(),
- 'file' => $e->getFile(),
- 'line' => $e->getLine(),
- 'stack' => $e->getTrace()
- ];
- }
-
- // Exit (fail)
- return 0;
- }
-
-
/**
* Записать
*
diff --git a/mirzaev/ebala/system/public/js/markets.js b/mirzaev/ebala/system/public/js/markets.js
index f53b8de..10df418 100644
--- a/mirzaev/ebala/system/public/js/markets.js
+++ b/mirzaev/ebala/system/public/js/markets.js
@@ -119,6 +119,7 @@ if (typeof window.markets !== "function") {
* @param {HTMLElement} market_name_last Отчество представителя магазина
* @param {HTMLElement} market_number SIM-номер представителя магазина
* @param {HTMLElement} market_mail Почта представителя магазина
+ * @param {HTMLElement} market_id Идентификатор магазина
* @param {HTMLElement} market_type Тип магазина