/**
  * Finds the Town model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return Town the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Town::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
Example #2
0
 public function run()
 {
     ini_set('max_execution_time', 0);
     //300 seconds = 5 minutes
     DB::table('areas')->delete();
     DB::table('towns')->delete();
     $regions = $this->api('database.getRegions', ['country_id' => 2]);
     foreach ($regions['response'] as $region) {
         $towns = $this->api('database.getCities', ['country_id' => 2, 'region_id' => $region['region_id'], 'count' => 1000]);
         foreach ($towns['response'] as $town) {
             $area = Area::firstOrCreate(['name' => isset($town['area']) ? $town['area'] : $town['title'], 'region_id' => isset(Region::where('name', '=', $town['region'])->first()->id) ? Region::where('name', '=', $town['region'])->first()->id : 0]);
             Town::create(['name' => $town['title'], 'area_id' => $area->id]);
         }
         sleep(10);
     }
 }
 public static function getPaginateTowns($skip = NULL, $take = NULL, $orderBy = 'townName ASC')
 {
     $sortSplit = explode(' ', $orderBy);
     return Town::join('department', 'town.fk_town_department', '=', 'department.id')->select('town.created_at', 'town.updated_at', 'town.name as townName', 'town.status', 'town.id', 'department.id as departmentId', 'department.name as departmentName')->orderBy($sortSplit[0], $sortSplit[1])->skip($skip)->take($take)->get();
 }
 public function execute($parameters = [])
 {
     if (!isset($parameters['action'])) {
         $result = ['Result' => 'ERROR', 'Message' => 'Faltan parámetros'];
         return json_encode($result);
     }
     switch ($parameters['action']) {
         /*      DEPARTMENTS*/
         case 'department_list':
             $result = [];
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0;
             $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10;
             $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC';
             $result['Result'] = 'OK';
             $result['Records'] = Department::getPaginateDepartments($jtStartIndex, $jtPageSize, $jtSorting);
             $result['TotalRecordCount'] = Department::getAllDepartmentsCount();
             return $result;
             break;
         case 'department':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Result'] = Department::getDepartmentDetail($department);
             $result['Message'] = 'OK';
             return $result;
             break;
         case 'department_create':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $userId = User::getUserId();
             $result['Record'] = Department::createDepartment($name, $status, $userId);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'department_update':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             $tmpArray = $parameters;
             extract($parameters);
             $result = [];
             $result['Records'] = Department::updateDepartmentDetail($id, $name, $status);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'department_delete':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Records'] = Department::deleteDepartmentDetail($id);
             $result['Result'] = 'OK';
             return $result;
             break;
             /*      TOWNS*/
         /*      TOWNS*/
         case 'town_create':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $userId = User::getUserId();
             $result['Record'] = Town::createTown($townName, $status, $userId, $departmentId);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'town_list':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0;
             $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10;
             $jtSorting = isset($jtSorting) ? $jtSorting : 'departmentName ASC';
             $result = [];
             $sort = isset($jtSorting) ? $jtSorting : ' ASC';
             $result['Records'] = Town::getPaginateTowns($jtStartIndex, $jtPageSize, $jtSorting);
             $result['Result'] = 'OK';
             $result['TotalRecordCount'] = Town::getTotal();
             return $result;
             break;
         case 'town_update':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             $tmpArray = $parameters;
             extract($parameters);
             $result = [];
             $result['Records'] = Town::updateTownDetail($id, $townName, $departmentId, $status);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'town_delete':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Record'] = Town::deleteTownDetail($id);
             $result['Result'] = 'OK';
             return $result;
             break;
             /*      RESPONSIBLES*/
         /*      RESPONSIBLES*/
         case 'responsible_list':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0;
             $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10;
             $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC';
             $result = [];
             $result['Records'] = ResponsibleType::getPaginateResponsibles($jtStartIndex, $jtPageSize, $jtSorting);
             $result['Result'] = 'OK';
             $result['TotalRecordCount'] = ResponsibleType::getTotal();
             return $result;
             break;
         case 'responsible_create':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $userId = User::getUserId();
             $result['Record'] = ResponsibleType::createResponsibleType($name, $status);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'responsible_update':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Records'] = ResponsibleType::updateResponsibleType($id, $name, $status);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'responsible_delete':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Record'] = ResponsibleType::deleteResponsibleType($id);
             $result['Result'] = 'OK';
             return $result;
             break;
             /*      DISEASE*/
         /*      DISEASE*/
         case 'disease_list':
             $result = [];
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0;
             $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10;
             $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC';
             $result['Records'] = DiseaseType::getPaginateDiseaseType($jtStartIndex, $jtPageSize, $jtSorting);
             $result['Result'] = 'OK';
             $result['TotalRecordCount'] = DiseaseType::getTotal();
             return $result;
             break;
         case 'disease_create':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $userId = User::getUserId();
             $result['Record'] = DiseaseType::createDiseaseType($name, $status, $userId);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'disease_update':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Records'] = DiseaseType::updateDisease($id, $name, $status);
             $result['Result'] = 'OK';
             return $result;
             break;
         case 'disease_delete':
             if (!User::isLogged()) {
                 $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo'];
             }
             extract($parameters);
             $result = [];
             $result['Record'] = DiseaseType::deleteDiseaseType($id);
             $result['Result'] = 'OK';
             return $result;
             break;
         default:
             $result = [];
             $result['Result'] = 'ERROR';
             $result['Message'] = 'Acción no definida';
             return json_encode($result);
     }
 }
Example #5
0
?>

        <?php 
echo $form->field($model, 'amount')->textInput();
?>

        <?php 
echo $form->field($model, 'latitude')->textInput();
?>

        <?php 
echo $form->field($model, 'longitude')->textInput();
?>

        <?php 
echo $form->field($model, 'source_id')->dropDownList(Town::getSourceList());
?>


        <div class="form-group">
            <?php 
echo Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']);
?>
        </div>

        <?php 
ActiveForm::end();
?>

    </div>
Example #6
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTowns()
 {
     return $this->hasMany(Town::className(), ['source_id' => 'id']);
 }
 protected function parseTenders(Client $client, Crawler $crawler)
 {
     $repeatSensor = 0;
     $contractsNum = 0;
     $crawler->filter('div.registerBox')->each(function (Crawler $node, $i) use($client, &$repeatSensor, &$contractsNum) {
         $systemId = str_replace('№ ', '', trim($node->filter('td.descriptTenderTd > dl > dt > a')->text()));
         $organizationNode = $node->filter('dd.nameOrganization > a');
         $organizationName = trim($organizationNode->text());
         $organizationUrl = trim($organizationNode->attr('href'));
         //Log::info('Node data', [$node->html()]);
         $contractName = trim($node->filter('td.descriptTenderTd > dl > dd')->eq(1)->text());
         $contractUrl = $node->filter('td.descriptTenderTd > dl > dt > a')->attr('href');
         $contractType = trim($node->filter('td.tenderTd > dl > dt')->eq(0)->text());
         $contractStatus = '';
         /*Log::info('Обработка нового контракта', [
               'org_name' => $organizationName,
               'org_url' => $organizationUrl,
               'name' => $contractName,
               'url' => $contractUrl
           ]);*/
         $contract = Contract::where('system_id', $systemId)->first();
         if (!$contract) {
             $repeatSensor = 0;
             // Search organization in database
             $organization = Organization::where('url', $organizationUrl)->first();
             if (!$organization) {
                 //Log::info('Организация не найдена, добавляем в базу.');
                 $organization = new Organization();
                 $organization->name = $organizationName;
                 $organization->url = $organizationUrl;
                 $this->info($organizationUrl);
                 $organizationResponse = $client->get($organizationUrl);
                 $organizationCrawler = new Crawler((string) $organizationResponse->getBody());
                 //Log::info('Информация по организации загружена.');
                 // Federal Law 223
                 if (preg_match("/223\\/ppa/", $organizationUrl)) {
                     $organizationCrawler->filter('div.noticeTabBoxWrapper > table tr')->each(function (Crawler $row, $j) use(&$organization) {
                         if ($row->children('td')->count() > 1) {
                             $nameColumn = trim($row->children('td')->eq(0)->text());
                             $valueColumn = trim($row->children('td')->eq(1)->text());
                             if ($valueColumn) {
                                 switch ($nameColumn) {
                                     case 'Уровень организации':
                                         $organization->level = $valueColumn;
                                         break;
                                     case 'ИНН':
                                         $organization->inn = $valueColumn;
                                         break;
                                     case 'КПП':
                                         $organization->kpp = $valueColumn;
                                         break;
                                     case 'ОГРН':
                                         $organization->ogrn = $valueColumn;
                                         break;
                                     case 'ОКАТО':
                                         $organization->okato = $valueColumn;
                                         break;
                                     case 'Адрес (место нахождения)':
                                         $addresses = array_map(function ($value) {
                                             return trim($value);
                                         }, explode(',', $valueColumn));
                                         $address = collect($addresses);
                                         $address->forget('Российская Федерация');
                                         $organization->postal_code = $address[0];
                                         $organization->country_id = 1;
                                         $country = Country::find(1);
                                         if (isset($address[3])) {
                                             $region = Region::where('name', $address[2])->where('country_id', $country->id)->first();
                                             if (!$region) {
                                                 $region = Region::create(['country_id' => $country->id, 'name' => $address[2]]);
                                             }
                                             $town = Town::where('name', $address[3])->where('region_id', $region->id)->first();
                                             if (!$town) {
                                                 $town = Town::create(['region_id' => $region->id, 'name' => $address[3]]);
                                             }
                                             $organization->region_id = $region->id;
                                             $organization->town_id = $town->id;
                                         }
                                         $organization->address = $valueColumn;
                                         break;
                                     case 'Телефон':
                                         $organization->contact_phone = $valueColumn;
                                         break;
                                     case 'Факс':
                                         $organization->contact_fax = $valueColumn;
                                         break;
                                     case 'Почтовый адрес':
                                         $organization->contact_address = $valueColumn;
                                         break;
                                     case 'Контактное лицо':
                                         $organization->contact_name = $valueColumn;
                                         break;
                                     case 'Адрес электронной почты для системных уведомлений':
                                         $organization->contact_email = $valueColumn;
                                         break;
                                 }
                             }
                         }
                     });
                 } else {
                     $organizationCrawler->filter('td.icePnlTbSetCnt table tr')->each(function (Crawler $row, $j) use($organization) {
                         if ($row->children('td')->count() > 1) {
                             $nameColumn = trim($row->children('td')->eq(0)->text());
                             $valueColumn = trim($row->children('td')->eq(1)->text());
                             if ($valueColumn) {
                                 switch ($nameColumn) {
                                     case 'Уровень организации':
                                         $organization->level = $valueColumn;
                                         break;
                                     case 'ИНН':
                                         $organization->inn = $valueColumn;
                                         break;
                                     case 'КПП':
                                         $organization->kpp = $valueColumn;
                                         break;
                                     case 'ОГРН':
                                         $organization->ogrn = $valueColumn;
                                         break;
                                     case 'ОКАТО':
                                         $organization->okato = $valueColumn;
                                         break;
                                     case 'Место нахождения':
                                         $address = array_map(function ($value) {
                                             return trim($value);
                                         }, explode(',', $valueColumn));
                                         $this->info($valueColumn);
                                         $organization->postal_code = $address[1];
                                         $country = Country::where('name', 'Российская Федерация')->first();
                                         $region = Region::where('name', $address[2])->where('country_id', $country->id)->first();
                                         if (!$region) {
                                             $region = Region::create(['country_id' => $country->id, 'name' => $address[2]]);
                                         }
                                         if (isset($address[3])) {
                                             $town = Town::where('name', $address[3])->where('region_id', $region->id)->first();
                                             if (!$town) {
                                                 $town = Town::create(['region_id' => $region->id, 'name' => $address[3]]);
                                             }
                                         }
                                         $organization->country_id = $country->id;
                                         $organization->region_id = $region->id;
                                         $organization->town_id = isset($town) ? $town->id : null;
                                         $organization->address = $valueColumn;
                                         break;
                                     case 'Телефон':
                                         $organization->contact_phone = $valueColumn;
                                         break;
                                     case 'Факс':
                                         $organization->contact_fax = $valueColumn;
                                         break;
                                     case 'Почтовый адрес':
                                         $organization->contact_address = $valueColumn;
                                         break;
                                     case 'Контактное лицо':
                                         $organization->contact_name = $valueColumn;
                                         break;
                                     case 'Контактный адрес электронной почты':
                                         $organization->contact_email = $valueColumn;
                                         break;
                                 }
                             }
                         }
                     });
                 }
                 //dd($organization);
                 $organization->save();
                 //Log::info('Организация добавлена в базу.');
                 $this->info('Organization ' . $organizationName);
             } else {
                 //Log::info('Организация найдена в базе.');
             }
             //Log::info('Переходим на страницу контракта.');
             $contractResponse = $client->get($contractUrl);
             $contractCrawler = new Crawler((string) $contractResponse->getBody());
             //Log::info('Страница контракта загружена.');
             $contract = new Contract();
             $contract->organization_id = $organization->id;
             $contract->system_id = $systemId;
             $contract->name = $contractName;
             $contract->link = $contractUrl;
             $contract->status = $contractStatus;
             $contract->type = $contractType;
             $price = str_replace(',', '.', preg_replace("/([^0-9\\.\\,]*)/", '', trim($node->filter('td.tenderTd > dl > dd')->eq(1)->text())));
             $contract->price = $price;
             // Federal Law 223
             $contractCrawler->filter('div.noticeTabBoxWrapper > table tr')->each(function (Crawler $row, $j) use($contract, $contractUrl) {
                 if ($row->filter('td')->count() > 1) {
                     $nameColumn = trim($row->filter('td')->eq(0)->text());
                     $valueColumn = trim($row->filter('td')->eq(1)->text());
                     if (!$valueColumn) {
                         return;
                     }
                     if (preg_match("/223\\/purchase/", $contractUrl)) {
                         if (preg_match('/подачи заявок/i', $nameColumn)) {
                             preg_match("/(\\d{2}\\.\\d{2}\\.\\d{4}\\sв\\s\\d{2}:\\d{2})/ui", $valueColumn, $date);
                             if (!isset($date[1])) {
                                 return;
                             }
                             $valueColumn = str_replace('в', '', $date[1]);
                             $finishDate = new Carbon($valueColumn);
                             $contract->finished_at = $finishDate;
                         } elseif (preg_match('/подведения итогов/i', $nameColumn)) {
                             preg_match("/(\\d{2}[\\.]{1}\\d{2}[\\.]{1}\\d{4}[ ]{1}[в]{1}[ ]{1}\\d{2}:\\d{2})/ui", $valueColumn, $date);
                             if (!isset($date[1])) {
                                 return;
                             }
                             $valueColumn = str_replace('в', '', $date[1]);
                             $resultDate = new Carbon($valueColumn);
                             $contract->results_at = $resultDate;
                         }
                     } else {
                         if (preg_match('/Дата и время окончания подачи заявок/i', $nameColumn) || preg_match('/Дата и время окончания подачи котировочных заявок/i', $nameColumn)) {
                             $valueColumn = str_replace('в', '', $valueColumn);
                             $finishDate = new Carbon($valueColumn);
                             $contract->finished_at = $finishDate;
                         } elseif (preg_match('/Дата проведения аукциона в электронной форме/i', $nameColumn) || preg_match('/Дата и время вскрытия конвертов с заявками/i', $nameColumn)) {
                             // Не ставим точную дату, так как скрипт проверять будет на следующий день
                             $valueColumn = str_replace('в', '', $valueColumn);
                             $resultDate = new Carbon($valueColumn);
                             $contract->results_at = $resultDate;
                         }
                     }
                 }
             });
             $contract->save();
             $contractsNum++;
             $this->info('Контракт ' . $systemId . ' ' . $contractName);
             Log::info('Контракт сохранен в базу.');
         } else {
             $repeatSensor++;
             Log::info('Контракт найден в базе.');
         }
         usleep(rand(200, 2000) * 1000);
         // sleep for random time
     });
     return $contractsNum;
 }