public function getCoordsInternal($address) { $key = 'internalCoords.' . sha1($address); $cached = Save::get($key); $coords = ['lat' => 0, 'lng' => 0]; if (!$cached) { $json = dwn("http://maps.googleapis.com/maps/api/directions/json?origin=" . urlencode($address) . "&destination=place%20darcy%20dijon"); Save::set($key, $json); } else { $json = $cached; } $tab = json_decode($json, true); $seg = isAke($tab, 'routes', []); if (!empty($seg)) { $seg = current($seg); $legs = isAke($seg, 'legs', []); if (!empty($legs)) { $legs = current($legs); $start_location = isAke($legs, 'start_location', []); $coords = ['lat' => floatval(isAke($start_location, 'lat', 0)), 'lng' => isAke($start_location, 'lng', 0)]; } } return $coords; }
public function makeOfferOut($reseller_id, $nb_customer = 0, $account_id = null) { if (is_null($account_id)) { $user = session('user')->getUser(); $account_id = (int) $user['id']; } if (empty($account_id)) { return ['success' => false, 'message' => 'account_id undefined', 'status' => 1]; } $sid = $this->session_id(); $offerin = Save::get('offer.in.' . $account_id . '.' . $sid); if (!$offerin) { return ['success' => false, 'message' => 'no offer in found for account_id => ' . $account_id, 'status' => 2]; } $offerin = unserialize($offerin); $filter = isAke($offerin, 'filter', false); $nb_customer = 0 > $nb_customer ? $nb_customer : isAke($filter, 'nb_customer', 1); if (false === $filter) { return ['success' => false, 'message' => 'no offerin found for account_id => ' . $account_id, 'status' => 3]; } $resto = Model::Restodata()->where(["reseller_id", "=", (int) $reseller_id])->first(); if (empty($resto)) { return ['success' => false, 'message' => 'Reseller ' . $reseller_id . ' not found.', 'status' => 4]; } $now = time(); $typesAuto = isAke($filter, 'types_auto', []); $typesnonAuto = isAke($filter, 'types_non_auto', []); $food = isAke($filter, 'food', []); $specialities = isAke($filter, 'specialities', []); $geo = isAke($filter, 'geo', []); $account_id = isAke($filter, 'account_id', 26); $sellzone_id = isAke($filter, 'sellzone_id', 1); // $nb_customer = isAke($filter, 'nb_customer', 1); $distance = isAke($filter, 'distance', 0); $is_now = isAke($filter, 'now', 0); $mode_conso = isAke($filter, 'mode_conso', 2); $budget = isAke($filter, 'budget', 0); $poi = isAke($filter, 'poi', false); $date = isAke($filter, 'date', date('Y-m-d')); $hour = isAke($filter, 'time', date('H') > 14 ? '19:30' : '12:30'); list($h, $i) = explode(':', $hour, 2); list($y, $m, $d) = explode('-', $date, 3); $ts = mktime($h, $i, 0, $m, $d, $y); $minTime = $now - 1800; if ($ts < $minTime) { return ['success' => false, 'message' => "The hour [" . $hour . "] is too early. Min hour is " . date('H:i', $minTime), 'status' => 5]; } $mode_conso = $mode_conso == 0 ? 2 : $mode_conso; $last_minute = $is_now > 0; switch ($mode_conso) { case 1: $type_conso = 'en_livraison'; break; case 2: $type_conso = 'sur_place'; break; case 3: $type_conso = 'a_emporter'; break; default: $type_conso = 'sur_place'; } $schedules = $resto['schedules'][$type_conso]; list($canServe, $service, $last_minute, $fermeMidi, $fermeSoir, $rStock) = $this->checkCanServe((int) $reseller_id, (int) $nb_customer, $schedules, $date, $hour, $resto['options'], $type_conso, $last_minute); if (!empty($account_id)) { Model::Restoview()->firstOrCreate(['date' => date('d-m-Y'), 'account_id' => (int) $account_id, 'reseller_id' => (int) $reseller_id]); } if (!$canServe) { if ($service == 1 && $fermeMidi) { return ['success' => false, 'message' => 'Reseller ' . $reseller_id . ' closed.', 'status' => 7]; } elseif ($service == 2 && $fermeSoir) { return ['success' => false, 'message' => 'Reseller ' . $reseller_id . ' closed.', 'status' => 7]; } else { return ['success' => false, 'message' => 'Reseller ' . $reseller_id . ' not available.', 'status' => 6]; } } else { list($y, $m, $d) = explode('-', $date); list($h, $i) = explode(':', $hour); $ts = mktime($h, $i, 0, $m, $d, $y); unset($filter['ACTION']); unset($filter['t']); $voucher = $this->makeVoucher(); $data = redis()->get('infos.restos.' . $account_id . '.' . $reseller_id); if (!$data) { $data = []; } else { $data = unserialize($data); } unset($data['plats_ranges']); $offerout = Model::Restoofferout()->create(['status' => 'WAIT', 'filter' => $filter, 'stock' => (int) $nb_customer, 'hour' => $hour, 'date' => $date, 'voucher' => $voucher, 'timestamp' => (int) $ts, 'last_minute' => $last_minute, 'service' => (int) $service, 'data' => $data, 'account_id' => (int) $account_id, 'reseller_id' => (int) $reseller_id])->save(); return ['success' => true, 'status' => 0, 'restoofferout_id' => $offerout->id, 'last_minute' => $last_minute, 'voucher' => $voucher, 'filter' => $filter]; } }