Как сделать проект-конструктор с зависимостями на Django с переделкой существующей админки?
Есть задача на проект, управления небольшим производством по изготовлению ритуальных памятников.
Сам памятник это своего рода конструктор.
Разный камень (мрамор, гранит, базальт). Мрамор может быть из разных месторождений. Граниты и базальты это общее название, в которую входит группа разных камней. Кроме этого есть разные поставщики (карелия, урал, китай, индия + по городам), разное качество полировки и постоянно пробуют разный камень.
Разный размеры (и конечно большинство стандартные, но раз в неделю обязательно будет какой-то нестандарт)
Разная резка, горизонт или вертикально.
Основание площадка (тоже разные размеры, разные материалы (комбинируют цвета)
По портретам (граверовка, металлокерамика, керамогранит, цветной и ещё несколько разных непопулярных вариантов).
И когда их всех заказов было мало (50 штук в месяц), всё вполне можно было контролировать на листках. (сделали бланк и его заполняли вручную. Писали, какой камень, размер, какая художка, резка, что на обратке, на надгробке, прямая, косая, в общем всё заполняли вручную). Но фирма развивалась и сейчас около 300 заказов в месяц и от года к году количество растёт.
Поступила задача это всё автоматизировать в электронный вид. Т.к. я делал несколько проектов (интернет магазины) на Django.
И задача не только создать конструктор заказа, но и распределение работы. Штат небольшой (20 человек), но всё-же.
Я не могу понять, как это сделать алгоритмически. Столкнулся с проблемой зависимостей.
Т.е. если выбран камень габбро-диабаз и граверовка портрета, то берётся камень и это просто ретушь, подготовка под граверовку и граверовка портрета и тут же гравровка всех надписей,
но если выбран камень мрамор или дымовский (или ещё куча разных), то кроме ретуши, граверовка портрета будет естественно не на мраморе, а на чёрной плитке и тогда эту плитку нужно вырезать, выполнить на ней отдельную граверовку портрета, а на мраморной стеле выполнить в другом процессе отдельную граверовку надписей и крестика, затем передать этот комплект мастеру, который "врежет" тёмную плитку с портретом в мраморную стелу.
Но если выбран камень чёрный (тот же габбро-диабаз), но портрет цветной, то врезка уже будет делаться в чёрный камень, а на стеле нужно сделать только надписи и крестик (ну или цветы там, что согласуем).
И всё это переходит на следующий процесс и в самом конце это всё собирается на установку (не один, а допустим 5-10 комплектов в день) и это отдельная распределение работы и везётся уже на кладбище и устанавливается.
И вот таких зависимостей у каждого свои. У граверовщика-художника свои, у резчика свои, у полировщика свои, у площадочника свои, у установщиков свои, а ещё есть облагораживание территории, сварка и сборка (оградок, лавочек, столиков), фрезеровка и точёнка и т.д.
Вопрос: Как делать зависимости?
Какая задача поступила от руководства.
- "Я хочу на первом шаге выбрать камень и размер и чтобы оно понимало, что если я выбрал это, то на втором шаге у меня был вариант только такого и такого, а если это то такого. В зависимости от предыдущих шагов система должна убирать взаимоисключающие варианты самостоятельно и так по всем 15 пунктам (шагам). Чтобы я мог заполнить каждый заказ за 1 минуту, внеся все необходимые данные и на последнем шаге система должна сама понимать какую работу нужно выполнить и распределить по работникам кому что делать, естественно с привязкой к заказу. При этом должна соблюдаться последовательность, чтобы пока не сделана и не утверждена ретушь, чтобы не выполнялась граверовка, пока не выполнена граверовка, не выполнялась врезка или резка формы и т.д. впплоть до установке и окончательного получения денег"
- "Ещё хочу все эти связки формировать самостоятельно, чтобы был простой интерфейс без программирования, чтобы я мог выбрать, если то, то я указываю это это и это, если этот вариант, то только это, если этот вариант, то это и вот это, чтобы я сам мог настраивать. И чтобы я смог сам менять последовательность выполнения через админку, чтобы пробовать по разному оптимизировать время выполнения цепочек-процессов"
- "И я хочу чтобы у каждого в смартфоне была возможность поставить галочку, чтобы такой-то этап выполнен и далее система обновляла список работы у следующего специалиста в цепочке. Так нее нужно бегать за всеми и я смогу отслеживать на каком этапе какой заказ"
В общем проект такого плана. Как такое вообще делается?
Я делал интернет-магазины и тоже делал как-то своего рода конструктор для мебельных фасадов, но там всё было жутко неудобно и цепочки и зависимости были жёстко запрограмлены в бекенде. И бывало просят поменять местами последовательность шагов, а т.к. там зависимости и это подтягивало кучу кода и могло занимать две-три недели. Иногда было "мы попробовали, в общем верни как было, только вот чуть подправь" и ещё недели легаси (моего же) кода.
Но ведь я постоянно сталкиваюсь со всякими конструкторами. Взять то же заполнение объявлений на авито. Если это диваны, то там одни зависимости и одна последовательность шаго, если это автомобили, то там всё по другому. Как такие цепочки делаются алгоритмически, чтобы этим можно было управлять через админку, а не код?
Вопрос второй: Есть ведь админка. Там уже есть инстументы по внесению данных, авторизации, распределении прав и другие админские штуки. Но всё там очень неудобно и визуал на уровне 90-х годов. Можно ли просто переделать админку под нужды описанного проекта, расширив функционал, добавив аякс, работу с изображениями, добавлением комментариев в том числе голосовых (потому что ситуации разные бывают, где-то стукнуто, где-то плохо отполировно, где-то что-то не довезли и не хватает материала или инструмента (расходных его частей) где-то с датами напутано и нужно отправлять на переполировку, в общем рабочие моменты). Можно ли просто переделать текущую админку, или нужно изобретать всё по новому с нуля? Я просто всегда делал свои админки, но для меня это ещё тот гемор и я задался вопросом, но ведь Джангисты уже сделали админку, можно ли подправить, вместо изобретения своего пусть и многофункционального велосипеда.
Как такие цепочки делаются алгоритмически, чтобы этим можно было управлять через админку, а не код?
ну так и сделай модель для описание этих связей, если не можешь, то найми тех кто может. А в рамка вопроса на этом сайте, тут можно долго что-то расписывать, не все захотят такое делать, это уже платная работа.
но ведь Джангисты уже сделали админку
админка для CRUD операциями под моделями, её можно кастомизировать до определенного момента, все возможности перечислены на паре страниц в офдоке.
ну так и сделай модель для описание этих связей, если не можешь, то найми тех кто может. А в рамка вопроса на этом сайте, тут можно долго что-то расписывать, не все захотят такое делать, это уже платная работа.
Не нужно. Это я для понимания процессов много букв написал. Я рассчитывал на ответ тех, кто уже подобное делал. Ведь люди же где-то брали информацию (видео-уроки, вопросы или коды). И если бы каждый, кто сталкивался с похожими задачами, скинул ссылки на что-то, с чего можно начать и что-то понять, вот это будет для меня отличным вариантом.
p.s. документацию я читал и видео-уроков много смотрел (благо переводчики работают и по тексту и по звуку в ютубе), но все примеры ограничены простым выбором и нигде не встречал чтобы кто-то показал пример именно под создание контсрукторов с зависимостями. Даже близко ничего подобного не встречал. Тоже самое и про кастомизацию админки. Максимум есть смена интерфейса.
Ведь люди же где-то брали информацию (видео-уроки, вопросы или коды).
ну точно не видео уроки, они только для начинающих, вот это и есть твоя проблема, если для решения этой задачи ты хочешь видео-уроки, то ты ее просто не способен решить.
Вроде любой нормальный программист эту задачу осилит, разбивай на мелкие подзадачи, да в путь.
Everything_is_bad,
У каждого свои мнения. Но я например точно помню, что свой первый проект делал почти 4 месяца после работы по вечерам-ночам. Всё это тянулось бы бесконечно и всё время не было уверенности в правильности.
Потом вышла сразу серия уроков по Django у Молчанова. И посмотрев её я буквально за неделю закончил проект и переделал сразу кучу всего, потому что за несколько часов (а это весь плейлист) у меня сразу в голове сложилось то, что я не мог понять по документации месяцами.
Проблема (на мой взгляд) не в наличии-отсутствии видео-уроков, а в том, что это не моя основная работа. Я не программил в команде, не решал чужие задачи. У меня не было возможности, обсудить в курилке или на обеде что-либо. Команда это сила, скорость и продуктивность. Вот это я считаю моим недостатком, а не наличие-отсутствие видео-уроков.
Максим Зубенко, ну так и в итоге, ты берешься за задачу, которую не способен решить, я понимаю, если бы это был пет-проект, но тут реальный бизнес проект.
Everything_is_bad, нет задачи, которую я не способен решить. Есть задачи с которыми я не сталкивался и поэтому прошу поделиться даже не опытом, а подходом к их решению.
— Поручик, умеете ли Вы играть на фортепьяно?
— Не знаю, не пробовал-с!
я же говорю что это работает для пет-проектов, а тут офигенно "повезло" бизнесу, он будет платить за твое обучение, за твои косяки и ошибки, да еще и большая вероятность вообще получить неработающую систему.
поэтому прошу поделиться даже не опытом, а подходом к их решению.
ну так и сделай модель для описание этих связей
В чем проблема, начать описывать связи? А сюда уже придешь с конкретной проблемой.