/** * [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(); }