Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужна помощь в создании скрипта для создания графиков дежурств

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: На одной странице вывести несколько блоков с бригадами
Ruskat
Отправлено: 02 Января, 2022 - 16:07:01
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Прошу помощи в создании графика бригад для организации.
Нужно организовать онлайн-доступ к графикам дежурств.
Изначально, как я понимаю, страница должна начинаться с календарика, в котором будет видно, на какие даты уже составлен график.
Далее клик на нужную дату и переход на сам график нужной даты.
Формирование графика надо выполнять блоками, где один блок это одна бригада с составом рабочих и рабочим временем каждого работника. Оно может быть разным.
Графики должны храниться в базе SQL. Связь через PHP.
Чтобы иметь возможность добавлять, удалять или редактировать график, нужна авторизация.
Заранее благодарен за помощь.
Базовые наброски с авторизацией для руководителя, который будет заполнять график уже есть.
График нужно сложить так, чтобы была ссылка на график в целом, вида сайт/grafik/2021/12/29 так и на конкретную бригаду с работниками: сайт/grafik/2021/12/29/201, чтобы можно было ссылкой с работниками бригады поделиться., которые на этой бригаде будут.
Архив со скриптом и изображением как это должно выглядеть на стороне сайта предоставляю.
Дополнительная задача - Добавлять работников и присваивать им подразделения.
Отделить полномочиями админа от простой работницы, которой надо видеть только раздел и её парафией - графиками. Админ часть думаю делать по подобию uCoza.
Так что данные можно хранить или выводить и в XML.

(Отредактировано автором: 02 Января, 2022 - 16:11:15)

 
 Top
miketomlin
Отправлено: 02 Января, 2022 - 16:34:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


Помог: 5 раз(а)




Ничего не забыли? Улыбка Бюджет какой?
 
 Top
Ruskat
Отправлено: 14 Января, 2022 - 20:36:27
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




miketomlin пишет:
Ничего не забыли? Улыбка Бюджет какой?

Бюджет нулевой.

На данный момент админку организовал. Единая задачка, которую не могу реализовать, это именно форма формирования бригады.
В БД есть столбцы: id, nachalnik, rabochiy,voditel.
Заковырка в том, что:
- Начальник (Столбец nachalnik) может работать не сутки (с 8 до 8), а 12 часов (с 8:00 до 20:00). Для этого надо плюсануть ещё один выпадающий список со списком начальников. И выбрать того, который будет работать с 20 до 8 на этой де бригаде.
- Водитель (Столбец voditel) - аналогично
- Рабочие: (Столбец rabochiy) Они не только могут работать по 12 часов, и их может быть как двое так и трое.
Писать в базу надо по одному блоку, чтобы было легче вывести саму бригаду отдельной ссылкой.
Каждому работяге буду задавать датапикером.
Вся проблема в том, что не могу правильно организовать как саму форму с добавляющимися или удаляющимися, при необходимости, выпадающими комбо-списками и датой и временем начала/окончания работы, так и с правильной организацией отправляемых данных. Может их вообще лучше отправлять в одну ячейку в виде Json, а работников слать айдишниками а не Ф.И.О
 
 Top
Vladimir Kheifets
Отправлено: 15 Января, 2022 - 18:17:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Добрый день!
Как должна выглядеть форма, которую Вы не можете реализовать?
Могли бы Вы хоть от руки нарисовать макет и объяснить, что должно появляться или исчезать
и при каких условиях?
Организация данных должна зависеть от того, как они будут использоваться т.е.
какие будут поисковые запросы и какие документы должны выдаваться.

(Отредактировано автором: 15 Января, 2022 - 19:38:40)

 
 Top
Ruskat
Отправлено: 17 Января, 2022 - 00:24:35
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Vladimir Kheifets пишет:
Добрый день!
Как должна выглядеть форма, которую Вы не можете реализовать?
Могли бы Вы хоть от руки нарисовать макет и объяснить, что должно появляться или исчезать
и при каких условиях?
Организация данных должна зависеть от того, как они будут использоваться т.е.
какие будут поисковые запросы и какие документы должны выдаваться.

Благодарю за ответ.
Вот здесь конкретно пример, как должен дублироваться блок с формами - " добавить еще запись".
Так же такого плана мне нужно дублировать поле ввода в блоке, так как работников одной должности может быть несколько.
Каждый новый/сдублированный блок с формами - это отдельная бригада, имеющая свой уникальный номер - от 201 до 220.
 
 Top
Ruskat
Отправлено: 17 Января, 2022 - 15:22:07
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Создал визуально блок.
Имеет такой вид
[img]https://picua[dot]org/images/2022/01/17/76643df7d947f80db73d60c055eef679[dot]md[dot]png[/img]
Нужно добавлять или удалять строки в блоках и сами блоки.
Каждая бригада должна буть как отдельная статья на сайте, но снисок бригад должен быть изъят из базы только в соответствии с заданной датой.
 
 Top
Vladimir Kheifets
Отправлено: 17 Января, 2022 - 19:36:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Ruskat пишет:
Создал визуально блок.
Имеет такой вид
[img]https://picua[dot]org/images/2022/01/17/76643df7d947f80db73d60c055eef679[dot]md[dot]png[/img]
Нужно добавлять или удалять строки в блоках и сами блоки.
Каждая бригада должна буть как отдельная статья на сайте, но снисок бригад должен быть изъят из базы только в соответствии с заданной датой.

К сожалению, ссылка не открывается.
Цитата:
Error 1020 Ray ID: 6cf00e83c9e33b19 • 2022-01-17 13:51:09 UTC
Access denied

Вы можете загрузить картинку на этом сайте.
Что такое блок и статья?

Возможно, что на сайте должна быть страница "Смены" для ввода, редактирования и сохранения в БД графики работы по сменам.
По идее должно быть несколько таблиц в БД:

Вид деятельности персонала
Код1, должность
1 начальник
2 рабочий
3 водитель

Персонал
Идр, ФИО, Код1, Адрес, Телефон, Мэйл, Зарплата ...

Смены
Идс, Дата/время с, Дата/время по, Бригада
В поле Бригада должны записываться Идп персонала(JSON или сериализованный массив)

Отпуска
Идо, Идр, Дата/время с, Дата/время по, Код отпуска

Возможно и еще что-то...

Должна, быть страница "Персонал", для ввода, редактирования этих данных и
страница "Смены", для которой должна выбираться эти данные.
В формуляре на странице "Смены" должны быть поля для ввода даты и времени смены.
Если смена была введена, то ранне введённые данные должны выбираться для редактирования.
Должны быть списки для выбора начальника, водителя и рабочих.
Имена содруников фирмы должны вибираться из БД с учетом отпусков или больничных.
Выбранные имена должны записываться список бригады или по необходимости удаляться из него.

(Отредактировано автором: 17 Января, 2022 - 19:39:31)

 
 Top
Ruskat
Отправлено: 17 Января, 2022 - 20:44:01
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




[quote=Vladimir Kheifets]
Ruskat пишет:
Создал визуально блок.
Должна, быть страница "Персонал", для ввода, редактирования этих данных и
страница "Смены", для которой должна выбираться эти данные.
В формуляре на странице "Смены" должны быть поля для ввода даты и времени смены.
Если смена была введена, то ранне введённые данные должны выбираться для редактирования.
Должны быть списки для выбора начальника, водителя и рабочих.
Имена содруников фирмы должны вибираться из БД с учетом отпусков или больничных.
Выбранные имена должны записываться список бригады или по необходимости удаляться из него.

Здесь не могу загрузить или не вижу такой кнопки.
[img]https://i.yapx.ru/QKk4Y.png[/img]
Уже сделана страница персонала. Персонал добавил, должности позадавал и попривязывал. Смены не принципиальны для привязки, так как бывают подработки.
Список "привязочный": http://bhtml[dot]ru/webdevelopment/c[dot][dot][dot]elects/index.php - подогнал под себя: Должность -> Работники.
Отпуска и больничные - это уже шикардос. У "вводящего" есть график на месяц. Он видит, кто работает определенного числа и формирует из них бригады.
В данный упёрся в то, что не могу в JS-коде средствами РНР вывести дальше список Должность -> Работники, так как РНР в JS не выполняется.
Спойлер (Отобразить)

Плюсовать - минусовать строки брал отсюда.

(Отредактировано автором: 17 Января, 2022 - 20:58:41)

 
 Top
Vladimir Kheifets
Отправлено: 18 Января, 2022 - 11:53:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Ruskat пишет:
В данный упёрся в то, что не могу в JS-коде средствами РНР вывести дальше список Должность -> Работники, так как РНР в JS не выполняется.

Добрый день!
Верно, РНР выполняется на сервере, а JS в браузере клиента, НО, из JS можно отправить XMLHttpRequest на сервер, там отработать на РНР запрос к БД и вернуть результат назад в JS. Так это работает:
CODE (html):
скопировать код в буфер обмена
  1. <?php
  2. if(isset($_GET['idSelect']))
  3. {
  4.         header('Content-Type: application/json;charset=utf-8');
  5.         /*
  6.         Здесь должен быть запрос к БД таблица "Personal"
  7.         SELECT id, name FROM Personal WHERE id='{$_GET['SelectedInd'])}'
  8.         нужно создать массив  $arr
  9.         */
  10.         $arr = array(1 => "Иванов", 2 => "Петров", 3 => "Сидоров" );
  11.     echo json_encode($arr, JSON_PRETTY_PRINT);
  12.     //Возвращаем данные в JS в JSON-формате (XMLHttpResponse)
  13.         exit;
  14. }
  15.  
  16. ######################################################
  17. $Position = [0=>"Должность", 1 => "Haчальник", 2 => "Водитель", 3 => "Рабочий"];
  18. $PositionOpt="";
  19. foreach($Position as $val=>$text)
  20.         $PositionOpt.="<option value='$val')>$text</option>";
  21. echo <<<HTML
  22. <html>
  23. <head>
  24. <title>CreateOption</title>
  25. <style>
  26. #PositionName{visibility: hidden}
  27. </style>
  28. </head>
  29. <body>
  30. <select id="Position">$PositionOpt</select>
  31. <select id="PositionName"></select>
  32. </body>
  33. <script>
  34. select = document.querySelectorAll("select");
  35. selectPosition = select[0];
  36. selectPositionName = select[1];
  37. select[0].addEventListener("change", function (e){
  38.         id = e.target.id;
  39.         i=e.target.selectedIndex;
  40.         getOptions(id, i);
  41. });
  42.  
  43. //------------------------------
  44. setOpt = function(IdSelect, optObj){
  45.         select2 = document.getElementById(IdSelect);
  46.         select2.innerHTML = "";
  47.         opt = document.createElement('option');
  48.         opt.innerHTML = "Фамилия";
  49.         select2.appendChild(opt);
  50.         for(i in optObj)
  51.         {
  52.                 opt = document.createElement('option');
  53.                 opt.innerHTML = optObj[i];
  54.                 select2.appendChild(opt);
  55.         }
  56.         select2.style.visibility="visible";
  57. };
  58. //-----------------------------
  59. getOptions = function(idSelect, SelectedInd){
  60.         req = new XMLHttpRequest();
  61.         req.responseType = "json";
  62.         url = "?idSelect="+idSelect+"&SelectedInd="+SelectedInd;
  63.         req.open("get", url, true);
  64.         req.responseType = "json";
  65.         req.onreadystatechange = function()
  66.         {
  67.            if (this.readyState == 4 && this.status == 200)
  68.            {
  69.                         try
  70.                         {
  71.                                 rsp = this.response; //получаем JSON Object
  72.                                 console.log(rsp);
  73.                                 setOpt(idSelect+"Name", rsp);
  74.                         }
  75.                         catch (e)
  76.                         {
  77.                                 err={state:this.readyState,err:e.message,url:url};
  78.                                 console.log(err);
  79.                         }
  80.                 };
  81.         };
  82.         req.send();
  83. };
  84. </script>
  85. </html>
  86. HTML;
  87. ?>
Удачи!

(Отредактировано автором: 18 Января, 2022 - 11:54:11)

 
 Top
Ruskat
Отправлено: 18 Января, 2022 - 21:09:46
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Vladimir Kheifets пишет:
Удачи!

Благодарю, но снова не мгу до конца всё решить.
Должности в список получил, а вот Фио, соответствующие должности не могу никак...
Пытаюсь так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['idSelect']))
  2. {
  3.         header('Content-Type: application/json;charset=utf-8');
  4.                 $array = array();
  5.                 $ps_id = $_GET["SelectedInd"];
  6.                 $workers = mysqli_query($db,'SELECT id, pr FROM `workers` WHERE `ps`= '.$ps_id); //     База з посадами /       База с должностями
  7.                 while($rws = mysqli_fetch_assoc($workers)){
  8.                         //$array[] = $rws;
  9.                         $arr = array($rws["id"] => $rws["pr"]);
  10.                 }
  11.     echo json_encode($arr, JSON_PRETTY_PRINT);
  12.     //Возвращаем данные в JS в JSON-формате (XMLHttpResponse)
  13.         exit;
  14. }

где id - ID, pr - ФАМИЛИЯ, ps - ИДЕНТИФИКАТОР ДОЛЖНОСТИ, по которому я и сортирую работяг.
Дальше, эти зависимые списки надо будет вставить в Js
CODE (javascript):
скопировать код в буфер обмена
  1. <script type = "text/javascript">
  2.         var scntDiv = $('#p_scents');
  3.         var i = $('#p_scents tr').size() + 1;
  4.  
  5.         $('#addScnt').click(function() {
  6.                 scntDiv.append('<tr>'+
  7.                                                                         '<td></td>'+
  8.                                                                         '<td></td>'+
  9.                                                                         '<td>Станция</td>'+
  10.                                                                         '<td><select id="get_country" name="get_country">'+
  11.                                                                         '<option value="">Должность</option>'+
  12.                                                                                 <? вставить здесь зависимые выпадающие списки ?>
  13.                                                                         '</select></td>'+
  14.                                                                         '<td><div id="sub_region">'+
  15.                                                                                 '<select id="get_region" name="get_region"></select>'+
  16.                                                                         '</div></td>'+
  17.                                                                         '<td><label for="date">С:</label><input type="date" name="w71_dt_from" id="date"><input name="w71_tm_from" type="time"><br><label for="date">По:</label><input type="date" name="w71_dt_to" id="date"><input name="w71_tm_to" type="time"></td>'+
  18.                                                                         '<td><a href="#" id="remScnt"><img src="/img/minus.png"></a></td>'+
  19.                                                                 '</tr>');  
  20.                 i++;
  21.                 return false;
  22.         });
  23.  
  24.         //Remove button
  25.         $(document).on('click', '#remScnt', function() {
  26.                 if (i > 2) {
  27.                         $(this).closest('tr').remove();
  28.                         i--;
  29.                 }
  30.                 return false;
  31.         });
  32. </script>

Этот код замещающий - выводится для новых строк с работниками при нажатии "+".
Сам разобраться не могу, к сожалению.
 
 Top
Vladimir Kheifets
Отправлено: 18 Января, 2022 - 21:45:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Ruskat пишет:
Vladimir Kheifets пишет:
Удачи!

Благодарю, но снова не мгу до конца всё решить.
Должности в список получил, а вот Фио, соответствующие должности не могу никак...
Пытаюсь так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['idSelect']))
  2. {
  3.         header('Content-Type: application/json;charset=utf-8');
  4.                 $array = array();
  5.                 $ps_id = $_GET["SelectedInd"];
  6.                 $workers = mysqli_query($db,'SELECT id, pr FROM `workers` WHERE `ps`= '.$ps_id); //     База з посадами /       База с должностями
  7.                 while($rws = mysqli_fetch_assoc($workers)){
  8.                         //$array[] = $rws;
  9.                         $arr = array($rws["id"] => $rws["pr"]);
  10.                 }
  11.     echo json_encode($arr, JSON_PRETTY_PRINT);
  12.     //Возвращаем данные в JS в JSON-формате (XMLHttpResponse)
  13.         exit;
  14. }

где id - ID, pr - ФАМИЛИЯ, ps - ИДЕНТИФИКАТОР ДОЛЖНОСТИ, по которому я и сортирую работяг.
Дальше, эти зависимые списки надо будет вставить в Js

У Вас здесь ошибка:

Д.б.
PHP:
скопировать код в буфер обмена
  1. $arr[] = array($rws["id"] => $rws["pr"]);
Я показал Вам рабочий код, вставлющий оптион в Js и управляющий тэгами селект.
Вам нужно заменить тэги селект в Вашем коде и убрать jQuery.

(Отредактировано автором: 18 Января, 2022 - 21:49:24)

 
 Top
Ruskat
Отправлено: 18 Января, 2022 - 23:40:38
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




По Вашему примеру вывод такой:
CODE (javascript):
скопировать код в буфер обмена
  1. {
  2.     "1": "\u0418\u0432\u0430\u043d\u043e\u0432",
  3.     "2": "\u041f\u0435\u0442\u0440\u043e\u0432",
  4.     "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  5. }

При выводе с базы у меня работники вот так:
CODE (javascript):
скопировать код в буфер обмена
  1. [
  2.     {
  3.         "1": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  4.     },
  5.     {
  6.         "2": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  7.     },
  8.     {
  9.         "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  10.     }
  11. ]

Возможно, можно как-то jsоm скопитовать и вставить существующий html-блок, вместе с рабочими списками.

(Отредактировано автором: 18 Января, 2022 - 23:48:47)

 
 Top
Vladimir Kheifets
Отправлено: 19 Января, 2022 - 08:00:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Ruskat пишет:
По Вашему примеру вывод такой:
CODE (javascript):
скопировать код в буфер обмена
  1. {
  2.     "1": "\u0418\u0432\u0430\u043d\u043e\u0432",
  3.     "2": "\u041f\u0435\u0442\u0440\u043e\u0432",
  4.     "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  5. }

При выводе с базы у меня работники вот так:
CODE (javascript):
скопировать код в буфер обмена
  1. [
  2.     {
  3.         "1": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  4.     },
  5.     {
  6.         "2": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  7.     },
  8.     {
  9.         "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  10.     }
  11. ]

Возможно, можно как-то jsоm скопитовать и вставить существующий html-блок, вместе с рабочими списками.


Так всё работает:
Спойлер (Отобразить)

(Отредактировано автором: 19 Января, 2022 - 10:39:39)

 
 Top
Vladimir Kheifets
Отправлено: 19 Января, 2022 - 12:38:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Дополнение.

Это код таблицы бригады (как на скриншоте)
Количество работников в таблице может настриваться и соответсвнно м.б. столько же пар связанных тэгов селект.
Спойлер (Отобразить)
Самостоятельно справитесь с столбцом "Рабочее время"?

(Отредактировано автором: 19 Января, 2022 - 14:52:07)

 
 Top
Ruskat
Отправлено: 20 Января, 2022 - 00:03:27
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Спасибо большое. Освоил.
А в чём может быть дело, что применил такой метод дублирования строк, но фамилии раскрываются только в первой строке? В остальных только должности.

(Отредактировано автором: 20 Января, 2022 - 00:03:49)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB