Диплом: Автоматизация регистрации и обработки заявок на комплектующие (на примере ООО "Электрощит").

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
93
Список литературы
1. Айвалиотис Д. «Администрирование сервера NGINX», ДМК-
Пресс, 2018 г. 288 с.;
2. Баранова Е., Бабаш А., «Информационная безопасность и
защита. Учебное пособие», Инфра-М, 2017, 324с.;
3. Белов В., Чистякова В., «Проектирование информационных
систем», Академия, 2013;
4. Веб-сервер Apache, URL: http://www.apache.org/;
5. ГОСТ 34.601-90 Информационная технология, Руководящий
документ, Госстандарт России;
6. Ларин М. «Информационное обеспечение управления. Учебное
пособие», РГГУ, 2018 г.;
7. Мельников В. «Информационная безопасность и защита
информации», Академия, 2012, - 336 с.;
8. Методология функционального моделирования IDEF0,
Руководящий документ, Госстандарт России;
9. Н. З. Емельянова, Т. Л. Партыка, И. И. Попов «Устройство и
функционирование информационных систем», ФОРУМ, НИЦ
ИНФРА-М, 2012. 448 с.;
10. Норенков И. «Автоматизированные информационные
системы», МГТУ им. Н.Э. Баумана, 2011;
11. Пьюривал С. «Основы разработки веб-приложений», Питер,
2015;
12. Ригс С., Кросинг Х., «Администрирование PostgreSQL 9. Книга
рецептов», ДМК-Пресс, 2018 г. 364 с.;
13. Система автоматизации склада «Кладовой» (электронный
ресурс) // Компания EFSOL [официальный сайт], URL:
http://kladovoy.io/ (дата обращения 15.11.2018);
94
14. Система складского учета «Мой Склад» (электронный ресурс)
// ООО «Логнекс» [официальный сайт], URL:
https://www.moysklad.ru (дата обращения 15.11.2018);
15. Система складского учета «Workabox» (электронный ресурс) //
ИП Терехин Валерий Валерьевич [официальный сайт], URL:
http://workabox.ru/opportunities/zapasy/ (дата обращения 15.11.2018);
16. Советов Б., Цехановский В., Чертовской В., «Базы данных.
Учебник», Юрайт, 2018;
17. Таненбаум Э. С., Бос Х., «Современные операционные
системы», Питер, 2015;
18. Трофимов В., «Информатика», Юрайт, 2011;
19. Янк К. «PHP и MySQL. От новичка к профессионалу», Эксмо,
2013.
95
Приложение
BaseController.php
<?php
namespace app\controllers;
abstract class BaseController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => $this->accessRules(),
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
public function accessRules()
{
return [
[
'allow' => true,
'roles' => ['@'],
]
];
}
}
SiteController.php
<?php
namespace app\controllers;
class SiteController extends BaseController
{
public function accessRules()
{
return [
[
'allow' => true,
'actions' => ['login'],
'roles' => ['?']
],
[
'allow' => true,
'roles' => ['@']
]
];
}
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
public function actionIndex()
{
return $this->render('index');
}
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();
}
$model->password = '';
return $this->render('login', [
'model' => $model,
]);
}
public function actionLogout()
{
Yii::$app->user->logout();
return $this->goHome();
}
}
User.php
<?php
namespace app\models;
class User extends \yii\db\ActiveRecord implements IdentityInterface
{
const SCENARIO_CREATE = 'create';
const SCENARIO_UPDATE = 'update';
public static function tableName()
{
return 'users';
}
public function scenarios()
{
return [
self::SCENARIO_DEFAULT => [],
self::SCENARIO_CREATE => ['login', 'email', 'pass', 'name'],
self::SCENARIO_UPDATE => ['login', 'email', 'name'],
];
}
public static function findIdentity($id)
{
$user = self::findOne($id);
if ($user && !$user->active) {
throw new ForbiddenHttpException('Ваша учетная запись заблокирована.');
}
return self::findOne($id);
}
public static function findIdentityByAccessToken($token, $type = null)
{
throw new \Exception('Not allowed');
}
public function getId()
{
return $this->id;
}
public function getAuthKey()
{
return $this->auth_key;
}
public function validateAuthKey($authKey)
{
return $this->auth_key === $authKey;
}
public static function findByLogin($login)
{
return self::findOne(['login' => $login]);
}
public function validatePassword($password)
{
return Yii::$app->security->validatePassword($password, $this->pass);
}
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if ($this->isNewRecord) {
$this->auth_key = Yii::$app->security->generateRandomString();
$this->pass = Yii::$app->security->generatePasswordHash($this->pass);
}
return true;
}
return false;
}
}
login.php
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
$this->title = 'Вход';
?>
<div class="site-login">
<h1><?= Html::encode($this->title) ?></h1>
<p>Заполните форму для входа:</p>
<?php $form = ActiveForm::begin([
'id' => 'login-form',
'layout' => 'horizontal',
'fieldConfig' => [
'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
'labelOptions' => ['class' => 'col-lg-1 control-label'],
],
]); ?>
<?= $form->field($model, 'login')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox([
'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-
8\">{error}</div>",
]) ?>
<div class="form-group">
<div class="col-lg-offset-1 col-lg-11">
<?= Html::submitButton('Войти', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
NoConfirmSendEngine.php
<?php
namespace app\models\engine\sending\noconfirm;
use app\models\DetailOrder;
use app\models\engine\sending\ISendingEngine;
class NoConfirmSendEngine implements ISendingEngine
{
public function send(DetailOrder $order)
{
if ($order->status !== $order::STATUS_NEW) {
throw new \Exception('Заказ не в статусе new');
}
foreach ($order->detailOrderItems as $detailOrderItem) {
$detailOrderItem->confirmed_qty = $detailOrderItem->qty;
$detailOrderItem->save();
}
$order->status = $order::STATUS_CONFIRMED;
$order->save();
return \Yii::$app->controller->redirect(['detail-order/view', 'id' => $order->id]);
}
}
FactorySendEngine.php
<?php
namespace app\models\engine\sending;
use app\models\DetailOrder;
use app\models\engine\sending\def\DefaultSendEngine;
use app\models\engine\sending\noconfirm\NoConfirmSendEngine;
class FactorySendEngine
{
const ENGINES = [
'default' => DefaultSendEngine::class,
'noconfirm' => NoConfirmSendEngine::class,
];
public static function getEngine(DetailOrder $order) : ISendingEngine
{
$engineKey = $order->supplier->getSettingsValue('sent_engine', 'default');
$class = self::ENGINES[$engineKey];
return new $class;
}
}
detail-order/view.php
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
use app\models\DetailOrderItem;
/* @var $this yii\web\View */
/* @var $model app\models\DetailOrder */
$this->title = 'Заказ ' . $model->number;
$this->params['breadcrumbs'][] = ['label' => 'Список заказов', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
$itemModel = new DetailOrderItem();
$itemModel->order_id = $model->id;
$receiveEngine = \app\models\engine\confirming\FactoryConfirmEngine::getEngine($model);
?>
<div class="detail-order-view">
<h1><?= Html::encode($this->title) ?></h1>
<p>
<?php if ($model->status === $model::STATUS_NEW) : ?>
<?= Html::a('Обновить', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a('Отправить поставщику', ['send', 'id' => $model->id], ['class' => 'btn btn-primary',
'data' => [
'confirm' => 'Заказ будет отправлен поставщику и его нельзя будет изменить. Отправить?',
'method' => 'post',
]
]) ?>
<?= Html::a('Отменить заказ', ['cancel', 'id' => $model->id], ['class' => 'btn btn-danger',
'data' => [
'confirm' => 'Отменить этот заказ?',
'method' => 'post',
]
]) ?>
<?php endif; ?>
<?php if ($receiveEngine->isNeedShowConfirmationButton($model)) : ?>
<?= Html::a('Подтвердить количество', ['confirm', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?php endif; ?>
<?php if ($model->status === $model::STATUS_CONFIRMED) : ?>
<?= Html::a('Принять заказ', ['receive', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?php endif; ?>
<?= Html::a('Распечатать заказ', ['print', 'id' => $model->id], ['class' => 'btn btn-primary', 'target' =>
'_blank']) ?>
</p>
<?= DetailView::widget([
'model' => $model,
'attributes' => [
[
'label' => $model->attributeLabels()['supplier_id'],
'value' => $model->supplier->name
],
[
'label' => $model->attributeLabels()['status'],
'value' => $model->getStatusName()
],
[
'label' => $model->attributeLabels()['plan_supplied_date'],
'value' => $model->plan_supplied_date
],
],
]) ?>
<?php if ($model->status === $model::STATUS_NEW): ?>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample"
aria-expanded="false" aria-controls="collapseExample">
Добавить деталь в заказ
</button>
<div class="collapse" id="collapseExample">
<div class="well">
<?= $this->render('@app/views/detail-order-item/_form', [
'model' => $itemModel,
]) ?>
</div>
</div>
<?php endif; ?>
<div>
<h3>Детали в заказе</h3>
<?php
$columns = [
[
'header' => 'Название',
'content' => function (DetailOrderItem $item) {
return Html::a(Html::encode($item->detailUnit->detail->title . '. ' . $item->detailUnit->title),
['detail-order-item/update', 'id' => $item->id]);
},
'enableSorting' => true
],
'qty',
'confirmed_qty',
];
if ($model->status === $model::STATUS_NEW) {
$columns[] = [
'header' => '',
'content' => function (DetailOrderItem $item) {
return Html::a('<span class="glyphicon glyphicon-trash"></span>', ['detail-order-item/delete', 'id' =>
$item->id], [
'data-confirm' => 'Вы уверены, что хотите удалить?',
'data-method' => 'post'
]);
}
];
}
$searchModel = new \app\models\search\DetailOrderItemSearch();
$searchModel->order_id = $model->id;
$dataProvider = $searchModel->search([]);
echo \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
[
'header' => 'Название',
'content' => function (DetailOrderItem $item) {
return Html::encode($item->detailUnit->getFullTitle());
},
],
'qty',
'confirmed_qty',
'invoiced_qty',
'cost',
[
'header' => '',
'content' => function (DetailOrderItem $item) {
return $item->order->status === \app\models\DetailOrder::STATUS_NEW ? Html::a('<span
class="glyphicon glyphicon-trash"></span>', ['detail-order-item/delete', 'id' => $item->id], [
'data-confirm' => 'Вы уверены, что хотите удалить?',
'data-method' => 'post'
]) : '';
}
]
],
]); ?>
</div>
</div>
FactoryConfirmEngine.php
<?php
namespace app\models\engine\confirming;
use app\models\DetailOrder;
use app\models\engine\confirming\def\DefaultConfirmEngine;
class FactoryConfirmEngine
{
const ENGINES = [
'default' => DefaultConfirmEngine::class,
];
public static function getEngine(DetailOrder $order) : IConfirmEngine
{
$class = self::ENGINES['default'];
return new $class;
}
}
FactoryReceivingEngine.php
<?ph
namespace app\models\engine\receiving;
use app\models\DetailOrder;
use app\models\engine\receiving\def\DefaultReceiveEngine;
class FactoryReceivingEngine
{
const ENGINES = [
'default' => DefaultReceiveEngine::class,
];
public static function getEngine(DetailOrder $order) : IReceivingEngine
{
$class = self::ENGINES['default'];
return new $class;
}
}
DetailOrderController.php

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)