$req->Sheet1, ]; $rulesInput = [ 'Sheet1' => 'required|array', 'Sheet1.*.NAME' => 'required|string|max:255', 'Sheet1.*.COMPANY' => 'required|string|max:255', 'Sheet1.*.DIVISION' => 'required|string|max:255', 'Sheet1.*.GROUP' => 'required|string|max:255', 'Sheet1.*.TYPE' => 'required|string|max:255', 'Sheet1.*.TYPE ID' => 'required|numeric', 'Sheet1.*.COLOR' => 'required|string|min:7|max:7', 'Sheet1.*.ADDRESS' => 'required|string', 'Sheet1.*.SHIP-TO CODE' => 'nullable|string', 'Sheet1.*.SHAPE' => 'required|numeric', 'Sheet1.*.BOUNDARY' => 'required|string', 'Sheet1.*.GEONAMES' => 'nullable|string', 'Sheet1.*.COMPANIES' => 'nullable|string', ]; // validasi input $isValidInput = Validator::make($input, $rulesInput); if (!$isValidInput->passes()) { $apiResp = Responses::bad_input($isValidInput->messages()->first()); return new Response($apiResp, $apiResp['meta']['code']); } DB::beginTransaction(); foreach ($req->Sheet1 as $keyTop => $row) { $now = time(); $zid = null; $cid = Clients::DEFAULT_CID; $c_div_id = ClientsDivs::DEFAULT_CID; $c_div_group_id = ClientsDivGroups::DEFAULT_CID; $uniqClient = Clients::getClientByName($row['COMPANY']); if (count($uniqClient) > 0) { $cid = $uniqClient[0]->id; } else { $insClient = [ 'c_name' => $row['COMPANY'], 'c_addr_office' => $row['ADDRESS'], 'c_phone' => 81288789878, 'c_phone_code' => Clients::DEFAULT_PHONE_CODE, 'c_mail' => 'inject@gmail.com', 'pic_name' => $row['COMPANY'], 'pic_phone' => 81288789878, 'pic_phone_code' => Clients::DEFAULT_PHONE_CODE, 'pic_mail' => 'inject@gmail.com', 'c_status' => Clients::CSTTS_ACTIVE, 'crt' => $now, 'crt_by' => Users::DEFAULT_UID, 'updt' => $now, 'updt_by' => Users::DEFAULT_UID, ]; $cid = Clients::addClient($insClient); } $uniqCDiv = ClientsDivs::getCDivByName($row['DIVISION']); if (count($uniqCDiv) > 0) { $c_div_id = $uniqCDiv[0]->id; } else { $insCDiv = [ 'client_id' => $cid, 'name' => $row['DIVISION'], 'crt' => $now, 'crt_by' => Users::DEFAULT_UID, 'updt' => $now, 'updt_by' => Users::DEFAULT_UID, ]; $c_div_id = ClientsDivs::addCDiv($insCDiv); } $uniqCDivGroup = ClientsDivGroups::getCDivGroupByName($row['GROUP']); if (count($uniqCDivGroup) > 0) { $c_div_group_id = $uniqCDivGroup[0]->id; } $uniqZone = Zone::getZoneByName($row['NAME']); if (count($uniqZone) > 0) { $zid = $uniqZone[0]->id; } else { $boundary_latlngs = []; $radius = 0; $boundary_type = Zone::ZONE_BOUNDARY_POLYGON; $workflow_type = Zone::ZONE_WORKFLOW_DEST; if (strpos(strtolower($row['TYPE']), 'bongkar') !== false) { $workflow_type = Zone::ZONE_WORKFLOW_DEST; } else if (strpos(strtolower($row['TYPE']), 'muat') !== false) { $workflow_type = Zone::ZONE_WORKFLOW_PICKUP; } else if (strpos(strtolower($row['TYPE']), 'park') !== false) { $workflow_type = Zone::ZONE_WORKFLOW_PARKING; } else if (strpos(strtolower($row['TYPE']), 'bengkel') !== false) { $workflow_type = Zone::ZONE_WORKFLOW_SERVICE; } $boundarys = explode('|', $row['BOUNDARY']); foreach ($boundarys as $k => $v) { $latLng = explode(',', $v); $boundary_latlngs[] = [ 'lat' => $latLng[0], 'lng' => $latLng[1], ]; } $row['SHAPE']; // 1=>circle,0=>polygon if ($row['SHAPE'] == 1) { $boundary_type = Zone::ZONE_BOUNDARY_CIRCLE; $radius = Helper::haversineGreatCircleDistance($boundary_latlngs[0]['lat'], $boundary_latlngs[0]['lng'], $boundary_latlngs[1]['lat'], $boundary_latlngs[1]['lng']); } $insZone = [ 'name' => $row['NAME'], 'type' => Zone::ZONE_TYPE_WAREHOUSE, 'workflow_type' => $workflow_type, 'shiptocode' => 0, 'fulladdress' => $row['ADDRESS'], 'boundary_type' => $boundary_type, 'boundary_hex_color' => strtoupper($row['COLOR']), 'boundary_latlngs' => json_encode($boundary_latlngs), 'boundary_bounds' => null, 'boundary_radius' => $radius, 'status' => Zone::STATUS_ACTIVE, 'client_group_id' => $cid, 'crt' => $now, 'crt_by' => Users::DEFAULT_UID, 'updt' => $now, 'updt_by' => Users::DEFAULT_UID, ]; $insZone['boundary_points'] = "ST_GeomFromText('MULTIPOINT("; foreach ($boundary_latlngs as $key => $val) { $insZone['boundary_points'] .= $val['lng'] . " " . $val['lat'] . ", "; } $insZone['boundary_points'] = substr($insZone['boundary_points'], 0, -2); // remove 2 last character $insZone['boundary_points'] .= ")')"; $insZone['boundary_points'] = DB::raw($insZone['boundary_points']); // dump($insZone); // if ($keyTop == 5) { // dd('stop'); // } $zoneId = Zone::addZone($insZone); } } $apiResp = Responses::created('success inject add new zone'); DB::commit(); return (new Response($apiResp, $apiResp['meta']['code'])); } catch (\Exception $e) { DB::rollBack(); $apiResp = Responses::error($e->getMessage()); return (new Response($apiResp, $apiResp['meta']['code'])); } } // B_8074_AS_Positions_01-Feb-2022_06-Feb-2022.xlsx /** * 00000000AB8021AS == 0000000128021119 * 000000000B8026AS == 0000000028026119 * 000000000B8038AS == 0000000028038119 * 000000000B8074AS == 0000000028074119 * 000000000B8129AS == 0000000028129119 * 000000000B8224AS == 0000000028223119 */ public function add_vhc_tracks_v1(Request $req) { try { $now = time(); $apiResp = Responses::bad_request('service unavailable'); return (new Response($apiResp, $apiResp['meta']['code'])); $input = [ 'Sheet1' => $req->Sheet1, ]; $rulesInput = [ 'Sheet1' => 'required|array', 'Sheet1.*.DIVISION' => 'required|string|max:255', 'Sheet1.*.GROUP' => 'required|string|max:255', 'Sheet1.*.TIMESTAMP' => 'required|string|max:255', 'Sheet1.*.VEHICLE' => 'required|string|max:12', 'Sheet1.*.DRIVER' => 'nullable|string', 'Sheet1.*.ZONE' => 'nullable|string', 'Sheet1.*.LOCATION' => 'required|string', 'Sheet1.*.LATITUDE' => 'required|string|max:25', 'Sheet1.*.LONGITUDE' => 'required|string|max:25', 'Sheet1.*.SPEED (kph)' => 'required|numeric', 'Sheet1.*.COURSE (°)' => 'required|numeric', 'Sheet1.*.IGINITION' => 'nullable|string|max:2', 'Sheet1.*.ENGINE STATUS' => 'required|string|max:25', 'Sheet1.*.VEHICLE MILEAGE (km)' => 'required|string', 'Sheet1.*.FUEL LEVEL (%)' => 'nullable|numeric', 'Sheet1.*.POWER TAKEOFF' => 'nullable|numeric', ]; // pre_milleage, sum_milleage // validasi input $isValidInput = Validator::make($input, $rulesInput); if (!$isValidInput->passes()) { $apiResp = Responses::bad_input($isValidInput->messages()->first()); return new Response($apiResp, $apiResp['meta']['code']); } DB::beginTransaction(); foreach ($req->Sheet1 as $key => $row) { $now = time(); $track_id = null; $crt = strtotime($row['TIMESTAMP']); $crt_format = date('Y-m-d h:i:s', $crt); // $nopol = explode(' ', $row['VEHICLE']); $device_id = '0000000028223119'; // 16 digits $ignition = null; if ($row['IGNITION'] == 'ON') { $ignition = 1; } else { $ignition = 2; } $en_status = null; if ($row['ENGINE STATUS'] == 'Moving') { $en_status = 2; // moving } else { $en_status = 1; // idling } $insTracks = [ 'original_hex' => '78781f12', 'protocol' => 'gt06', 'action' => 'location', 'device_id' => $device_id, 'latitude' => $row['LATITUDE'], 'longitude' => $row['LONGITUDE'], 'speed' => $row['SPEED (kph)'] ?? null, 'orientation' => $row['COURSE (°)'] ?? null, 'ignition' => $ignition, // 1 on, 2 off. 'stts_engine' => $en_status, // 1 idling, 2 moving 'stts_reverse_geo' => 1, // 1 sudah reverse 'pre_milleage' => null, 'sum_milleage' => $row['VEHICLE MILEAGE (km)'], 'crt' => $crt, 'crt_format' => $crt_format, ]; $track_id = Tracks::addTracks($insTracks); $insTracksAddr = [ 'master_id' => $track_id, 'device_id' => $device_id, 'type' => 2, // inject 'lat' => $row['LATITUDE'], 'lng' => $row['LONGITUDE'], 'zone_name' => $row['ZONE'] ?? null, 'country_id' => 1, 'country_code' => 'id', 'country_text' => 'INDONESIA', 'fulladdress' => $row['LOCATION'] ?? null, 'stts_reverse_geo' => 1, // 1 sudah reverse 'crt' => $crt, 'crt_format' => $crt_format, ]; Tracks::addTracksAddr($insTracksAddr); } $apiResp = Responses::created('success inject add new tracks'); DB::commit(); return (new Response($apiResp, $apiResp['meta']['code'])); } catch (\Exception $e) { DB::rollBack(); $apiResp = Responses::error($e->getMessage()); return (new Response($apiResp, $apiResp['meta']['code'])); } } // Publish Rate Bingkis.xlsx public function add_conf_rate_v1(Request $req) { try { $apiResp = Responses::bad_request('service unavailable'); return (new Response($apiResp, $apiResp['meta']['code'])); $now = time(); // $exists = Storage::disk('local')->get('PublishRateBingkis.xlsx'); // dd($exists); // $file = fopen(__DIR__.'/../../../storage/app/PublishRateBingkis.xlsx', 'r'); // //Output lines until EOF is reached // while(! feof($file)) { // $line = fgets($file); // echo $line. "
"; // } // fclose($file); // return false; // dd($req->input()); // DB::beginTransaction(); $lanes = ConfRates::getLanesActive(); foreach ($req['Publish Rate'] as $keyTop => $row) { $nanoid = new Nanoid(); $code = $nanoid->formattedId('123456789', 6); $uniqCode = ConfRates::getRateByCode($code); if (count($uniqCode) > 0) { $code = $nanoid->formattedId('123456789', 6); $uniqCode = ConfRates::getRateByCode($code); if (count($uniqCode) > 0) { $code = $nanoid->formattedId('123456789', 6); $uniqCode = ConfRates::getRateByCode($code); if (count($uniqCode) > 0) { $code = $nanoid->formattedId('123456789', 6); } } } $lead_time = explode('-', $row['Lead Time']); $fast_time = trim($lead_time[0]); if (count($lead_time) == 1) { $long_time = trim($lead_time[0]); } else { $long_time = trim(explode('hari', $lead_time[1])[0]); } $lane_id = 0; foreach ($lanes as $k => $v) { if ($lane_id === 0) { if (strpos($v->name, $row['Via']) !== false) { $lane_id = $v->id; } } } $prid = Region::getLikeProv($row['Dest Province']); if ($prid) { $prid = $prid[0]->kodeProv; } else { $prid = 0; } $city_name = $row['Dest City']; $district_name = $row['Dest City']; if (strpos($row['Dest City'], '(') !== false) { $part = explode('(', $row['Dest City']); $pos = strpos($part[1], ')'); $part[1] = substr($part[1], 0, $pos); $district_name = trim($part[0]); $city_name = trim($part[1]); } $ktid = Region::getLikeCity($city_name); if ($ktid) { $kodeKab = 0; foreach ($ktid as $city) { if ($city->kodeProv == $prid) { $kodeKab = $city->kodeKab; } } $ktid = $kodeKab; } else { $ktid = 0; } $kcid = Region::getLikeDistrict($district_name); if ($kcid) { $kodeKab = $ktid; $kodeKec = 0; foreach ($kcid as $district) { if ($district->kodeProv == $prid) { if ($kodeKab === 0) { $kodeKab = $district->kodeKab; $kodeKec = $district->kodeKec; } else { if ($kodeKab === $district->kodeKab) { $kodeKec = $district->kodeKec; } } $kodeKec = $district->kodeKec; } } $ktid = $kodeKab; $kcid = $kodeKec; } else { $kcid = 0; } if ($ktid === 0) { $city_name = trim($part[0]); $district_name = trim($part[1]); $ktid = Region::getLikeCity($city_name); if ($ktid) { $kodeKab = 0; foreach ($ktid as $city) { if ($city->kodeProv == $prid) { $kodeKab = $city->kodeKab; } } $ktid = $kodeKab; } else { $ktid = 0; } $kcid = Region::getLikeDistrict($district_name); if ($kcid) { $kodeKab = $ktid; $kodeKec = 0; foreach ($kcid as $district) { if ($district->kodeProv == $prid) { if ($kodeKab === 0) { $kodeKab = $district->kodeKab; $kodeKec = $district->kodeKec; } else { if ($kodeKab === $district->kodeKab) { $kodeKec = $district->kodeKec; } } $kodeKec = $district->kodeKec; } } $ktid = $kodeKab; $kcid = $kodeKec; } else { $kcid = 0; } } $insRate = [ 'code' => $code, 'origin_prov' => 31, // 'origin_city' => $row->origin_city, 'lane' => $lane_id, 'dest_prov' => $prid, 'dest_city' => $ktid, 'dest_district' => $kcid, 'fast_time' => $fast_time, 'long_time' => $long_time, 'unit_time' => ConfRates::UNIT_DAY, 'sell_kg' => (int)str_replace(',', '', str_replace('Rp', '', $row['Sell KG'])), 'buy_kg' => (int)str_replace(',', '', str_replace('Rp', '', $row['Buy KG'])), 'margin_kg' => (int)str_replace(',', '', str_replace('Rp', '', $row['Margin'])), 'percent_kg' => number_format(str_replace('%', '', $row['Persentase']), 2, '.', ','), 'sell_cbm' => (int)str_replace(',', '', str_replace('Rp', '', $row[' Sell CBM '])), 'buy_cbm' => (int)str_replace(',', '', str_replace('Rp', '', $row[' Buy CBM '])), 'margin_cbm' => (int)str_replace(',', '', str_replace('Rp', '', $row['Margin_1'])), 'percent_cbm' => number_format(str_replace('%', '', $row['Persentase_1']), 2, '.', ','), 'is_active' => ConfRates::IS_ACTIVE, 'crt' => $now, 'crt_by' => 1, 'updt' => $now, 'updt_by' => 1, ]; // dump($insRate); // if ($keyTop > 5) { // dd('stop'); // } $rid = ConfRates::addRate($insRate); } $apiResp = Responses::created('success inject add new conf rate'); // DB::commit(); return (new Response($apiResp, $apiResp['meta']['code'])); } catch (\Exception $e) { DB::rollBack(); $apiResp = Responses::error($e->getMessage()); return (new Response($apiResp, $apiResp['meta']['code'])); } } }