/**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Delivery::find();
     $subquery = DeliveryDetail::find()->select('delivery_id, SUM(count) as detail_count')->groupBy('delivery_id');
     $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['time' => SORT_DESC]]]);
     /*
      *set the count search
      */
     $dataProvider->sort->attributes['detailCount'] = ['asc' => ['detailSum.detail_count' => SORT_ASC], 'desc' => ['detailSum.detail_count' => SORT_DESC], 'label' => Yii::t('app', 'Count')];
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     if (isset($this->time) && $this->time != '') {
         $date_explode = explode(" to ", $this->time);
         $date1 = trim($date_explode[0]);
         $date2 = trim($date_explode[1]);
         $date2 = date("Y-m-d", strtotime("+1 day", strtotime($date2)));
         $query->andFilterWhere(['between', 'delivery.time', $date1, $date2]);
     }
     $query->joinwith('customer');
     $query->andFilterWhere(['id' => $this->id, 'detailSum.detail_count' => $this->detailCount]);
     $query->andFilterWhere(['like', 'state', $this->state]);
     $query->andFilterWhere(['like', 'money', $this->money]);
     $query->andFilterWhere(['like', 'profit', $this->profit]);
     $query->andFilterWhere(['like', 'customer.name', $this->customer_id]);
     return $dataProvider;
 }
Exemple #2
0
 public function actionSave($id)
 {
     $data = Yii::$app->request->post();
     $delivery = Delivery::findOne($id);
     $delivery->name = $data['name'];
     $delivery->address = $data['address'];
     $delivery->location = $data['location'];
     $delivery->comment = $data['comment'];
     $delivery->save();
 }
Exemple #3
0
 public function actionUpdate($id)
 {
     $model = Orders::findOne($id);
     if ($model->load(Yii::$app->request->post())) {
         $model->editTimestamp = date('Y-m-d H:i:s');
         $model->editName = Yii::$app->user->identity->full_name;
         $model->save();
         return true;
     }
     return $this->renderAjax('form', ['model' => $model, 'clients' => ArrayHelper::map(Clients::find()->all(), 'id', 'name'), 'delivery' => ArrayHelper::map(Delivery::find()->all(), 'id', 'name'), 'action' => 'create']);
 }
Exemple #4
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $now = Carbon::now();
     $model = Delivery::where('delivery_type_id', 2)->whereNull('datepublish')->whereBetween('datestart', [$now->subMinutes(2)->format('Y-m-d H:i:s'), $now->addMinute(3)->format('Y-m-d H:i:s')])->get();
     $data = $model->toArray();
     $driver = Driver::whereFlagactive(1)->get();
     Log::warning($now->format('Y-m-d H:i:s'));
     Log::warning($now->subMinutes(2)->format('Y-m-d H:i:s'));
     Log::warning($now->addMinute(3)->format('Y-m-d H:i:s'));
     Log::info('Cron funcionando');
     if (!empty($driver) && count($data) > 0) {
         foreach ($driver as $value) {
             foreach ($data as $objDelivery) {
                 Notification::create(array('type_id' => Notification::PUSH, 'platform_id' => Platform::ANDROID, 'user_id' => $value->id, 'app_id' => Config::get('app.APP_ID'), 'token' => \md5(\uniqid(\time())), 'description' => "{\"delivery_id\":\"{$objDelivery['id']}\",\"description\":\"Nuevo delivery\"}", 'appname' => Config::get('app.APP_NAME'), 'dbconfig' => Config::get('app.DB_CONFIG'), 'params' => "{\"delivery_id\":\"{$objDelivery['id']}\",\"description\":\"Nuevo delivery\"}", 'tosend' => $value->uuid, 'to' => 'Test', 'from' => 'Cligo', 'flagsend' => 0, 'flagactive' => 1));
                 $del = Delivery::find($objDelivery['id']);
                 $del->datepublish = Carbon::now()->format('Y-m-d H:i:s');
                 $del->save();
                 Log::info("Notificacion enviada del delivery id: {$objDelivery['id']}");
             }
         }
     }
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getDeliveries()
 {
     return $this->hasMany(Delivery::className(), ['customer_id' => 'id']);
 }
 public function getApiAd()
 {
     $this->layout = null;
     $response = null;
     $responseType = '';
     $deliveryStatus = '';
     $requestType = Input::get('rt', Delivery::REQUEST_TYPE_AD);
     $flightWebsiteID = Input::get('fpid', '');
     $zoneID = Input::get('zid', 0);
     $data = Input::all();
     $trackingModel = new Tracking();
     $deliveryModel = new Delivery();
     $isOverReport = $data['ovr'] = false;
     $showBanner = showBanner();
     if ($showBanner !== FALSE) {
         $flightWebsiteID = $showBanner;
     }
     $responseData = [];
     $hostReferer = $trackingModel->getRequestReferer();
     $responseType = $trackingModel->checkPreProcess($requestType, $hostReferer, $zoneID);
     //read redis 1
     $data['ref'] = $hostReferer;
     $adZone = $deliveryModel->getAdzone($zoneID);
     if ($adZone) {
         $platform = '';
         $flightWebsites = $deliveryModel->getAvailableAds($adZone->publisher_site_id, $adZone->ad_format_id, $flightWebsiteID, $platform);
         if ($flightWebsites) {
             //sort available flights base on priority and retargeting
             //TO DO retargeting
             $flightWebsites = $deliveryModel->sortAvailableFlightWebsites($flightWebsites);
             //lấy ad từ list thỏa điều kiện để trả về
             $deliveryInfo = $deliveryModel->getFullFlightInfo($flightWebsites, $adZone->publisher_site_id, $adZone->ad_format_id);
             $redis = new RedisBaseModel(env('REDIS_HOST', '127.0.0.1'), env('REDIS_PORT_6', '6379'), false);
             foreach ($flightWebsites as $k => $flightWebsite) {
                 if (!empty($flightWebsite) && !empty($deliveryInfo['flightDates'][$flightWebsite->flight_id]) && !empty($deliveryInfo['flights'][$flightWebsite->flight_id])) {
                     $flightDates = $deliveryInfo['flightDates'][$flightWebsite->flight_id];
                     $flight = $deliveryInfo['flights'][$flightWebsite->flight_id];
                     $ad = $deliveryInfo['ads'][$flight->ad_id];
                     $arrPlatform = json_decode($ad->platform);
                     if (!empty($arrPlatform) && in_array('mobile_app', $arrPlatform) || isLocal()) {
                         $checkFlightDate = $deliveryModel->checkFlightDate($flightDates, $flight);
                         //flight date ok
                         if ($checkFlightDate) {
                             $deliveryStatus = $deliveryModel->deliveryAd($ad, $flightWebsite, $flight, $flightDates);
                             if ($deliveryStatus == Delivery::DELIVERY_STATUS_OK || $deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) {
                                 //Check retargeting
                                 if (!empty($flight->audience)) {
                                     $check = false;
                                     $audience = json_decode($flight->audience, true);
                                     if (!empty($audience['audience_id'])) {
                                         if (isset($_COOKIE["yoAu_{$audience['audience_id']}"]) && !empty($_COOKIE["uuid"])) {
                                             if ($_COOKIE["yoAu_{$audience['audience_id']}"] === '1' || substr($_COOKIE["yoAu_{$audience['audience_id']}"], 0, 2) === '1.') {
                                                 $check = true;
                                             }
                                         }
                                         if ($audience['operator'] === 'not in') {
                                             $check = !$check;
                                         }
                                     }
                                     if ($check === false) {
                                         $deliveryStatus == Delivery::RESPONSE_TYPE_AUDIENCE_LIMIT;
                                         continue;
                                     }
                                 }
                                 //trả về ad này
                                 $serveAd = $ad;
                                 $data['aid'] = $ad->id;
                                 $data['fpid'] = $flightWebsite->id;
                                 //over report
                                 if ($deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) {
                                     $data['ovr'] = $isOverReport = true;
                                 }
                                 $responseType = Delivery::RESPONSE_TYPE_ADS_SUCCESS;
                                 break;
                             }
                         } else {
                             $deliveryStatus = Delivery::RESPONSE_TYPE_FLIGHTDATE_NOT_AVAILABLE;
                         }
                     } else {
                         $deliveryStatus = Delivery::PLATFORM_TYPE_INVALID;
                     }
                 }
             }
         }
         if ($responseType != Delivery::RESPONSE_TYPE_ADS_SUCCESS) {
             $responseType = Delivery::RESPONSE_TYPE_NOT_AVAILABLE;
         }
     }
     if (empty($responseType)) {
         $responseType = Delivery::RESPONSE_TYPE_INVALID;
     } elseif ($responseType == Delivery::RESPONSE_TYPE_ADS_SUCCESS) {
         (new RawTrackingSummary())->addSummary('ads_request', $data['fpid'], $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flight->ad_id, $flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport);
         if (!empty($serveAd)) {
             pr($serveAd);
             $responseData['w'] = intval($serveAd->width);
             $responseData['h'] = intval($serveAd->height);
             $responseData['mime'] = !empty($serveAd->mime) ? $serveAd->mime : '';
             if ($serveAd->ad_type === 'html') {
                 $responseData['adm'] = urlencode($serveAd->html_source);
             } else {
                 $responseData['adm'] = urlencode($serveAd->source_url);
             }
             $responseData['pos'] = !empty($serveAd->position) ? $serveAd->position : '';
             $arrTrackingImpression = [];
             $arrTrackingImpression[] = urlencode(urlTracking('impression', $data['aid'], $data['fpid'], $zoneID, '', '', $data['ovr'], '') . '&plf=mobile_app');
             if (!empty($serveAd->third_impression_track)) {
                 $thirdImpressionTrackArr = explode("\n", $serveAd->third_impression_track);
                 if (!empty($thirdImpressionTrackArr)) {
                     foreach ($thirdImpressionTrackArr as $item) {
                         $arrTrackingImpression[] = urlencode($this->replaceParam($item));
                     }
                 }
             }
             $responseData['nimp'] = $arrTrackingImpression;
             $arrTrackingClick = [];
             $arrTrackingClick[] = urlencode(urlTracking('click', $data['aid'], $data['fpid'], $zoneID, '', '', $data['ovr'], '') . '&plf=mobile_app');
             if (!empty($serveAd->third_click_track)) {
                 $thirdClickTrackArr = explode("\n", $serveAd->third_click_track);
                 if (!empty($thirdClickTrackArr)) {
                     foreach ($thirdClickTrackArr as $item) {
                         $arrTrackingClick[] = urlencode($this->replaceParam($item));
                     }
                 }
             }
             $responseData['nclk'] = $arrTrackingClick;
             $responseData['lpage'] = urlencode($this->replaceParam($serveAd->destination_url));
             $responseData['xml'] = null;
         }
     }
     pr($responseData);
     pr($deliveryStatus);
     pr($responseType, 1);
     return response()->json($responseData);
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getDelivery()
 {
     return $this->hasOne(Delivery::className(), ['id' => 'delivery_id']);
 }
 private function createStudio($StudioForm, \app\modules\users\models\User $User)
 {
     if ($StudioForm->load(Yii::$app->request->post()) && $StudioForm->validate()) {
         // TODO обернуть в транзакцию
         $Studio = new Studio();
         $Studio->type = $StudioForm->type;
         $Studio->name = $StudioForm->name;
         $User->country_id = $StudioForm->countryId;
         $User->city_id = $StudioForm->cityId;
         $Studio->currency_id = $StudioForm->currencyId;
         $Studio->custom_delivery = $StudioForm->custom_delivery;
         $Studio->custom_payment = $StudioForm->custom_payment;
         $Studio->slogan = $StudioForm->slogan;
         $Studio->description = $StudioForm->description;
         // Сохраним студию назначив ее пользователю
         $User->link('studio', $Studio);
         // Когда у Студии будет id (после записи), назначим связи многие ко многим
         // TODO попробовать сразу подать массив в link, т.к. запрос на каждую итерацию
         $deliveryObjects = Delivery::findAll($StudioForm->deliveryList);
         foreach ($deliveryObjects as $delivery) {
             $Studio->link('delivery', $delivery);
         }
         $paymentObjects = Payment::findAll($StudioForm->paymentList);
         foreach ($paymentObjects as $payment) {
             $Studio->link('payment', $payment);
         }
         // Назначим новую роль пользователю (atelierOwner или storeOwner)
         $User->assignRole($Studio->type . 'Owner');
         // Рендерим страницу магазина или ателье
         return $this->redirect(['index']);
     }
     $StudioForm->fillCountry($User);
     $StudioForm->fillCity($User);
     return $this->render('create', ['studioForm' => $StudioForm]);
 }
Exemple #9
0
 public function initVast($ad, $flightPublisherID, $publisherAdZoneID, $checksum, $isOverReport = false, $referrer = '')
 {
     if ($ad && $flightPublisherID && $publisherAdZoneID) {
         $trackingModel = new Tracking();
         $deliverModel = new Delivery();
         $this->id = $ad->id;
         $this->flight_publisher_id = $flightPublisherID;
         $this->publisher_ad_zone_id = $publisherAdZoneID;
         $this->linear = $ad->video_linear;
         $this->width = $ad->width;
         $this->height = $ad->height;
         $this->duration = $ad->video_duration;
         $this->type_vast = $ad->video_type_vast;
         //$this->vast_version           = $ad->vast_version;
         $this->skipads = $ad->skipads;
         $this->file = $ad->source_url;
         $this->title = $ad->name;
         if (empty($ad->vast_include)) {
             $this->wrapper_tag = $this->replaceParam($ad->video_wrapper_tag);
         } else {
             $vastTagUrl = urlencode($this->replaceParam($ad->video_wrapper_tag));
             $this->wrapper_tag = AD_SERVER_FILE . 'get-vast-tag?vast_tag=' . $vastTagUrl . '&skip=' . $ad->skipads . '&aid=' . $ad->id;
         }
         $this->bitrate = $ad->video_bitrate;
         $this->url = $ad->destination_url;
         $this->ad_format = $ad->ad_format_id;
         $this->referrer = $referrer;
         $this->third_party_tracking = $ad->third_party_tracking;
         $this->third_impression_track = $ad->third_impression_track;
         $this->third_click_track = $ad->third_click_track;
         $this->checksum = $checksum;
         $this->ovr = $isOverReport;
         $adFormat = $deliverModel->getAdFormat($ad->ad_format_id);
         $this->ad_format_name = isset($adFormat->name) ? str_replace(' ', '_', $adFormat->name) : '';
         $this->name = isset($ad->name) ? str_replace(' ', '', strtolower($ad->name)) : '';
         $this->publisher_domain = $trackingModel->getRequestReferer();
         $campaignInfo = $deliverModel->getCamPaignInfoByPublisher($publisherAdZoneID, $flightPublisherID, $ad->ad_format_id);
         if ($campaignInfo) {
             $this->flight_name = isset($campaignInfo['flight_name']) ? $campaignInfo['flight_name'] : '';
             $this->category_name = isset($campaignInfo['category_name']) ? $campaignInfo['category_name'] : '';
         }
         return true;
     }
     return false;
 }
Exemple #10
0
 /**
  * Получить связанные со студией способы доставки
  * @return \yii\db\ActiveQuery
  */
 public function getDelivery()
 {
     return $this->hasMany(Delivery::className(), ['id' => 'delivery_id'])->viaTable('studio_delivery', ['studio_id' => 'id']);
 }
Exemple #11
0
 function getStatusInventory($data)
 {
     $endadate = strtotime($data->end_date);
     $startdate = strtotime($data->start_date);
     $now = strtotime(date('Y-m-d', time()));
     $Delivery = new Delivery();
     $statusInventory = 'play';
     $statusInventoryMsg = "Running";
     $event = Tracking::getTrackingEventType($this->cost_type);
     if ($startdate <= $now && $endadate >= $now) {
         $status = $Delivery->checkInventory($this, 0, $event, json_decode($this->date));
         if ((string) $status == 'inventory_limited' || (string) $status == 'ad_zone_daily_inventory_limited') {
             $statusInventory = 'stop';
             $statusInventoryMsg = $status;
         }
     } else {
         if ($startdate > $now) {
             $statusInventory = 'stop';
             $statusInventoryMsg = "Campaignnotstart";
         } else {
             $statusInventory = 'stop';
             $statusInventoryMsg = "End_Campaign";
         }
     }
     $statusI['status'] = $statusInventory;
     $statusI['msg'] = 'text.' . $statusInventoryMsg;
     return $statusI;
 }
Exemple #12
0
 public static function deliveryArr()
 {
     return ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'name');
 }
Exemple #13
0
            <div class="form-group">
            <?php 
    echo AutoComplete::widget(['name' => 'State', 'id' => 'ddd', 'clientOptions' => ['source' => Url::to(['clients/search']), 'select' => new JsExpression("function( event, ui ) {\n                                            \$('#orders-clientid').val(ui.item.id);\n                                        }")], 'options' => ['class' => 'form-control clients-main-search']]);
    ?>
            </div>
        <?php 
} elseif ($attr == 'city') {
    ?>
            <?php 
    echo $form->field($model, $attr)->label(false);
    ?>
        <?php 
} elseif ($attr == 'deliveryId') {
    ?>
            <?php 
    echo $form->field($model, $attr)->dropDownList(\app\models\Delivery::deliveryArr())->label(false);
    ?>
        <?php 
} elseif ($attr == 'payment') {
    ?>
            <?php 
    echo $form->field($model, $attr)->dropDownList($model->paymentArr)->label(false);
    ?>
        <?php 
} elseif ($attr == 'driverId') {
    ?>
            <?php 
    echo $form->field($model, $attr)->dropDownList(\app\models\Drivers::driversArr())->label(false);
    ?>
        <?php 
}
 /**
  * Finds the Delivery model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return Delivery the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Delivery::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
Exemple #15
0
 public function validateDeliveryList($attribute, $params)
 {
     $deliveryList = Delivery::findAll($this->deliveryList);
     if (count($deliveryList) != count($this->deliveryList)) {
         // TODO добавить отправку уведомления об ошибке с данными на email разработчику
         $this->addError('deliveryList', "Ошибка выбора способа доставки.");
     }
 }