#1
Отправлено 21 Май 2014 - 08:14
Необходимо реализовать фильтр.
Что бы Исполнитель отсеивался по таб. Города и Сфера услуг + по полю Карточка = Свободна таб. Исполнители,
в зависимости от значений полей Город , Тип услуги , Карточка
Эскиз для общего понимания вопроса:
#2
Отправлено 21 Май 2014 - 09:47
#3
Отправлено 21 Май 2014 - 09:52
CbCoder (21 Май 2014 - 09:47) писал:
Запись в таб. Заявки создаётся с уже присвоенными значениями полям Город и Тип услуги, которые копируются из ещё одной таб. - Заказчики. Поэтому они не выбираются динамически... Хотя...
У меня в настройках поля Исполнители только два значения по полю:
по полю Исполнители. Город и по полю Исполнители. Сфера услуг
А как это проделать с обоими значениями для поля Исполнитель + ещё условие Карточка = Свободна?..
Сообщение отредактировал All_ex74: 21 Май 2014 - 10:05
#4
Отправлено 21 Май 2014 - 10:01
Цитата
И во всех заявках одни и те же значения? Или все таки нет? Если нет - то об этом и речь, что значения динамические. Если же - да (сомневаюсь), то и проблемы с созданием фильтра не было бы.
Цитата
Цепочкой фильтров. Например, выбираю Страну - Регион - Город, по очереди фильтруя вначале Регион страной, затем Город регионом.
#5
Отправлено 21 Май 2014 - 10:11
CbCoder (21 Май 2014 - 10:01) писал:
Нет, во всех записях таблицы значения разные - тогда всё таки динамические...
CbCoder (21 Май 2014 - 10:01) писал:
В вашем примере цепочка вполне обоснована: создаешь три таблицы в Справочнике - Страна - Регион - Город и связываешь их полями, ну а как же мне то увязать абсолютно не связываемые таблицы Города и Виды услуг - ведь в каждом из городов будут все эти виды услуг, а не частично??
Может я туплю конечно, подтолкните к ответу)
Сообщение отредактировал All_ex74: 21 Май 2014 - 10:13
#6
Отправлено 21 Май 2014 - 10:27
#7
Отправлено 21 Май 2014 - 10:28
CbCoder (21 Май 2014 - 10:27) писал:
Спасибо, буду думать.
#8
Отправлено 21 Май 2014 - 13:48
Не нарушаться ли общие вычисления?
Сделал, как Вы рекомендовали - поля Город, Тип услуги, Исполнитель таб. Заявки связаны теперь с таб. Исполнители:
Связь полей таб. Заявки
Город > Исполнители.Город
Тип услуги > Исполнители.Сфера услуг
Исполнитель > Исполнители.ФИО
Ещё я сделал связь полей таб. Заказчики по аналогии с таб. Заявки, окуда в неё собственно и копируются данные:
Город > Исполнители.Город
Связана по услуге > Исполнители.Сфера услуг
Но теперь при создании Заявки не копируется почему то поле Город из таб. Заказчики. Подправьте пожалуйста код копирования (вы упомянули, что он усложнится):
if ($line['Состояние'] == "Связана") // вычисление висит на поле состояние, при изменении которого на Связана создаётся Заявка в таб. Заявки { $zvka['Город'] = $line['Город']['ID']; $zvka['Тип услуги'] = $line['Связана по услуге']['ID']; $zvka['Заказчик'] = $line['ID']; $zvka['ID'] = insert_query($zvka, "Заявки"); }
Сообщение отредактировал All_ex74: 21 Май 2014 - 14:36
#9
Отправлено 21 Май 2014 - 16:40
#10
Отправлено 21 Май 2014 - 18:12
CbCoder (21 Май 2014 - 16:40) писал:
Да, тип услуги копируется без нареканий...
#11
Отправлено 21 Май 2014 - 18:20
#12
Отправлено 21 Май 2014 - 19:23
CbCoder (21 Май 2014 - 18:20) писал:
А эти вычисления никак не могут влиять?
Вот все вычисления:
1. Заказчики
if ($line['Состояние'] == "Связана") { $zvka['Тип услуги'] = $line['Связана по услуге']['ID']; // в переменной $line поля связи разворачиваются, поэтому записано в 2 уровня $zvka['Город'] = $line['Город']['ID']; // аналогично $zvka['Заказчик'] = $line['ID']; $zvka['ID'] = insert_query($zvka, "Заявки");
if ($line['Связана по услуге']['ID']=="") $line['Состояние'] = "Свободна"; else $line['Состояние'] = "Связана";
2. Заявки
if ($line['Статус']=="Исполняемая") $line['Исполнитель']['Карточка'] = "Связана"; if ($line['Статус']=="Завершённая") { $line['Закрыта'] = date("d.m.Y H:i"); $line['Заказчик']['Связана по услуге'] = ""; $line['Исполнитель']['Карточка'] = "Свободна"; }
if ($line['Исполнитель']['ID']=="") { $line['Статус'] = "В ожидании"; } else $line['Статус'] = "Исполняемая";
У меня вообще подозрение на конфигурацию, т.к. при настройке таб. Заказчики, при нажатии на кн. сохранить (http://yagool.ru/cb/...le.php?table=42) вызывает ошибку.
Не думаю, что так и должно быть.
Сообщение отредактировал All_ex74: 23 Май 2014 - 07:54
#13
Отправлено 22 Май 2014 - 14:47
Вчера хоть одно поле копировалось из таб. Заказчики, но выводило ошибку (выше) при попытке сохранить её настройки.
А сегодня обнаружил, что при попытке создать запись в таб. Заказчики вообще вычисление перестало работать... Как такое может быть?
Сообщение отредактировал All_ex74: 22 Май 2014 - 15:21
#14
Отправлено 05 Июнь 2014 - 13:31
Реализовал фильтрацию, применив функционал - фильтр по полю:
В поле Исполнитель подтягиваются Исполнители, отфильтрованные по полям Город и Тип услуги.
В поле Карточка подтягиваются значения статусов всех Исполнителей.
необходимо вычисление на изменение в базе по полю Тип услуги (если не равно 0, то):
1. Делать выборку с "подтянутого" массива поля Исполнитель и Выбирать Исполнителей только со значением поля Карточка - Свободна.
2. Из выбранных Исполнителей (со статусом Свободна) записывать в поле Исполнитель только одного, а при следующем обращении - следующего после него Исполнителя (по кругу)
Если проще, то сначала отбираться должны все Исполнители со значением поля Карточка - Свободна, а уже среди них выбирается первый по списку и если будет совершён типичный запрос в базу, то выбран будет уже следующий после него Исполнитель. И так далее, по таблице Исполнители, циклично и по кругу.
Подскажите, как можно реализовать данную логику одним вычислением? Перерыл весь форум, так ничего и не нашел...
Сообщение отредактировал All_ex74: 05 Июнь 2014 - 14:06
#15
Отправлено 05 Июнь 2014 - 14:35
Второй пункт не совсем понял честно говоря. Что значит "при следующем обращении"? При обращении где? В этой же карточке или следующей?
#16
Отправлено 05 Июнь 2014 - 15:10
CbCoder (05 Июнь 2014 - 14:35) писал:
Второй пункт не совсем понял честно говоря. Что значит "при следующем обращении"? При обращении где? В этой же карточке или следующей?
1. Пробовал, не получается сделать фильтрацию по четвертому полю (Карточка). На двух уровнях фильтруется, а при добавлении третьего начинаются косяки. По форуму несколько сообщений с типичной проблемой. Значения у полей Город, ФИО, Сфера услуг в таб. Исполнители статичны (присвоены единожды и навсегда), а у поля Карточка значения постоянно меняются. Вот после того и появляется неверная фильтрация, а то и вовсе ничего не фильтруется - вываливается полным списком, причем по всем указанным полям. Пробовал разные способы, но так и не добился успеха. Думаю это баг. Ну а по массиву подтянутых в поле Исполнитель значений, вычислением, что нельзя никак вытащить нужное и присвоить его данному полю?...
2. Следующий по списку (с значением поля Карточка - Свободна) должен выбираться "глобально" - при любом запросе. Этот же Исполнитель может быть выбран только когда пройдут все по списку... Вот и не знаю как это реализовать - ведь количество Исполнителей со значением поля Карточка - Свободна не нормированное и постоянно меняется.
Сообщение отредактировал All_ex74: 05 Июнь 2014 - 15:29
#17
Отправлено 05 Июнь 2014 - 15:24
Цитата
Так вы что вычислять то хотите, в итоге? Если фильтровать список через вычисление, то это невозможно, фильтровать можно только по полям или статичным фильтром.
Цитата
Все равно не понял объяснение. Попробую догадаться сам: у вас есть 3 записи: Иванов, Петров, Сидоров. Если я уже выбрал в одной заявке Иванова (из них троих), то в следующей заявке могу выбирать только Петрова или Сидорова, потом только Сидорова, а в 4-й заявке снова всех? Так что ли?
#18
Отправлено 05 Июнь 2014 - 15:39
CbCoder (05 Июнь 2014 - 15:24) писал:
1. Я думал, что можно прямым запросом MySQL к базе делать выборку строк по таблице Исполнители, собирать в массив, отфильтровав лишнее назначать значение поля ФИО данному полю Исполнитель...
CbCoder (05 Июнь 2014 - 15:24) писал:
2. Вы правильно догадались) но не совсем. К 4-й заявке кто нибудь из них уже освободится и значение его поля Карточка станет Свободна. Он станет доступен для исполнения, а значит и для выбора. Как тут быть?..
Просто это жизненно необходимо реализовать.
Сообщение отредактировал All_ex74: 05 Июнь 2014 - 15:56
#19
Отправлено 05 Июнь 2014 - 16:03
2. Опять не понял тогда. Вы имеете ввиду, что при выборе исполнителя, его поле Карточка должна стать "Несвободна"? Ну это то не проблема реализовать, добавьте вычисление на изменение поля Исполнитель: $line['Исполнитель']['Карточка'] = "Несвободна". Если бы у вас работал фильтр по полю Карточка из первого пункта, то все автоматом бы решилось, этот исполнитель просто не попадал бы больше в выпадающий список исполнителей в заявке (пока не освободится). А так даже не знаю, нужно исправлять тогда этот баг/недоработку, если это вообще возможно в данном случае.
#20
Отправлено 05 Июнь 2014 - 16:27
CbCoder (05 Июнь 2014 - 16:03) писал:
Мне и не нужно формировать никакой выпадающий список, я и хочу присваивать значение полю Исполнитель при СОЗДАНИИ Заявки. Просто вычисление будет срабатывать на изменения в БД по полю Тип услуги и при открытии для просмотра Заявки поле Исполнитель должно быть уже заполнено выбранным Исполнителем. Заявка создается вот этим вычислением поля Состояние в таб. Заказчики:
if ($line['Состояние'] == "Связана") { $zvka['Заказчик'] = $line['ID']; $zvka['Город'] = $line['Город']['ID']; $zvka['Тип услуги'] = $line['Связана по услуге']['ID']; $zvka['ID'] = insert_query($zvka, "Заявки"); }
CbCoder (05 Июнь 2014 - 16:03) писал:
Я имею ввиду именно ВЫБОР ИСПОЛНИТЕЛЯ, а не смену значения его Карточки! Я вроде бы все подробно изложил выше...
Например у меня есть три записи: Иванов, Петров, Сидоров. Если я уже выбрал в одной заявке Иванова (из них троих), то в следующей заявке могу выбирать только Петрова или Сидорова, пока выбирал Петрова Иванов уже отработал заявку и "встал в список снова", потом пошёл Сидоров, а в 4-й заявке стал снова доступен Иванов... Пока Исполнитель не освободится от Заявки на которую был выбран и не сменит САМОСТОЯТЕЛЬНО (смена статуса происходит через голосовое IVR-меню внешним запросом к базе) свой статус Карточка - Связана на Карточка - Свободна, он не должен участвовать в выбираемом списке...
Сообщение отредактировал All_ex74: 05 Июнь 2014 - 16:43
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных