ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
( Н И У
« Б е л Г У » )
ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА МАТЕМАТИЧЕСКОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ИНФОРМАЦИОННЫХ СИСТЕМ
РАЗРАБОТКА WEB-ПРИЛОЖЕНИЯ ДЛЯ СИСТЕМЫ ЗАКАЗОВ
НЕФТЕПРОДУКТОВ ООО «ХОРОС»
Выпускная квалификационная работа
обучающейся по направлению подготовки
02.03.02. Фундаментальная информатика и информационные технологии
очной формы обучения, группы 07001301
Петровой Анастасии Александровны
Научный руководитель
к.т.н., доцент
Михелев В. М.
БЕЛГОРОД 2017
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ .............................................................................................................. 3
ГЛАВА 1. ИНФОРМАЦИОННАЯ ПОДДЕРЖКА ООО «ХОРОС» И
НЕОБХОДИМОСТЬ ЕЕ СОВЕРШЕНСТВАНИЯ............................................... 5
1.1 Общая характеристика деятельности организации и её информационная
поддержка ............................................................................................................. 5
1.2 Современные информационные технологии в маркетинговой
деятельности организации оптовой продажи нефтепродуктов .................... 10
1.3 Совершенствование маркетинговой деятельности организации на
основе современных технологий ...................................................................... 15
1.4 Постановка цели и задач ............................................................................. 18
ГЛАВА 2. ПРОЕКТНАЯ ЧАСТЬ РАЗРАБОТКИ WEB-ПРИЛОЖЕНИЯ ...... 20
2.1 Построение моделей системы и разработки технологий реализации .... 20
2.2 Выбор технологий реализации ................................................................... 24
2.3 Проектирование базы данных .................................................................... 28
2.4 Проектирование контуров интерфейсов.................................................... 32
ГЛАВА 3. ПРОГРАММНАЯ ЧАСТЬ РАЗРАБОТКИ WEB-ПРИЛОЖЕНИЯ 37
3.1 Создание web-приложения.......................................................................... 37
3.2 Структура базы данных ............................................................................... 40
3.3 Создание контролера и модулей ................................................................ 43
3.4 Создание представлений ............................................................................. 47
3.5 Создание приложения для администратора .............................................. 50
ГЛАВА 4. ТЕСТИРОВАНИЕ И АПРОБАЦИЯ WEB-ПРИЛОЖЕНИЯ ......... 57
4.1 Тестирование пользовательского контура ................................................ 57
4.2 Тестирование административного контура ............................................... 65
ЗАКЛЮЧЕНИЕ ..................................................................................................... 72
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ............................................. 73
ПРИЛОЖЕНИЕ 1 .................................................................................................. 78
ПРИЛОЖЕНИЕ 2 .................................................................................................. 81
ПРИЛОЖЕНИЕ 3 .................................................................................................. 99
3
ВВЕДЕНИЕ
Нефть - это богатство России. Нефтяная промышленность Российской
Федерации тесно связана со всеми отраслями народного хозяйства и имеет
огромное значение для российской экономики. Сырая нефть, а также
продукты ее переработки являются наиболее ходовым товаром в мировой
торговле. Спрос на неё всегда опережает предложение из-за дефицита нефти.
Так как нефть является не возобновляемым, конечным ресурсом, то в
успешном
развитии
нашей
нефтедобывающей
промышленности
заинтересованы практически все развитые государства мира.
На сегодняшний день ни одна проблема, не волнует человечество так,
как топливо. Топливо – основа энергетики, транспорта, промышленности,
сельского хозяйства. Роль топлива все больше возрастает с научнотехническим прогрессом и развитием топливной промышленности.
Огромную роль играет нефть и в политике. Регулирование поставок
нефти в страны ближнего зарубежья является, по сути дела, важным
аргументом в диалоге с новыми государствами.
В
настоящее
время,
Интернет
является
наиболее
динамично
развивающейся областью информационного обмена. Растущая конкуренция
и избыточность предложений требует четко отработанного механизма
работы с клиентами, что в свою очередь исключает сбои и потерю данных. В
результате чего необходимо создание соответствующего инструментария и
методологии программных средств. Исходя из этого, вытекает актуальность
темы выпускной квалификационной работы.
Объектом исследования являются деятельность ООО «ХОРОС».
Предметом - способы организации системы заказов для нефтепродуктов в
ООО «ХОРОС».
4
Целью работы является информационная поддержка деятельности
отдела продаж и маркетинга.
Для реализации цели необходимо решение следующих задач:
- проведение анализа состояния информационной поддержки ООО
«ХОРОС» в настоящее время;
- проектирование системы заказов при помощи UML-схем;
- проектирование логической и физической схемы базы данных;
- разработка web-приложения для системы заказов нефтепродуктов
ООО «ХОРОС»;
- тестирование и апробация web-приложения.
Структура выпускной квалификационной работы включает в себя:
введение, 4 главы, заключение, список используемой литературы и
приложений.
Первая глава описывает информационную поддержку ООО «ХОРОС»,
необходимость ее совершенствования, характеристику предприятия, а так же
способы совершенствования маркетинговой деятельности организации на
основе современных технологий, постановку цели и задач.
Вторая глава содержит проектную часть разработки web-приложения,
построение моделей системы и разработки технологий реализаций, выбор
технологий
реализации,
проектирование
базы
данных
и
контуров
интерфейсов.
В третьей главе приведена программная часть разработки и создание
web-приложения, создание контролера и модулей, структура базы данных,
создание представлений и интерфейса администратора.
Четвертая глава включает в себя тестирование web-приложения,
пользовательского и административного контура.
ВКР состоит из 77 страниц, содержит 67 рисунков, 5 таблиц,
заключение, список используемой литературы и 3 приложения.
5
ГЛАВА 1. ИНФОРМАЦИОННАЯ ПОДДЕРЖКА ООО
«ХОРОС» И НЕОБХОДИМОСТЬ ЕЕ СОВЕРШЕНСТВАНИЯ
1.1 Общая характеристика деятельности организации и её
информационная поддержка
ООО
«ХОРОС»
специализируется
на
оптовых
поставках
нефтепродуктов на территории РФ с многочисленными государственными и
частными предприятиями, функционирующими в данной отрасли.
ООО «ХОРОС» располагается в Ямало-Ненецком автономном округе.
Компания была основана 9 ноября 2010 года. По организационно-правовой
форме
собственности
компания
является
общество
с
ограниченной
ответственностью.
Юридический адрес ООО «ХОРОС» - Ямало-Ненецкий автономный
округ, посёлок Пурпе, Федеральное шоссе, панель 7. По данному адресу
располагается штат компании, который состоит из функциональных и
специализированных департаментов. Специалисты компании обеспечивают
бюджетные процессы, обеспечивают успешное внедрение передовых
технологий, управленческий учет, систему отчетности, стратегическое и
оперативное
планирование,
проектное
управление,
корпоративное
управление, систему внешних и внутрикорпоративных коммуникаций.
Организационная структура компания состоит из отдельных уровней
управления,
в
которые
входят:
генеральный
директор,
заместитель
генерального директора, начальники отделов, заместитель начальника отдела
[3].
ООО «ХОРОС» имеет линейно-функциональный тип организации по
взаимодействию с подразделениями, это связано с тем, что для крупных
организаций
требуется
равномерно
распределить
обязанности,
для
6
уменьшения нагрузки высшего уровня управления. Данная структура
управления, имеет следующие преимущества:
- хорошо организована система связей подразделений и функций;
- уменьшение нагрузки высшего уровня управления;
- возможность создания штабных подструктур;
- исполнители могут согласовывать свои действия.
В
ООО
«ХОРОС»
можно
выделить
несколько
структурных
подразделений: производственное и функциональное. Задачи управления
реализации горюче-смазочных материалов выполняет производственное
структурное подразделение - отделение оптовой реализации нефтепродуктов,
которое включает себя эксплуатацию офисного здания, склада и участок
автотранспорта.
Функциональное подразделение реализует определенные функции
управления в организации, такие как: отдел рекламы, бухгалтерия, отдел по
работе с персоналом, юридический отдел, коммерческий отдел, технический
отдел, отдел маркетинга.
Задачей отдела маркетинга является проведение мероприятий в сфере
маркетинговых коммуникаций, к которым можно отнести сбор информации,
проектирование рекламной компании, размещение рекламы [16].
Реализацией политики компании в области управления персоналом,
системы оценки, профессионального обучения персонала и кадрового
документооборота включает в себя отдел по работе с персоналом.
Юридический отдел занимается подготовкой к заключению договоров,
принимает участие в переговорах с контрагентами предприятия и отстаивает
интересы организации в установленном законодательством порядке.
За финансовые планы организации, договоры с поставщиками и
потребителями, хранение и сохранность отвечает коммерческий отдел. Так
же коммерческий отдел занимается поиском контрагентов и реализацией
нефтепродуктов.
7
Функциями
технического
отдела
обеспечение
эффективности
проектных решений, контроль над расходованием и использованием
электроэнергии и участие в общем планировании деятельности предприятия
[15].
Отдел маркетинга предполагает наличие в нем нескольких сотрудников
отдела, в котором обязанности между ними разбиваются следующим
образом:
- специалист отдела по оптовым продажам, занимающийся реализацией
светлых нефтепродуктов;
- специалист по оптовым продажам, занимающийся реализацией
прочих нефтепродуктов;
- отдел работы с потребителями;
- специалист отдела рекламы и стимулирования сбыта.
Цель информационной поддержки бизнеса заключается в создании
дополнительных
рекламно-информационных
каналов.
Это
позволяет
упростить коммуникацию с постоянными или потенциальными клиентами,
формирует
положительный
имидж
компании
как
организации,
использующей современные технологии. Концепция заключается в создании
web-приложения, которое включает в себя данные о компании, ее товарах,
услугах и ценах [19].
Тактика ООО «ХОРОС»
развития заключается в достижении
лидирующего места на российском рынке нефтепродуктов, несмотря на
снижение
потребительской
способности
и
увеличение
конкурентоспособности.
К основным видам деятельности ООО «ХОРОС» относится продажа,
транспортировка и хранение светлых и темных нефтепродуктов. Помимо
этого организация занимается:
- проведением анализов и установления качества нефтепродуктов;
- хранением нефтепродуктов контрагента;
8
- транспортировкой нефтепродуктов: железнодорожной цистерной автотранспортным средством.
Поставщиком нефтепродуктов для ООО «ХОРОС» является: Омский
нефтеперерабатывающий
завод,
Сургутский
завод
по
переработке
конденсата, Антипинский нефтеперерабатывающий завод, Оренбургский
нефтеперерабатывающий завод
Потребителями ООО «ХОРОС» являются юридические лица, с
которыми
компания
обязательно
заключает
договор
купли-продажи
нефтепродуктов и соответствующие ему приложение к договору. В
приложении указывается ответственность обеих сторон, базис поставки, цена
заказа, объём, базис отгрузки и сроки [23].
ООО «ХОРОС» реализует следующие виды светлых и темных
нефтепродуктов:
- бензин АИ-95, автомобильный экспортный неэтилированный;
- бензин АИ-92, автомобильный экспортный неэтилированный;
- бензин АИ-96, автомобильный экспортный неэтилированный;
- бензин АИ-98, автомобильный экспортный неэтилированный;
- дизельное топливо летнее ДТ-Л-55-К5;
- дизельное топливо зимнее ДТ-З-К4;
- керосин осветительный КО-20;
- моторные масла марки Paroil;
- битум дорожный АБ-5Д;
- битум дорожный БНД;
- не моторные масла;
- мазут ТКМ - 16;
- гудроны.
По желанию клиенты могут самостоятельно забрать горюче-смазочные
материалы, если имеются автоцистерны и разрешение на перевозку
взрывоопасных грузов.
9
Для правильной работы системы товарных потоков важна разработка и
создание автоматизированной информационной системы, позволяющей
компаниям своевременно решать целый ряд задач, включающий в себя
стратегический и оперативный маркетинг. Структура информационной
системы содержит в себе не только средства массовой информации, но и
электронные порталы разнообразной направленности по видам товаров и
услуг.
Отсюда следует то, что при помощи информационной поддержки
организации нужно предусмотреть решение таких задач как: оптимизация
имеющейся информационной инфраструктуры, ее развитие в будущем с
помощью применения современных информационных технологий [41].
Организации широко использует информационные технологии на
предприятии, такие как:
- компьютеры;
- телекоммуникационное оборудование (ADSL модемы);
- печатное оборудование (лазерный и струйный принтер);
- другое оборудование (сканер, устройство бесперебойного питания).
Кроме того, в компании используется ряд программных средств,
которые обеспечивают информационную поддержку.
Подробное описание программных средств использующихся в ООО
«ХОРОС»:
- Windows 10 - операционная система.
- Google Chrome - браузер для работы в сети Интернет;
- Skype – программное обеспечение для установки текстовой,
голосовой и видео связи через Интернет между компьютерами;
- «Контур-Экстерн» - бухгалтерская отчетность в ФНС, ПФР, ФСС,
Росстат, РАР и РПН;
- «1С:Бухгалтерия» - это универсальная бухгалтерская программа;
В компании не установлена локальная сеть, поскольку необходимость в
ней не возникала.
10
1.2 Современные информационные технологии в маркетинговой
деятельности организации оптовой продажи нефтепродуктов
Под нефтепродуктами понимаются совокупность смесей углеводов, в
том числе индивидуальные химические соединения, которые являются
продуктом нефти и нефтяных газов. В свою очередь нефтепродукты
разделяются на светлые (бензин, керосин, дизельное топливо) и темные
(мазут, битум) [50].
Для продвижения организации оптовой продажи нефтепродуктов
необходимо внедрение информационных технологий в маркетинговую
деятельность. Благодаря их использованию в менеджменте можно в
значительной степени увеличить прибыль предприятия за счет расширения
целевой аудитории
В организациях маркетинг используется для расширения клиентской
базы, и выступает как информационная система, координирующая не только
внешнюю и внутреннюю деятельность предприятия, но и рассматривающую
взаимодействие субъектов, которые имеются в системе услуг и продажи
товаров.
Основной
удовлетворение
целью
интересов
маркетинговой
потребителей
и
деятельности
заключение
является
с
ними
долговременных отношений [42].
Фирмам, которые хотят закрепиться на российском рынке, не обойтись
без плана маркетинговой деятельности. Данная разработка включает в себя
выбор стратегии, а также ее структуры для увеличения большего охвата
целевой аудитории. Для выбора стратегии необходимо проанализировать
маркетинговую среду компании.
Под маркетинговой средой компании подразумевается совокупность
сил и активных субъектов, которые действуют за рамками фирмы,
воздействующие на отдел маркетинга и его руководство в отношениях с
клиентами и последующего их сотрудничества [6].
11
В деятельности любого предприятия главное значение занимает
розничная и оптовая торговля товарами и предоставление услуг.
Под розничной торговлей в данном случае понимается деятельность,
направленная на продажу товаров и предоставление услуг конечным
покупателям для их использования.
Под оптовой торговлей понимается деятельность, направленная на
продажу товаров и предоставление услуг конечным пользователям для их
последующей перепродажи или использования. Данная торговля влияет на
экономическую
политику
между
регионами,
а
также
предполагает
дальнейшие пути развития продажи товаров и предоставление услуг [13].
Оптовый дистрибьютор принимает следующий ряд решений в
торговле, по следующим течениям:
- определение целевой аудитории с учетом масштабов закупок, типов
оптовых покупателей и необходимости в предоставление дополнительных
услуг;
- проектирование торгового ассортимента;
- ценообразование, удовлетворяющее требованиям потребителей;
- поддержка партнерских отношений и продвижение фирмы;
- прием, обработка и хранение товаров, формирование заказов и их
последующая доставка.
Среду компании можно разделить на макросреду и микросреду [7].
Микросреда - это внутренняя среда, которая тесно связана с деятельностью
фирмы
оказывающая
воздействие
на
взаимосвязь
с
посредниками,
конкурентами, поставками и поставщиками, а так же с потребителями.
Данные о структуре микросреды представлены на рис. 1.1.
12
Рис. 1.1. Структура микросреды
Макросреда - это внешняя среда, которая подразумевает независимость
от деятельности предприятия факторов, но влияющая на внутреннюю
маркетинговую среду [8].
Данные о структуре макросреды представлены на рис. 1.2.
Рис. 1.2. Структура макросреды
Научно-технические факторы, связанные с компьютерной техникой,
предполагают
радикальные
изменения
структуры
маркетинговой
деятельности, его порядков, а также процесс документооборота, поиска
необходимой информации, ее хранения и обработки [9].
Его субъектами могут быть:
- маркетинговые информационные системы (межгосударственный и
региональный
информационный
центр,
отраслевые
информационные
системы в маркетинге и геоинформационные системы в маркетинге);
13
- средства программного обеспечения и автоматизация маркетинга
(автоматизация документооборота, маркетинговая автоматизация, система
управления взаимоотношениями с клиентами и маркетинговая разведка);
- маркетинг в социальных сетях (мониторинг социальных сетей,
тизерная реклама и продвижение в социальных сетях);
- мобильный маркетинг (голосовые интерактивные серверы, smsсерверы и беспроводные протоколы передачи данных);
- интернет маркетинг (маркетинговые исследования в Интернет,
поисковая оптимизация в продвижении, e-mail маркетинг, вирусная и
контекстная реклама).
На
рис.
1.3
выделены
рассмотренные
факторы
развития
информационного маркетинга.
Рис. 1.3. Основные направления развития информационного маркетинга
Внедрение методов информационного маркетинга происходит в
различных
направлениях.
Такие,
как:
отраслевые,
национальные
межгосударственные направления [25].
К информационным технологиям в маркетинге относятся:
и
14
- компьютеры и периферийные устройства (средства ввода и вывода);
- устройства для преобразования аудио и видеоинформации;
- устройства передачи данных (сеть Интернет и средства связи –
телефон, факс, спутниковое телевидение и радио);
- программные средства (языки программирования и операционные
системы).
Одним из самых новых направлений в маркетинговой деятельности
является интернет-маркетинг. Интернет маркетинг, представляет собой
комплекс мер по реализации предоставляемых продуктов и услуг на рынке с
помощью сетевых технологий Интернет.
С появлением Интернета информационные технологии достигли своего
максимального развития. Сегодня множество компаний активно используют
интернет технологии для бизнеса и постепенно отказываются от стандартных
методов ведения деятельности, постепенно переводя основные ресурсы в
виртуальный сегмент. Аналитики фиксируют ежегодное увеличение бизнеса
через всемирную паутину [45].
Преимущества онлайн технологий перед традиционными способами
ведения бизнеса:
- привлечение целевой аудитории;
- возможность быстрого поиска и предоставления необходимой
информации;
- продвижение компании, а также товаров и услуг, которые она
производит или предоставляет;
- выход на другие рынки сбыта и обмен опытом;
- отсутствие каких-либо территориальных ограничений.
По своей сути информационные технологии нового поколения
представляют собой первоначальную идею (текстовая, графическая или
звуковая информация), которая посредством сети Интернет и необходимого
оборудования становится доступной для потенциальных клиентов компании.
15
1.3 Совершенствование маркетинговой деятельности организации
на основе современных технологий
Для совершенствования маркетинговой деятельности организации был
выбран интернет маркетинг. Маркетинг в Интернете существенно отличается
от традиционной маркетинговой деятельности. Такому виду маркетинга
присущи
следующие
преимущества:
интерактивность
(прямое
взаимоотношения с покупателями), таргетирование (выделение целевой
аудитории) и web-аналитика (действия привлекающие посетителей на сайты
и блоги) [2].
Как и в других видах маркетинга, в нем можно выделить основные
составляющие, такие как:
- продукты (услуги) которые будут продвигаться на рынке;
- цена, для формирования конкурентоспособности компании;
- место, где будут продаваться продукты и услуги (сайт или блог
компании);
- конверсия, превращение потенциальных клиентов в постоянных;
- продвижение, в том числе стратегии и планы для увеличения уровня
продаж на рынке, а так же привлечение целевой аудитории.
Интернет маркетинг является самым молодым видом маркетинговой
деятельности, которую используют как крупные, так и мелкие компании [46].
Маркетинг решает большое количество задач, непосредственно с
помощью мобильных телекоммуникаций, так как они не привязаны к одному
конкретному месту [38]. Гибкие и надежные онлайновые системы и сервисы
являются инструментами интернет маркетинга. Без использования интернет
инструментов невозможно продвинуть товар в сети Интернет.
Возможности использования интернет маркетинга представлен на рис.
1.5.
16
Рис. 1.5. Возможности использования Интернета в системе маркетинга
предприятия
К инструментам интернет-маркетинга относятся: web-сайт или блог,
web–аналитика, SEO или поисковая оптимизация, интернет реклама, e-mail
маркетинг или директ-маркетинг, реклама в социальных сетях, вирусный
маркетинг [18].
Web-сайт
(блог)
–
это
площадка, где подробно
описывается
информация о компании, ее товарах и услугах. Данная площадка позволяет
пользователям не только подробно изучить товар, но и заказать его.
Web–аналитика, подразумевает собой сбор и анализ информации о
пользователях площадки, их действия с целью усовершенствования сайта.
Таким образом, можно увидеть, что надо улучшить, что удалить, а что
добавить. Существуют несколько сервисов web–аналитики: Google Analytics
и Яндекс.Метрика [4].
После создания сайта и применения аналитики, происходит поисковая
оптимизация (иначе SEO). Основной целью SEO является создание сайта
17
видимым
для
поисковых
систем.
Содержание
SEO-продвижения
представлено на рис. 1.6.
Рис. 1.6. Содержание SEO-продвижения
Е-mail
маркетинг
(директ-маркетинг)
–
личные
рассылки
по
электронной почте уже имеющимся клиентам.
Маркетинг в социальных сетях (форумы, чаты, социальные группы и
тематические сообщества) является одним из инструментов интернет
маркетинга, для размещения рекламы на сторонних платформах [5].
Воздействие на продвижение товаров и услуг за счет постоянных
клиентов
или
заинтересованных
лиц,
которые
выступают
в
роли
передатчиков, является вирусным маркетингом.
Интернет-бизнес является проекцией реального бизнеса. Выбор
подходящего инструмента интернет маркетинга зависит от выбранного
товара или услуги, а так же от бюджета фирмы.
Создание своего сайта и последующее его развитие с целью заработка в
настоящее время является одним из самых распространенных видов онлайн
бизнеса.
Web-сайт включает ряд дополнительных услуг, которые предоставляют
компании доступ к коммуникационным службам. К особенностям этих
служб можно отнести получение необходимой информации, предпродажную
18
политику товаров и услуг. Наличие сайта повышает эффективность
проводимой рекламной компании предприятия. Кроме этого можно
фиксировать поведение посетителей сайта, наиболее интересующие их
товары и услуги, что в будущем поможет улучшить маркетинговую
деятельность
компании,
а
так
же
ее
продвижение
на
рынке
и
конкурентоспособность [11].
В маркетинге сайт представляет собой информационные модули и
инструменты для взаимодействия с клиентами. Компания сама выбирает,
какая информация должна быть размещена на их сайте и какие виды услуг
будут предоставлены.
На предприятии ООО «ХОРОС» используются только традиционные
виды маркетинга, такие как газета и телевидение, поэтому было принято
решение о создании дополнительной услуги, используя интернет маркетинг.
Инструментами для реализации данной задачи были выбраны web-сайт (webприложение) для реализации товара на российском рынке и увеличение
сбыта.
1.4 Постановка цели и задач
После анализа маркетинговой деятельности ООО «ХОРОС», было
принято создание дополнительной услуги - web-приложения.
Целью услуги является информационная поддержка деятельности
отдела продаж и маркетинга.
Для реализации цели необходимо решение следующих задач:
- проведение анализа состояния информационной поддержки ООО
«ХОРОС» в настоящее время;
- проектирование системы заказов при помощи UML-схем;
- проектирование логической и физической схемы базы данных;
- разработка web-приложения для системы заказов нефтепродуктов
ООО «ХОРОС»;
19
- тестирование и апробация web-приложения.
Реализация данных задач поможет улучшить следующие аспекты
организации:
- поддержка новых связей на рынке сбыта, а так же сохранение старых
связей;
- распространение информации о компании, ее товарах и услугах;
- круглосуточный доступ к товарам и предоставляемым услугам
компании;
- реклама компании в сети Интернет.
В результате использования web-приложения появится возможность
улучшить систему заказов, а так же продвинуть ООО «ХОРОС» на
российском рынке.
20
ГЛАВА 2. ПРОЕКТНАЯ ЧАСТЬ РАЗРАБОТКИ WEBПРИЛОЖЕНИЯ
2.1 Построение моделей системы и разработки технологий
реализации
Представление программной системы на физическом уровне является
не полным без информации о платформе, на которой реализуется
приложение, а также какие инструментальные средства использованы. Для
реализации сложных систем, возникает необходимость в разработке
диаграмм, которые облегчают создание web-приложения [14].
Данная необходимость возникает по следующим рядам причин:
- сложность структуры приложения, которое может реализоваться на
различных видах платформ с доступом к распределенным базам данных, а
так же рациональное размещение на локальной сети для увеличения
производительности системы;
- взаимодействие системы с сетью Интернет – обеспечение защиты и
устойчивости данных, которые зависят от реализации приложения;
-
технологии
доступа
и
управления
данными
использующие
архитектуру «клиент-сервер», для размещения громоздких баз данных в
различных сегментах сети.
Для моделирования диаграмм использует язык графического описания
для объектного моделирования – UML [12].
В языке UML существует целый ряд диаграмм:
- диаграмма вариантов использования (диаграмма прецедентов);
- диаграмма компонентов;
- диаграмма последовательности;
- диаграмма развертывания – представление конфигурации топологии;
21
- диаграмма кооперации - изображаются взаимодействия между
частями композитной структуры или ролями кооперации;
- диаграмма деятельности - показаны действия, состояния которых
описано на диаграмме состояний;
- диаграмма классов - демонстрирующая классы системы, их атрибуты,
методы и взаимосвязи между ними.
Последовательность
действий
системы
(web-приложения)
на
взаимодействия пользователя можно отобразить в диаграмме вариантов
использования. Вариант использования описывает взаимодействие между
автором и системой [24]. Действующие лица (авторы) для данного вида
диаграммы – администратор и клиент. Диаграмма использования для клиента
предоставлена на рис. 2.1.
Рис. 2.1. Диаграммы вариантов использования для клиента
Клиент, зайдя на сайт компании, видит: приветствующую страницу
(главную страницу сайта), страницу с прайс-листом продуктов, описание
деятельности компании, калькуляторы, доставку, личный кабинет и корзину.
Клиент не может редактировать прайс-лист или каталог товаров, а так же
свой заказ, но может просмотреть его (узнать статус заказа).
Администратор добавляет продукты в прайс-лист и редактирует статус
заказов, а так же удаляет их при желании клиента. Заполнение каталогов и
22
информации о транспорте и сотрудниках, так же входит в обязанности
администратора. Диаграмма использования для администратора показана на
рис. 2.2.
Рис. 2.2. Диаграмма вариантов использования для администратора
Для понимания работы web-приложения, необходима диаграмма
компонентов. Диаграмма компонентов – статическая структур приложения,
которая показывает, на какие части разбито приложение и взаимоотношение
между ними [35]. Диаграмма компонентов представлена на рис. 2.4.
Рис. 2.4. Диаграмма компонентов для фреймворка Yii2
Для взаимодействия клиента с программой, понадобится диаграмма
последовательности. Диаграмма последовательности – диаграмма процесса
23
обработки пользовательского запроса web-приложением. Диаграмма
последовательности представлена на рис. 2.5.
Рис. 2.5. Диаграмма последовательности для фреймворка Yii2
Каждая последовательность означает определенный этап обработки
запроса:
- осуществляется запрос и сервер обрабатывает его;
- создается экземпляр приложения и запуск на выполнение;
-
после
обработки
и
запуска,
приложение
имеет подробную
информацию о запросе от request;
- определяется контроллер(PostController) и действия (show);
- создается экземпляр, контролер определяет свойства действия,
передающийся через метод (actionShow) с использованием фильтров;
- действие считывается из базы данных (модель Post);
- подключается представление (view) передовая в него модель;
- получение представления и отображения атрибутов модели;
- подключение виджетов, необходимых представлению;
- представление передается в макет страницы;
- вывод результата пользователю.
24
Для обеспечения нормальной работы web-приложения необходимо
одно
автоматизированное
рабочее
место,
удовлетворяющее
всем
техническим требованиям, а так же один сотрудник, способный к
обслуживанию приложения [20].
К техническим требованиям относятся:
- серверная платформа: Windows 10, Apache, PHP 5, MySQL;
- свободное место на жестком диске не менее 8 Мбайт (в процессе
использования web-приложения размер web- приложения на жестком диске
может меняться, в зависимости от количества загружаемой в него
информации);
-HTML-адаптация (поддержка CSS).
2.2 Выбор технологий реализации приложения
При создании собственного web-приложения, существует множество
элементов, которые входят в успешную реализацию проекта. Одними из них
является хостинг и сервер, на котором располагается проект. Выбирая
данные элементы, нужно исходить из того, что это может повлиять на
востребованность и дальнейшее продвижение на рынке. Хостинг и сервер
должны
стабильно
работать,
чтобы
клиент
мог
в
любое
время
воспользоваться web-ресурсом. Исходя из этого, следует внимательно
изучить варианты, не только уделяя внимание стоимости, но и качеству
работы, объёму дискового пространства, технической поддержке и набору
технических функций и инструментов [27].
Список самых востребованных локальных серверов для web-сайтов:
- XAMPP - это бесплатный локальный сервер с готовым комплектом
web-сервера.
В
базовый
комплект
входит:
Apache,
MySQL,
PHP
(поддерживает PDF), Miniperl, SQLite, OpenSSL, phpMyAdmin и Ming.
Поддерживает работу в системе Windows, Solaris, Mac OS X и Linux;
25
- Denwer - это бесплатный локальный сервер для тестирования сайтов,
web-приложений, а так же Интернет страниц. В базовый пакет сервера
входит: инсталлятор, Apache(поддержка SSL и SSI), PHP (поддержка GD,
MySQL, sqLite) и phpMyAdmin (система управления MySQL через webинтерфейс). Минус сервера в том, что он работает только на операционной
системе Windows;
- AppServ - сборка web-сервера, в который входят следующие
составляющие: Apache, MySQL, PHP, phpMyAdmin и другие пакеты
расширения (установка отдельно от сервера). Сервера работает только на
операционной системе Windows;
- VertigoServ - это высокопрофессиональный и простой в установке
набор, состоящий из Apache, PHP, MySQL, SQLite, SQLiteManager,
PhpMyAdmin и Zend Optimizer для платформы Windows.
Для реализации выпускной квалификационной работы был выбран
локальный сервер XAMPP. Для установки данного сервера необходимо
выбрать операционную систему и скачать пакет XAMPP Windows v.7.0.16. В
данный пакет входит:
- Apache 2.4.25 – web-сервер с поддержкой SSI и SSL;
- MariaDB 10.1.21 – ответвление от системы MySQL;
- PHP 7.0.16 – с поддержкой GD, MySQL, SQLite;
- phpMyAdmin 4.6.5.2 – панель для администрирования базы данных;
- OpenSSL 1.0.2 – криптографический пакет, для работы с кодом SSI и
SSL;
- XAMPP Control Panel 3.2.2 – система управления запуска и
завершения;
- Webalizer 2.23-04 - прикладная программа на основе файлов
регистрации событий web-сервера генерирующая HTML-страницы со
статистикой о работе web-сайта;
- Mercury Mail Transport System 4.63;
- FileZilla FTP Server 0.9.41 – сервер для поддержки запросов FTP;
26
- Strawberry Perl 7.0.56 Portable – ядро интерпретатор.
Системные требования: Windows 2008, 2012, Vista, 7, 8 (Important: XP
or 2003).
Как у любой системы, у XAMPP есть преимущества и недостатки. К
преимуществам относится: легкая установка, удобный FTP-клиента FileZilla
(резервное копирование), включение языков программирования, подсчет
данных, а так же то, что сервер является бесплатным. К недостаткам: пакет
имеет большой объём и нет русского интерфейса.
Еще
одним
элементом
разработки
является
выбор
языков
программирования который зависит от того какая задача поставлена.
Самыми распространёнными для создания web-приложения являются:
HTML, PHP, Python, Ruby, ASP, JavaScript и Perl.
В разработке будут использоваться следующие языки: HTML, CSS,
PHP и JavaScript.
HTML - это теговый язык разметки документов, который является
основой всех сайтов [27].
CSS - формальный язык описания внешнего вида документа,
написанного с использованием языка разметки.
Php - язык программирования с открытым исходным кодом, который
сконструирован специально под web-разработки. Так же его можно внедрять
в HTML.
JavaScript - язык программирования, для манипуляций со страницей
(создание HTML тегов, обработка действие периферийных устройств ввода,
AJAX технологии и cookie).
Для того чтобы не писать сайт на «чистом» языке используются
фреймворки. Фреймворк – программная платформа, состоящая из библиотек,
инструментов и интерфейсов, облегчающие и ускоряющие разработку
приложения. Данная платформа может быть изменена с помощью
редактирования пользовательского кода.
27
Преимущества
использования
фреймворков
по
сравнению
с
написанием программ (приложений) на «чистом» языке: уменьшение
времени разработки, стабильность приложения, а так же его надежность.[39]
Выбор фреймворка довольно разнообразен, существуют фреймворки не
только для PHP, но и для различных программных обеспечений. Фреймворки
для PHP: Yii 2 framework, Laravel, Zend Framework 2, SYMFONY 2.
Так же существуют фреймворки на других языках программирования,
такие как: Ruby on Rails (Ruby), Django (Python), .NET Framework (C#),
Node.js (JavaScript).
Поддержка баз данных PHP-фреймворками представлена в табл. 2.1.
Таблица 2.1
Поддержка баз данных
Фраймворк
Поддерживаемые
базы данных
YII 2
MySQL
SQLite
Microsoft BI
Oracle
PostgreSQL
MongoDB
LARAVEL
MySQL
PostgreSQL
SQLite
Redis
Microsoft BI
MongoDB
Zend Framework 2
MySQL
MariaDB
Oracle
IBM DB2
Microsoft SQL
PostgreSQL
SYMFONY 2
MySQL
SQLite
Microsoft BI
Oracle
PostgreSQL
MongoDB
Для реализации был выбран Yii 2 framework, так как он прост в работе
и служит написанию безопасного кода. Yii - это высокоэффективный PHPфреймворк для быстрого и надежного проектирования web-приложения.
Подобно большинству других PHP-фреймворков, Yii — это MVCфреймворк. К преимуществам данного фреймворка относятся: стандартные
способы решения задач (проверка форм и безопасность), уменьшение
времени на создание проекта, высокая производительность кода и гибкость
(возможность использования класса и библиотек сторонних ресурсов). К
недостаткам же относятся: высокая стоимость разработки, отсутствие
административного модуля, а так же вес готового кода нагружает сервер.
Системные требования необходимые для работы с Yii 2:
- web-сервер с PHP не позднее версии5.1;
- Apache HTTP server;
28
- операционная система Windows или Linux.
Web-приложение – это код, который преобразуется в визуальную часть
сайта. Для удобства его редактирования существуют специальные текстовые
редакторы. Популярные редакторы размещены в таблице, по следующим
критериям: цена (б/п - бесплатный), операционная система, кодировки и
возможности. В табл. 2.2 представлены наиболее используемые текстовые
редакторы.
Таблица 2.2
Текстовые редакторы и их конфигурации
Текстовый
редактор
Блокнот
Windows
Цена
б/п
Операционная
система
Windows
Notepad++
б/п
Windows
TextPad
32$
Windows
jEdit
б/п
Windows, Mac
OS X, OS/2,
Unix, VMS
Кодировки
Возможности
Unicode
Win 1251
DOS 866
Win 1251
DOS 866
KOI8-R
Unicode
Win 1251
DOS 866
Unicode
Win 1251
DOS 866
KOI8-R
Быстрая вставка даты и времени,
часть операционной системы
Открытие нескольких документов
в одном окне, нумерация строк,
подсветка синтаксиса, быстрая
вставка даты и времени
Открытие нескольких документов
в
одном
окне,
подсветка
синтаксиса.
Открытие нескольких документов
в одном окне, нумерация строк
Для проекта выбран Notepad++. Notepad++ - свободный текстовый
редактор на Windows, с функцией подсветки синтаксиса (CSS, HTML, Java,
JavaScript, PHP, SQL и другие), с открытым кодом, нумерацией строк и всех
необходимых функций. В редакторе можно сохранять текс в формате .txt, .rtf,
.php, .html и другие
2.3 Проектирование базы данных для web-приложения
Одним из важных аспектов создания web-приложения, является база
данных. База данных – это информация, объединённая по общему признаку,
используемая
прикладными
программами,
для
удовлетворения
29
информационной потребности пользователей или организации. Создание
базы данных, ее обработка, редактирование, а так же поиск и фильтрация
данных осуществляется с помощью системы управления базами данных –
СУБД [1].
К основным функциям СУБД относятся:
- сохранение, извлечение редактирование и хранение данных;
- безопасность и целостность данных;
- журнализация (запись данных обо всех изменениях СУБД), резервное
копирование и восстановление БД после сбоев;
- управление транзакциями (управление последовательность операций);
- управление безопасностью (правила доступа);
- поддержка языков баз данных (SQL);
- производительность.
СУБД классифицируются по следующим параметрам:
- по модели данных (иерархические; реляционные, гибридные и
объектно-ориентированные);
- по степени распределенности (распределенные и локальные);
- по способу доступа к БД (файл-серверные, клиент-серверные и
встраиваемые СУБД);
-
по
характеру
использования
(многопользовательские
и
персональные).
В Web-приложениях, обычно, используются реляционные базы
данных. Реляционная база данных – это модель данных, построенная на
взаимосвязи таблиц (отношений). Основные части, входящие в реляционную
модель: структурная часть (набор таблиц), целостная часть (отношения,
отвечающие за определенные условия целостности сущности и целостности
ссылок) и манипуляционная часть (реляционная алгебра и исчисления исчисление доменов и исчисление предикатов.) [21].
Достоинства реляционной СУБД: простота и доступность, строгие
правила проектирования и полная независимость данных. К недостаткам
30
реляционной модели относятся: трудность понимания структуры данных при
большом количестве таблиц, БД занимает относительно много внешней
памяти и низкая скорость доступа к данным. Примерами реляционных СУБД
являются: MySQL, PostgreSQL, Access, Clarion, и Oracle. Наиболее
распространенными являются MySQL и PostgreSQL, за счет открытого кода.
MySQL — свободная реляционная система управления базами данных
[10]. Данная СУБД имеет ряд преимуществ: высокая производительность,
гибкая система авторизации (привилегии и пароли), встроенные библиотеки,
многоплатформеность (Linux, Mac OS X, Windows) и поддержка транзакций
(механизм
InnoDB.).
MySQL
СУБД
является
бесплатной
системой.
Недостатками MySQL являются: ограничения функционала и медленная
разработка.
PostgreSQL – полноценная SQL СУБД, имеющая единый движок.
PostgreSQL отличается от других СУБД тем, что обладает объектноориентированным функционалом, в том числе полной поддержкой концепта
ACID. Преимущества PostgreSQL: полная SQL-совместимость, поддержка
сторонними организациями и расширяемость. Недостатки PostgreSQL:
интеграция, сложные процедуры и хостинг.
Проектирования
базы
данных
включает
три
проектирования:
инфологическое,
даталогическое
проектирование.
Инфологическое
(концептуальное)
основных
и
вида
физическое
проектирование
подразумевает создание концептуальной модели для фирмы. На данном
этапе проводится тестирование на соответствие и корректировка базы, а так
же осуществляется сбор информации для логического проектирования.
Даталогическое (логическое) проектирование – создание логической
схемы базы данных, на основе концептуальной части, путем удаления связей
и удаления множественных атрибутов. Здесь выбирается модель базы
данных, указываются первичные ключи, создается диаграмма сущностьсвязь, ограничения для доменов атрибутов и целостность сущностей (PK не
может быть NULL). Размещение данных в таблицы производится так, чтобы
31
каждая таблица была нормализована, то есть соответствовала третьей
нормальной форме.
Даталогическая схема представлена на рис. 2.6.
Рис. 2.6. Даталогическая схема базы данных
Нормализация
-
процесс
уменьшения
избыточности
данных
(информации) в базе данных. Нормализация осуществляется с помощью
проверки таблиц на соответствие ряд условий входящих в три уровня
нормализации:
- первая нормальная форма (1НФ) подразумевает, что каждое поле
таблицы базы данных было неделимым и не содержало повторений (поля,
имеющие одинаковые по смыслу значения);
- вторая нормальная форма (2НФ) – это 1НФ, в которой все поля
таблицы зависят только от первичного ключа и исключают избыточность
ключей;
- третья нормальная форма (3НФ) - 2НФ в которой нет транзитивных
зависимостей между не ключевыми полями и все не ключевые атрибуты
взаимно не зависимы.
Физическое проектирование – создание схемы базы данных для СУБД
в 3НФ. Сюда входят: ограничения на наименование объектов, определение
ключей (внешних и первичных) анализ транзакций, выбор файловой
32
организации, определение к дисковому пространству и определение
индексов (быстрый поиск) для основных отношений. Так же определяется
имя, тип и размер поля. Физическая схема представлена на рис. 2.7.
Рис. 2.7. Физическая схема базы данных
Для выпускной квалификационной работы была выбрана реляционная
СУБД MySQL с клиент-серверным доступом к базе данных. А так же для
упрощения работы с базами данных MySQL устанавливается специальный
набор скриптов phpMyAdmin. phpMyAdmin представляет интуитивный webинтерфейс для управления базами данных MySQL.
2.4 Проектирование контуров интерфейсов
Интерфейс – это различные вкладки, сервисы и прочие возможности
web-приложения, то есть совокупность инструментов и программных
продуктов, а так же удобная эксплуатация и навигация на страницах.
Проектирование интерфейсов состоит из нескольких этапов.
Этапы в проектирования – это ряд мер, которые предпринимаются при
создании контура. При создании web-приложение нужно учитывать не
только красоту дизайна, но и его удобность. В этапы проектирования входят:
- анализ целевой аудитории;
- создание структуры контура;
33
- дизайн контура;
- тестирование.
При создании web-приложения были реализованы два контура:
пользовательский и административный контур
Пользовательский контур - осуществляет взаимодействие приложения
(сайта) с пользователем, с помощью систем правил и средств. Контур состоит
из ряда php-страниц, объединённых между собой с помощью ссылок.
Основные
страницы
web-приложения:
главная
страница,
нефтепродукты, прайс-лист, калькуляторы и о нас.
Главная страница web-приложения – это стартовая площадка для
навигации по сайту, а так же лицо маркетинговой деятельности компании
[37].
Требования к главной странице:
- небольшой размер;
- удобность навигации;
- дизайн (страница не должна быть серой и невзрачной).
Стартовая
страница
содержит
панель
гиперссылок
(навигации)
находящиеся вверху страницы, для перемещения по сайту, так же здесь
находится корзина и логотип компании. На рис. 2.8 представлен вид панели
навигации.
Рис. 2.8. Панель навигации
Блок «Корзина» размещен на всех страницах web-приложения, что
позволяет в любой момент ознакомиться с выбранными продуктами. Так же
в данном блоке находится форма для регистрации заказа и поле для
авторизации пользователя, которые хотят изменить заказ или просмотреть
его. Данные зарегистрированного клиента вносятся в базу MySQL
посредством PHP- запроса, после нажатия кнопку «Заказать» [22].
34
Под панелью гиперссылок, размещен слайдер «Реклама» и слайдер
«Ожидание». Внешний вид слайдера «реклама» представлен на рис. 2.9.
Рис. 2.9. Слайдер «Реклама»
В слайдере «Ожидание» находятся данные о новых поступлениях
товара: вид продукта, марка, цена за литр и тонну, а так же время ожидания
(дни, часы, минуты и секунды). Вид слайдера «Ожидание» представлен на
рис. 2.10.
Рис. 2.10. Слайдер «Ожидание»
В нижней части страницы располагается блок «Контактные данные».
Сюда входит: юридический адрес компании, e-mail и телефонный номер для
связи с контактными лицами.
Страница «Нефтепродукты» содержит каталог товаров, которые
предоставляет фирма, а так же позволяет пользователям осуществлять поиск
35
и фильтрацию. На данной странице пользователь может добавить нужные
ему товары в корзину.
Страница «Прайс-лист» хранит информацию о товаре в виде таблицы,
которая содержит: название, марку, паспорт качества, ГОСТ, производитель,
цена за литр и тонну. Так же пользователь может скачать прайс-лист в
формате .xslx при желании.
Калькуляторы
странице,
здесь
используются
можно
пользователями
рассчитать:
стоимость
на
определенной
доставки,
плотность
нефтепродуктов и калькулятор перевода масс и объема.
Так же есть страница «О нас», на которой предоставлена подробная
информация о компании.
Административный контур отделен от публичной части сайта, и
является самостоятельным приложением, написанным на языке HTML(в него
добавлены такие языки как CSS, JavaScript, AJAX, JQuery и PHP) с
использованием СУБД MySQL. Для входа в административную панель
необходимо авторизоваться. Панель авторизации представлена на рис. 2.11.
Рис. 2.11. Кнопка входа в приложение
После авторизации администратор видит главную страницу со
статистикой основного web-приложения (пользовательского интерфейса).
Слева расположена основная панель.
На рис. 2.12 изображена панель административного контура.
36
Рис. 2.12. Панель приложения
В панели находится:
- заказы, здесь находятся таблицы с информацией о клиентах, их
заявках и заказах;
-
каталог,
содержит
таблицы
нефтепродуктов,
производителей,
поставщиков, а также осуществление поставок;
- транспорт, хранит информацию о транспорте;
- сотрудники, содержит информацию о сотрудниках.
В таблицах предусмотрено добавление, редактирование и удаление
данных из таблиц с помощью форм. Администратор так же может
присваивать статус исполнения в таблице заказы, после чего если статус
имеет вид
«выполняется», идет вычет объёма заказа из таблицы
нефтепродукты.
После выполнения всех работ администратор выходит из приложения с
помощи кнопки представленной на рис. 2.13.
Рис. 2.13. Кнопка выхода из приложения.
Приложения
адаптированы
под
любой
экран,
что
позволяет
использовать его не только на компьютере, но и на других устройствах,
таких как планшет [31].
37
ГЛАВА 3. ПРОГРАММНАЯ ЧАСТЬ РАЗРАБОТКИ WEBПРИЛОЖЕНИЯ
3.1 Создание web-приложения
В создание web-приложения используется фреймворк Yii 2 на языке
PHP. Перед написанием приложения на Yii2, необходимо установить Apache,
PHP и MySQL, которые входят в пакет сервера XAMPP. Запустить «Control
Panel» и нажать старт «Apache».
После
запуска
«Apache»,
необходимо
проверить
его
на
работоспособность (прописать в адресной строке localhost). Запустится
страница, показанная на рис. 3.1.
Рис. 3.1. Страница web-сервера
Далее необходимо настроить виртуальный хостинг для дальнейшей
работы. Для настройки в папку xampp/apache/conf/extra/httpd-vhosts.conf
добавляются строки указанные в листинге 3.1.
38
Листинг 3.1. Строки, добавленные в документ httpd-vhosts.conf
#xamp
#httpd-vhosts.conf
##<VirtualHost *:80>
##ServerAdmin webmaster@dummy-host.example.com
##DocumentRoot "C:\MyProjects\site.local\www"
##ServerName site.local
##ServerAlias www.site.local
##ErrorLog "C:\MyProjects\site.local\logs\error.log"
##CustomLog "C:\MyProjects\site.local\logs\access.log" common
##</VirtualHost>
Создается папка в директории «C», с именем «MyProjects», а в ней
папку «site.local». Внутрь помещается еще две папки: «www» и «logs». В
«C:\Windows\System32\drivers\etc\hosts.conf»
дописывается
две
строки
указанные в листинге 3.2.
Листинг 3.2. Строки, добавленные в документ hosts.conf
127.1.0.1 site.local
127.1.0.1 www.site.local
Последним
меняется
файл
Apache(httpd.conf),
находящийся
в
контрольной панели «XAMPP». В него вставляется код указанный в листинге
3.3, после тега </Directory>.
Листинг 3.3. Строки, добавленные в файл Apache(httpd.conf)
DocumentRoot "C:\MyProjects\site.local\www"
<Directory "C:\MyProjects\site.local\www">
## Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
## Note that "MultiViews" must be named explicitly --- "Options All"
# doesn't give it to you.
## The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#Options Indexes FollowSymLinks Includes ExecCGI
## AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#AllowOverride All
## Controls who can get stuff from this server.
#Require all granted
</Directory>
39
Фреймворк устанавливается с официального сайта продукта. После
загрузки пакета, необходимо его разархивировать и поместить в папку
«C:\MyProjects\site.local\www».
Для
правильной
работы
стартового
приложения необходимо изменить строку «'cookieValidationKey' => '',» в
файле
web.php,
находящегося
в
«C:\MyProjects\site.local\www\config»,
прописав в кавычках «md5(‘asdFw42Q’)». Это необходимо для валидации
cookie и исключения ошибки проекта. В результате этих действий стартовая
страница проекта приходит с «localhost» на адрес «http://www.site.local/web/».
Изначально Yii2 имеет два вида шаблона «basic»(упрошенный шаблон)
и «advanced»(продвинутый шаблон, разделен на frontend, backend и console.).
В ВКР используется шаблон «basic» [28].
Basic - пример реализации одиночного приложения (простое). Данная
директория шаблона представлена на рис. 3.2.
Рис. 3.2. Структура шаблона «basic»
Шаблон можно адаптировать под любые проекты, используя HTML и
CSS, а также JavaScript и встроенный AJAX .
40
3.2 Структура базы данных
Следующим шагом является подключение в приложения базы данных.
Это
возможно
сделать
в
конфигурационном
файле
«C:\MyProjects\site.local\www\config\db.php».
Web-приложение использует базу данных стандарта SQL - MySQL.
Большинство баз данных имеют табличную структуру, состоящую из многих
таблиц связанных между собой. В таблице адрес данных определяется
пересечением полей (столбцов) и записей (строк). Поля являются основой
структуру базы данных, а записи – информация в поле. У полей есть
определенные свойства, от которых зависит выбор типа данных, которые
будут внесены в поле и управление этими полями [47].
К свойствам поля можно отнести:
- размер, который отражается символами (кодируются несколькими
байтами, от этого будет зависеть размер вместимости поля);
- имя, так как одна база данных не может иметь двух полей с
одинаковыми именами;
- тип поля (символьный, числовой, дата, время, логический,
примечаний и общего назначения);
- признак того, что поле является первичным ключом таблицы и
уникальность значений поля;
- признак того, что поле является внешним ключом таблицы.
В MySQL существуют определенные права и привилегии:
- управление и изменение данных (SELECT, INSERT, UPDATE,
DELETE и FILE);
- управление структурой (CREATE, ALTER, DROP и CREATE
TEMPORARY TABLES);
- администрирование.
При работе с базой данных MySQL допустимы следующие типы полей,
которые предоставлены в табл. 3.1.
41
Таблица 3.1
Основные типы полей в СУБД MySQL
Тип поля
VARCHAR
TINYINT
TEXT
INT
DATETIME
Диапазон
от 0 до 255 символов
от 0 до 255 символов
максимум 65 535 символов
от -2147483648 до 2147
483647 символов
максимум 9999-12-31
ENUM
количество значений 65535
Характеристика
строковый тип данных
тип целых чисел
стандартный строковый тип данных
стандартный тип целых чисел
дата и время в формате ГГГГ-ММ-ДД
ЧЧ:ММ:СС
описания какого-либо функционала
Администрирование в базе данных занимает особое место в
управлении пользователями и привилегиями. Права представлены в табл. 3.2.
Таблица 3.2
Права в СУБД MySQL
Название
GRANT
SUPER
PROCESS
RELOAD
SHUTDOWN
SHOW
DATABASES
EXECUTE
LOCK TABLES
Описание
создание нового пользователя базы данных
отключение пользователя от соединения с помощью команды kill
просмотр всех соединений пользователей с помощью команды
processlist
работа с файлами журналов и считывать права пользователей
прекращение работы сервера
просмотр всех баз данных
запуск хранимых процедур
блокировка таблицу при соединении определённого пользователя
Конструкция базы данных состоит из трех основных элементов –
сущностей (объектов, таблиц), атрибутов (данные о сущности) и связей.
Сущность - это объект, который может быть идентифицирован и отличаться
от других объектов. У каждой сущности должен быть однозначный
идентификатор (id). Минимальный набор атрибутов – ключ.
Ключ
разделяется
по
ограничению
целостности:
первичный
(ограничение целостности в рамках одной таблицы для однозначной
идентификации) и внешний (ограничение целостности связей нескольких
таблиц) ключ.
42
Связь - это взаимоотношения, установленные между несколькими
сущностями. Существует три разновидности связей между таблицами базы
данных:
-
«один-ко-многим»
-
когда
одной
записи
таблицы
может
соответствовать несколько в другой таблице;
- «один-к-одному» - одной записи в одной таблице соответствует одна
запись в другой таблице,
- «многие-ко-многим» - когда одной записи одной таблицы может
соответствовать несколько записей другой таблицы и наоборот.
После анализа предметной области было создано 14 сущностей
(таблиц). Сущности представлены в табл. 3.3.
Таблица 3.3
Сущности базы данных
Сущность
Oil_product
Manufacturer
Purshase_oil
Delivery
Mark
Caterer
Сontents
Transport
Section_transport
Entry
Shipment
Customer
Kind_transport
Orders_transport
Описание
предлогаемая продукция компании: наличие, обьем в наличии, цена
товара
производители нефтепродуктов, информация о них
закупка нефтепродуктов у поставщиков, информация о поставщиках
компании
поставки, производимые поставщиками компании, дата и номер
договора заключенный с поставщиком
марки нефтепродуктов, количество товара в наличии
поставщики нефтепродуктов
поставке, которая включает себя нефтепродукты, обьем и номер
постащика
транспорт, предоставляемый компанией
секции цистерн транспорта
заказ клиента, товары, которые он выбрал и способ доставки их, а
так же сотрудник отвечающий за реализацию заказа
способы доставки
клиенты компании, информация о них
виды транспорта для перевозки нефтепродуктов
заказ транспорта
Подробная структура сущностей была вынесена в Приложение 1.
43
3.3 Создание контролера и модулей
В Yii 2 framework состоит из двух слоев: контроллеры и слой бизнес
логики, который включает себя слой модулей и моделей данных [30].
Расположение слоев в Yii 2, представлено на рис. 3.3.
Рис. 3.3. Слои Yii 2 framework
Под контроллером в Yii 2 framework понимается экземпляр класса
Controller, отвечающий за обработку запроса и генерирование кода ответа.
Контроллер
создается
объектом
приложения
при
осуществлении
пользователем запроса (GET, POST, консольный ввод). После обработки
запроса происходит анализ входных данных, а затем передача их в нужном
виде модели и представлению. Из моделей результаты помещаются в
представления, и в конечном итоге генерируют исходящие ответы [43].
Действия (action) являются составляющей контроллера и являются
основными блоками, к которым обращается пользователь. Затем происходит
запрос исполнения того или иного функционала. В Yii есть два базовых
класса
контроллеров,
которые
находятся
в
yii\rest:
Controller
и
ActiveController. Данные контроллеры используются для упрощения работы
по созданию действий.
Отличия данных контроллеров - специализация. ActiveController
специализирован на работе с ресурсами, представленными Active Record.
Active Record обеспечивает объектно-ориентированный интерфейс для
44
доступа и манипулирования данными, хранящимися в базах данных. Класс
Active Record соответствует таблице в базе данных, объект соответствует
строке этой таблицы, а атрибут объекта представляет собой значение
отдельного столбца строки [33].
Controller и ActiveController имеют следующие возможности: проверка
HTTP-метода, аутентификация, ограничение частоты запросов, согласование
содержимого и форматирование данных.
ActiveController
предоставляет
следующие
возможности:
набор
действий, авторизация пользователя для запрашиваемых действий и
ресурсов. Набор действий входящих в ActiveController: index (постраничный
список ресурсов), view (возвращает подробную информацию об указанном
ресурсе),
create
(создание
нового
ресурса),
update
(обновление
существующего ресурса), delete (удаление указанного ресурса) и options
(возвращает поддерживаемые HTTP-методы).
Объявление методов действий происходит в классе контроллера.
Метод действия - public метод, имя которого начинается с action.
Возвращаемое значение метода действия представляет собой ответные
данные, которые будут высланы конечному пользователю. На листинге 3.1
представлен код подключения метода действий index.
Листинг 3.1. Метод действия index
public function actionIndex(){
return $this->render('index'); }
Модель - это экземпляр класса CModel или класса, унаследованного от
него. Модель получает подготовленные контроллером данные, обрабатывает
их и возвращает результат. Каждое поле объекта данных представляется
атрибутом модели, который проверяется на корректность, используя набор
правил. Модели располагаются в папке protected/models и называются
аналогично таблице, с которой работают [32].
Создание модели начинается с определения его класса. Код класса
представлен в листинге 3.2.
45
Листинг 3.2. Класс модели Pricelist
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Pricelist extends ActiveRecord{} ?>
После объявления классов создаются модели.
Модели, разработанные для web-приложения:
- LoginForm - для получения данных, вводимых пользователем на
странице аутентификации;
- Pricelist – для получения данных из таблиц «Oil_product», «Mark»,
«Manufacturer» с помощью представления «pricelist» и вывод ее на странице
прайс-лист;
- Dost – для получения данных из таблиц «Transport», «Kind_transport»,
«Selection_cistern» с помощью представления «dost» и вывод ее на странице
доставка;
- Neft – для получения данных из таблиц «Oil_product», «Mark»,
«Manufacturer» с помощью представления «neft» и вывод ее на странице
нефтепродукты;
- Cart – для корзины нефтепродуктов;
- Order – для хранения и обработки информации о заказе;
- SearchForm – для поска по сайту;
- Kalkrast – для вывода данных из таблицы «Transport» в калькулятор.
Модель «LoginForm» наследуется от класса ActiveRecord. Класс
модели «LoginForm» имеет следующие методы:
- rules() – проверка ввода данных;
- validatePassword() – проверка ввода пароля на правильность;
- login() – регистрация пользователя;
- getUse() – поиск пользователя.
В момент, когда пользователь отправляет данные формы, а модель их
получает, необходимо удостовериться, что эти данные корректны, прежде
46
чем их использовать. Это осуществляется посредством проверки данных в
соответствии с набором правил. Правила проверки задаются в методе rules(),
который возвращает массив сконфигурированных правил.
Модель «Pricelist» так же наследуется от класса ActiveRecord. Данная
модель предназначена для вывода данных через представление «pricelist». К
методам модели «Pricelist» относятся:
- find() – проверка ввода данных;
- all() – проверка ввода пароля на правильность;
- render() – регистрация пользователя.
Вызов моделей, прописывается в контроллере «SiteController». В
листинге 3.3 показан вызов модели «Pricelist».
Листинг 3.3. Вызов модели «Pricelist»
public function actionPricelist(){
$pricelist=Pricelist::find()->all();
return $this->render('pricelist', [
'pricelist'=>$pricelist, ]); }
Модели «Neft» и «Dost» имеют аналогичную структуру.
Модель «Cart» включает в себя следующие методы:
- add() - добавление товара в корзину;
- getOrder() - метод должен возвращать модель «Order», в которой в
свою очередь должны быть определены методы с помощью relations методы
возвращающие товары заказа, их количество и общую стоимость;
- delete() - удаление товара из корзины;
- setCount() - должен устанавливать количество единиц товара при
редактировании содержимого заказа на странице корзины;
- status() - получение статуса корзины. Метод должен возвращать
количество товаров в корзине;
- isEmpty() – проверка корзины на пустоту.
Для
реализации
модели
представленный на листинге 3.4.
«SearchForm»
использовался
код,
47
Листинг 3.4. Модель поиска по сайту
<?php
class SiteSearchForm extends CFormModel{
public $string;
public function rules() {
return array(array('string', 'required'));}
public function safeAttributes() {
return array('string',); }}
После создание моделей необходимо создать представления.
3.4 Создание представлений
Преставление
программирования
(view)
PHP,
–
это
состоящий
скрипт,
из
написанный
элементов
на
языке
пользовательского
интерфейса [34].
Представление идентифицируется по файлу скрипта в процессе
рендеринга. Имя представления должно совпадать с названием файла. Чтобы
отобразить представление, необходимо вызвать render(), указав имя
представления. Код отображения представлен на листинге 3.5.
Листинг 3.5. Отображение представления index
public function actionIndex(){
return $this->render('index'); }
Для web-приложение необходимы следующие представления:
- index – главная страница приложения, на которой содержится два
виджета;
- about-us – информация о компании, контактные данные и
расположение офисов;
- benzin – информация о бензине, его характеристика и марки
- cart – представление корзины;
- dizel - информация о дизельном топливе, его характеристика и марки;
- mazut - информация о других видах топлива, его характеристика и
марки
48
- kalk-ob – содержит калькулятор для перевода объема, массы,
стоимости;
- kalk-plot – калькулятор для расчета плотности;
- kalkrast – калькулятор расчета стоимости по расстоянию;
- order – содержит форму для регистрации;
- neft – содержит информацию о продуктах;
- avtoriz – содержит формы регистрации и входа для клиентов;
- pricelist – содержит основную информацию обо все предоставляемых
нефтепродуктов;
- off – содержит заказы пользователя;
- zab – содержит форму для восстановления пароля пользователя по
названию фирмы.
У представлений есть макеты (layout). Они являются специальными
представлениями для декорирования других «view». Макет обычно содержит
части пользовательского интерфейса (меню сайта), общие для нескольких
представлений. Макет применяется при вызове метода render().
По умолчанию в качестве макета используется представление
«protected/views/layouts/main.php». Его можно изменить путём установки
значений
«СWebApplication::layout»
или
«СController::layout».
Для
рендеринга представления без применения макета необходимо вызвать метод
renderPartial().
Виджет (widget) — это экземпляр класса, который содержит некую
внутреннюю логику и представление. Это компонент, применяемый, в
основном, с целью оформления. С помощью виджетов можно отображать
курсы валют, погоду, свежие записи, и многое другое.
Для подключения виджета необходимо выполнить в коде следующие
строки, представленные на листинге 3.6.
49
Листинг 3.6. Подключение виджета
<?php $this->beginWidget('path.to.WidgetClass'); ?>
содержание виджета
<?php $this->endWidget(); ?>
или
<?php $this->widget('path.to.WidgetClass'); ?>
Последний вариант используется, когда виджет не имеет внутреннего
содержимого. Поведение виджета зависит от его начальных значений и
свойств при вызове.
В
web-приложение
используется
виджет
«Breadcrumbs».
Код
представлен на листинге 3.7.
Листинг 3.7. Виджет «Breadcrumbs»
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?> <?= $content ?>
Для работы с виджетом необходимо подключить класс breadcrumbs: use
yii\widgets\Breadcrumbs. Далее задается массив необходимых ссылок и вывод
их цепочки на экран. То есть, если существует параметр «breadcrumbs»,
выводим «breadcrumbs», иначе ни чего не выводим [26].
Как
и
у
контроллера,
у
виджета
может
быть
собственное
представление. По умолчанию файлы представлений виджета находятся в
поддиректории views директории, содержащей файл класса виджета. Эти
представления можно рендерить при помощи вызова CWidget::render() точно
так же, как и в случае с контроллером. Единственное отличие состоит в том,
что для представления виджета не используются макеты. Также следует
отметить, что $this в представлении указывает на экземпляр виджета, а не на
экземпляр контролера.
Полный листинг кода представлен в Приложение 2.
50
3.5 Создание приложения для администратора
Административная панель отделена от основного web-приложения.
Данное решение было принято с целью безопасности пользовательских
данных, разгрузки web-сервера (так как используется только MySQL и PHP, с
использованием JQuery, CSS, HTML и JavaScript), а так же для удобства
добавления, редактирования и удаления записей в таблицах.
PHP– простой скриптовый язык программирования, применяющийся
при создании динамических сайтов. Коды на PHP выполняются на стороне
web-сервера. PHP-код обрабатывается и результате чего генерируется HTMLкод, который возвращается серверу. К преимуществам использования PHP
можно отнести внедрение в код HTML-файлы [29].
Создание web-приложение начинается непосредственно с создания
HTML-шаблона с использованием CSS. Так же необходимо адаптировать
сайт
под
уменьшение
экрана.
На
рис.
3.4
представлен
шаблон
административного интерфейса.
Рис. 3.4. Главная страница интерфейса
После создания шаблона необходимо подключить базу данных MySQL.
Создается файл db.php, в котором будет храниться подключение к базе.
Код файла db.php представлен в листинге 3.8.
51
Листинг 3.8. Подключение базы данных
$host = '127.0.0.1'; // адрес сервера
$database = 'diplom'; // имя базы данных
$user = 'root'; // имя пользователя
$password = ''; // пароль
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " .
mysqli_error($link));//подключение к базе
Для подключения к базе будет использована функция require_once(),
которая будет обращаться к файлу с подключением - db.php и осуществлять
однократное включение. Данная функция должна быть вызвана до какихлибо других функций работы с MySQL, в противном случае может
возникнуть ошибка [49].
Вывод данных таблицы осуществляется при помощи SQL-запросов. На
рис. 3.5 представлен вывод таблицы из MySQL.
Рис. 3.5. Вывод данных из таблицы заказы
Для копирования и преобразования данных из таблицы используется
JavaScript. Код представлен в листинге 3.9.
Листинг 3.9. Вызов функций
var handleDataTableButtons = function() {
"use strict";
0 !== $("#datatable-buttons").length && $("#datatable-buttons").DataTable({
dom: "Bfrtip",
buttons: [{extend: "copy", className: "btn-sm"},
{extend: "excel", className: "btn-sm"}],
responsive: !0})},
TableManageButtons = function() {"use strict"; return {init: function() {
handleDataTableButtons() }}}();
52
На рис. 3.6 представлен вид кнопок для копирования и преобразования
в Excel.
Рис. 3.6. Представление кнопок копирования и преобразования в Excel
Функция "use strict" предназначена для предотвращения ошибок в коде
и включение «строгого режима». В строгом режиме: некоторые ошибки
можно найти быстрее, более опасные и не полезные черты JavaScript либо
запрещены, либо приводят к ошибке [48].
DOM является элементом объектной модели документа, то есть это
любой элемент страницы(i, div, span, h2 и т.д.) представленный в виде
javascript-объекта или средствами библиотеки jQuery. DOM выравнивает все
различия между браузерами, что упрощает написание приложения.
В функции копирования (copy) происходит проверка таблицы на
пустоту и размещение копированных строк с помощью CSS [17].
Внутри функции используются следующие методы:
- appendTo() - вставляет указанное содержимое как последний элемент
в каждом из элементов коллекции jQuery;
- document.queryCommandSupported() – проверка поддержки API;
- table() - отображает все элементы в каждой строке;
- container() – клонирование строк таблицы;
- focus() – фокусирование на элементе;
- select() – выбор элементов;
- execCommand() - предоставляет команды для работы с контентом в
редактируемой области.
Функция excel так же использует ряд методов:
- exportData() – экспорт данных;
- replace() – возвращает новую строку;
- join() - объединяет все элементы массива в строку;
53
- folder() – копирование строк таблицы;
- file() – работа с файлом;
- select() – выбор элементов.
Реализация поиска на страницы осуществляется при помощи PHP,
jQuery и MySQL. Для реализации необходимо прописать функцию. Код
функции представлен в листинге 3.10.
Листинг 3.10. Функция поиска
$(function(){
$(".search_button").click(function(){
var searchString=$("#searh_box").val();
var data = 'search='+searchString;
if (searchString){
$.ajax({type: "POST",url: "do_search.php",data: data, beforeSend:
success: function(html){$("#results").show(); $("#results").append(html)
return false; }); });
После необходимо отрисовать форму поиска. Код отрисовки в листинге
3.11.
Листинг 3.11. Отрисовка поиска
<form method="post" action="do_search.php">
<input type="text" name="search" id="search_box" class="search_box">
<input type="submit" value="Поиск:" class="search_burron">
</form>
Внешний вид формы изображен на рис. 3.7.
Рис. 3.7. Форма поиска
Следующий этап реализации - функция добавления данных в базу
данных. Для реализации возможности добавления и редактирования
информации в предполагаемой системе, необходимо связать действия,
выполняемые как на клиенте, так и на сервере в клиент-серверной модели
приложения.
54
На стороне клиента располагается web-форма, созданная при помощи
языка разметки HTML и CSS. Форма имеет структуру, совпадающую со
структурой таблицы, куда предполагается занесение информации.
На стороне сервера загружен скрипт, выполняющий обработку
принимаемых от формы данных и передающих их в запрос, а далее, к СУБД.
Принимаемая от формы информация попадает в скрипт через глобальный
массив
$_POST[]
и
$_GET[].
После
получения
всей
необходимой
информации, скрипт, используя принятые данные, формирует запрос и
отправляет его к СУБД.
На стороне сервера расположен скрипт (zakazadd.php), производящий
обработку и дальнейшую отправку данных на добавление с помощью метода
$_POST[] для таблицы «Customer». Через форму отрисованную в файле
«zakaz.php».
Реализация добавления представлена в листинге 3.12.
Листинг 3.12. Функция добавления данных в таблицу «Заказы»
$id_customer = $_POST['id_customer'];
$number_customer = $_POST['number_customer'];
$data_accommondation = $_POST['data_accommondation'];
$number_items = $_POST['number_items'];
$id_worker = $_POST['id_worker'];
$id_shipment = $_POST['id_shipment'];
$status_of = $_POST['status_of'];
$data_perfomance = $_POST['data_perfomance'];
$final_amount = $_POST['final_amount'];
$insert_sql = "
INSERT INTO `enty`(`id_enty`, `id_customer`, `number_customer`,
`data_accommondation`, `number_items`, `id_worker`, `id_shipment`, `status_of`,
`data_perfomance`, `final_amount`)
VALUES (NULL, '{$id_customer}', '{$number_customer}', '{$data_accommondation}',
'{$number_items}', '{$id_worker}','{$id_shipment}', '{$status_of}', '{$data_perfomance}',
'{$final_amount}')";
$result = mysqli_query ($link, $insert_sql );
Редактирование происходит с помощью двух методов, сначала
проверяется
передана
ли
переменная
на
редактирование,
а
затем
обновляются двнные. Функция редактирования представлена в листинге 3.13.
55
Листинг 3.13. Функция редактирования данных в таблицу «Заказы»
if (isset($_GET['red_id'])) { //Проверяем, передана ли переменная на редактирования
if(isset($_POST['id_customer']) || isset($_POST['number_customer']) ||
isset($_POST['data_accommondation']) || isset($_POST['number_items']) ||
isset($_POST['id_worker']) || isset($_POST['id_shipment']) || isset($_POST['status_of']) ||
isset($_POST['data_perfomance']) || isset($_POST['final_amount'])) {
$sql = mysqli_query($link,
'UPDATE `enty`
SET'.' `id_customer` = " '.$_POST['id_customer'].' ",
'.' `number_customer` = " '.$_POST['number_customer'].' ",
'.' `data_accommondation` = " '.$_POST['data_accommondation'].' ",
'.' `number_items` = " '.$_POST['number_items'].' ",
'.' `id_worker` = " '.$_POST['id_worker'].' ",
'.' `id_shipment` = " '.$_POST['id_shipment'].' ",
'.'`data_perfomance` = " '.$_POST['data_perfomance'].' ",
'.' `final_amount` = " '.$_POST['final_amount'].' ",
'.' `status_of` = " '.$_POST['status_of'].' " '.'
WHERE `id_enty` = '.$_GET['red_id']); }}
На рис. 3.8 представлена форма для добавления данных в таблицу
«Заказы».
Рис. 3.8. Форма добавления в таблицу «Заказы»
По аналогии создана форма для редактирования, на рис. 3.9.
56
Рис. 3.9 Форма редактирование записи из таблицы «Заказы»
Для добавления даты был написан портативный календарь на
JavaScript. Его вид представлен на рис. 3.10.
Рис. 3.10. Календарь
Остальные таблицы сделаны по аналогии с таблицей «Заказы».
Полный
код
web-приложения
находится в Приложении 3.
административного
интерфейса
57
ГЛАВА 4. ТЕСТИРОВАНИЕ И АПРОБАЦИЯ WEBПРИЛОЖЕНИЯ
4.1 Тестирование пользовательского контура
Заходя на сайт, пользователь переходит на главную страницу webприложения. Главная страница представлена на рис. 4.1.
Рис. 4.1. Главная страница
На главной странице находится слайдер с актуальной информацией об
организации. Слайдер представлен на рис. 4.2 и рис. 4.3.
Рис. 4.2. Слайдер о продаже оптом
58
Рис. 4.3. Слайдер о доставке
Отличием от сайтов аналогов, является слайдер об ожидании товара от
поставщика. Слайдер изображен на рис. 4.4.
Рис. 4.4. Слайдер об ожидании товара
В самом низу страницы расположены данные для связи с компанией.
Данные представлены на рис. 4.5
Рис. 4.5. Контактные данные
59
Пользователь может ознакомиться с ценами на товар на странице
прайс-лист, а так же скачать прайс-лист компании. Страница «Прайс-лист»
показана на рис. 4.6.
Рис. 4.6. Прайс-лист нефтепродуктов
Покупку
продуктов
можно
осуществить
на
странице
«Нефтепродукты». Здесь можно добавить нефтепродукт в корзину. На рис.
4.7 представлена страница нефтепродукты.
Рис. 4.7. Страница «Нефтепродукты»
Для просмотра добавленных товаров, необходимо нажать на значок
«Корзина», расположенном в правом верхнем углу. Значок «Корзина»,
изображен на рис. 4.8.
Рис. 4.8. Значок «Корзина»
60
Список добавленных в корзину продуктов и их итоговая цена
представлена на рис. 4.9.
Рис. 4.9. Нефтепродукты в корзине
Здесь можно удалить товар, а так же просмотреть итоговую сумму
выбранных нефтепродуктов.
Подробную информацию можно посмотреть при переходе в корзину.
Информация о выбранных товарах показана на рис. 4.10.
Рис. 4.10. Корзина товаров
Для оформления товара необходимо заполнить форму регистрации или
осуществить вход. Форма регистрации представлена на рис. 4.11.
61
Рис. 4.11. Форма регистрации
С формы регистрации пользователя перекидывает на панель входа.
Вход показан на рис. 4.12.
Рис. 4.12. Форма входа
После входа, пользователь может просмотреть свой заказ. На рис. 4.13
представлен заказ пользователя.
Рис. 4.13. Заказ и состав заказа пользователя
62
Если пользователь забыл пароль, он может его востановить, на вкладке
«Вход». Форма изменения пароля представлена на рис. 4.14.
Рис. 4.14. Востановление пароля
Для просмотра информации о способах доставки нефтепродуктов,
клиент может узнать на странице доставка. На рис. 4.15 представлен
внешний вид страницы.
Рис. 4.15. Страница доставка
Для просмотра информации о компании необходимо перейти на
страницу о нас. Внешний вид страницы представлен на рис. 4.16.
63
Рис. 4.16. Страница о нас
Для пользователей так же есть калькуляторы:
- для расчета стоимости доставки;
- калькулятор расчета плотности;
- калькулятор перевод объема, массы и стоимости.
Калькулятор расчета стоимости доставки представлен на рис. 4.17.
Рис. 4.17. Калькулятор расчета стоимости доставки
Для расчета плотности необходимо:
- найти по паспорту плотность нефтепродукта при +20oС;
- измерить среднюю температуру груза в цистерне;
- определить разность между +20oС и средней температурой груза;
- в табл. 4.1 по графе температурной поправки найти поправку на 1oС,
соответствующую плотность данного продукта при +20oС;
64
-
умножить
температурную
поправку
плотности
на
разность
температур;
- полученное произведение вычесть из значения плотности при +20oС,
если средняя температура нефтепродукта в цистерне выше +20oС, или
прибавить это произведение, если температура продукта ниже +20oС.
Таблица 4.1
Таблица поправок
Плотность при 20oС
Температурная
Плотность при 20oС
поправка на 1oС
0,650-0,659
0,660-0,669
0,670-0,679
0,680-0,689
0,6900-0,6999
0,7000-0,7099
0,7100-0,7199
0,7200-0,7299
0,7300-0,7399
0,7400-0,7499
0,7500-0,7599
0,7600-0,7699
0,7700-0,7799
0,7800-0,7899
0,7900-0,7999
0,8000-0,8099
0,8100-0,8199
0,8200-0,8299
0,000962
0,000949
0,000936
0,000925
0,000910
0,000897
0,000884
0,000870
0,000857
0,000844
0,000831
0,000818
0,000805
0,000792
0,000778
0,000765
0,000752
0,000738
Температурная
поправка на 1oС
0,8300-0,8399
0,8400-0,8499
0,8500-0,8599
0,8600-0,8699
0,8700-0,8799
0,8800-0,8899
0,8900-0,8999
0,9000-0,9099
0,9100-0,9199
0,9200-0,9299
0,9300-0,9399
0,9400-0,9499
0,9500-0,9599
0,9600-0,9699
0,9700-0,9799
0,9800-0,9899
0,9900-1,000
Изображение калькулятора калькулятор расчета плотности
представлено на рис. 4.18.
Рис. 4.18. Калькулятор расчета плотности
0,000725
0,000712
0,000699
0,000686
0,000673
0,000660
0,000647
0,000633
0,000620
0,000607
0,000594
0,000581
0,000567
0,000554
0,000541
0,000528
0,000515
65
Для превода используется калькулятор, представленный на рис. 4.19.
Рис. 4.19. Калькулятор для перевода
Перевод будет зависеть от заполненной меры обьема, в данном
примере заполнено поле тонна.
4.2 Тестирование административного контура
Прежде
осуществить
чем
вход
зайти
в
в
административную
приложение
или
панель,
необходимо
авторизоваться.
Регистрация
представлена на рис. 4.20.
Рис. 4.20. Страница регистрации
66
Если пользователь авторизован, то он осуществляет вход. Форма входа
показана на рис. 4.21.
Рис. 4.21. Страница входа
После авторизации пользователь попадает на главную страницу
приложения. Главная страница приложения представлена на рис. 4.22.
Рис. 4.22. Главная страница вспомогательного приложения
С главной страницы можно перейти по меню на нужную таблицу. В
таблице можно добавлять, редактировать и удалять данные. На рис. 4.23
представлен вид вкладки «Заявки».
67
Рис. 4.23. Таблица «Заявок»
Для добавления, редактирования и удаления, есть специальные кнопки
перехода на формы, которые располагаются возле каждой записи таблицы.
Расположение кнопки показано на рис. 4.24.
Рис. 4.24. Расположение кнопок
Переход на форму добавления происходит с помощью кнопки
добавить, представленной на рис. 4.25.
Рис. 4.25. Кнопка перехода на форму добавления
Добавление осуществляется с помощью формы представленной на рис.
4.26.
68
Рис. 4.26. Форма добавления «Заявок»
В приложение при вводе номера заказа в базе проверяется его
индивидуальность, если номер будет повторен, данные не добавятся. При
выборе данных из «select» происходит так же проверка, если поле пустое, то
выводится сообщение при нажатии на кнопку добавить. Проверка поля
представлена на рис. 4.27.
Рис. 4.27. Проверка ввода поля «select»
Поле «text», проверяется по аналогии с полем «select». На рис. 4.28
показана проверка поля «text».
Рис. 4.28. Проверка ввода поля «text»
69
После проверки ввода данных происходит добавление данных в
таблицу. На рис. 4.29 представлены добавленные данные.
Рис. 4.29. Добавленные данные
Редактирование
происходит
с
помощью
кнопки
редактировать
(гаечный ключ), в таблице. Кнопка изображена на рис.4.30.
Рис. 4.30. Кнопка редактирования
При нажатии на нее вылетает панель редактирования. Данная панель
предоставлена на рис. 4.31.
Рис. 4.31. Форма редактирования
Изменим данные и проверим редактирование. Измененные данные
представлены на рис. 4.32.
70
Рис. 4.32. Измененная информация в форме редактирования
Проверка правильности редактированных данных представлена на рис.
4.33.
Рис. 4.33. Измененная информация в таблице «Заявка»
Для удаления строки из таблицы, используется кнопка, представленная
на рис. 4.34.
Рис. 4.34. Кнопка удаления
Для проверки, удаляется запись под номером десять, представленная на
рис. 4.35.
Рис. 4.35. Запись для удаления
71
Проверка таблицы, рис. 4.36.
Рис. 4.36. Запись десять удалена
Так же в таблице есть фильтрация по строкам, что упрощает поиск
внесенных последними записи. Фильтрация представлена на рис. 4.37.
Рис.4. 37. Фильтрация записей по убыванию
После завершения работы в приложении необходимо осуществить
выход. Выход происходит с помощью кнопки показанной на рис. 4.38.
Рис. 4.38. Кнопка выхода
После выхода, приложение возвращается на страницу «Вход».
72
ЗАКЛЮЧЕНИЕ
В результате выполнения выпускной квалификационной работы была
достигнута
ее
цель
–
осуществлена
информационная
поддержка
деятельности отдела продаж и маркетинга.
Были решены следующие задачи:
- проведен анализ состояния информационной поддержки ООО
«ХОРОС» в настоящее время;
- спроектирована система заказов при помощи UML-схем;
- спроектированы логическая и физическая схемы базы данных;
- разработано и протестировано web-приложения для системы заказов
нефтепродуктов ООО «ХОРОС».
Исходя
из
анализа
состояния
информационной
поддержки
деятельности компании, было создано web-приложение для системы заказов
нефтепродуктов ООО «ХОРОС». Web-приложение является открытой
архитектуры, что позволит дальнейшее его улучшение.
Для обеспечения нормальной работы web-приложения необходимо
одно
автоматизированное
рабочее
место,
удовлетворяющее
всем
техническим требованиям, а так же один сотрудник, способный к
обслуживанию приложения.
Web-приложение
направленный
на
представляет
создание
собой
маркетинговый
информационного
ресурса,
шаг,
который
предоставляет возможность для компании удержать старых клиентов и
привлечь новых.
Разработанное
web-приложение
внедрено
в
деятельность ООО «ХОРОС», о чем имеется акт о внедрении.
.
практическую
73
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.
Агальцов, В. П. Базы данных. Локальные базы данных: учебник /
В. П. Агальцов. - Москва: ИД ФОРУМ, НИЦ ИНФРА-М , 2013. - 352 c.
2.
Акулич, М. В. Интернет-маркетинг: учебник для бакалавров / М.
В. Акулич. - Москва: Издательско-торговая корпорация «Дашков и К» , 2016.
- 352 c.
3.
Алавердов, А. Р. Управление персоналом: учебное пособие / А. Р.
Алавердов, Е. О. Куроедова, О. В. Нестерова. - Москва: МФПУ Синергия,
2013. - 192 c.
4.
Андерсон,
С.
Приманка
для
пользователей:
создаем
привлекательный сайт: учебник / С. Андерсон. - Москва: Питер, 2013. - 234 с.
5.
Андросов, Н. Интернет-маркетинг на 100%: учебник / Н.
Андросов. – Санкт-Петербург: Питер , 2012. - 240 c.
6.
Аникеев, С. Н. Методика разработки плана маркетинга: учебник/
С. Н. Аникеев - Москва: Фолиум, 2012. – 131 с.
7.
Багиев, Г. Л. Основы организации маркетинговой деятельности
на предприятии: учебник / Г. Л. Багиев – Санкт-Петербург: Обл. правление
ВНТОЭ, 2012. – 240 с.
8.
Балашов, А. П. Основы менеджмента: учебное пособие / А. П.
Балашов. - Москва: ИНФРА-М, 2012. - 288 c.
9.
Борушко, Н. В. Маркетинговые коммуникации: курс лекций / Н.
В. Борушко. - Минск: БГТУ, 2012. - 306 с.
10.
Васвани, В. MySQL: использование и администрирование:
учебник / В. Васвани. — Москва: Питер , 2012. — 368 с.
11.
Васильев, Г. А. Рекламный маркетинг: учебное пособие / Г.А.
Васильев, В. А. Поляков. - Москва: НИЦ ИНФРА-М, 2013. - 276 c.
74
12.
Воевода, В. A. Использование UML-диаграмм и временных сетей
петри в методе разработки ПО ч. 2:учебник / А. В. Воевода, Д. О.
Романников. // Новосибирск: НГТУ. - 2012. №4 (62).- 117-126 с.
13.
Голова, А. Г. Управление продажами: учебник / А. Г. Голова. -
Москва: Издательско-торговая корпорация Дашков и К, 2013. - 277 с.
14.
Гома, Г. С. UML-проектирование систем реального времени
параллельных и распределенных приложений: учебник / Г. С. Гома. –
Москва: ДМК Пресс , 2012. – 380 с.
15.
Градов, А. П. Организационная структура и функции службы
маркетинга предприятия: учебное пособие / А. П. Градов – Санкт-Петербург:
ИК Невский проспект, 2012. – 92 с.
16.
Дашков Л. П.
Организация и
управление коммерческой
деятельностью: учебник / Л. П. Дашков, О. В. Памбухчиянц. - Москва:
Дашков и Ко, 2012. - 688 с.
17.
Дэвид, С. М. Большая книга CSS3: учебник / С. М. Дэвид. –
Москва: Питер , 2012. – 782 с.
18.
Еремин, В. Н. Маркетинг. Основы и маркетинг информации:
учебник / В. Н. Еремин. – Москва: КноРУс, 2014. – 648 с
19.
Зайцев, Л. Г. Стратегический менеджмент: учебник / Л. Г. Зайцев,
М. И. Соколова. - Москва: Магистр, 2013. - 528 c.
20.
Зольников, Д. С. PHP 5. Как самостоятельно создать сайт любой
сложности: учебник / Д. С. Зольников. - Москва: НТ Пресс, 2014.-272 с.
21.
Кириллов, В. В. Введение в реляционные базы данных. Введение
в реляционные базы данных: учебник / В. В. Кириллов, Г. Ю. Громов. –
Санкт-Петербург: БХВ-Петербург , 2012. - 464 c.
22.
Колисниченко, Д. PHP и MySQL. Разработка Web-приложений:
учебник/ Д. Колисниченко. – Санкт-Петербург: БХВ-Петербург , 2012. - 464
c.
75
23.
Коршак, А. А.Основы транспорта, хранения и переработки нефти
и газа: учебное пособие / А. А. Коршаков. - Ростов-на-Дону: Феникс, 2015. –
365 с.
24.
Леоненков,
А.
В.
Объектно-ориентированный
анализ
и
проектирование с использованием UML и IBM Rational Rose: учебник / А. В.
Леоненков. - Москва: БИНОМ. Лаборатория знаний , 2013. – 318 c.
25.
Липсиц, И. В. Основы маркетинга: учебник / И. В Липсиц., М. Н.
Дымшиц. – Москва: Геотар-Медиа, 2014. – 208 с.
26.
Макаров, А. С. Yii. Сборник рецептов: учебник / А. С. Макаров. –
Москва: ДМК Пресс , 2013. – 372 с.
27.
Мэтью, Д. HTML5. Разработка веб-приложений: учебник /Д.
Метью. - Москва: Рид Групп , 2012 – 320 с.
28.
Николаева. О. В. Возможности Yii Framewor: учебник / О. В.
Николаева.
//
Информационно-телекоммуникационные
системы
и
технологии (ИТСиТ-2014). - Кемерово: КузГТУ , 2014. – 464 с.
29.
Никсон, Р. Создаем динамические веб-сайты с помощью PHP,
MySQL и JavaScript / Р. Никсон. - Санкт-Петербург: Питер , 2013. - 496 с.
30.
Model-View-Controller [Электронный ресурс] – Режим доступа:
https://msdn.microsoft.com/en-us/library/ff649643.aspx
(дата
обращения
21.04.2017 г.).
31.
Мейер, Э. А. CSS. Каскадные таблицы стилей. Подробное
руководство: учебное пособие / Э. А. Мейер. – Санкт-Петербург: СимволПлюс , 2015. – 576 с.
32.
Основы: Модель | The Definitive Guide to Yii | Yii PHP Framework
[Электронный
ресурс]
–
Режим
http://www.yiiframework.com/doc/guide/1.1/ru/basics.model
доступа:
(дата обращения
21.05.2017 г.).
33.
Framework
Основы: Контроллер | The Definitive Guide to Yii | Yii PHP
[Электронный
ресурс]
–
Режим
доступа:
76
http://www.yiiframework.com/doc/guide/1.1/ru/basics.controller (дата обращения
25.05.2017 г.).
34.
Основы: Представления | The Definitive Guide to Yii | Yii PHP
Framework
[Электронный
ресурс]
–
Режим
доступа:
(дата
обращения
http://www.yiiframework.com/doc/guide/1.1/ru/basics.view
29.05.2017 г.).
35.
Пайлон, Д. UML 2 для программистов: учебник / Д. Пайлон, Н.
Питмен. – Москва: Питер , 2012. – 782 с.
36.
Пархименко, В. А. Маркетинг информационных технологий:
особенности и инструменты: учебник / В. А. Пархименко // Маркетинг в
России и за рубежом. - 2012. - №5(28). - 72-86 с.
37.
Пьюривал, С. Основы разработки веб-приложений: учебник / С.
Пьюривал. - Санкт-Петербург: Питер , 2015 – 272 с.
38.
Райен, Д. В. Краткий курс интернет-маркетинга: учебник / Д. В.
Райен. - Москва: ШКИМБ, 2013. - 320 c.
39.
Редмонд, Э. Семь баз данных за семь недель. Введение в
современные базы данных и идеологию MySQL: учебник / Э. Редмонд, Р. Д.
Уилсон. – Москва: ДМК Пресс , 2012. - 384 c.
40.
Робин, Н. С. PHP 5. Создаем динамические веб-сайты с помощью
PHP, MySQL, JavaScript, CSS и HTML5: учебник / Н. С. Робин.- СанктПетербург: Питер, 2016.-768 с.
41.
Рожков, И. В. Информационные системы и технологии в
маркетинге / И. В. Рожков. - Москва: Русайнс, 2014. - 196 с.
42.
Русакова,
О.
И.
Роль
маркетинговых
инструментов
в
продвижении страховых продуктов на российском рынке: учебник / О. И.
Русакова, Д. С. Хаустов // Страховое дело. - 2014. - № 1(134). – 38 -42 с.
43.
Сафронов, М. Разработка веб-приложений в Yii 2:учебник / М.
Сафронов. – Москва: ДМК Пресс, 2015. – 391 с.
44.
Синяева, И. М. Маркетинг: теория и практика: учебник / И. М.
Синяева, О. Н. Романенкова. - Москва: Юрайт, 2014. - 652 с.
77
45.
Смирнов, А. Л. Маркетинговые инструменты для продвижения
бизнеса в Интернете: учебник / А. Л. Смирнов, Ю. Суздаль. - СанктПетербург: ИГ Весь , 2015. - 176 c.
46.
Сухарев,
О.
С.
Функциональный
и
интернет-маркетинг:
монография / О. С. Сухарев. - Москва: КУРС , НИЦ ИНФРА-М , 2013. - 352
c.
47.
Томсон Л. Разработка Web-приложений на PHP и MySql: учебник
/ Л. Томсон, Л. Веллинг – Санкт-Петербург: ДиаСофтЮП , 2013.-672 с.
48.
Флэнаган, Д. JavaScript. Подробное руководство: учебное
пособие. / Д. Флэнаган – Санкт-Петербург: Символ-Плюс , 2013. – 1080 с.
49.
Фрэйн, Б. HTML5 и CSS3. Разработка сайтов для любых
браузеров и устройств: учебник / Б. Фрэйн - Санкт-Петербург: Питер, 2014. 298 с.
50.
Худяков, М. А. Материаловедение: учебное пособие для
подготовки бакалавров и магистров / М. А. Худяков. - Уфа: Монография,
2012. - 237 с.
51.
Энж, Э. SEO. Искусство раскрутки сайтов: учебник / Э. Энж, С.
Спенсер. - Санкт-Петербург: Питер , 2014. - 668 c.
78
ПРИЛОЖЕНИЕ 1
Таблица 1.1
Структура данных сущностей
Название
таблицы
Oil_product
Caterer
Сontents
Shipment
Purshace_oil
Название поля
Тип
Описание
id_oil_product
integer
name_product
class
GOST
id_caterer
varchar(255)
varchar(255)
varchar(255)
integer
name_caterer
domicile_caterer
e_mail
KPP
OGRN
contact_person
INN
phone_caterer
varchar(255)
varchar(255)
varchar(255)
integer
integer
varchar(255)
integer
integer
prof
id_сontents
varchar(255)
integer
Уникальный
идентификатор,
первичный ключ
Название нефтепродукта
Характеристика нефтепродукта
ГОСТ
Уникальный
идентификатор,
первичный ключ
Название поставщика
Юридический адрес поставщика
Электронная почта поставщика
КПП поставщика
ОГРН поставщика
Контактное лицо поставщика
ИНН поставщика
Телефон
контактного
лица
поставщика
Профиль компании поставщика
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
таблицей «Mark»
Внешний ключ для связи с
таблицей «Entry»
Объём состава заявки, описание
одной единицы товара
Уникальный
идентификатор,
первичный ключ
Наименование доставки
id_mark (FK)
integer
id_entry (FK)
integer
volume_ сontents
integer
id_ shipment
integer
name_ shipment
varchar(255)
id_purshace_oil
integer
id_delivery (FK)
integer
id_mark (FK)
integer
volum_purshace
integer
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
«Delivery»
Внешний ключ для объединения с
таблицей «Mark»
Объем закупки нефтепродукта у
поставщика
79
Продолжение Таблицы 1.1
Название
таблицы
Delivery
Mark
Entry
Order_transport
Название поля
Тип
Описание
id_delivery
integer
id_caterer (FK)
integer
id_enty
integer
id_ transport
integer
volume_ transport
integer
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
таблицей «Caterer»
Дата поставки
Объём поставки
Цена поставки
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
таблицей «Manufacturer»
Внешний ключ для связи с
таблицей «Oil_product»
Название марки нефтепродукта
Плотность продукта при наливе
Температура продукта при наливе
Цена за литр
Цена за тонну
Наличие товара на базе
Объем в наличии на базе
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
«Customer»
Внешний ключ для объединения с
таблицей «Worker»
Номер договора с покупателем
Дата размещения заявки
Количество позиций продуктов
Статус исполнения заявки
Дата исполнения заявки
Итоговая сумма заявки
Уникальный
идентификатор,
первичный ключ
Внешний ключ для объединения с
таблицей «Enty»
Внешний ключ для объединения с
таблицей «Transport»
Объем цистерны транспорта
kolvo_ transport
integer
Количество машин
data_delivery
volume_delivery
price_delivery
id_mark
datatime
integer
integer
integer
id_manufacturer(FK)
integer
id_oil_product (FK)
integer
name_mark
density_loading
temperature_loading
litr
tonn
availability
volume_availability
id_entry
varchar(255)
integer
integer
integer
integer
varchar(255)
integer
integer
id_customer (FK)
integer
id_worker (FK)
integer
number_customer
data_accommodation
number_items
status_of
date_performance
final_amount
id_order_transport
integer
datatime
integer
varchar(255)
datatime
integer
integer
80
Продолжение Таблицы 1.1
Название
таблицы
Shipment
id__shipment
Customer
name_shipment
id_customer
varchar(255)
integer
name_customer
address_customer
varchar(255)
varchar(255)
е_mail_customer
responsible_person
KPP_customer
OGRN_customer
INN_customer
distance_customer
varchar(255)
varchar(255)
integer
integer
integer
integer
Transport
Section_cistern
Название поля
Описание
integer
Уникальный
идентификатор,
первичный ключ
Название доставки
Уникальный
идентификатор,
первичный ключ
Название компании покупателя
Юридический адрес компании
покупателя
Электронная почта покупателя
Контактное лицо покупателя
КПП компании покупателя
ОГРН компании покупателя
ИНН компании покупателя
Дистанция до базиса отгрузки в
километрах
Телефон
контактного
лица
компании покупателя
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
таблицей «Kind»
Марка транспортного средства
Вид транспортного средства
Государственный
номер
транспорта
Общий
объем
цистерны
транспорта
Цена за пройденный километр
Уникальный
идентификатор,
первичный ключ
Внешний ключ для связи с
«Delivery»
Наименование секции цистерны
Объем
секции
цистерны
поставщика
Уникальный
идентификатор,
первичный ключ
Наименование вида
Описание вида доставки
phone_person
integer
id_transport
integer
id_kind (FK)
integer
mark_transport
type_transport
number_transport
varchar(255)
varchar(255)
varchar(255)
volume_cistern
varchar(255)
price_km
id_section_cistern
integer
integer
id_transport (FK)
integer
name_section
volume_section
Kind_transport
Тип
id_kind
name_kind
caption
varchar(255)
integer
integer
varchar(255)
varchar(255)
81
ПРИЛОЖЕНИЕ 2
Файловая структура интерфейса пользователя:
Ниже представлены исходные коды только некоторых файлов
интерфейса пользователя в силу того, что исходные коды всего интерфейса
заняли бы более 100 страниц.
82
Листинг 2.1. Исходные коды интерфейса пользователя
site-local/www/confing/console.php
<?php $params = require(__DIR__ . '/params.php');
$db = require(__DIR__ . '/db.php');
$config = [ 'id' => 'basic-console',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'app\commands',
'components' => [
'cache' => [ 'class' => 'yii\caching\FileCache', ],
'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ],
'db' => $db, ],
'params' => $params,
'controllerMap' => [ 'fixture' => [ // Fixture generation command line. 'class' =>
'yii\faker\FixtureController', ], ], ];
if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config;
site-local/www/confing/db.php
<?php
return [ 'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=diplom',
'username' => 'root', 'password' => '', 'charset' => 'utf8', ];
site-local/www/confing/web.php
<?php
$params = require(__DIR__ . '/params.php');
$config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'],
'components' => [ 'request' => [ 'cookieValidationKey' => '12W24rewgv@43asevr@ew', ],
'cache' => [ 'class' => 'yii\caching\FileCache', ],
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ],
'errorHandler' => [ 'errorAction' => 'site/error', ],
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => true, ],
'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'], ], ], ],
'search' => [ 'class' => 'himiklab\yii2\search\Search',
'models' => [ 'app\models\Blog', ], ],
'db' => require(__DIR__ . '/db.php'),
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' =>
[ ], ], ], 'params' => $params, ];
if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config;
site-local/www/controllers/SiteController.php
<?php namespace app\controllers; use Yii;
use yii\helpers\Html;
83
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
use app\models\Pricelist;
use app\models\Neft;
use app\models\Dost;
use app\models\Index;
use app\models\Kalkrast;
class SiteController extends Controller{
public function behaviors(){
return ['access' => ['class' => AccessControl::className(), 'only' => ['logout'],
'rules' => [ [ 'actions' => ['logout'],'allow' => true, 'roles' => ['@'], ], ], ],
'verbs' => ['class' => VerbFilter::className(), 'actions' => ['logout' => ['post'], ], ], ]; }
public function actions(){
return ['error' => ['class' => 'yii\web\ErrorAction', ],
'captcha' => ['class' => 'yii\captcha\CaptchaAction','fixedVerifyCode' =>
YII_ENV_TEST ? 'testme' : null, ], ]; }
public function actionBenzin(){ return $this->render('benzin'); }
public function actionDizel(){ return $this->render('dizel'); }
public function actionMazut(){ return $this->render('mazut'); }
public function actionKalk(){ return $this->render('kalk'); }
public function actionKalkPlot(){ return $this->render('kalk-plot'); }
public function actionKalkOb(){ return $this->render('kalk-ob'); }
public function actionAboutAs(){ return $this->render('about-as'); }
public function actionCart(){ return $this->render('cart'); }
public function actionOrder(){ return $this->render('order');}
public function actionAvtoriz(){ return $this->render('avtoriz'); }
public function actionZab(){ return $this->render('zab'); }
public function actionOff(){ return $this->render('off'); }
public function actionLogin(){
if (!Yii::$app->user->isGuest) { return $this->goHome(); }
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack(); }
return $this->render('login', [ 'model' => $model, ]); }
public function actionLogout(){ Yii::$app->user->logout(); return $this->goHome(); }
public function actionContact(){$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh(); }
return $this->render('contact', [ 'model' => $model, ]); }
public function actionAbout(){ return $this->render('about'); }
public function actionPricelist(){
$pricelist=Pricelist::find()->all();
return $this->render('pricelist', [ 'pricelist'=>$pricelist, ]); }
public function actionNeft(){
$neft=Neft::find()->all(); return $this->render('neft', [ 'neft'=>$neft, ]); }
public function actionDost(){
$dost=Dost::find()->all(); return $this->render('dost', [ 'dost'=>$dost, ]); }
public function actionIndex(){
84
$index=Index::find()->all(); return $this->render('index', [ 'index'=>$index, ]); }
public function actionKalkRast(){
$kalkrast=Kalkrast::find()->all(); return $this->render('kalkrast', [ 'kalkrast'=>$kalkrast, ]); } }
site-local/www/models/ContactForm.php
<?php
namespace app\models;
use Yii;
use yii\base\Model;
class ContactForm extends Model{
public $name_customer;
public $adress_customer;
public $distans_customer;
public $INN_ customer;
public $KPP_customer;
public $OGRN_customer;
public $responsible_customer;
public $phone_customer;
public $email_customer;
public function rules(){
return [ [ ['name_customer', 'email_customer', 'adress_customer', 'distans_customer',
'INN_ customer', 'KPP_customer', 'OGRN_customer', 'responsible_customer', 'phone_customer'],
'required'], ['email', 'email'], ]; }
public function contact($email) {
if ($this->validate()) {
Yii::$app->mailer->compose()->setTo($email)->setFrom([$this->email =>
$this->name])->setSubject($this->subject)->setTextBody($this->body)->send();
return true; } return false; } }
site-local/www/models/LoginForm.php
<?php
namespace app\models;
use Yii;
use yii\base\Model;
class LoginForm extends Model{
public $username;
public $password;
public $rememberMe = true;
private $_user = false;
public function rules(){ return [
[['username', 'password'], 'required'],
['rememberMe', 'boolean'],
['password', 'validatePassword'], ];}
public function validatePassword($attribute, $params){
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.'); } } }
public function login(){
85
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ?
3600*24*30 : 0); } return false; }
public function getUser(){
if ($this->_user === false) {
$this->_user = User::findByUsername($this->username); } return $this->_user; } }
site-local/www/models/Index.php
<?php namespace app\models;
use yii\db\ActiveRecord;
class Index extends ActiveRecord{ } ?>
site-local/www/views/layouts/main.php
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this); ?>
<?php $this->beginPage() ?>
<html class="no-js" lang="<?= Yii::$app->language ?>"><head>
<meta charset="<?= Yii::$app->charset ?>">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="">
<?= Html::csrfMetaTags() ?>
<title><?= Html::encode($this->title) ?></title>
<?php $this->head() ?>
<script src="/js/vendor/modernizr-2.8.3.min.js"></script></head><body>
<?php $this->beginBody() ?>
<div class="wrapper home-one">
<header class="header-area header-wrapper">
<div class="header-top-bar black-bg clearfix" >
<div class="container">
<a href="<?=\yii\helpers\Url::toRoute(['order','#' => 'markenting']);?>"
class="icon-style-2" style="line-height: 0px; padding-top: 17px; font-size: 14px;padding-left:
15px;">Личный кабинет</a>
<div class="header-cart">
<div class="cart-icon"style="line-height: 0px; padding-top: 20px; paddingright: 47px;"><a href="<?=\yii\helpers\Url::toRoute('cart');?>">Корзина <i class="zmdi
zmdi-shopping-cart" style="margin-left: 0px;"></i></a><span>0</span></div>
<a class="active" href="<?=\yii\helpers\Url::toRoute('index');?>">
<div class="cart-content-wraper"style="margin-top: 16px;">
<form method="post" action="#">
<div class="cart-single-wraper" style="padding-top: 0px;padding-bottom:
0px;"> <div class="cart-img"><a href="#"><img src="images/product/01.jpg" alt="">
</a></div><div class="cart-content">
<div class="cart-name"> <a href="#">Бензин АИ-95</a> </div>
<div class="cart-price"> 2500 руб. </div>
86
<div class="cart-qty"> Количество: <span>25 л</span>
</div></div> <div class="remove"> <a href="#"><i class="zmdi zmdi-close"></i></a> </div>
</div><div class="cart-single-wraper" style="padding-top: 0px;padding-bottom: 0px;">
<div class="cart-img">
<a href="#"><img src="images/product/02.jpg" alt=""></a></div>
<div class="cart-content">
<div class="cart-name"> <a href="#">Мазут</a> </div>
<div class="cart-price"> 2500 руб. </div>
<div class="cart-qty"> Количество: <span>2 л</span> </div></div>
<div class="remove"> <a href="#"><i class="zmdi zmdi-close"></i></a> </div></div>
<div class="cart-subtotal"> Итого: <span>5000 руб.</span> </div>
<div class="cart-check-btn">
<div class="view-cart"> <a class="btn-def"
href="<?=\yii\helpers\Url::toRoute('cart');?>">Перейти в корзину</a>
</div></div></form></div></div><div class="row">
<div class="col-md-3 col-sm-3 col-xs-6"></div>
<div class="col-md-6 col-sm-6 hidden-xs">
<div class="social-search-area text-center">
<div class="social-icon socile-icon-style-2"> </div></div></div>
<div class="col-md-3 col-sm-3 col-xs-6">
<div class="cart-currency-area login-register-area text-right"></div>
</div></div></div></div>
<div id="sticky-header" class="header-middle-area">
<div class="container">
<div class="full-width-mega-dropdown">
<div class="row">
<div class="col-md-2 col-sm-2">
<div class="logo ptb-20"><a href="<?=\yii\helpers\Url::toRoute('index');?>">
<img src="images/slider/logo.png" alt="main logo"></a></div></div>
<div class="col-md-7 col-sm-10 hidden-xs">
<nav id="primary-menu">
<ul class="main-menu">
<li class="current"><a class="active"
href="<?=\yii\helpers\Url::toRoute('index');?>">Главная</a></li>
<li class="mega-parent pos-rltv"><a
href="<?=\yii\helpers\Url::toRoute('neft');?>">Нефтепродукты</a>
<div class="mega-menu-area mma-800">
<ul class="single-mega-item">
<li class="menu-title uppercase"><a
href="<?=\yii\helpers\Url::toRoute('benzin');?>">Бензин</a></li></ul>
<ul class="single-mega-item">
<li class="menu-title uppercase"><a
href="<?=\yii\helpers\Url::toRoute('dizel');?>">Дизельное топливо</a></li></ul>
<ul class="single-mega-item">
<li class="menu-title uppercase"><a
href="<?=\yii\helpers\Url::toRoute('mazut');?>">Другие
нефтепродукты</a></li></ul></div></li>
<li class="mega-parent pos-rltv"><a
href="<?=\yii\helpers\Url::toRoute('pricelist');?>">Прайс-лист</a></li>
<li class="mega-parent pos-rltv"><a
href="<?=\yii\helpers\Url::toRoute('dost');?>">Доставка</a></li>
<li class="mega-parent"><a href="#" disabled >Калькуляторы</a>
87
<div class="mega-menu-area mma-800">
<ul class="single-mega-item">
<li class="menu-title uppercase"><a href="<?=\yii\helpers\Url::toRoute('kalkrast');?>" target="_blank">Расчет стоимости доставки</a></li></ul>
<ul class="single-mega-item">
<li class="menu-title uppercase"><a href="<?=\yii\helpers\Url::toRoute('kalkplot');?>" target="_blank">Расчет плотности </a></li></ul>
<ul class="single-mega-item">
<li class="menu-title uppercase"><a href="<?=\yii\helpers\Url::toRoute('kalk-ob');?>"
target="_blank">Перевод объема, массы, стоимости</a></li> </ul></div></li>
<li class="mega-parent"><a href="<?=\yii\helpers\Url::toRoute('about-as');?>">О
нас</a></li></ul> </nav></div>
<div class="col-md-3 hidden-sm hidden-xs"style="padding-right: 0px;padding-left:
px;"id="form_search">
<div class="search-box global-table">
<div class="global-row">
<div class="global-cell">
<form action="#">
<div class="input-box">
<input class="single-input" placeholder="Поиск" type="text">
<button class="src-btn"><i class="fa fasearch"></i></button></div></form></div>
</div></div></div></div></div></div></div></header>
<?= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this>params['breadcrumbs'] : [], ]) ?><?= $content ?>
<div class="delivery-service-area ptb-30"></div>
<div class="footer-area ptb-50">
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-4 col-xs-12">
<div class="single-footer contact-us">
<div class="footer-title uppercase"><h5>Контактные данные:</h5> </div>
<ul><li><div class="contact-icon"> <i class="zmdi zmdi-pin-drop"></i>
</div><div class="contact-text"><p><span>629830, Россия, Тюменская область, пос. Пурпе,
Федеральное шоссе, панель 7</span> </p></div></li>
<li><div class="contact-icon"> <i class="zmdi zmdi-email-open"></i>
</div><div class="contact-text" style="padding-top: 10px;"><p><span><a
href="#">yss3000@yandex.ru
<br /></a></span> <span><a href="#"></a></span></p></div></li><li><div class="contacticon"> <i class="zmdi zmdi-phone-paused"></i></div><div class="contacttext"style="padding-top: 10px;"><p><span style="width: 200px;">+7(963) 962-1401</span></p></div></li></ul></div></div></div></div></div>
<div class="footer-bottom global-table">
<div class="global-row">
<div class="global-cell"> © 2010–2017 OOO
"ХОРОС"</div></div></div></div><?php $this->endBody() ?></body></html><?php $this>endPage() ?>
site-local/www/views/site/index.php
<?php use yii\helpers\Html;
use yii\bootstrap\Nav;
88
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this); ?>
<?php $this->title = 'My Yii Application'; ?>
<div class="slider-area pos-rltv carosule-pagi cp-line">
<div class="active-slider">
<div class="single-slider pos-rltv">
<div class="slider-img"><img src="images/slider/slider01.jpg" alt=""></div>
<div class="slider-content pos-abs">
<h4>Оптовая продажа нефтепродуктов</h4>
<h1 class="uppercase pos-rltv underline">на Российском рынке с 2010
года</h1></div></div>
<div class="single-slider pos-rltv">
<div class="slider-img"><img src="images/slider/slider02.jpg" alt=""></div>
<div class="slider-content pos-abs">
<h4>Оптовая продажа нефтепродуктов</h4>
<h1 class="uppercase pos-rltv underline">ПРОДАЖА ОПТОМ светлых и
темных нефтепродуктов</h1></div></div>
<div class="single-slider pos-rltv">
<div class="slider-img"><img src="images/slider/slider03.jpg" alt=""></div>
<div class="slider-content pos-abs">
<h4>Оптовая продажа нефтепродуктов</h4>
<h1 class="uppercase pos-rltv underline">Доставка любого вида
нефтепродуктов</h1></div></div></div></div>
<div class="delivery-service-area ptb-30"></div>
<div class="branding-section-area">
<div class="container">
<div class="row">
<div class="active-slider pos-rltv carosule-pagi cp-line pagi-02">
<?php foreach($index as $indexs) { ?>
<div class="single-slider">
<div class="col-lg-7 col-md-6 col-sm-6 col-xs-12" style="padding-top:
5%;"></div><div class="col-lg-5 col-md-6 col-sm-6 col-xs-12">
<div class="brand-content ptb-55">
<div class="brand-text color-lightgrey">
<h6>Ожидается</h6>
<h2 class="uppercase montserrat"><?=$indexs->name_product?>
<?=$indexs->name_mark?> </h2>
<h3 class="montserrat"><?=$indexs->litr?> руб. за литр</h3>
<h3 class="montserrat"><?=$indexs->tonn?> руб. за тонну</h3>
<p><?=$indexs->characteristic?> .</p>
<div class="social-icon-wraper mt-35">
<div class="social-icon"><ul>
<li><a href="<?=\yii\helpers\Url::toRoute('neft');?>"><i
class="zmdi zmdi-shopping-cart"></i></a></li></ul></div></div></div>
<div class="brand-timer shadow-box-2 mt-10">
<div class="timer-wraper text-center">
div class="timer">
<div data-countdown="<?=$indexs->data_delivery
?>"></div></div></div></div></div>
</div></div><?php } ?></div></div></div></div>
89
site-local/www/views/site/neft.php
<?php $this->title = 'My Yii Application'; ?>
<div class="shop-main-area ptb-0">
<div class="container">
<div class="row">
<div class="col-xs-12">
<div class="shop-area-top">
<div class="row" style="min-width: 760px; margin: 0 auto; ">
<div class="col-md-10 full-width-mega-dropdown">
<form method="post" action="#">
<div class="sort product-type"style="padding-left: 35px;">
<label style="margin-right: 3px; color: #000;">Нефтепродукт</label>
<select id="input-sort">
<option value="0" selected disabled>Выберите вид</option>
<?php foreach($neft as $nefts) { ?>
<option value="<?=$nefts->name_product?>"><?=$nefts>name_product?></option>
<?php }?></select></div>
<div class="sort product-type"style="padding-left: 0px;margin-left: 7px;">
<label style="margin-right: 3px; color: #000;">Наличие</label>
<select id="input-sort">
<option value="0" selected disabled>Выберите наличие</option>
<option value="">В наличии</option>
<option value="">Ожидается</option></select></div>
<div class="sort product-type"style="padding-left: 0px;margin-left: 7px;">
<label style="margin-right: 3px; color: #000; ">Цена</label>
<select id="input-sort">
<option value="0" selected disabled>Фильтрация</option>
<option value="#">По убыванию</option>
<option value="#">По
возрастанию</option></select></div></form></div></div> </div></div>
<div class="clearfix"></div>
<div class="shop-total-product-area clearfix mt-35">
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="grid">
<?php foreach($neft as $nefts) {
if ($nefts->availability=="В наличии"){?>
<div class="total-shop-product-grid" style="padding-left: 5%;">
<div class="col-md-3 col-sm-4 col-xs-12 item"style="width: 280px; height:
253px;"> <div class="single-product">
<form action="#" method="POST" id="myform" >
<div class="product-img">
<div class="product-label red">
<div class="new1"><?=$nefts->availability?></div></div>
<div class="single-prodcut-img product-overlay pos-rltv">
<img alt="" src="images/team/branding.jpg" class="primary-image"></div></div>
<div class="product-text">
<center><h3><?=$nefts->name_product?> <?=$nefts->name_mark?> </h3></center>
<div class="cart-quantity"> <label>  Литр</label>
<div class="cart-plus-minus">
<div class="dec qtybutton">-</div>
90
<input value="1" name="qtybutton" class="cart-plus-minus-box" type="text">
<div class="inc qtybutton">+</div>
<div class="new-price">    Цена: <?=$nefts>litr?> руб.</div></div><label>  Тонна</label>
<div class="cart-plus-minus">
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box"
type="text"><div class="inc qtybutton">+</div>
<div class="new-price">    Цена: <?=$nefts->tonn?>
руб.</div></div> <br></div>
<a href="#" class="btn-def btn2">Добавить в
карзину</a></div></form></div></div></div>
<?php } } ?><?php foreach($neft as $nefts) { if ($nefts->availability=="Ожидается"){?>
<div class="total-shop-product-grid" style="padding-left: 5%;">
<div class="col-md-3 col-sm-4 col-xs-12 item"style="width: 280px; height: 253px;">
<div class="single-product">
<form action="#" method="POST" id="myform" >
<div class="product-img">
<div class="product-label red">
<div class="new"><?=$nefts->availability?></div></div>
<div class="single-prodcut-img product-overlay pos-rltv">
<img alt="" src="images/team/branding.jpg" class="primaryimage"></div></div><div class="product-text">
<center><h3><?=$nefts->name_product?> <?=$nefts->name_mark?>
</h3></center><div class="cart-quantity"> <label>  Литр</label>
<div class="cart-plus-minus">
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box"
type="text"><div class="inc qtybutton">+</div>
<div class="new-price">    Цена:
<?=$nefts->litr?> руб.</div></div><label>  Тонна</label>
<div class="cart-plus-minus">
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box" type="text">
<div class="inc qtybutton">+</div>
<div class="new-price">    Цена: <?=$nefts->tonn?>
руб.</div></div><br></div><a class="btn-def btn2">Добавить в карзину</a> </div></form>
</div></div></div><?php } } ?></div></div></div></div></div>
<div class="col-md-12 col-sm-12 col-xs-12" style=" bottom: 10px;">
<div class="pagination-btn text-center">
<ul class="page-numbers">
<li><a class="next page-numbers" ><i class="zmdi zmdi-long-arrowleft"></i></a></li><li><span class="page-numbers current">1</span></li>
<li><a href="#" class="page-numbers">2</a></li>
<li><a href="#" class="page-numbers">3</a></li>-->
<li><a class="next page-numbers" disabled><i class="zmdi zmdi-long-arrowright"></i></a></li></ul></div></div></div></div></div></div></div>
site-local/www/views/site/order.php
<div class="cart-checkout-area pt-30">
<div class="container">
91
<div class="row">
<div class="cart-checkout-area ">
<div class="container"><h3><center>Заказы</center></h3>
<div class="row">
<div class="col-md-10 full-width-mega-dropdown">
<form method="post" action="#">
<div class="sort product-type">
<label style="margin-right: 3px; color: #000;">Выберите номер
заказа</label><select id="input-sort" style="width: 50px;">
<option value="0" selected>№</option>
<option value="#">1</option>
<option value="#">2</option>
<option value="#">3</option></select></div>
<div class="sort product-type"style="padding-left: 0px;margin-left: 3px; ">
<label style="margin-right: 3px; color: #000;">Статус исполнения</label>
<select id="input-sort">
<option value="0" selected>Статус</option>
<option value="#">На расмотрении</option>
<option value="#">Исполнен</option>
<option value="#">Выполняется</option></select></div></form></div></div>
<div class="cart-page-area">
<form method="post" action="#">
<div class="table-responsive mb-20" >
<table style=" line-height: 0.9em;" class="shop_table-2 cart table" ><thead><tr >
<th class="product-quantity">№</th>
<th class="product-remove ">Наименование компании</th>
<th class="product-quantity ">Номер договора</th>
<th class="product-remove ">Дата размещения</th>
<th class="product-remove ">Вид доставки</th>
<th class="product-quantity ">Количество позиций</th>
<th class="product-remove ">Ответственный сотрудник</th>
<th class="product-remove">Статус исполнения</th>
<th class="product-remove ">Дата исполнения</th>
<th class="product-quantity ">Итоговая сумма</th></tr></thead><tbody>
<tr class="cart_item">
<td>1</td><td class="item-item">ООО ТД «ОПТНЕФТЕПРОДУКТ»</td>
<td class="item-price">1</td><td class="item-title">2017/02/05</td>
<td class="item-item">Самовывоз</td>
<td class="item-title">2</td>
<td class="item-item">Фокин Олег Андреевич</td>
<td class="item-title">На расмотрении</td>
<td class="item-price">2017/02/05</td>
<td class="item-price">46630 руб.</td></tr></tbody></table></div></form>
<h3><center>Cостав заказа</center></h3>
<form method="post" action="#">
<div class="table-responsive mb-20" >
<table style=" line-height: 0.9em;" class="shop_table-2 cart table" ><thead><tr >
<th class="product-quantity">№</th>
<th class="product-remove ">Нефтепродукт</th>
<th class="product-quantity ">Производитель</th>
<th class="product-remove ">Объем</th>
<th class="product-quantity ">Цена</th></tr></thead><tbody>
92
<tr class="cart_item"><td>1</td>
<td class="item-title">Бензин АИ-95</td>
<td class="item-price">ООО"Лукойл"</td>
<td class="item-item">25 л.</td>
<td class="item-title">1130 руб.</td></tr>
<tr class="cart_item"><td>2</td>
<td class="item-title">Мазут М-200</td>
<td class="item-price">ООО"РоспаИнтернешенел"</td>
<td class="item-item">1 т.</td>
<td class="item-title">45500
руб.</td></tr></tbody></table></div></form></div></div></div></div></div> </div>
site-local/www/views/site/avtoriz.php
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this); ?>
<?php $this->title = 'My Yii Application'; ?>
<div class="idea-area ptb-80">
<div class="container">
<div class="row">
<div class="col-md-3 col-sm-4 col-xs-12">
<div class="idea-tab-menu">
<ul class="nav idea-tab" role="tablist">
<li role="presentation" class="active"><a href="#creativity" ariacontrols="creativity" role="tab" data-toggle="tab">Регистрация</a></li>
<li role="presentation"><a href="#markenting" aria-controls="markenting"
role="tab" data-toggle="tab">Вход</a></li></ul></div></div>
<div class="col-md-9 col-sm-8 col-xs-12" >
<div class="idea-tab-content">
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="creativity">
<div class="coupn-area">
<form action="" method="post">
<div class="catagory-title cat-tit-5 mb20"><h3>Регистрация</h3></div>
<div class="input-box mb-20">
<label>Наименование компании <em>*</em></label>
<input type="text" name="namm" class="info"
placeholder="Наименование компании"></div>
<div class="input-box mb-20">
<label>Юридический адрес<em>*</em></label>
<input type="text" name="namm" class="info"
placeholder="Юридический адрес"></div>
<div class="input-box mb-20"><label>ИНН<em>*</em></label><input type="text"
name="namm" class="info" placeholder="ИНН"></div><div class="input-box mb-20">
<label>КПП<em>*</em></label><input type="text" name="namm" class="info"
placeholder="КПП"></div>
93
<div class="input-box mb-20">
<label>ОГРН<em>*</em></label><input type="text" name="namm" class="info"
placeholder="ОГРН"></div>
<div class="input-box mb-20">
<label>Контактное лицо <em>*</em></label><input type="text" name="namm"
class="info" placeholder="Контактное лицо"></div>
<div class="input-box mb-20">
<label>E-mail<em>*</em></label><input type="text" name="namm" class="info"
placeholder="E-mail"></div>
<div class="input-box mb-20">
<label>Телефон <em>*</em></label><input type="text" name="namm" class="info"
placeholder="Телефон "></div>
<div class="input-box mb-20">
<label>Способ доставки<em>*</em></label><select id="">
<option value="0" selected placeholder="Способ доставки">Выберите способ
доставки</option> <option value="1">Самовывоз</option>
<option value="2">Доставка компании</option></select></div><div class="inputbox mb-20"><label>Растояния от компании до базиса отгрузки(в км)
<em>*</em></label><input type="text" name="namm" class="info" placeholder="Растояния
от компании до базиса отгрузки(в км) "></div>
<div class="input-box mb-20">
<label>Пароль <em>*</em></label><input type="password" name="namm"
class="info" placeholder="пароль"maxlength="12"></div>
<div class="input-box mb-20">
<label>Повтор пароля <em>*</em></label>
<input type="password" name="namm" class="info" placeholder="повтор
пароля"maxlength="12"></div>
<a href="<?=\yii\helpers\Url::toRoute(['order','#' => 'markenting']);?>" class="btn-def
btn2">Зарегистрироваться</a></div></div>
<div role="tabpanel" class="tab-pane fade in" id="markenting">
<div class="cart-page-area">
<div class="coupn-area">
<form action="" method="post">
<div class="catagory-title cat-tit-5 mb-20"><h3>Вход</h3></div>
<div class="input-box mb-20">
<label>Наименование компании <em>*</em></label>
<input type="text" name="namm" class="info" placeholder="Наименование
компании"></div><div class="input-box mb-20">
<label>Пароль <em>*</em></label>
<input type="password" name="namm" class="info"
placeholder="пароль"maxlength="12"></div>
<a href="<?=\yii\helpers\Url::toRoute('off');?>" class="btn-def btn2"style="height:
38px;">Вход</a><a href="<?=\yii\helpers\Url::toRoute('zab');?>" class="btn-def"
style="float:right">Забыли
пароль?</a></form></div></div></div></div></div></div></div></div></div>
site-local/www/views/site/cart.php
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
94
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this); ?>
<?php $this->title = 'My Yii Application'; ?>
<div class="cart-checkout-area pt-30">
<div class="container">
<div class="row">
<div class="product-area">
<div class="clearfix"></div>
<div class="col-sm-12">
<div class="content-tab-product-category pb-70">
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="cart">
<div class="cart-page-area">
<form method="post" action="#">
<div class="table-responsive mb-20">
<table class="shop_table-2 cart table"><thead><tr>
<th>№</th>
<th class="product-thumbnail ">Картинка</th>
<th class="product-quantity ">Наименование продукта</th>
<th class="product-quantity ">Производитель</th>
<th class="product-quantity ">Цена за литр и тону</th>
<th class="product-quantity">Количество</th>
<th class="product-remove ">Стоимость</th>
<th class="product-remove">Редактировать</th></tr></thead><tbody>
<tr class="cart_item"><td >1</td><td class="item-img">
<a href="#"><img src="images/product/01.jpg" alt=""> </a></td>
<td class="item-title"> <a href="#">Бензин АИ-95</a></td>
<td class="item-title"> <a href="#">OOO"Лукойл"</a></td>
<td class="item-price"> 45,2 <br> <br>43200</td>
<td class="item-title">
<div class="cart-quantity">
<div class="product-qty">
<div class="cart-quantity">
<div class="cart-plus-minus">
<label> Литр</label>
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box" type="text">
<div class="inc qtybutton">+</div></div><br>
<div class="cart-plus-minus">
<label> Тонн</label>
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box" type="text">
<div class="inc qtybutton">+</div></div></div></div> </div></td>
<td class="total-price"><strong> 1130</strong></td>
<td class="remove-item"><a href="#"><i class="fa fa-trasho"></i></a></td></tr><tr class="cart_item"><td >2</td><td class="item-img">
<a href="#"><img src="images/product/02.jpg" alt=""> </a></td>
<td class="item-title"> <a href="#">Мазут М-200</a></td>
<td class="item-title"> <a href="#">OOO"РоспанИнтенешенел"</a></td>
<td class="item-img"> 46,6<br> <br>45500 </td>
<td class="item-qty">
95
<div class="cart-quantity">
<div class="product-qty">
<div class="cart-quantity">
<div class="product-qty">
<div class="cart-quantity">
<div class="cart-plus-minus">
<label> Литр</label>
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box"
type="text"><div class="inc qtybutton">+</div> </div><br>
<div class="cart-plus-minus">
<label> Тонн</label>
<div class="dec qtybutton">-</div>
<input value="1" name="qtybutton" class="cart-plus-minus-box" type="text">
<div class="inc qtybutton">+</div></div></div></div></div></div></div></td>
<td class="total-img"><strong> 45500</strong></td>
<td class="remove-item"><a href="#"><i class="fa fa-trasho"></i></a></td></tr></tbody></table> </div>
<div class="cart-subtotal"> <b style="padding-left:
88%;color:#cc3333;"><i>Итого:</i></b><span>46630 руб.</span> </div><div class="updatecontinue-btn text-right pb-20"><a href="<?=\yii\helpers\Url::toRoute('order');?>" class="btn-def
btn2">Отправить заказ</a><a href="neft.html" class="btn-def btn2">Продолжить
покупку</a></div></form> </div></div></div></div></div></div></div></div></div><div>
site-local/www/views/site/off.php
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this); ?>
<?php $this->title = 'My Yii Application'; ?>
<div class="container">
<div class="row">
<div class="col-sm-12">
<div class="content-tab-product-category pb-30"style="padding-bottom:
35px;"><br><center><h3> Заказ оформлен</h3></center><br><center>Спасибо за заказ. С
вами свяжутся в течении трех часов.</center><br><center> <a
href="<?=\yii\helpers\Url::toRoute('avtoriz');?>" class="btn-def btn2"style="height:
38px;float:center">Просмотр заказа</a></center></div></div></div> </div>
site-local/www/views/site/pricelist.php
<div class="cart-checkout-area pt-30">
<div class="container">
<div class="row">
<div class="product-area">
<div class="clearfix"></div>
<div class="col-sm-12">
<div class="content-tab-product-category pb-70">
96
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="cart">
<div class="cart-page-area">
<form method="post" >
<a href="http://www.site.local/web/price.xlsx" download>
<input type="button" value="Скачать" name="openFile"
value="Скачать" > </a></form><form method="post" action="#">
<div class="table-responsive mb-20">
<table class="shop_table-2 cart table"><thead><tr>
<th class="product-remove ">№</th>
<th class="product-remove ">Вид </th>
<th class="product-remove ">Марка</th>
<th class="product-quantity ">Производитель</th>
<th class="product-remove ">Плотность <br/>при наливе кг/м³</th>
<th class="product-remove ">Температура <br/>замерзания ºС</th>
<th class="product-remove ">Паспорт</th>
<th class="product-remove ">Цена за литр</th>
<th class="product-remove ">Цена за тонну</th></tr></thead>
<?php foreach($pricelist as $pricelists) { ?><tbody><tr class="cart_item">
<td class="item-img"><?=$pricelists->id_mark?> </td>
<td class="item-img"> <?=$pricelists->name_product?></td>
<td class="item-img"> <?=$pricelists->name_mark?></td>
<td class="item-img"> <?=$pricelists->name_manufacturer?></td>
<td class="item-img"> <?=$pricelists->density_loading?></td>
<td class="item-img"> <?=$pricelists->temperature_loading?></td>
<td class="item-img"> <a href="http://www.site.local/web/ОКСК.pdf"
style="color:#000;" download><i class="zmdi zmdi-email-open"></i></a></td>
<td class="item-img"> <?=$pricelists->tonn?></td>
<td class="item-img"> <?=$pricelists->litr?></td></tr><?php }
?></tbody></table></div></form></div></div></div></div></div></div></div></div></div>
site-local/www/views/site/kalkrast.php
<?php $this->title = 'My Yii Application'; ?>
<script>function def(){var a; var b; var res;
a=parseInt(document.form.a.value);
b=parseInt(document.form.b.value);
if (document.form.a.value == ""){alert("Пожалуйста, заполните поле растояние до
базиса отгрузки!"){
if (document.form.b.value == "0"){alert("Пожалуйста, выберите объем цистерны
транспорта!") } } }else{ res=a*b; document.form.res.value=res;} }</script>
<div class="cart-checkout-area pt-30">
<div class="container">
<div class="row">
<div class="product-area">
<div class="clearfix"></div>
<div class="col-sm-12">
<div class="content-tab-product-category pb-10">
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="cart">
<div class="cart-page-area">
<form method="post" action="#">
97
<div class="cart-bottom-area">
<div class="row">
<div class="col-md-8 col-sm-7 col-xs-12" style="width: 56%; margin-left: 20%;">
<div class="update-coupne-area">
<div class="coupn-area">
<form name="form">
<div class="catagory-title cat-tit-5 mb-20">
<h3>Калькулятор рассчет стоимости доставки</h3></div><div
></form><form name="form">
<div class="input-box input-box-2 mb-20">
<p><input type="text" placeholder="Растояние до базиса отгрузки (в км.)"
class="info" name="a" style="height: 45px;"></p></div>
<div class="input-box input-box-2 mb-20">
<p><select class="selectpicker select-custom" name="b" >
<option data-tokens="Barisal"value="0" >Выберите объем цистерны
транспорта</option><?php foreach($kalkrast as $kalkrasts) { ?>
<option data-tokens="Barisal" value="<?=$kalkrasts->price_km?>"><?=$kalkrasts>mark_transport?> (<?=$kalkrasts->volum_transport?> л) = <?=$kalkrasts->price_km?>
руб/км</option><?php } ?></select></p></div>
<div class="mb-20">
<input type="button" class="btn-def btn2" value="Расчитать" onClick=
"def();"></div><div class="input-box input-box-2 mb-20">
<input type="text" name="res" style="height: 45px;"></div>
<div class="mb-20"><input type="reset" class="btn-def
btn2"></div></form></div></div></div></div></div></form></div><br></div></div></div><
/div></div></div></div></div></div></div></div></div>
site-local/www/views/site/kalk-plot.php
<?php $this->title = 'My Yii Application'; ?>
<script>function def(){
var a=20; var b; var с; var t; var p; var pop=0; var tem=0; var res;
b=parseFloat(document.form.b.value);
c=parseInt(document.form.c.value);
if (b >=0.8200 && b <= 0.8299){ p=0.000738;
}else if (b >=0.7500 && b <= 0.7599){ p=0.000831;
}else if (b >=0.8000 && b <= 0.8099){ p=0.000765 ;
}else if (b >=0.6500 && b <= 0.6590){ p=0.000962;
}else if (b >=0.6600 && b <= 0.6690){ p=0.000949 ;
}else if (b >=0.6700 && b <= 0.6790){ p=0.000962;
}else if (b >=0.6800 && b <= 0.6890){ p=0.000936;
}else if (b >=0.6900 && b <= 0.6990){ p=0.000925;
}else if (b >=0.7000 && b <= 0.7099){ p=0.000910;
}else if (b >=0.7100 && b <= 0.7199){ p=0.000884;
}else if (b >=0.7200 && b <= 0.7299){ p=0.000870;
}else if (b >=0.7300 && b <= 0.7399){ p=0.000857;
}else if (b >=0.7400 && b <= 0.7499){ p=0.000844;
}else if (b >=0.7600 && b <= 0.7699){ p=0.000818;
}else if (b >=0.7700 && b <= 0.7799){ p=0.000805;
}else if (b >=0.7800 && b <= 0.7899){ p=0.000792;
}else if (b >=0.7900 && b <= 0.7999){ p=0.000778;
}else if (b >=0.8100 && b <= 0.8199){ p=0.000752;
98
}else if (b >=0.8300 && b <= 0.8399){ p=0.000725;
}else if (b >=0.8400 && b <= 0.8499){ p=0.000712;
}else if (b >=0.8500 && b <= 0.8599){ p=0.000699;
}else if (b >=0.8600 && b <= 0.8699){ p=0.000686;
}else if (b >=0.8700 && b <= 0.8799){ p=0.000673;
}else if (b >=0.8800 && b <= 0.8899){ p=0.000660;
}else if (b >=0.8900 && b <= 0.8999){ p=0.000647;
}else if (b >=0.9000 && b <= 0.9099){ p=0.000633;
}else if (b >=0.9100 && b <= 0.9199){ p=0.000620;
}else if (b >=0.9200 && b <= 0.9299){ p=0.000607;
}else if (b >=0.9300 && b <= 0.9399){ p=0.000594;
}else if (b >=0.9400 && b <= 0.9499){ p=0.000581;
}else if (b >=0.9500 && b <= 0.9599){ p=0.000567;
}else if (b >=0.9600 && b <= 0.9699){ p=0.000554;
}else if (b >=0.9700 && b <= 0.9799){ p=0.0005414;
}else if (b >=0.9800 && b <= 0.9899){ p=0.000528;
}else if (b >=0.9900 && b <= 1.0000){ p=0.000515;
}else{ if (document.form.b.value == ""){ alert("Пожалуйста, введите плотность!")}
else alert("Не коректно введена плотность"); }
if(c>a){ t=c-a; pop=Math.round((t*p) * 10000.0) / 10000.0; tem=b-pop; res=tem;
document.form.res.value=res; }
else{ t=a-c; pop=Math.round((t*p) * 10000.0) / 10000.0; tem=b+pop; res=tem;
document.form.res.value=res; } } </script>
<div class="cart-checkout-area pt-30">
<div class="container">
<div class="row"><div class="product-area">
<div class="clearfix"></div>
<div class="col-sm-12">
<div class="content-tab-product-category pb-10">
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="cart">
<div class="cart-page-area">
<form name="form"><div class="cart-bottom-area"><div class="row">
<div class="col-md-8 col-sm-7 col-xs-12"style="width: 65%;margin-left:
17%;"><div class="update-coupne-area"><div class="coupn-area">
<div class="catagory-title cat-tit-5 mb-20"><h3>Калькулятор расчет плотности
нефтепродуктов</h3></div><i>Здесь приведен расчeт плотности нефтепродукта при
указанной температуре</i><br/><br/><div class="input-box input-box-2 mb-20">При
температуре: <input type="text" placeholder="20" class="info" name="a" style="width: 10%;
height: 45px;"> °С Плотность:<input type="text" placeholder=" " class="info"
name="b"style="width: 16%; height: 45px;margin-left: 1%;"> кг/м3</div>
<div class="input-box input-box-2 mb-20">
При температуре: <input type="text" placeholder="" class="info" name="c"="width:
10%; height: 45px;"> °С Плотность:<input type="text" placeholder=" " class="info"
name="res"style="width: 16%; height: 45px;margin-left: 1%;"> кг/м3</div>
<div class="mb-20"><input type="button" class="btn-def btn2" value="Расчитать" onClick=
"def();"></div><div class="mb-20"><input type="reset" class="btn-def
btn2"></div></div></div></div></div></div></form></div><br></div></div></div></div></d
iv></div></div></div></div>div></div>
99
ПРИЛОЖЕНИЕ 3
Файловая структура интерфейса администратора:
Ниже представлены исходные коды только некоторых файлов
интерфейса администратора в силу того, что исходные коды всего
интерфейса заняли бы более 100 страниц.
100
Листинг 3.1. Исходные коды интерфейса администратора.
site-local/www/admin-sait/index.php
<html lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Нефтепродукты | Прайс-лист</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="fonts/css/font-awesome.min.css" rel="stylesheet">
<link href="css/animate.min.css" rel="stylesheet">
<link href="css/custom.css" rel="stylesheet">
<link href="css/icheck/flat/green.css" rel="stylesheet">
<link href="js/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css" />
<link href="js/datatables/buttons.bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="js/datatables/fixedHeader.bootstrap.min.css" rel="stylesheet"
type="text/css" /><link href="js/datatables/responsive.bootstrap.min.css" rel="stylesheet"
type="text/css" /><link href="js/datatables/scroller.bootstrap.min.css" rel="stylesheet"
type="text/css" /><script src="js/jquery.min.js"></script></head>
<body class="nav-md">
<div class="container body">
<div class="main_container">
<div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;">
<a href="index.php" class="site_title"><i class="fa fa-key"></i> <span>Админ
панель</span></a></div><div class="clearfix"></div>
<div class="profile"><div class="profile_pic">
<img src="images/img.jpg" alt="..." class="img-circle profile_img"></div>
<div class="profile_info"><span>Добро пажаловать,</span></div></div><br />
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section"><center><h3>Админ</h3></center>
<ul class="nav side-menu">
<li><a href="index.php"><i class="fa fa-home"></i>Главная</a></li>
<li><a><i class="fa fa-dollar"></i> Заказы <span class="fa fa-chevrondown"></span></a><ul class="nav child_menu" style="display: none">
<li><a href="klient.php">Клиенты</a></li>
<li><a href="zakaz.php">Заявки</a></li>
<li><a href="zak.php">Заказ транспорта</a></li></ul></li>
<li><a><i class="fa fa-edit"></i> Каталог <span class="fa fa-chevrondown"></span></a><ul class="nav child_menu" style="display: none">
<li><a href="neft.php">Нефтепродукты</a></li>
<li><a href="postav.php">Производители</a></li>
<li><a href="postavka.php">Поставщики</a></li></ul></li>
<li><a href="bus.php"><i class="fa fa-truck"></i> Транспорт</a></li>
<li><a href="cotr.php"><i class="fa fa-group"></i> Сотрудники</a></li>
</ul></div></div><div class="sidebar-footer hidden-small">
<a data-toggle="tooltip" data-placement="top" title="Выход">
<span class="glyphicon glyphicon-off" ariahidden="true"></span></a></div></div></div><div class="top_nav">
101
<div class="nav_menu"><nav class="" role="navigation">
<div class="nav toggle"><a id="menu_toggle"><i class="fa fabars"></i></a></div></nav></div></div><div class="right_col" role="main"><div class="">
<div class="page-title">
<div class="title_left"></div></div>
<center><h1 style="margin-top: 300px;">Добро пожаловать в панель
администратора!<br/> Здесь вы можете редактировать информацию хранящуюся в базе
данных.<h1></center><div id="custom_notifications" class="custom-notifications dsp_none">
<ul class="list-unstyled notifications clearfix" data-tabbed_notifications="notifgroup"></ul><div class="clearfix"></div>
<div id="notif-group" class="tabbed_notifications"></div></div>
<script src="js/bootstrap.min.js"></script>
<script src="js/progressbar/bootstrap-progressbar.min.js"></script>
<script src="js/nicescroll/jquery.nicescroll.min.js"></script>
<script src="js/icheck/icheck.min.js"></script>
<script src="js/custom.js"></script>
<script src="js/datatables/js/jquery.dataTables.js"></script>
<script src="js/datatables/tools/js/dataTables.tableTools.js"></script> -->
<script src="js/pace/pace.min.js"></script><script>
var handleDataTableButtons = function() {"use strict";
0 !== $("#datatable-buttons").length && $("#datatable-buttons").DataTable({ dom:
"Bfrtip",buttons: [{ extend: "copy", className: "btn-sm"}, {
extend: "excel",className: "btn-sm"}, ],responsive: !0})},
TableManageButtons = function() {
"use strict";return {init: function() {
handleDataTableButtons()}}}();</script>
<script type="text/javascript">
$(document).ready(function() {
$('#datatable').dataTable();
$('#datatable-keytable').DataTable({keys: true});
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable({ajax: "js/datatables/json/scrollerdemo.json",deferRender: true, scrollY: 380, scrollCollapse: true,scroller: true});
var table = $('#datatable-fixed-header').DataTable({fixedHeader: true});});
TableManageButtons.init();</script></body></html>
site-local/www/admin-sait/db.php
<?php $host = '127.0.0.1'; // адрес сервера
$database = 'diplom'; // имя базы данных$user = 'root'; // имя пользователя
$password = ''; // пароль
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " .
mysqli_error($link));?>
site-local/www/admin-sait/klientadd.php
<html lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
102
<title>Админ панель | </title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="fonts/css/font-awesome.min.css" rel="stylesheet">
<link href="css/animate.min.css" rel="stylesheet">
<link href="css/custom.css" rel="stylesheet">
<link href="css/icheck/flat/green.css" rel="stylesheet">
<script src="js/jquery.min.js"></script></head>
<body style="background:#F7F7F7;"><div class="">
<a class="hiddenanchor" id="toregister"></a>
<a class="hiddenanchor" id="tologin"></a><div id="wrapper">
<div id="login" class="animate form">
<section class="login_content">
<form action="testreg.php" method="post"><h1>Вход</h1><div>
<input name="login" type="text" size="15" maxlength="15"class="form-control"
placeholder="Логин" required="" /></div><div>
<input name="password" type="password" size="15" maxlength="15" class="formcontrol" placeholder="Пароль" required="" /></div><div>
<a class="btn btn-default submit" href="index.php">Войти</a>
<a class="reset_pass" href="#" style="margin-right: 0px;">Забыли пароль?</a></div>
<div class="clearfix"></div><div class="separator"><p class="change_link">
<a href="#toregister" class="to_register"> Регистрация</a></p>
<div class="clearfix"></div><br />
<div><h1> Админ панель для базы данных </h1></div></div></form></section>
</div> <div id="register" class="animate form">
<section class="login_content">
<form action="save_adm.php" method="post"> <h1>Регистрация</h1>
<div> <input name="login" type="text" size="15" maxlength="15" class="formcontrol" placeholder="Логин" required="" /></div>
<div><input name="password" type="password" size="15"
maxlength="15"class="form-control" placeholder="Пароль" required=""
/></div><div><center><input class="btn btn-default submit" style="margin-left: 88px;"
type="submit" name="submit" value="Зарегистрироваться"></center></div>
<div class="clearfix"></div><div class="separator">
<p class="change_link"><a href="#tologin" class="to_register"> Вход </a></p>
<div class="clearfix"></div><br /><div><h1> Админ панель для базы данных
</h1></div></div></form></section></div></div></div></body></html>
site-local/www/admin-sait/save-adm.php
<?php if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') {
unset($login);} } //заносим введенный пользователем логин в переменную $login, если он
пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') {
unset($password);} }//заносим введенный пользователем пароль в переменную $password,
если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)) //если пользователь не ввел логин или
пароль, то выдаем ошибку и останавливаем скрипт{ exit ("Вы ввели не всю информацию,
вернитесь назад и заполните все поля!"); }//если логин и пароль введены, то обрабатываем
их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
103
$password = stripslashes($password);
$password = htmlspecialchars($password);//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);// подключаемся к базе// файл bd.php должен быть в
той же папке, что и все остальные, если это не так, то просто измените путь // проверка на
существование пользователя с таким же логином require_once 'db.php';
$result = mysqli_query($link,"SELECT `id` FROM `worker_log` WHERE
`login`='$login'");
$myrow = mysqli_fetch_array($result);
if (!empty($myrow['id'])) {exit ("Извините, введённый вами логин уже
зарегистрирован. Введите другой логин.");} // если такого нет, то сохраняем данные
$result2 = mysqli_query ($link,"INSERT INTO `worker_log` (`login`,`password`)
VALUES('$login','$password')");// Проверяем, есть ли ошибки?>
<script type="text/javascript">
alert("Вы успешно зарегистрированы!");
window.location.href = 'login.php';</script>
site-local/www/admin-sait/zakaz.php
<body class="nav-md">
<div class="container body">
<div class="main_container">
<div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;">
<a href="index.php" class="site_title"><i class="fa fa-key"></i> <span>Админ
панель</span></a></div><div class="clearfix"></div><div class="profile">
<div class="profile_pic"><img src="images/img.jpg" alt="..." class="img-circle
profile_img"></div><div class="profile_info"><span>Добро
пажаловать,</span></div></div><br />
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section"><center><h3>Админ</h3></center>
<ul class="nav side-menu">
<li><a href="index.php"><i class="fa fa-home"></i>Главная</a></li>
<li><a><i class="fa fa-dollar"></i> Заказы
<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu" style="display: none">
<li><a href="klient.php">Клиенты</a></li>
<li><a href="zakaz.php">Заявки</a></li>
<li><a href="zak.php">Заказ транспорта</a></li></ul></li>
<li><a><i class="fa fa-edit"></i> Каталог
<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu" style="display: none">
<li><a href="neft.php">Нефтепродукты</a></li>
<li><a href="postav.php">Производители</a></li>
<li><a href="postavka.php">Поставщики</a></li></ul></li>
<li><a href="bus.php"><i class="fa fa-truck"></i> Транспорт</a></li>
<li><a href="cotr.php"><i class="fa fa-group"></i>
Сотрудники</a></li></ul></div></div><div class="sidebar-footer hidden-small">
<a data-toggle="tooltip" data-placement="top" title="Выход">
104
<span class="glyphicon glyphicon-off" ariahidden="true"></span></a></div></div></div><div class="top_nav">
<div class="nav_menu"> <nav class="" role="navigation">
<div class="nav toggle">
<a id="menu_toggle"><i class="fa fa-bars"></i></a></div></nav></div></div>
<div class="right_col" role="main">
<div class="">
<div class="page-title">
<div class="title_left">
<h3 style="width: 1200px; color:rgb(35, 82, 124);">Заявка - <a
href="orders.php">Состав заявки</a></h3></div></div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel"><h2>Таблица заявок</h2>
<table id="datatable-buttons" class="table table-striped tablebordered"><thead><tr><th>№</th><th>Покупатель</th>
<th>Номер договора с фирмой</th>
<th>Вид доставки</th>
<th>Количество позиций</th>
<th>Итоговая сумма</th>
<th>Дата заявки</th>
<th>Cтатус заявки</th>
<th>Ответственный сотрудник</th>
<th>Дата исполнения</th>
<th>Действия</th></tr></thead><tbody><?php require_once 'db.php';
if (isset($_GET['del_id'])) { //проверяем, есть ли переменная
$sql = mysqli_query($link,"DELETE FROM enty WHERE id_enty = ".$_GET['del_id']);
}if (isset($_GET['red_id'])) { //Проверяем, передана ли переменная на редактирования
if (isset($_POST['id_customer'])||isset($_POST['number_customer'])
||isset($_POST['data_accommondation'])||isset($_POST['number_items'])||isset($_POST['
id_worker'])||isset($_POST['id_shipment'])||isset($_POST['status_of'])||isset($_POST['data_perfo
mance'])||isset($_POST['final_amount'])) { //Если новое имя предано, то обновляем и имя и
цену $sql = mysqli_query($link,'UPDATE `enty` SET '.'`id_customer` =
"'.$_POST['id_customer'].'",
'.'`number_customer` = "'.$_POST['number_customer'].'", '.'`data_accommondation` =
"'.$_POST['data_accommondation'].'",'.'`number_items` = "'.$_POST['number_items'].'",
'.'`id_worker` = "'.$_POST['id_worker'].'", '.'`id_shipment` =
"'.$_POST['id_shipment'].'",
'.'`data_perfomance` = "'.$_POST['data_perfomance'].'",'.'`final_amount` =
"'.$_POST['final_amount'].'", '.'`status_of` = "'.$_POST['status_of'].'"'.'WHERE `id_enty`
= '.$_GET['red_id']);}} ?> <?php
require_once 'db.php';
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " .
mysqli_error($link));
$query ="SELECT id_enty, name_customer, number_customer, number_items,
name_shipment, data_accommondation, FIO, status_of, data_perfomance, final_amount FROM
enty join shipment ON enty.id_shipment = shipment.id_shipment join customer ON
enty.id_customer = customer.id_customer join worker ON enty.id_worker = worker.id_worker";
$result = mysqli_query( $link, $query)or die("Ошибка " . mysqli_error($link));
if($result){while($row = mysqli_fetch_assoc($result)){
echo'<tr>'; echo' <td>'.$row['id_enty'].'</td>';
105
echo' <td>'.$row['name_customer'].'</td>';
echo' <td>'.$row['number_customer'].'</td>';
echo' <td>'.$row['name_shipment'].'</td>';
echo' <td>'.$row['number_items'].'</td>';
echo' <td>'.$row['final_amount'].'</td>';
echo' <td>'.$row['data_accommondation'].'</td>';
echo' <td>'.$row['status_of'].'</td>';
echo' <td>'.$row['FIO'].'</td>';
echo' <td>'.$row['data_perfomance'].'</td>';
echo'<td> <a href="#razdel">
<i class="fa fa-plus-square"></i></a>
<a href="?red_id='.$row['id_enty'].'"><i class="fa fawrench"></i></a> <a href="?del_id='.$row['id_enty'].'"><i class="fa fa-timescircle"></i></a></td>';echo' </tr>'; } } ?> </tbody></table></div></div></div></div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title"><h2 >Добавление заявки</h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
<li><a class="close-link"><i class="fa fa-close"></i></a></li></ul>
<a name="razdel"></a>
<div class="clearfix"></div></div>
<div class="x_content"><br />
<form action="zakazadd.php" method="post" name="forma" id="demo-form2"
data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="firstname">Выберите покупателя<span class="required" disabled>*</span></label> <div
class="col-md-6 col-sm-6 col-xs-12">
<select name="id_customer"id="heard" class="form-control" required >
<option selected value = "" disabled>Выберите покупателя</option><?php
$quer ="SELECT * FROM `customer`";
$res = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){?>
<option value="<?=$row['id_customer']?>"><?=$row['name_customer']?></option>
<?php } ?> </select></div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Номер
договора с фирмой<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="number_customer" required="required"
class="form-control col-md-7 col-xs-12"></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
способ доставки<span class="required" disabled>*</span></label> <div class="col-md-6 colsm-6 col-xs-12"><select name="id_shipment" id="heard" class="form-control" required >
<option selected value = "" disabled>Выберите способ доставки</option>
<?php $quer ="SELECT * FROM `shipment`";
$res = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){ ?>
<option value="<?=$row['id_shipment']?>"><?=$row['name_shipment']?></option>
106
<?php } ?></select></div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Количество
позиций<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="number_items" required="required"
class="form-control col-md-7 col-xs-12"></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="lastname">Итоговая сумма (в руб.)<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="final_amount"
required="required" class="form-control col-md-7 col-xs-12"></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Дата
размещения заявки<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12"><fieldset>
<div class="control-group">
<div class="controls">
<div class="col-md-11 xdisplay_inputx form-group hasfeedback"style="padding-left: 0px;">
<input type="text" id="single_cal3" name="data_accommondation" placeholder="" ariadescribedby="inputSuccess2Status3" style="padding-left: 60px;" class="tcal" value="" /></div>
</div></div></fieldset></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
отвественного сотрудника<span class="required" disabled>*</span>
</label> <div class="col-md-6 col-sm-6 col-xs-12">
<select name="id_worker" id="heard" class="form-control" required >
<option selected value = "" disabled>Выберите отвественного
сотрудника</option>
<?php $quer ="SELECT * FROM `worker`";
$res = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){?>
<option value="<?=$row['id_worker']?>"><?=$row['FIO']?></option>
<?php } ?> </select></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Статус заявки</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="status_of" id="heard" class="form-control" required >
<option selected value = "" disabled>Выберите статус</option>
<option>На расмотрении</option>
<option>Исполняется</option>
<option>Выполнена</option></select></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Дата
исполнения заявки<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12"><fieldset>
<div class="control-group">
<div class="controls">
<div class="col-md-11 xdisplay_inputx form-group has-feedback"
style="padding-left: 0px;">
107
<input type="text" id="single_cal3" name="data_perfomance" placeholder="" ariadescribedby="inputSuccess2Status3" style="padding-left: 60px;" class="tcal" value="" /></div>
</div></div></fieldset></div></div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button type="reset" class="btn btn-primary">Очистить</button>
<button name="submit" type="submit" class="btn btn-success">Добавить</button>
</div></div></form></div></div></div></div>
<?phpif (isset($_GET['red_id'])) { //Если передана переменная на редактирование
$sql = mysqli_query( $link, "SELECT id_enty, name_customer, number_customer,
number_items, name_shipment, data_accommondation, FIO, status_of, data_perfomance,
final_amount FROM enty join shipment ON enty.id_shipment = shipment.id_shipment
join customer ON enty.id_customer = customer.id_customer join worker ON
enty.id_worker = worker.id_worker WHERE `id_enty`=".$_GET['red_id']); //запрос к БД
$res = mysqli_fetch_array($sql); //получение самой записи ?>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title"><h2>Редактирование вида нефтепродукта</h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
<li><a class="close-link"><i class="fa fa-close"></i></a></li></ul>
<div class="clearfix"></div></div>
<div class="x_content"><br />
<form action="" method="post" id="demo-form2" data-parsley-validate class="formhorizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
покупателя<span class="required" disabled>*</span></label> <div class="col-md-6 col-sm-6
col-xs-12">
<select name="id_customer"id="heard" class="form-control" required >
<option selected value="0"disabled><?php echo''.$res['name_customer'].'';
?></option>
<?php $quer ="SELECT * FROM `customer`"; mysqli_query($link, "SET
CHARACTER SET 'utf8'");
$ress = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($rows = mysqli_fetch_assoc($ress)){?>
<option
value="<?=$rows['id_customer']?>"><?=$rows['name_customer']?></option>
<?php } ?> </select></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Номер
договора с фирмой<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="number_customer" value="<?php
echo''.$res['number_customer'].''; ?>"required="required" class="form-control col-md-7 col-xs12"></div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
способ доставки<span class="required" disabled>*</span></label> <div class="col-md-6 colsm-6 col-xs-12">
108
<select name="id_shipment" id="heard" class="form-control" required >
<option selected value="0"disabled><?php echo''.$res['name_shipment'].''; ?></option>
<?php $quer ="SELECT * FROM `shipment`";
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$ress = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($rows = mysqli_fetch_assoc($ress)){?>
<option value="<?=$rows['id_shipment']?>"><?=$rows['name_shipment']?></option>
<?php } ?></select> </div> </div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Количество
позиций<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="number_items" value="<?php
echo''.$res['number_items'].''; ?>" required="required" class="form-control col-md-7 col-xs-12">
</div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Итоговая
сумма (в руб.)<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="final_amount" value="<?php
echo''.$res['final_amount'].''; ?>" required="required" class="form-control col-md-7 col-xs-12">
</div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Дата
размещения заявки<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12"><fieldset>
<div class="control-group">
<div class="controls">
<div class="col-md-11 xdisplay_inputx form-group has-feedback" style="paddingleft: 0px;"><input type="text" id="single_cal3" name="data_accommondation" placeholder=""
aria-describedby="inputSuccess2Status3" style="padding-left: 60px;" class="tcal" value="<?php
echo''.$res['data_accommondation'].''; ?>" /></div></div></div></fieldset></div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
отвественного сотрудника<span class="required" disabled>*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="id_worker" id="heard" class="form-control" required >
<option selected value="0"disabled><?php echo''.$res['FIO'].''; ?></option>
<?php $quer ="SELECT * FROM `worker`";
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$ress = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($rows = mysqli_fetch_assoc($ress)){ ?>
<option value="<?=$rows['id_worker']?>"><?=$rows['FIO']?></option>
<?php } ?> </select> </div></div> <div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Статус заявки</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="status_of" id="heard" class="form-control" required >
<option selected value="0"disabled><?php echo''.$res['status_of'].'';
?></option><option>На расмотрении</option>
<option>Исполняется</option>
<option>Выполнена</option></select></div></div><div class="formgroup"><label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Дата
размещения заявки<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12"><fieldset>
<div class="control-group">
109
<div class="controls">
<div class="col-md-11 xdisplay_inputx form-group has-feedback" style="paddingleft: 0px;">
<input type="text" id="single_cal3" name="data_perfomance" placeholder="" ariadescribedby="inputSuccess2Status3" style="padding-left: 60px;" class="tcal" value="<?php
echo''.$res['data_perfomance'].''; ?>" /></div></div></div></fieldset></div></div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button type="reset" class="btn btn-primary">Очистить</button>
<button name="submit" type="submit" class="btn btnsuccess">Редактировать</button>
</div></div></form><?php}mysqli_close($link); ?></div></div></div></div>
</div></div></div><div id="custom_notifications" class="custom-notifications dsp_none">
<ul class="list-unstyled notifications clearfix" data-tabbed_notifications="notif-group"></ul>
<div class="clearfix"></div><div id="notif-group" class="tabbed_notifications"></div></div>
site-local/www/admin-sait/zakazadd.php
<?php require_once 'db.php';
$id_customer = $_POST['id_customer'];
$number_customer = $_POST['number_customer'];
$data_accommondation = $_POST['data_accommondation'];
$number_items = $_POST['number_items'];
$id_worker = $_POST['id_worker'];
$id_shipment = $_POST['id_shipment'];
$status_of = $_POST['status_of'];
$data_perfomance = $_POST['data_perfomance'];
$final_amount = $_POST['final_amount'];
$insert_sql = "INSERT INTO `enty`(`id_enty`, `id_customer`, `number_customer`,
`data_accommondation`, `number_items`, `id_worker`, `id_shipment`, `status_of`,
`data_perfomance`, `final_amount`)VALUES (NULL, '{$id_customer}','{$number_customer}',
'{$data_accommondation}','{$number_items}', '{$id_worker}','{$id_shipment}',
'{$status_of}','{$data_perfomance}', '{$final_amount}')";
$result = mysqli_query ($link, $insert_sql ); mysqli_close($link);?>
<script type="text/javascript">
alert("Данные добавлены в базу");
window.location.href = 'zakaz.php';</script>
site-local/www/admin-sait/orders.php
<body class="nav-md">
<div class="container body">
<div class="main_container">
<div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;">
<a href="index.php" class="site_title"><i class="fa fa-key"></i> <span>Админ
панель</span></a></div><div class="clearfix"></div>
<div class="profile"><div class="profile_pic">
<img src="images/img.jpg" alt="..." class="img-circle profile_img"></div>
<div class="profile_info"><span>Добро пажаловать,</span></div></div><br />
110
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section"><center><h3>Админ</h3></center>
<ul class="nav side-menu">
<li><a href="index.php"><i class="fa fa-home"></i>Главная</a></li>
<li><a><i class="fa fa-dollar"></i> Заказы <span class="fa fa-chevrondown"></span></a><ul class="nav child_menu" style="display: none">
<li><a href="klient.php">Клиенты</a> </li>
<li><a href="zakaz.php">Заявки</a></li>
<li><a href="zak.php">Заказ транспорта</a></li></ul></li>
<li><a><i class="fa fa-edit"></i> Каталог <span class="fa fa-chevrondown"></span></a><ul class="nav child_menu" style="display: none">
<li><a href="neft.php">Нефтепродукты</a></li>
<li><a href="postav.php">Производители</a></li>
<li><a href="postavka.php">Поставщики</a></li></ul></li>
<li><a href="bus.php"><i class="fa fa-truck"></i> Транспорт</a> </li>
<li><a href="cotr.php"><i class="fa fa-group"></i>
Сотрудники</a></li></ul></div></div>
<div class="sidebar-footer hidden-small">
<a data-toggle="tooltip" data-placement="top" title="Выход">
<span class="glyphicon glyphicon-off" ariahidden="true"></span></a></div></div></div>
<div class="top_nav">
<div class="nav_menu"><nav class="" role="navigation">
<div class="nav toggle">
<a id="menu_toggle"><i class="fa fa-bars"></i></a></div></nav></div></div>
<div class="right_col" role="main">
<div class=""><div class="page-title"><div class="title_left">
<h3 style="width: 1200px; color:rgb(35, 82, 124);"><a
href="zakaz.php">Заявки</a> - Состав заявок </h3></div></div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel"><h2>Таблица заказов входящих в заявки</h2>
<table id="datatable-buttons" class="table table-striped tablebordered"><thead><tr>
<th>№</th><th>Вид нефтепродукта</th><th>Марка</th>
<th>Производитель</th><th>Номер заявки</th><th>Обьем заказа</th>
<th>Действие</th></tr></thead><tbody>
<?php require_once 'db.php';
if (isset($_GET['del_id'])) { //проверяем, есть ли переменная
$sql = mysqli_query($link,"DELETE FROM contents WHERE id_contents
=".$_GET['del_id']); //удаляем строку из таблицы}
if (isset($_GET['red_id'])) { //Проверяем, передана ли переменная на редактирования
if (isset($_POST['enty_id'])||isset($_POST['volume_contents'])||isset($_POST['id_mark'])) {
$sql = mysqli_query($link,'UPDATE `contents` SET '.'`enty_id` =
"'.$_POST['enty_id'].'",
'.'`volume_contents` = "'.$_POST['volume_contents'].'", '.'`id_mark` =
"'.$_POST['id_mark'].'"
'.'WHERE `id_contents` = '.$_GET['red_id']);}} ?>
<?php require_once 'db.php';
$link = mysqli_connect($host, $user, $password, $database)
or die("Ошибка " . mysqli_error($link));
111
$query ="SELECT id_contents,enty_id, name_product, name_mark,name_manufacturer,
volume_contents FROM contents INNER join enty ON contents.enty_id = enty.id_enty INNER
join mark ON contents.id_mark = mark.id_mark INNER join oil_product ON
oil_product.id_oil_product = mark.id_oil_product INNER join manufacturer ON
mark.id_manufacturer = manufacturer.id_manufacturer ";
$result = mysqli_query( $link, $query)or die("Ошибка " . mysqli_error($link));
if($result){ while($row = mysqli_fetch_assoc($result)){
echo'<tr>'; echo' <td>'.$row['id_contents'].'</td>';
echo' <td>'.$row['name_product'].'</td>';
echo'<td>'.$row['name_mark'].'</td>';
echo'<td>'.$row['name_manufacturer'].'</td>';
echo' <td>'.$row['enty_id'].'</td>';
echo'<td>'.$row['volume_contents'].'</td>'; echo'<td> <center>
<a href="#razdel"><i class="fa fa-plus-square"></i>
<a href="?red_id='.$row['id_contents'].'"><i class="fa fawrench"></i></a>
<a href="?del_id='.$row['id_contents'].'"> <i class="fa fa-times-circle"></i></a></td>';
echo' </tr>';} }mysqli_close($link); ?> </tbody></table></div></div></div></div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title"><h2>Добавление заказа</h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
<li><a class="close-link"><i class="fa fa-close"></i></a></li></ul>
<div class="clearfix"></div></div>
<div class="x_content"><br />
<form action="ordersadd.php" method="post" id="demo-form2" class="formhorizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
нефтепродукт<span class="required" disabled>*</span>
</label> <div class="col-md-6 col-sm-6 col-xs-12">
<select name="id_mark" id="heard" class="form-control" required >
<option selected value = "" disabled>Выберите нефтепродукт</option>
<?php require_once 'db.php';
$quer ="SELECT `id_mark`, `name_mark`, `name_product`, `name_manufacturer`
FROM `mark` inner join oil_product on mark.id_oil_product=oil_product.id_oil_product inner
JOIN manufacturer on mark.id_manufacturer=manufacturer.id_manufacturer ";
$res = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){?>
<option value="<?=$row['id_mark']?>"><?=$row['name_product']?>(<?=$row['name_mark']?>)
- <?=$row['name_manufacturer']?></option> <?php}?></select> </div> </div>
<div class="form-group"><label class="control-label col-md-3 col-sm-3 col-xs-12"
for="first-name">Номер заявки<span class="required" disabled>*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="enty_id" id="heard" class="form-control" required >
<option selected value = "0" disabled>Выберите номер заявки</option>
<?php $query ="SELECT id_enty FROM enty";
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$resul = mysqli_query( $link, $query)or die("Ошибка " . mysqli_error($link));
112
if($result){ while($object = mysqli_fetch_array($resul)){
echo'<option value='.$object['id_enty'].'>'.$object['id_enty'].'</option>';}}?> </select>
</div></div><div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Объем
заказа (в литрах)<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="volume_contents" required="required"
class="form-control col-md-7 col-xs-12"></div></div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button type="reset" class="btn btn-primary">Очистить</button>
<button name="submit" type="submit" class="btn btnsuccess">Добавить</button></div></div></form></div></div></div></div><?php
if (isset($_GET['red_id'])) { //Если передана переменная на редактирование
$sql = mysqli_query( $link, "SELECT id_contents,enty_id, name_product,
name_mark,name_manufacturer, volume_contents FROM contents INNER join enty ON
contents.enty_id = enty.id_enty INNER join mark ON contents.id_mark = mark.id_mark INNER
join oil_product ON oil_product.id_oil_product = mark.id_oil_product INNER join
manufacturer ON mark.id_manufacturer = manufacturer.id_manufacturer WHERE
`id_contents`=".$_GET['red_id']); //запрос к БД
$res = mysqli_fetch_array($sql); //получение самой записи?>
<div class="clearfix"></div><div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title"><h2>Редактирование вида нефтепродукта</h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
<li><a class="close-link"><i class="fa fa-close"></i></a></li></ul>
<div class="clearfix"></div></div>
<div class="x_content"><br />
<form action="" method="post" id="demo-form2" data-parsley-validate class="formhorizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Выберите
нефтепродукт<span class="required" disabled>*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="id_mark" id="heard" class="form-control" required >
<option selected value="0"disabled><?=$res['name_product']?> <?=$res['name_mark']?> - <?=$res['name_manufacturer']?></option>
<?php $quer ="SELECT `id_mark`, `name_mark`, `name_product`,
`name_manufacturer` FROM `mark` inner join oil_product on
mark.id_oil_product=oil_product.id_oil_product inner JOIN manufacturer on
mark.id_manufacturer=manufacturer.id_manufacturer ";
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$ress = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($rows = mysqli_fetch_assoc($ress)){?>
<option value="<?=$rows['id_mark']?>"><?=$rows['name_product']?> <?=$rows['name_mark']?> - <?=$rows['name_manufacturer']?></option>
<?php}?></select></div> </div>
<div class="form-group">
113
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Номер
заявки<span class="required" disabled>*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select name="enty_id" id="heard" class="form-control" required >
<option selected value="0"disabled><?php echo''.$res['enty_id'].''; ?></option>
<?php $quer ="SELECT `id_enty` FROM `enty`";
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$ress = mysqli_query( $link, $quer)or die("Ошибка " . mysqli_error($link));
while($res = mysqli_fetch_assoc($ress)){?>
<option value="<?=$res['id_enty']?>"><?=$res['id_enty']?></option>
<?php}?></select> </div></div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Объем
заказа (в литрах)<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="last-name" name="volume_contents" value="<?php
echo''.$res['volume_contents'].''; ?>" required="required" class="form-control col-md-7 col-xs12"></div></div><div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button type="reset" class="btn btn-primary">Очистить</button>
<button name="submit" type="submit" class="btn btnsuccess">Добавить</button></div></div></form><?php } mysqli_close($link);
?></div></div></div></div></div></div></div>
<div id="custom_notifications" class="custom-notifications dsp_none">
<ul class="list-unstyled notifications clearfix" data-tabbed_notifications="notifgroup"></ul><div class="clearfix"></div><div id="notif-group"
class="tabbed_notifications"></div></div>
site-local/www/admin-sait/ordersadd.php
<?php require_once 'db.php';
$enty_id = $_POST['enty_id'];
$volume_contents = $_POST['volume_contents'];
$id_mark = $_POST['id_mark'];
$insert_sql = "INSERT INTO `contents`(`id_contents`, `enty_id`, `volume_contents`,
`id_mark`)VALUES (NULL, '{$enty_id}', '{$volume_contents}','{$id_mark}')";
mysqli_query($link, "SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
mysqli_query($link, "SET CHARACTER SET 'utf8'");
$result = mysqli_query ($link, $insert_sql ); mysqli_close($link); ?>
<script type="text/javascript">
alert("Данные добавлены в базу");
window.location.href = 'orders.php';</script>
114
Выпускная квалификационная работа выполнена мной самостоятельно.
Все использованные в работе материалы и концепции из опубликованной
научной литературы и других источников имеют ссылки на них.
«___» ________________ _____ г.
__________________________
(подпись)
_____________________
(Ф.И.О.)
Отзывы:
Авторизуйтесь, чтобы оставить отзыв