コード例 #1
0
ファイル: BuildIndex.php プロジェクト: 6akcuk/infotendermail
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     $self = $this;
     if ($this->option('reset')) {
         if ($this->elastic->indices()->exists(['index' => 'tenders'])) {
             $this->elastic->indices()->delete(['index' => 'tenders']);
             $this->info('Удален индекс tenders');
         }
         $this->elastic->indices()->create(['index' => 'tenders']);
         $this->info('Создан индекс tenders');
         $this->elastic->indices()->putMapping(['index' => 'tenders', 'type' => 'contract', 'body' => ['properties' => ['id' => ['type' => 'integer'], 'region_id' => ['type' => 'integer'], 'name' => ['type' => 'string', 'fields' => ['russian' => ['type' => 'string', 'analyzer' => 'russian']]], 'organization' => ['type' => 'string', 'fields' => ['russian' => ['type' => 'string', 'analyzer' => 'russian']]]]]]);
         Contract::chunk(1000, function ($contracts) {
             foreach ($contracts as $contract) {
                 $this->put($contract);
             }
         });
     } else {
         $result = $this->elastic->search(['index' => 'tenders', 'type' => 'contract', 'size' => 1, 'body' => ['query' => ['match_all' => []], 'sort' => ['id' => 'desc']]]);
         $last_id = $result['hits']['hits'][0]['_id'];
         Contract::where('id', '>', $last_id)->chunk(1000, function ($contracts) {
             foreach ($contracts as $contract) {
                 $this->put($contract);
             }
         });
     }
 }
コード例 #2
0
 public function listAll(Request $request, $page = 1)
 {
     $page--;
     $total = Contract::all()->count();
     $contracts = Contract::skip($page * self::PAGE_SIZE)->take(self::PAGE_SIZE)->get();
     $response = ["contracts" => $contracts, "total" => $total, "page" => $page + 1, "page_size" => self::PAGE_SIZE];
     return response()->json($response)->header('Access-Control-Allow-Origin', '*');
 }
コード例 #3
0
 public function view(Request $request)
 {
     if (!$request->date) {
         abort(500, 'Запрос неверный');
     }
     $contract_ids = UserSendedContract::where('user_id', Auth::user()->id)->whereBetween('created_at', [$request->date . ' 00:00:00', $request->date . ' 23:59:59'])->lists('contract_id');
     $list = Contract::whereIn('id', $contract_ids)->with('organization')->get();
     return view('admin.contracts.view', compact('list'));
 }
コード例 #4
0
 public function index()
 {
     $contracts = Contract::all();
     $data = [];
     $data['title'] = 'Dependencias de la CDMX con Contrataciones Abiertas';
     $data['description'] = 'Dependencias de la CDMX con Contrataciones Abiertas';
     $data['og_image'] = "img/og/contrato-cdmx.png";
     $data['body_class'] = 'dependencia';
     //// lista de contratos aún sin implementar en el view
     $data['contracts'] = $contracts;
     return view("frontend.office")->with($data);
 }
コード例 #5
0
 public function show($id)
 {
     $supplier = Tenderer::where("id", $id)->get()->first();
     $contracts = Contract::all();
     $data = [];
     $data['title'] = $supplier->name;
     $data['description'] = 'Proveedor';
     $data['og_image'] = "img/og/contrato-cdmx.png";
     $data['body_class'] = 'proveedor';
     $data['contracts'] = $contracts;
     $data['supplier'] = $supplier;
     return view("frontend.supplier")->with($data);
 }
コード例 #6
0
 public function showRaw($ocid)
 {
     // [1] Validate ocid & redirect if not valid
     $r = preg_match('/^[\\w-]+$/', $ocid);
     if (!$r) {
         return redirect("contratos");
     }
     $base_contract = Contract::where("ocdsid", $ocid)->get()->first();
     if (!$base_contract) {
         die(":(");
     }
     // [2] make the call to the API
     $url = 'http://187.141.34.209:9009/ocpcdmx/contratos';
     $data = ['dependencia' => $base_contract->cvedependencia, 'contrato' => $base_contract->ocdsid];
     // [2.1] the CURL stuff
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
     $result = curl_exec($ch);
     $con = json_decode($result);
     // [3] if the ocid is invalid, redirect
     echo "<pre>";
     var_dump($base_contract->toArray());
     echo "</pre>";
     echo "<pre>";
     var_dump($con);
     echo "</pre>";
     die;
     if (empty($result)) {
         return redirect("contratos");
     }
     // [4] show the view
     $data = [];
     $data['title'] = $con->releases[0]->tender->title . " | Contrataciones Abiertas de la CDMX";
     $data['description'] = "Contrato: " . $con->releases[0]->tender->description;
     $data['og_image'] = "img/og/contrato-cdmx.png";
     $data['body_class'] = 'contract';
     $data['elcontrato'] = $con;
     return view("frontend.contracts.contract")->with($data);
 }
コード例 #7
0
ファイル: SendMail.php プロジェクト: 6akcuk/infotendermail
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     $elastic = ClientBuilder::create()->build();
     $searches = ContractSearchCriteria::with('user')->get();
     foreach ($searches as $search) {
         $criteria = json_decode($search->criterias, true);
         $this->info('Обработка критерия для пользователя ' . $search->user_id);
         if (is_array($criteria) && sizeof($criteria) > 0) {
             $max_id = (int) UserSendedContract::where('user_id', $search->user_id)->max('contract_id');
             $this->info('Поиск контрактов');
             $contract_ids = Contract::elasticSearch($search, $max_id);
             foreach ($contract_ids as $contract) {
                 UserSendedContract::create(['user_id' => $search->user_id, 'contract_id' => $contract]);
             }
             $list = Contract::whereIn('id', $contract_ids)->with('organization')->get();
             Mail::send('emails.contracts', ['list' => $list], function ($m) use($list, $search, $contract_ids) {
                 $m->from('*****@*****.**', 'infotendermail');
                 $m->to($search->user->email, $search->user->name)->subject('Контракты с infotendermail.ru #' . sizeof($contract_ids));
             });
         }
     }
 }
コード例 #8
0
 public function index(Request $request)
 {
     $query = $request->input('query', false);
     if ($query) {
         $contracts = Contract::where('nomdependencia', 'like', '%' . $query . '%')->orWhere('ejercicio', 'like', '%' . $query . '%')->orWhere('ocdsid', 'like', '%' . $query . '%')->orWhere(function ($q) use($query) {
             $q->whereHas('publisher', function ($q) use($query) {
                 $q->where('name', 'like', '%' . $query . '%');
             });
         })->orWhere(function ($q) use($query) {
             $q->whereHas('plannings', function ($q) use($query) {
                 $q->where('project', 'like', '%' . $query . '%');
             });
         })->orWhere(function ($q) use($query) {
             $q->whereHas('releases', function ($q) use($query) {
                 $q->whereHas('buyer', function ($q) use($query) {
                     $q->where('name', 'like', '%' . $query . '%');
                 });
             });
         })->orWhere(function ($q) use($query) {
             $q->whereHas('tenders', function ($q) use($query) {
                 $q->where('description', 'like', '%' . $query . '%');
             })->orWhereHas('tenders', function ($q) use($query) {
                 $q->where('title', 'like', '%' . $query . '%');
             })->orWhereHas('tenders', function ($q) use($query) {
                 $q->where('status', 'like', '%' . $query . '%');
             });
         })->orWhere(function ($q) use($query) {
             $q->whereHas('awards', function ($q) use($query) {
                 $q->where('description', 'like', '%' . $query . '%');
             })->orWhereHas('awards', function ($q) use($query) {
                 $q->where('title', 'like', '%' . $query . '%');
             });
         })->get();
     } else {
         $contracts = null;
     }
     return view('frontend.search')->with(['contracts' => $contracts]);
     //
 }
コード例 #9
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getContracts()
 {
     return $this->hasMany(Contract::className(), ['ID_CurrencyOfThePayments' => 'ID']);
 }
コード例 #10
0
 public function updateContracts()
 {
     $contracts = Contract::all();
     foreach ($contracts as $contract) {
         $data = ['dependencia' => '901', 'contrato' => $contract->ocdsid];
         // [2.1] the CURL stuff
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($ch, CURLOPT_URL, $this->apiContrato);
         curl_setopt($ch, CURLOPT_POST, true);
         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
         $result = curl_exec($ch);
         $con = json_decode($result);
         echo "<pre>";
         var_dump($con);
         echo "</pre>";
     }
 }
コード例 #11
0
ファイル: AppContractType.php プロジェクト: netscorpion/CRM
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getContracts()
 {
     return $this->hasMany(Contract::className(), ['ID_TypeOfContract' => 'ID']);
 }
コード例 #12
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     Contract::where('finished_at', '<', DB::raw('NOW()'))->delete();
 }
コード例 #13
0
 public function firstContract()
 {
     return Contract::where('project_id', $this->id)->orderBy('created_at', 'ASC')->first();
 }
コード例 #14
0
ファイル: AppContractGroup.php プロジェクト: netscorpion/CRM
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getIDContract()
 {
     return $this->hasOne(Contract::className(), ['ID' => 'ID_Contract']);
 }
コード例 #15
0
 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;
 }
コード例 #16
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getContracts()
 {
     return $this->hasMany(Contract::className(), ['ID_PaymentPeriod' => 'ID']);
 }
コード例 #17
0
 private function getList()
 {
     $contracts = [];
     // GET THE LIST FROM THE API
     for ($i = 0; $i < 3; $i++) {
         $year = date("Y") - $i;
         $data = ['dependencia' => '901', "ejercicio" => $year];
         // harcoded stuff
         $excercise = $this->apiCall($data, $this->apiContratos);
         $contracts = array_merge($contracts, $excercise);
     }
     // SAVE THEM TO THE DB
     $response = [];
     foreach ($contracts as $c) {
         $contract = Contract::firstOrCreate(['ocdsid' => $c->ocdsID]);
         $contract->ejercicio = (int) $c->ejercicio;
         $contract->cvedependencia = (int) $c->cveDependencia;
         $contract->nomDependencia = $c->nomDependencia;
         $contract->update();
         $response[] = $contract;
     }
     // RETURN THE ARRAY OF CONTRACTS
     return $response;
 }
コード例 #18
0
ファイル: Station.php プロジェクト: linhtt15/Capstone-Project
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getContracts()
 {
     return $this->hasMany(Contract::className(), ['station_station_id' => 'station_id']);
 }
コード例 #19
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getContracts()
 {
     return $this->hasMany(Contract::className(), ['kind_of_goods_kind_of_goods_id' => 'kind_of_goods_id']);
 }