diff --git a/app/engine/admin/tpls/include/_static_css_headers.htm b/app/engine/admin/tpls/include/_static_css_headers.htm index 50876cc..1f0f4ae 100644 --- a/app/engine/admin/tpls/include/_static_css_headers.htm +++ b/app/engine/admin/tpls/include/_static_css_headers.htm @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/app/engine/admin/tpls/include/_static_js_headers.htm b/app/engine/admin/tpls/include/_static_js_headers.htm index 21ed651..5598d48 100644 --- a/app/engine/admin/tpls/include/_static_js_headers.htm +++ b/app/engine/admin/tpls/include/_static_js_headers.htm @@ -1,15 +1,15 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/app/engine/cron/data_sync/sync_doctors_and_zones.php b/app/engine/cron/data_sync/sync_doctors_and_zones.php index bf2e138..d00280c 100644 --- a/app/engine/cron/data_sync/sync_doctors_and_zones.php +++ b/app/engine/cron/data_sync/sync_doctors_and_zones.php @@ -97,18 +97,19 @@ foreach ($docs as $d) { $post = db_escape_string($d['post_name']); $spec = db_escape_string($d['speciality_name']); $office = db_escape_string($d['office']); + $zoneId = (int)$d['orgStructure_id']; - // zone_id = внешний ID участка - $zoneId = (int)$d['orgStructure_id']; + // Получаем JSON расписания + $scheduleJson = db_escape_string(getDoctorSchedule($src, $id)); echo "[TMP DOC] INSERT id={$id}, name={$name}\n"; if (!$DRY_RUN) { $dst->q(" INSERT INTO pnd_doctors_tmp - (id, name, post_name, speciality_name, office, zone_id) + (id, name, post_name, speciality_name, office, zone_id, schedule) VALUES ( - {$id}, '{$name}', '{$post}', '{$spec}', '{$office}', {$zoneId} + {$id}, '{$name}', '{$post}', '{$spec}', '{$office}', {$zoneId}, '{$scheduleJson}' ) "); } @@ -144,4 +145,74 @@ function replaceTables($dst, $DRY_RUN) replaceTables($dst, $DRY_RUN); +function getDoctorSchedule($src, $doctorId) { + + // Генерируем диапазон дат: -3 дня назад и +4 вперёд + $startDate = date('Y-m-d', strtotime('-3 days')); + $endDate = date('Y-m-d', strtotime('+4 days')); + + $sql = " + SELECT + DATE(e.execDate) AS day, + MIN(apt.value) AS work_start, + ADDTIME(MAX(apt.value), '00:20:00') AS work_end + FROM Event e + JOIN Action a ON e.id = a.event_id + JOIN ActionType at ON a.actionType_id = at.id + JOIN ActionPropertyType apT1 + ON a.actionType_id = apT1.actionType_id AND apT1.name LIKE '%times%' + JOIN ActionProperty ap1 + ON a.id = ap1.action_id AND ap1.type_id = apT1.id + JOIN ActionProperty_Time apt ON ap1.id = apt.id + WHERE e.deleted = 0 + AND a.deleted = 0 + AND ap1.deleted = 0 + AND at.code = 'amb' + AND e.eventType_id = 5 + AND e.execPerson_id = {$doctorId} + AND DATE(e.execDate) BETWEEN '{$startDate}' AND '{$endDate}' + GROUP BY DATE(e.execDate) + "; + + $rows = $src->q($sql)->fetchAll(); + + // Подготовка недели: day1..day7 = Пн..Вс + $week = [ + 1 => 'day1', + 2 => 'day2', + 3 => 'day3', + 4 => 'day4', + 5 => 'day5', + 6 => 'day6', + 7 => 'day7', + ]; + + // Заполняем пустыми днями + $result = [ + 'day1' => null, + 'day2' => null, + 'day3' => null, + 'day4' => null, + 'day5' => null, + 'day6' => null, + 'day7' => null, + ]; + + foreach ($rows as $r) { + + // 1 – воскресенье, нам нужно 1=Пн → 7=Вс + $dayNum = date('N', strtotime($r['day'])); + + $key = $week[$dayNum]; + + $result[$key] = [ + 'start' => $r['work_start'] ?: null, + 'end' => $r['work_end'] ?: null, + ]; + } + + return json_encode($result, JSON_UNESCAPED_UNICODE); +} + + echo "\n--- DONE (DRY_RUN = " . ($DRY_RUN ? "YES" : "NO") . ") ---\n"; diff --git a/app/engine/migrations/20251124-1850-admin-cats.sql b/app/engine/migrations/20251124-1850-admin-cats.sql new file mode 100644 index 0000000..5070a7c --- /dev/null +++ b/app/engine/migrations/20251124-1850-admin-cats.sql @@ -0,0 +1 @@ +INSERT INTO `_sys_cat_admin` (`access_group`, `cat_id`, `cat_name`, `data`, `module`, `parent_cat`) VALUES ( "1,2", "core-edit-doctors", "Доктора", "$obj_name=pnd_doctors;", "object_admin.php", "index"); diff --git a/app/engine/migrations/20251124-1910-pnd_doctors.sql b/app/engine/migrations/20251124-1910-pnd_doctors.sql new file mode 100644 index 0000000..95c33bb --- /dev/null +++ b/app/engine/migrations/20251124-1910-pnd_doctors.sql @@ -0,0 +1,4 @@ +-- [2025-11-24 19:10:57] Создание атрибута; +CREATE TABLE IF NOT EXISTS `pnd_doctors` ( `id` INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +ALTER TABLE `pnd_doctors` ADD `resp` text NOT NULL; +REPLACE INTO `_sys_datatypes` (`obj_name`, `attr_name`,`attr_type`,`attr_desc`,`attr_templ`,`attr_order`) VALUES ("pnd_doctors","resp","json","","","100"); diff --git a/app/engine/migrations/20251124-1911-pnd_doctors.sql b/app/engine/migrations/20251124-1911-pnd_doctors.sql new file mode 100644 index 0000000..b6c9eb6 --- /dev/null +++ b/app/engine/migrations/20251124-1911-pnd_doctors.sql @@ -0,0 +1,11 @@ +-- [2025-11-24 19:11:00] Удаление атрибута resp; +DELETE FROM `_sys_datatypes` WHERE `obj_name` = 'pnd_doctors' AND `attr_name` = 'resp'; +ALTER TABLE `pnd_doctors` DROP `resp`; +-- [2025-11-24 19:11:08] Создание атрибута; +CREATE TABLE IF NOT EXISTS `pnd_doctors` ( `id` INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +ALTER TABLE `pnd_doctors` ADD `schedule` text NOT NULL; +REPLACE INTO `_sys_datatypes` (`obj_name`, `attr_name`,`attr_type`,`attr_desc`,`attr_templ`,`attr_order`) VALUES ("pnd_doctors","schedule","json","","","100"); +-- [2025-11-24 19:11:13] Изменение атрибута schedule; +REPLACE INTO `_sys_datatypes` (`attr_type`, `attr_templ`, `attr_desc`, `attr_hide`, `attr_mand`, `attr_order`, `_sys_deleted`, `obj_name`, `attr_name`) VALUES ("json" , "" , "" , "0" , "0" , "200" , "0" , "pnd_doctors" , "schedule"); +-- [2025-11-24 19:11:20] Изменение атрибута schedule; +REPLACE INTO `_sys_datatypes` (`attr_type`, `attr_templ`, `attr_desc`, `attr_hide`, `attr_mand`, `attr_order`, `_sys_deleted`, `obj_name`, `attr_name`) VALUES ("json" , "" , "График работы" , "0" , "0" , "200" , "0" , "pnd_doctors" , "schedule"); diff --git a/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec b/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec index fcadda7..08edf31 100644 --- a/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec +++ b/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec @@ -3,37 +3,87 @@
+ + addLoop($__currentLoopData);$this->getFirstLoop(); foreach($__currentLoopData as $doc): $loop = $this->incrementLoopIndices(); ?> -