/** * 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; }
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; }
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); }
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' => [["Не существующий сотрдуник"], ["Сотрудник"]]]); }
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}}»" : "") . " не найден."); } }
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('Предоставленный файл невозможно открыть'); } }
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); } } }
*/ 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']);
/** * @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; }
<?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);
/** * @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; }
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; } }