Ejemplo n.º 1
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Number::find();
     $query->with('owner', 'documents');
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 30]]);
     $dataProvider->setSort(['attributes' => ['number', 'destination', 'comment'], 'defaultOrder' => ['number' => SORT_ASC]]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     if (is_numeric($this->searchText)) {
         $query->andFilterWhere(['like', 'number', $this->searchText]);
     } elseif (!empty($this->searchText)) {
         $ownerId = [];
         foreach (Employee::findByName($this->searchText, true)->all() as $owner) {
             $ownerId[] = $owner->getPrimaryKey();
         }
         $query->andWhere(['in', 'ownerId', $ownerId]);
     }
     if ($this->operatorId !== self::OPERATOR_ANY) {
         $query->andFilterWhere(['operatorId' => $this->operatorId]);
     }
     if ($this->destination !== self::DESTINATION_ANY) {
         $query->andFilterWhere(['destination' => $this->destination]);
     }
     $query->andFilterWhere(['like', 'comment', $this->comment]);
     return $dataProvider;
 }
Ejemplo n.º 2
0
 public function search(array $params)
 {
     $query = Trip::find();
     $query->with('number', 'employee');
     $query->orderBy(['numberPossession.from' => SORT_DESC]);
     $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => false]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     if (!empty($this->mobileNumber)) {
         $numberIds = array_map(function ($item) {
             return $item['_id'];
         }, Number::find()->select(['_id'])->asArray()->where(['like', 'number', $this->mobileNumber])->all());
         $query->andWhere(['in', 'numberId', $numberIds]);
     }
     if (!empty($this->employeeName)) {
         $employeeIds = array_map(function ($item) {
             return (int) $item['id'];
         }, Employee::findByName($this->employeeName, true)->select('id')->asArray()->all());
         $query->andWhere(['in', 'employeeId', $employeeIds]);
     }
     if ($this->complete === self::INCOMPLETE) {
         $query->andWhere(['complete' => false]);
     }
     if ($this->rentNumberFrom !== $this->rentNumberTo) {
         $query->andWhere(['numberPossession.from' => ['$gt' => new MongoDate(strtotime($this->rentNumberFrom)), '$lte' => new MongoDate(strtotime($this->rentNumberTo))]]);
     }
     $query->andFilterWhere(['like', 'destination', $this->destination]);
     return $dataProvider;
 }
Ejemplo n.º 3
0
 public function actionAutoComplete($q = null)
 {
     $result = [];
     /** @var $item Employee */
     foreach (Employee::findByName($q, true)->all() as $item) {
         $result[] = ['value' => $item->fullName, 'post' => $item->post];
     }
     echo Json::encode($result);
 }
Ejemplo n.º 4
0
 public function testFindByName()
 {
     $this->specify("Model must be found on accurate data (like is false). ", function ($name) {
         expect(Employee::findByName($name)->count())->greaterThan(0);
     }, ['examples' => [["Иванов Иван Иванович"]]]);
     $this->specify("Model must be not found on accurate data (like is true). ", function ($name) {
         expect(Employee::findByName($name, true)->count())->greaterThan(0);
     }, ['examples' => [["иванов иВан ИВАНОвич"], ["Ива"]]]);
     $this->specify("Model must be not found", function ($name) {
         expect(Employee::findByName($name)->count())->equals(0);
     }, ['examples' => [["Не существующий сотрдуник"], ["Сотрудник"]]]);
 }
Ejemplo n.º 5
0
 public function validateAttribute($model, $attribute)
 {
     $model->{$attribute} = trim(preg_replace("/ +/", " ", $model->{$attribute}));
     $query = Employee::findByName($model->{$attribute});
     $postAttribute = $this->postAttribute;
     if ($postAttribute !== null) {
         $model->{$postAttribute} = trim(preg_replace("/ +/", " ", $model->{$postAttribute}));
         $query->andWhere(['post' => $model->{$postAttribute}]);
     }
     if (!$query->count()) {
         $this->addError($model, $attribute, "Сотрудник «{$model->{$attribute}}»" . ($postAttribute !== null ? " с должностью «{$model->{$postAttribute}}»" : "") . " не найден.");
     }
 }
Ejemplo n.º 6
0
 public function import()
 {
     if ($this->validate()) {
         if (($handle = fopen($this->datafile->tempName, "r")) !== false) {
             $notImported = [];
             while (($data = fgetcsv($handle)) !== false) {
                 /** @var $employee Employee */
                 if (($employee = Employee::findOne(['organic_number' => $data[0]])) !== null) {
                     $employee->post = $data[2];
                     $employee->save();
                 } else {
                     $notImported[] = ['personnel_number' => $data[0], 'name' => $data[1], 'post' => $data[2], 'division1' => $data[3], 'division2' => $data[4], 'division3' => $data[5], 'group' => $data[6]];
                 }
             }
             fclose($handle);
             $this->_notImported->allModels = $notImported;
             return;
         }
         throw new \Exception('Предоставленный файл невозможно открыть');
     }
 }
Ejemplo n.º 7
0
 public function actionUpdate()
 {
     foreach (Number::find()->all() as $number) {
         $history = [];
         foreach ($number->history as $item) {
             /** @var Employee $employee */
             $employee = Employee::findOne(['id' => $item['ownerId']]);
             if (!is_null($employee)) {
                 $newItem = ['ownerName' => $employee->fullName, 'ownerPost' => $employee->post];
                 if (isset($item['rentDate'])) {
                     $newItem['rentDate'] = $item['rentDate'];
                 }
                 if (isset($item['returnDate'])) {
                     $newItem['returnDate'] = $item['returnDate'];
                 }
                 $history[] = $newItem;
             }
             $number->history = $history;
             $number->save(false);
         }
     }
 }
Ejemplo n.º 8
0
 */
use app\tests\codeception\_pages\mobile\number\UpdatePage;
use app\modules\mobile\models\Number;
use app\modules\directory\models\Employee;
/**
 * @var $model app\modules\mobile\models\Number
 */
$I = new FunctionalTester($scenario);
$I->wantTo('ensure that update Number model works');
$page = UpdatePage::openBy($I);
$model = $I->grabRecord(Number::className(), ['_id' => 'number1']);
$I->seeInTitle('Номер ' . $model['number']);
$I->dontSeeElement($page->fieldSelector('number'));
$I->SeeElement("#documents-panel-body");
$I->SeeElement("#history-panel-body");
$I->seeInField($page->fieldSelector('ownerName'), $model->owner['fullName']);
$I->seeInField($page->fieldSelector('ownerPost'), $model->owner['post']);
$I->seeInField($page->fieldSelector('operatorId'), $model['operatorId']);
$I->seeInField($page->fieldSelector('destination'), $model['destination']);
$I->seeInField($page->fieldSelector('limit'), $model['limit']);
foreach (array_keys(Number::optionItems()) as $option) {
    in_array($option, $model->options) ? $I->seeCheckboxIsChecked($page->fieldSelector($option)) : $I->dontSeeCheckboxIsChecked($page->fieldSelector($option));
}
$I->seeInField($page->fieldSelector('comment'), $model['comment']);
$owner = $I->grabRecord(Employee::className(), ['_id' => 'employee2']);
$page->submit(['number' => '1234567890', 'ownerName' => $owner['fullName'], 'ownerPost' => $owner['post'], 'operatorId' => 'operator2', 'destination' => Number::DESTINATION_MODEM, 'limit' => '2000', 'options' => [Number::OPTION_TRIP], 'comment' => 'This is update comment']);
$I->see("Данные успешно обновлены", '.alert-success');
$history = $model['history'];
$history[count($history) - 1]['returnDate'] = time();
$history[] = ['ownerId' => 'employee2', 'rentDate' => time()];
$I->seeRecord(Number::className(), ['_id' => 'number1', 'number' => $model['number'], 'ownerId' => 'employee2', 'operatorId' => 'operator2', 'destination' => Number::DESTINATION_MODEM, 'limit' => 2000, 'options' => [Number::OPTION_TRIP], 'history' => $history, 'comment' => 'This is update comment']);
Ejemplo n.º 9
0
 /**
  * @param $param
  * @return array
  */
 public static function ownerList($param)
 {
     $list['results'] = (new Query())->select(['e.id', 'concat_ws(" ", e.last_name, e.first_name, e.middle_name) as name', 'e.post', 'b.branch_name as division'])->from(['e' => Employee::tableName()])->leftJoin('branches b', 'e.branch = b.id')->where(['like', 'last_name', $param])->all();
     return $list;
 }
Ejemplo n.º 10
0
<?php

/**
 * Created by PhpStorm.
 * User: bill
 * Date: 26.01.15
 * Time: 11:31
 */
use app\tests\codeception\_pages\mobile\number\CreatePage;
use app\modules\mobile\models\Number;
use app\modules\mobile\models\Document;
use app\modules\directory\models\Employee;
$I = new FunctionalTester($scenario);
$I->wantTo("ensure that creation Number model works");
$owner = $I->grabRecord(Employee::className(), ['id' => 1]);
$newDocument = 'file1.jpg';
$number = '9876543210';
$I->amGoingTo("prepare database.");
Document::deleteAll(['filename' => $newDocument]);
Number::deleteAll(['number' => $number]);
$page = CreatePage::openBy($I);
$I->dontSeeElement("input[type=file]");
$I->dontSeeElement("#documents-panel-body");
$I->dontSeeElement("#history-panel-body");
$page->submit(['number' => $number, 'ownerName' => $owner->fullName, 'ownerPost' => $owner->post, 'operatorId' => 'operator2', 'destination' => Number::DESTINATION_MODEM, 'limit' => "1000", 'options' => [Number::OPTION_ACCOUNTING, Number::OPTION_DIRECTORY], 'comment' => 'This is comment of testing number.']);
$I->SeeRecord(Number::className(), ['number' => $number, 'ownerId' => 1, 'operatorId' => 'operator2', 'destination' => Number::DESTINATION_MODEM, 'limit' => 1000, 'options' => [Number::OPTION_ACCOUNTING, Number::OPTION_DIRECTORY], 'history' => [['ownerId' => 'employee1', 'rentDate' => time()]], 'comment' => 'This is comment of testing number.']);
$I->see("Номер успешно создан", '.alert-success');
$I->seeInField($page->fieldSelector('ownerName'), $owner->fullName);
$I->seeInField($page->fieldSelector('ownerPost'), $owner->posts[1]);
$I->seeOptionIsSelected($page->fieldSelector('operatorId'), "Оператор 2");
$I->seeOptionIsSelected($page->fieldSelector('destination'), Number::DESTINATION_MODEM);
Ejemplo n.º 11
0
 /**
  * @param $queryParam
  * @return array
  */
 public static function itemsList($queryParam)
 {
     if (is_numeric($queryParam)) {
         $query = new Query();
         $query->select(['_id' => false, 'number' => 'text'])->from(Number::collectionName())->where(['like', 'number', $queryParam]);
     } else {
         $query = new \yii\db\Query();
         $query->select(["CONCAT_WS(' ',last_name, first_name, middle_name) AS number"])->from(Employee::tableName())->where(['like', 'last_name', $queryParam]);
     }
     $items['results'] = array_map(function ($item) {
         $item['id'] = $item['number'];
         return $item;
     }, $query->limit(10)->all());
     return $items;
 }
Ejemplo n.º 12
0
 public function beforeSave($insert)
 {
     if (parent::beforeSave($insert)) {
         switch ($this->getScenario()) {
             case 'edit':
                 $this->numberId = Number::findOne(['number' => $this->mobileNumber])->getPrimaryKey();
                 $this->employeeId = Employee::findByName($this->employeeName)->andWhere(['post' => $this->employeePost])->one()->getPrimaryKey();
                 $this->duration = ['from' => new MongoDate(strtotime($this->beginDate)), 'to' => new MongoDate(strtotime($this->endDate))];
                 $this->numberPossession = ['from' => new MongoDate(strtotime($this->rentNumberDate))];
                 break;
             case 'complete':
                 break;
         }
         return true;
     } else {
         return false;
     }
 }