Автоматизированная система "Мониторинг закупок"

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 02.06.2017
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Затраты на ремонт вычислительной техники (СРЕМ) составляют 5 % от ее стоимости и рассчитываются:

Тогда затраты на оборудование с учетом его ремонта составляют:

3.2.3 Расчет затрат на услуги сторонних организаций

При разработке данного программного изделия потребовались услуги сторонних организаций по изготовлению плакатов и схем формата A1. Распечатка 6 листов ватмана формата А1 в количестве 6 шт. 80руб * 6 = 480руб.

3.2.4 Расчет затрат на заработную плату

В соответствии с главой 23 НКРФ доходы физических лиц за вычетом некоторых льгот подлежат обязательному налогообложению (налог на доходы физических лиц) и рассчитываются по формуле:

, (2)

- основная заработная плата;

- сумма к выплате, которая была оговорена с работником (12 000 руб.);

- налог на доходы с физических лиц (13%).

Таким образом,

3.2.5 Расчет затрат на дополнительную заработную плату

Расходы на дополнительную заработанную плату учитывают все выплаты непосредственно исполнителям за время непроработанное на производстве, но предусмотренное законодательством, в том числе: оплата очередных отпусков, компенсация за недоиспользованный отпуск, и др. Величина этих выплат составляет 20% от размера основной заработной платы

3.2.6 Расчет отчислений на социальные нужды

Расчет отчислений на социальные нужды производится в соответствии с главой 24 Налогового Кодекса РФ «Единый социальный налог (взнос)» и включает отчисления, производимые в фонды социального страхования, обязательного медицинского страхования и пенсионный фонд.

Ставки единого социального налога определяются в зависимости от величины налогооблагаемой базы. Величина единого социального налога рассчитывается по формуле:

, (3)

где - коэффициент отчисления на социальные нужды.

Коэффициент отчислений на социальные нужды (без учета льгот) складывается из следующих отчислений:

1. отчисление в фонд социального страхования составляет 4% от заработанной платы;

2. отчисление в федеральный бюджет составляет 28%

3. отчисление в фонд обязательного медицинского страхования составляет 3,6%

Отсюда:

3.2.7 Расчет расходов на налоги

Расчет расходов на налоги ведется с учетом налогов на имущество и налогов на транспортные средства.

Налог на имущество в данном случае не платится, поскольку все имеющееся в наличии имущество, включаемое в налогооблагаемую базу в соответствии с инструкцией «О порядке исчисления и уплаты в бюджет налога на имущество предприятий», используется на нужды образования, и, следовательно, налогом на имущество не облагается.

Налог на владельцев транспортных средств не платится, в связи с отсутствие транспортных средств, используемых для разработки информационной системы.

3.2.8 Расчет накладных расходов

Накладные расходы составляют 10% от суммы остальных расходов:

(4)

3.2.9 Расчет себестоимости программного изделия

Себестоимость изделия рассчитывается как сумма по всем выше перечисленным статьям затрат и составляет:

(5)

3.2.10 Расчет прибыли от реализации программного изделия

Величина прибыли соответствует сумме чистой прибыли, исчисленной из определенного процента от общих затрат. На определение этого процента влияет величина налога на прибыль, который в 2017 году составляет 24% от величины прибыли.

Расчет прибыли произведем исходя из нормы прибыли. Норма прибыли задана

Тогда прибыль, с учетом налога на прибыль рассчитывается по формуле:

(6)

3.2.11 Расчет цена реализации программного изделия

Значение цены формируется путем суммирования величины себестоимости и размера прибыли:

3.2.12 Расчет договорной цены реализации программного изделия

Значение договорной цены соответствует сумме цены продукции и налога на добавленную стоимость, который исчисляется из расчета 18% от этой цены.

(7)

Заключение

По результатам дипломного проекта можно сделать следующие выводы:

1) Была изучена предметная область, связанная с организацией процесса закупок в компании ООО «Профессионал»;

2) Были сформулированы требования к разрабатываемой информационной системе;

3) Была спроектирована структура информационной системы;

4) Были разработаны алгоритмы работы программных модулей;

5) Была разработана структура базы данных для хранения информации, необходимой для разработки;

6) Был разработан интерактивный пользовательский интерфейс, с помощью которого пользователи могут выполнять требуемые задачи;

7) Были изучены информационные системы, предназначенные для организации работы отдела закупок;

8) Был проведен сравнительный анализ изученных систем;

9) Была составлена смета затрат на реализацию информационной системы.

автоматизированный поставщик программа смета

Список использованных источников

1. ГОСТ 2.105 - 95. Общие требования к текстовым документам.

2. ГОСТ 7.32 - 2001. Отчет по научно-исследовательской работе. Структура и правила оформления.

3. ГОСТ 7.82-2001. Библиографическое описание электронных ресурсов.

4. ГОСТ 24.702-85 Эффективность автоматизированных систем управления.

5. ГОСТ Р 7.0.5-2008. Библиографическая запись. Библиографическое описание.

6. Алистер Коберн, Современные методы описания функциональных требований к системам, М.: издательство «Лори», 2017. - 288 с

9. Дунаев В. HTML, скрипты и стили / В. Дунаев. - Спб. : БХВ-Петербург, 2015. - 816 с.

10. Жадеев А. PHP для начинающих / А. Жадеев. - Спб.: «Питер», 2014. - 592 c.

11. Колисниченко Д. PHP и MySQL. Разработка WEB-приложений / Д. Колисниченков - Спб: БХВ-Петербург, 2013. - 560 с.

12. Конналли Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика / Т. Коналли, К. Бегг. - М.: Издательский дом «Вильямс», 2013. - 1093 c.

13. Лобова Г. Моделирование и анализ бизнес-процессов SADT. - М.: LAP Lambert Academic Publishing, 2014. - 352 c.

14. Макдональд, М. Созданиец Web-сайта. Недостающее руководство / М. Макдональд. - Спб. : БХВ-Петербург, 2013. - 624 с.

17. Маклаков С.В. BPwin и Erwin. CASE-средства разработки информационных систем / С.В. Маклаков. - М. : ДИАЛОГ-МИФИ, 2014. - 369 c.

Приложение А

Листинг программы.

<?php

namespace AppBundle\Controller;

use AppBundle\Entity\Notification;

use AppBundle\Entity\Order;

use AppBundle\Entity\OrderComment;

use AppBundle\Entity\OrderProduct;

use AppBundle\Entity\OrderProvider;

use AppBundle\Entity\OrderProviderComment;

use AppBundle\Entity\OrderStatus;

use AppBundle\Entity\ProviderProduct;

use AppBundle\Entity\User;

use AppBundle\Form\Type\OrderCommentFormType;

use AppBundle\Form\Type\OrderEndFormType;

use AppBundle\Form\Type\OrderFilterFormType;

use AppBundle\Form\Type\OrderFormType;

use AppBundle\Form\Type\OrderProductFormType;

use AppBundle\Form\Type\OrderProviderCommentFormType;

use Doctrine\ORM\Query;

use Sensio\Bundle\FrameworkExtraBundle\Configuration as Config;

use Symfony\Component\HttpFoundation\JsonResponse;

use Symfony\Component\HttpFoundation\RedirectResponse;

use Symfony\Component\HttpFoundation\Response;

class OrderController extends InitializableController

{

/**

* @return RedirectResponse|Response

* @Config\Route(«/orders/index/{pagenum}», name = «site_orders_index», defaults={ «pagenum»: «1»})

*/

public function indexAction($pagenum=1)

{

$form=$this->createForm(new OrderFilterFormType());

$caption = null;

$form->handleRequest($this->request);

$ordersquery = $this->getRepository('Order')->createQueryBuilder('o')

->leftJoin('o.specs', 's')

->where('o.deleted = 0')

->orderBy('o.vip', 'DESC')

->addOrderBy('o.status', 'ASC')

->addOrderBy('o.plandate', 'ASC');

$ordersquerycount = $this->getRepository('Order')->createQueryBuilder('o')

->select('COUNT(DISTINCT o.id)')

->leftJoin('o.specs', 's')

->where('o.deleted = 0')

->orderBy('o.plandate', 'DESC');

if ($form->isSubmitted()&& $form->isValid()){

$id = $form->get('id')->getData();

$status=$form->get('status')->getData();

$spec=$form->get('spec')->getData();

}

if (!empty($id)){

$ordersquery->andWhere('o.id = :id')->setParameter('id', $id);

$ordersquerycount->andWhere('o.id = :id')->setParameter('id', $id);

}

if (!empty($status)){

$ordersquery->andWhere('o.status = :status')->setParameter('status', $status);

$ordersquerycount->andWhere('o.status = :status')->setParameter('status', $status);

}

if (!empty($spec)){

$ordersquery->andWhere('s.id = :spec')->setParameter('spec', $spec);

$ordersquerycount->andWhere('s.id = :spec')->setParameter('spec', $spec);

}

$count=$ordersquerycount->getQuery()->getSingleScalarResult();

$pages = floor($count / 20) + ($count % 20 > 0 ? 1 : 0);

if ($pages < 1) $pages = 1;

if ($pagenum > $pages) $pagenum = $pages;

$orders = $ordersquery->setFirstResult(($pagenum - 1) * 20)

->setMaxResults(20)

->getQuery()->getResult();

$this->view['orders'] = $orders;

$this->view['form'] = $form->createView();

$this->view['page']=$pagenum;

$this->view['pages']=$pages;

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:index.html.twig');

}

/**

* @return RedirectResponse|Response

* @Config\Route(«/orders/add», name = «site_orders_add»)

*/

public function addAction()

{

$order = new Order();

$form = $this->createForm(new OrderFormType(), $order);

$form->handleRequest($this->request);

if ($form->isSubmitted()&& $form->isValid()){

/** @var OrderStatus $newstatus**/

$newstatus = $this->getRepository('OrderStatus')->findOneBy(array('id'=>1));

$order->setStatus($newstatus);

foreach ($order->getSpecs()as $spec){

$spec->getOrders()->add($order);

}

$this->manager->persist($order);

$this->manager->flush();

$this->addNotice('success',

'orders.html.twig',

array('notice' =>'order_added', 'caption' => $order->getId())

);

return $this->redirectToRoute('site_orders_edit',array('order' => $order->getId(), 'step' => 1));

}

$this->view['order'] = null;

$this->forms['order'] = $form->createView();

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:order1.html.twig');

}

/**

* @param Order $order

* @return RedirectResponse|Response

* @Config\Route(«/orders/{order}/edit/{step}», name = «site_orders_edit»)

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function editAction(Order $order, $step)

{

if ($step > 4){

$step = 4;

}

switch ($step){

//общиеданные

case 1:

$form = $this->createForm(new OrderFormType(), $order);

$specs=array();

foreach ($order->getSpecs()as $spec){

array_push($specs, $spec);

}

$form2 = $this->createForm(new OrderEndFormType());

if ($this->request->isMethod('POST')){

$form->handleRequest($this->request);

if ($form->isSubmitted()&& $form->isValid()){

// проверяем был ли добавлен новый специалист и если был - отправляем ему уведомление

foreach ($order->getSpecs()as $spec){

if (!(in_array($spec,$specs ))){

$this->addNotification($spec,»Вамназначензаказ №».$order->getId().». <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a>« );

$spec->getOrders()->add($order);

}

}

$specsnew=array();

foreach ($order->getSpecs()as $spec){

array_push($specsnew, $spec);

}

//проверяем, был ли удален пользователь с заказа, если был - отправляем ему уведомление

foreach ($specs as $spec){

if (!(in_array($spec,$specsnew ))){

$this->addNotification($spec,» С Вас было снято назначение на заказ №».$order->getId().». <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a>« );

$spec->getOrders()->removeElement($order);

}

}

$this->manager->persist($order);

$this->manager->flush();

$this->addNotice('success',

'orders.html.twig',

array('notice' =>'order_changed', 'caption' => $order->getId())

);

return $this->redirectToRoute(

'site_orders_edit',

array('order' => $order->getId(), 'step' => 1)

);

}

$form2->handleRequest($this->request);

if ($form2->isSubmitted()&& $form2->isValid()){

//ставимдату

$order->setFactdate($form2->get('factdate')->getData());

// ставим статус

/** @var OrderStatus $newstatus**/

$newstatus = $this->getRepository('OrderStatus')->findOneBy(array('id'=>7));

$order->setStatus($newstatus);

// ищем выбранного поставщика

/** @var OrderProvider $orderprovider */

$orderprovider=$this->getRepository('OrderProvider')->createQueryBuilder('op')

->where('op.order = :order')

->andWhere('op.selected = true')

->setParameters(array('order'=>$order))->getQuery()->getOneOrNullResult();

if ($orderprovider){

//добавляем коммент

$comment= new OrderProviderComment();

$comment->setUser($this->getUser());

$comment->setOrderprovider($orderprovider);

$comment->setDescription($form2->get('comment')->getData());

$this->manager->persist($comment);

$this->manager->flush();

//обновляем рейтинг

$orderprovider->setBall($form2->get('ball')->getData());

$this->manager->persist($orderprovider);

$newrate=$this->getRepository('OrderProvider')->createQueryBuilder('op')

->select('AVG (op.ball)')

->where('op.provider = :provider')

->andWhere('op.selected = true')

->setParameters(array('provider'=>$orderprovider->getProvider()))

->getQuery()->getSingleScalarResult();

$provider= $orderprovider->getProvider();

$provider->setRate($newrate);

$this->manager->persist($provider);

}

$this->manager->persist($order);

$this->manager->flush();

$this->addNotice('success',

'orders.html.twig',

array('notice' =>'order_ended', 'caption' => $order->getId())

);

//отправляем уведомление админу

/** @var user $adminuser**/

$adminuser = $this->getRepository('User')->findOneBy(array('username'=>'admin'));

$this->addNotification($adminuser,»Пользователь «.$this->getUser()->getUserfio().» завершилзаказ №».$order->getId().». <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a>« );

return $this->redirectToRoute('site_orders_index');

}

}

$this->view['order'] = $order;

$this->forms['order'] = $form->createView();

$this->forms['endorder'] = $form2->createView();

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:order1.html.twig');

break;

//список товаров

case 2:

$form = $this->createForm(new OrderProductFormType());

$products=$this->getRepository('OrderProduct')->createQueryBuilder('op')

->leftJoin('op.product','p')

->where('p.deleted <> 1')

->andWhere('op.order = :order')

->setParameters(array('order'=>$order))

->orderBy('p.category')->getQuery()->getResult();

if ($this->request->isXmlHttpRequest()&& $this->request->isMethod('POST')){

return $this->handleProductsAjaxRequest();

}

if ($this->request->isMethod('POST')){

$form->handleRequest($this->request);

if ($form->isSubmitted()&& $form->isValid()){

$orderproduct = $form->getData();

$orderproduct->setOrder($order);

$this->manager->persist($orderproduct);

$this->manager->flush();

return $this->redirectToRoute(

'site_orders_edit',

array('order' => $order->getId(), 'step' => 2)

);

}

}

$this->view['order'] = $order;

$this->view['products'] = $products;

$this->forms['orderproduct'] = $form->createView();

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:order2.html.twig');

break;

//список поставщиков

case 3:

$orderproviders=$this->getRepository('OrderProvider')->createQueryBuilder('op')

->leftJoin('op.provider','pr')

->where('op.order = :order')

->orderBy('op.selected', 'DESC')

->addOrderBy('op.active', 'DESC')

->addOrderBy('pr.rate', 'DESC')

->setParameters(array('order'=>$order))

->getQuery()->getResult();

$this->view['order'] = $order;

$this->view['orderproviders'] = $orderproviders;

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:order3.html.twig');

break;

//комментарии

case 4:

$ordercomments=$this->getRepository('OrderComment')->createQueryBuilder('oc')

->where('oc.order = :order')

->orderBy('oc.id')

->setParameters(array('order'=>$order))

->getQuery()->getResult();

$ordercomment=new OrderComment();

$form=$this->createForm(new OrderCommentFormType(),$ordercomment );

$form->handleRequest($this->request);

if ($form->isSubmitted()&& $form->isValid()){

$ordercomment->setOrder($order);

$ordercomment->setUser($this->getUser());

$this->manager->persist($ordercomment);

$this->manager->flush();

return $this->redirectToRoute(

'site_orders_edit',

array('order' => $order->getId(), 'step' => 4)

);

}

$this->view['order'] = $order;

$this->view['ordercomments'] = $ordercomments;

$this->forms['ordercomment']=$form->createView();

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:order4.html.twig');

break;

}

return $this->redirect('site_orders_index');

}

protected function handleProductsAjaxRequest()

{

$category = $this->request->get('category', null);

if (is_null($category))return new JsonResponse();

$products=$this->getRepository('Product')->createQueryBuilder('p')

->select('p.id as id')

->where('p.category = :category')

->andWhere('p.deleted=0')

->setParameters(array('category'=> $category))

->getQuery()->getResult(Query::HYDRATE_ARRAY);

return new JsonResponse($products);

}

/**

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/remove», name = «site_orders_remove»)

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function removeAction(Order $order)

{

$order->setDeleted(true);

$this->manager->persist($order);

$this->manager->flush();

return $this->redirectToRoute('site_orders_index');

}

//добавлениепоставщиковкзаказу

/**

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/providersadd», name = «site_orders_providers_add»)

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function providersaddAction(Order $order)

{

//Формируеммассивпоставшиковснужнымитоварами

$products=$this->getRepository('Product')->createQueryBuilder('p')

->innerJoin('p.orderproducts','op')

->where('op.order = :order')

->setParameters(array('order'=>$order))

->getQuery()

->getResult();

$providersp=$this->getRepository('Provider')->createQueryBuilder('p')

->leftJoin('p.providerproducts','pp')

->where('pp.product IN (:products)')

->setParameters(array('products'=>$products))

->getQuery()

->getResult();

// Формируем поставщиков с нужными категориями товаров

$categories=$this->getRepository('ProductCategory')->createQueryBuilder('pc')

->innerJoin('pc.products', 'p')

->innerJoin('p.orderproducts','op')

->where('op.order = :order')

->setParameters(array('order'=>$order))

->getQuery()

->getResult();

$providersc=$this->getRepository('Provider')->createQueryBuilder('p')

->leftJoin('p.providerproducts','pp')

->leftJoin('pp.product', 'pr')

->where('pr.category IN (:categories)')

->setParameters(array('categories'=>$categories))

->getQuery()

->getResult();

//склеиваем массивы

$providers=array_merge($providersp,$providersc);

// убирем повторения

$providers=array_unique($providers, SORT_REGULAR );

$countpr=0;

$countc=0;

// в цикле добавляем поставщиков к заказам

/** @var User $usersystem**/

$usersystem = $this->getRepository('User')->findOneBy(array('username'=>'system'));

foreach ($providers as $provider){

$orderProvider=new OrderProvider();

$orderProvider->setProvider($provider);

$orderProvider->setOrder($order);

//идобавляемккаждомукомментарий

$orderProviderComment = new OrderProviderComment();

if ( in_array($provider,$providersp)){

$orderProviderComment->setDescription('Совпадениепотоварам');

$countpr++;

}

else {

$orderProviderComment->setDescription('Совпадениепокатегориям');

$countc++;

}

$orderProviderComment->setOrderprovider($orderProvider);

$orderProviderComment->setUser($usersystem);

$this->manager->persist($orderProvider);

$this->manager->persist($orderProviderComment);

$this->manager->flush();

}

// Добавляем коммент о сформированном списке поставщиков

$ordercomment = new OrderComment();

$ordercomment->setUser($usersystem);

$ordercomment->setOrder($order);

$ordercomment->setDescription ('Автоматически сформирован список потенциальных поставщиков. Всего: '.count($providers).'. Совпадений по товарам:'.$countpr.'. Совпадений по категориям: '.$countc);

$this->manager->persist($ordercomment);

$this->manager->flush();

return $this->redirectToRoute(

'site_orders_edit',

array('order' => $order->getId(), 'step' => 3)

);

}

/**

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/changestatus/{status}», name = «site_orders_changestatus»)

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function changestatusAction(Order $order, $status)

{

$oldstatus=$order->getStatus()->getId();

/** @var OrderStatus $newstatus**/

$newstatus = $this->getRepository('OrderStatus')->findOneBy(array('id'=>$status));

$order->setStatus($newstatus);

//отправляемуведомлениепользователю

$descriptiontext='';

$notifusers=$order->getSpecs();

switch ($status){

case 2:

$descriptiontext=«Вамбылназначенновыйзаказ № «.$order->getId().». Незабудьтеподтвердитьпринятиевработу. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a> «;

break;

case 3:

//если перед этим был статус «Ждет подтверждения»

if ($oldstatus==4){

$descriptiontext=«Заказ № «.$order->getId().» был вернут в работу. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a> «;

//отменяем выбор поставщика

foreach ($order->getOrderproviders()as $orderprovider){

$orderprovider->setSelected(false);

$this->manager->persist($orderprovider);

$this->manager->flush();

}

}

//иначе увеомление админу

else {

$descriptiontext=«Пользователь «.$this->getUser()->getUserfio().» принялзаказ № «.$order->getId().» вработу. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a> «;

$notifusers=array();

/** @var User $notifuser**/

$notifuser = $this->getRepository('User')->findOneBy(array('username'=>'admin'));

array_push($notifusers,$notifuser );

}

break;

case 5: $descriptiontext=«Выборпоставщикавзаказе №».$order->getId().» былутвержден. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a>«;

break;

case 6: $descriptiontext=«Заказ №».$order->getId().» былотменен. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>1)).»'>Подробнее</a>«;

break;

}

foreach ( $notifusers as $notifuser){

$this->addNotification($notifuser,$descriptiontext);

}

$this->manager->persist($order);

$this->manager->flush();

$this->addNotice('success',

'orders.html.twig',

array('notice' =>'order_changestatus', 'caption' => $order->getId())

);

return $this->redirectToRoute('site_orders_edit', array('order' => $order->getId(), 'step' => 1));

}

/**

* @param OrderProduct $orderproduct

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/orderproducts/{orderproduct}/remove», name = «site_orderproducts_remove»)

* @Config\ParamConverter(«orderproduct», options = {«mapping»: {«orderproduct»: «id»}})

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function removeproductAction(OrderProduct $orderproduct, Order $order)

{

$this->manager->remove($orderproduct);

$this->manager->flush();

return $this->redirectToRoute('site_orders_edit', array('order'=>$order->getId(), 'step'=>2));

}

/**

* @param OrderProvider $orderprovider

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/orderproviders/{orderprovider}/edit», name = «site_orderprovider_edit»)

* @Config\ParamConverter(«orderprovider», options = {«mapping»: {«orderprovider»: «id»}})

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function orderproviderAction(OrderProvider $orderprovider, Order $order)

{

//Инфа по продуктам

//в цикле перебираем продукты

$products=array();

$orderproducts=$this->getRepository('OrderProduct')->createQueryBuilder('op')

->leftJoin('op.product', 'p')

->where('op.order = :order')

->andWhere('p.deleted = false')

->setParameters(array('order'=>$order))

->getQuery()->getResult();

foreach ($orderproducts as $orderproduct){

//собираем в массив данные по каждому

$product=array();

$product['product']=$orderproduct->getProduct();

//запрашиваем цену, предоплату и срок поступления

/** @var ProviderProduct $providerproduct**/

$providerproduct=$this->getRepository('ProviderProduct')->createQueryBuilder('pp')

->where('pp.product = :product')

->andWhere('pp.provider = :provider')

->setParameters(array('product'=>$orderproduct->getProduct(), 'provider'=>$orderprovider->getProvider()))

->getQuery()->getOneOrNullResult();

//еслиесть - пихаемвмассив

if ($providerproduct){

$product['price']=$providerproduct->getPrice();

$product['prepay']=$providerproduct->getPrepay();

$product['delivarytime']=$providerproduct->getDelivarytime();

}

else {

$product['price']=null;

$product['prepay']=null;

$product['delivarytime']=null;

}

//запрашиваем сколько заказов было выполнено поставщиком с таким товаром

$countorders = $this->getRepository('Order')->createQueryBuilder('o')

->leftJoin('o.orderproviders','op')

->leftJoin('o.orderproducts', 'opr')

->where('op.provider = :provider')

->andWhere('opr.product = :product')

->andWhere('op.selected =1')

->setParameters(array('provider'=>$orderprovider->getProvider(), 'product'=>$orderproduct->getProduct()))

->getQuery()->getArrayResult();

$countorders=count($countorders);

//еслиесть - пихаемвмассив

$product['countorders']=$countorders;

array_push($products, $product);

}

//Комментарии

$orderprovidercomments = $this->getRepository('OrderProviderComment')->createQueryBuilder('opc')

->where('opc.orderprovider = :orderprovider')

->orderBy('opc.id')

->setParameters(array('orderprovider'=>$orderprovider))

->getQuery()->getResult();

$orderprovidercomment=new OrderProviderComment();

$form=$this->createForm(new OrderProviderCommentFormType(),$orderprovidercomment );

$form->handleRequest($this->request);

if ($form->isSubmitted()&& $form->isValid()){

$orderprovidercomment->setOrderprovider($orderprovider);

$orderprovidercomment->setUser($this->getUser());

$this->manager->persist($orderprovidercomment);

$this->manager->flush();

return $this->redirectToRoute(

'site_orderprovider_edit',

array('order' => $order->getId(), 'orderprovider' => $orderprovider->getId())

);

}

$this->view['order'] = $order;

$this->view['orderprovider'] = $orderprovider;

$this->view['products']=$products;

$this->view['orderprovidercomments'] = $orderprovidercomments;

$this->forms['orderprovidercomment']=$form->createView();

$this->navigation = array('active' =>'orders');

return $this->render('AppBundle:Orders:orderprovider.html.twig');

}

//скрытие заказа

/**

* @param OrderProvider $orderprovider

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/orderproviders/{orderprovider}/disabled», name = «site_orderprovider_disabled»)

* @Config\ParamConverter(«orderprovider», options = {«mapping»: {«orderprovider»: «id»}})

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function orderproviderdisapledAction(OrderProvider $orderprovider, Order $order)

{

$orderprovider->setActive(false);

$this->manager->persist($orderprovider);

$this->manager->flush();

return $this->redirectToRoute(

'site_orderprovider_edit',

array('order' => $order->getId(), 'orderprovider' => $orderprovider->getId())

);

}

//Открытие заказа

/**

* @param OrderProvider $orderprovider

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/orderproviders/{orderprovider}/enabled», name = «site_orderprovider_enabled»)

* @Config\ParamConverter(«orderprovider», options = {«mapping»: {«orderprovider»: «id»}})

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function orderproviderenapledAction(OrderProvider $orderprovider, Order $order)

{

$orderprovider->setActive(true);

$this->manager->persist($orderprovider);

$this->manager->flush();

return $this->redirectToRoute(

'site_orderprovider_edit',

array('order' => $order->getId(), 'orderprovider' => $orderprovider->getId())

);

}

//выбор заказа

/**

* @param OrderProvider $orderprovider

* @param Order $order

* @return Response

* @Config\Route(«/orders/{order}/orderproviders/{orderprovider}/selected», name = «site_orderprovider_selected»)

* @Config\ParamConverter(«orderprovider», options = {«mapping»: {«orderprovider»: «id»}})

* @Config\ParamConverter(«order», options = {«mapping»: {«order»: «id»}})

*/

public function orderproviderselectedAction(OrderProvider $orderprovider, Order $order)

{

$orderprovider->setSelected(true);

/** @var OrderStatus $newstatus**/

$newstatus = $this->getRepository('OrderStatus')->findOneBy(array('id'=>4));

$order->setStatus($newstatus);

/** @var user $adminuser**/

$adminuser = $this->getRepository('User')->findOneBy(array('username'=>'admin'));

//отправляем уведомление пользователю

$notificationtext=«Пользователь».$this->getUser()->getUserfio().» выбрал поставщика для заказа № «.$order->getId().». Необходимо подтвердить результат. <a href='«.$this->generateUrl('site_orders_edit', array('order'=>$order->getId(), 'step'=>3)).»'>Подробнее</a> «;

$this->addNotification($adminuser, $notificationtext);

$this->manager->persist($order);

$this->manager->flush();

return $this->redirectToRoute(

'site_orders_edit',

array('order' => $order->getId(), 'step' => 3)

);

}

public function addNotification (User $user, $description){

$notification = new Notification();

$notification->setUser($user);

$notification->setDescription($description);

$this->manager->persist($notification);

$this->manager->flush();

}

}

Приложение Б

Графическая часть дипломного проекта.

В графическую часть дипломного проекта входят:

1. Функциональная модель IDEF0 (рисунок Г.1);

2. Диаграмма потоков данных (рисунок Г.2);

3. Инфологическая схема данных (рисунок Г.3);

4. ER-диаграмма базы данных (Рисунок Г.4);

5. Алгоритм процедуры авторизации (рисунок Г.5);

6. Сравнение программных аналогов (рисунок Г.6);

7. Граф диалога (рисунок Г.7);

8. Графический интерфейс системы (рисунок Г.8).

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.