Example #1
0
 /**
  * [assocPoi description]
  * @param  [type] $reseller_id [description]
  * @return [type]              [description]
  */
 public function assocPoi($reseller_id = null)
 {
     set_time_limit(0);
     $distanceMax = 0.5;
     $segments = Model::Segment()->where(['segmenttype_id', '=', 8])->cursor();
     $pois = [];
     foreach ($segments as $segment) {
         if (isset($segment['segment_id'])) {
             if (strlen($segment['segment_id'])) {
                 $count = Model::Segment()->where(['segment_id', '=', (int) $segment['id']])->cursor()->count();
                 $hasChildren = $count > 0;
                 if (!$hasChildren) {
                     $data = repo('segment')->getData((int) $segment['id']);
                     $latitude = isAke($data, 'latitude', false);
                     $longitude = isAke($data, 'longitude', false);
                     $sellzone_id = isAke($data, 'sellzone_id', false);
                     if (false !== $latitude && false !== $longitude && false !== $sellzone_id) {
                         $latitude = str_replace(',', '.', $latitude);
                         $longitude = str_replace(',', '.', $longitude);
                         $pois[] = ['segment_id' => (int) $segment['id'], 'lat' => (double) $latitude, 'lng' => (double) $longitude, 'sellzone_id' => (int) $sellzone_id];
                     }
                 }
             }
         }
     }
     $q = Model::Optionsrestaurant();
     if ($reseller_id) {
         $q->where(['reseller_id', '=', (int) $reseller_id]);
     }
     $restos = $q->cursor();
     foreach ($restos as $resto) {
         $company = Model::company()->where(['reseller_id', '=', (int) $resto['reseller_id']])->first(true);
         if ($company) {
             $loc = lib('utils')->remember('has.locations.companies.' . $resto['reseller_id'], function ($reseller_id) {
                 $company = Model::Company()->where(['reseller_id', '=', (int) $reseller_id])->first(true);
                 $coords = lib('geo')->getCoords($company->address . ' ' . $company->zip . ' ' . $company->city);
                 $loc = ['lng' => $coords['lng'], 'lat' => $coords['lat']];
                 return $loc;
             }, Model::Company()->getAge(), [$resto['reseller_id']]);
             foreach ($pois as $poi) {
                 if ($resto['sellzone_id'] == $poi['sellzone_id']) {
                     $distances = distanceKmMiles($loc['lng'], $loc['lat'], $poi['lng'], $poi['lat']);
                     $km = (double) $distances['km'];
                     $check = $km <= $distanceMax;
                     if (true === $check) {
                         Model::Restopoi()->firstOrCreate(['sellzone_id' => (int) $resto['sellzone_id'], 'reseller_id' => (int) $resto['reseller_id'], 'segment_id' => (int) $poi['segment_id'], 'distance' => (double) $km]);
                     }
                 }
             }
         }
     }
     Model::Cronrunning()->firstOrCreate(['task' => 'assocPoi'])->setRunning(0)->save();
 }