Initial commit

This commit is contained in:
meusinfirmary
2025-04-22 14:33:37 +07:00
commit b9891d2f81
1305 changed files with 452033 additions and 0 deletions

15
.editorconfig Executable file
View File

@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2

5
.gitattributes vendored Executable file
View File

@ -0,0 +1,5 @@
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore

15
.gitignore vendored Executable file
View File

@ -0,0 +1,15 @@
/node_modules
/public/hot
/public/storage
storage/*.key
/vendor
/storage/fonts
.env
.env.*
.phpunit.result.cache
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.vscode
.DS_Store

31
.prettierrc Normal file
View File

@ -0,0 +1,31 @@
{
"plugins": ["@prettier/plugin-php"],
"overrides": [
{
"files": ["*.php"],
"options": {
"trailingComma": "none",
"printWidth": 110,
"proseWrap": "always",
"singleQuote": false
}
},
{
"files": ["*.blade.php"],
"options": {
"parser": "blade",
"tabWidth": 1,
"useTabs": true
}
},
{
"files": ["*.js"],
"options": {
"trailingComma": "none",
"printWidth": 110,
"proseWrap": "always",
"tabWidth": 4
}
}
]
}

13
.styleci.yml Executable file
View File

@ -0,0 +1,13 @@
php:
preset: laravel
disabled:
- unused_use
finder:
not-name:
- index.php
- server.php
js:
finder:
not-name:
- webpack.mix.js
css: true

39
Dockerfile Executable file
View File

@ -0,0 +1,39 @@
#stage 0
FROM php:7.2-fpm-alpine
WORKDIR /var/www/html/trucking
# Install system dependencies
RUN apk --update add \
curl \
openssl \
libpng-dev \
libxml2-dev \
libzip-dev \
curl-dev \
oniguruma-dev
# Clear cache
RUN apk del gcc g++
RUN rm -rf /var/cache/apk/*
# Install PHP extensions
RUN docker-php-ext-install bcmath curl gd exif mbstring mysqli pdo pdo_mysql pcntl xml zip
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY ./ /var/www/html/trucking
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
RUN chmod -R 777 storage/logs/ && chmod -R 777 storage/framework/
RUN cp -R vendor /vendor
# BELOM SUPPORT KIRIM EMAIL

0
README.md Executable file
View File

41
app/Console/Kernel.php Executable file
View File

@ -0,0 +1,41 @@
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}

55
app/Exceptions/Handler.php Executable file
View File

@ -0,0 +1,55 @@
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* @param \Throwable $exception
* @return void
*
* @throws \Throwable
*/
public function report(Throwable $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Throwable $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Throwable
*/
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}
}

358
app/Helper.php Executable file
View File

@ -0,0 +1,358 @@
<?php
namespace App;
use App\Models\OrdersInvoices;
class Helper
{
const EARTH_RADIUS_M = 6371000;
const EARTH_RADIUS_KM = 6371;
const EARTH_RADIUS_MILES = 3959; // 3958.756 || 3959 || 3963
/**
* Calculates the great-circle distance between two points, with
* the Haversine formula.
* @param float $latitudeFrom Latitude of start point in [deg decimal]
* @param float $longitudeFrom Longitude of start point in [deg decimal]
* @param float $latitudeTo Latitude of target point in [deg decimal]
* @param float $longitudeTo Longitude of target point in [deg decimal]
* @param float $earthRadius Mean earth radius in [m]
* @return float Distance between points in [m] (same as earthRadius)
* reference: https://stackoverflow.com/questions/14750275/haversine-formula-with-php
* tolak ukur: tarik garis lurus
* miles: 3958.756 || 3959
* km: 6371
* meters: 6371000
* more accurate using km/meters than miles i think ~ rafifmulia
*/
public static function haversineGreatCircleDistance(
$latitudeFrom,
$longitudeFrom,
$latitudeTo,
$longitudeTo,
$earthRadius = self::EARTH_RADIUS_M
) {
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
$distance = $angle * $earthRadius;
return $distance;
}
public static function arccosineGreatCircleDistance(
$latitudeFrom,
$longitudeFrom,
$latitudeTo,
$longitudeTo,
$earthRadius = 6371000
) {
return ($earthRadius * acos((cos(deg2rad($latitudeFrom))) * (cos(deg2rad($latitudeTo))) * (cos(deg2rad($longitudeTo) - deg2rad($longitudeFrom))) + ((sin(deg2rad($latitudeFrom))) * (sin(deg2rad($latitudeTo))))));
}
public static function createPayload($array)
{
$string = '';
foreach ($array as $key => $val) {
if (is_array($val)) {
self::createPayload($val);
continue;
}
$string .= $key . '=' . $val . '&';
}
return $string;
}
static function req_post($url, $headers, $payload)
{
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
// CURLOPT_FAILONERROR => true,
];
curl_setopt_array($ch, $options);
$resp = curl_exec($ch);
if (curl_errno($ch)) {
$result = [
'type' => 'error',
'message' => curl_error($ch)
];
return $result;
} else {
$result = ['type' => 'success'];
try {
$data = json_decode($resp);
if (json_last_error() == JSON_ERROR_NONE) {
$result['data'] = $data;
} else {
$result['data'] = $resp;
}
return $result;
} catch (\Exception $e) {
$result['data'] = $resp;
return $result;
}
}
}
static function req_get($url, $headers)
{
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
// CURLOPT_FAILONERROR => true,
];
curl_setopt_array($ch, $options);
$resp = curl_exec($ch);
if (curl_errno($ch)) {
$result = [
'type' => 'error',
'message' => curl_error($ch)
];
return $result;
} else {
$result = ['type' => 'success'];
try {
$data = json_decode($resp);
if (json_last_error() == JSON_ERROR_NONE) {
$result['data'] = $data;
} else {
$result['data'] = $resp;
}
return $result;
} catch (\Exception $e) {
$result['data'] = $resp;
return $result;
}
}
}
public static function listBloods()
{
return [
[
'id' => 'A',
'name' => 'A',
],
[
'id' => 'A+',
'name' => 'A+',
],
[
'id' => 'B',
'name' => 'B',
],
[
'id' => 'B+',
'name' => 'B+',
],
[
'id' => 'O',
'name' => 'O',
],
[
'id' => 'O+',
'name' => 'O+',
],
[
'id' => 'AB',
'name' => 'AB',
],
[
'id' => 'AB+',
'name' => 'AB+',
],
];
}
public static function countAge($date_ymd)
{
$then = date('Ymd', strtotime($date_ymd));
$diff = date('Ymd') - $then;
return (int) substr($diff, 0, -4);
}
public static function terbilang($nilai)
{
function penyebut($nilai) {
$nilai = abs($nilai);
$huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
$temp = "";
if ($nilai < 12) {
$temp = " ". $huruf[$nilai];
} else if ($nilai <20) {
$temp = penyebut($nilai - 10). " belas";
} else if ($nilai < 100) {
$temp = penyebut($nilai/10)." puluh". penyebut($nilai % 10);
} else if ($nilai < 200) {
$temp = " seratus" . penyebut($nilai - 100);
} else if ($nilai < 1000) {
$temp = penyebut($nilai/100) . " ratus" . penyebut($nilai % 100);
} else if ($nilai < 2000) {
$temp = " seribu" . penyebut($nilai - 1000);
} else if ($nilai < 1000000) {
$temp = penyebut($nilai/1000) . " ribu" . penyebut($nilai % 1000);
} else if ($nilai < 1000000000) {
$temp = penyebut($nilai/1000000) . " juta" . penyebut($nilai % 1000000);
} else if ($nilai < 1000000000000) {
$temp = penyebut($nilai/1000000000) . " milyar" . penyebut(fmod($nilai,1000000000));
} else if ($nilai < 1000000000000000) {
$temp = penyebut($nilai/1000000000000) . " trilyun" . penyebut(fmod($nilai,1000000000000));
}
return $temp;
}
if ($nilai < 0) {
$hasil = "minus " . trim(penyebut($nilai));
} else {
$hasil = trim(penyebut($nilai));
}
return $hasil;
}
public static function lastDigitYear()
{
// 2023 => 3
return substr(date('Y'), -1);
}
public static function weekNumOfYear()
{
// 27 jul 2022 => 30
return date('W');
}
public static function dayOfWeek()
{
// monday => 01, sunday => 07
return date('N');
}
public static function gnrtOrdCode($type) {
$ord_code = '';
$ord_code .= $type;
$ord_code .= Helper::lastDigitYear() . Helper::weekNumOfYear() . Helper::dayOfWeek();
// above before running number
$likeCode = \App\Models\Orders::getOrderLikeCode($ord_code);
// below after running number
if (count($likeCode) < 1 || $likeCode === false) {
$ord_code .= '001';
} else {
if ($likeCode[0]->total < 1) {
$ord_code .= '001';
} else {
$ord_code .= str_pad($likeCode[0]->total + 1, 3, '0', STR_PAD_LEFT);
}
}
return $ord_code;
}
public static function gnrtInvcCode($ord_code) {
$invc_code = '';
$type = substr($ord_code, 0, 1);
$invc_code .= Helper::lastDigitYear() . Helper::weekNumOfYear() . $type;
$first_invc_code = $invc_code;
// above before running number
$likeCode = \App\Models\OrdersInvoices::getLikeCode($invc_code);
// below after running number
if (count($likeCode) < 1 || $likeCode === false) {
$invc_code .= '001';
} else {
if ($likeCode[0]->total < 1) {
$invc_code .= '001';
} else {
$invc_code .= str_pad($likeCode[0]->total + 1, 3, '0', STR_PAD_LEFT);
$checkCode = OrdersInvoices::getByCode($invc_code);
if (count($checkCode) > 0) {
$invc_code = $first_invc_code;
$lastRN = OrdersInvoices::getLikeCodeLastRunningNumber($invc_code);
$newRN = (int)substr($lastRN[0]->code, -3);
$invc_code .= str_pad($newRN + 1, 3, '0', STR_PAD_LEFT);
}
}
}
return $invc_code;
}
public static function viewBillFncIsEnableBtn($prev_termin, $curr_termin)
{
if ($curr_termin->termin_ddln_type === \App\Models\OrdersTermins::DDLN_TERMIN_TYPE_ORD_FINISH) {
if ($curr_termin->drop_chk_at === 0) {
// Menunggu Pengantaran Selesai
// return 0;
if ($prev_termin->termin_is_paid === \App\Models\OrdersTermins::IS_PAID_YES) {
// Termin sebelumnya selesai dan show btn invoice
return 1;
} else {
// Menunggu Pengantaran Selesai
return 0;
}
} else {
if ($curr_termin->termin_is_paid === \App\Models\OrdersTermins::IS_PAID_YES) {
// invoice close
return 4;
} else {
if ($prev_termin !== 0 && $prev_termin->termin_is_paid === \App\Models\OrdersTermins::IS_PAID_NO) {
// Termin sebelumnya belum terkonfirmasi selesai
return 3;
}
// Pengantaran Selesai pada and show btn invoice
return 2;
}
}
} else {
if ($curr_termin->termin_is_paid === \App\Models\OrdersTermins::IS_PAID_YES) {
// invoice close
return 4;
} else {
if ($prev_termin !== 0 && $prev_termin->termin_is_paid === \App\Models\OrdersTermins::IS_PAID_NO) {
// Termin sebelumnya belum terkonfirmasi selesai
return 3;
}
// show btn invoice
return 1;
}
}
}
public static function changeIpToDomain($fullurl)
{
$replace = $fullurl;
if (!strpos($fullurl, env('ORI_IP')) === false) {
$replace = str_replace(env('ORI_IP'), env('ORI_DOMAIN'), $replace);
}
return $replace;
}
}

View File

@ -0,0 +1,289 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\AItems;
use App\Models\Users;
use App\Models\OrdersAItems;
use App\Models\UnitTypes;
class AItemsController extends Controller
{
public function view_a_items(Request $req)
{
$unitTypes = UnitTypes::listUnitTypes(['is_active' => UnitTypes::IS_ACTIVE, 'is_publish' => UnitTypes::IS_PUBLISH]);
$data = [
'unitTypes' => $unitTypes,
'user' => $req->auth,
];
return view('menu_v2.Finance.adtItems', $data);
}
/**
* API
*/
public function api_list_a_items(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
if ($req->auth->role === Users::ROLE_ADMIN) {
$filter['crt_type'] = AItems::CRT_TYPE_ADMIN;
} else if ($req->auth->role === Users::ROLE_FINANCE) {
$filter['crt_type'] = AItems::CRT_TYPE_FINANCE;
} else {
$filter['crt_type'] = 99;
}
$list = AItems::listAItems($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list a_items');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_a_items(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$a_item = AItems::showAItemsById($id);
if (count($a_item) < 1) {
$apiResp = Responses::not_found('a_item not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail a_item');
$apiResp['data'] = $a_item[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_a_items(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->name,
'type' => $req->type,
'price' => $req->price,
'status' => $req->status,
'is_adm_price' => $req->is_adm_price,
];
$rulesInput = [
'name' => 'required|string',
'type' => 'required|integer|not_in:0',
'price' => 'required|numeric',
'status' => 'required|integer|min:0',
'is_adm_price' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$uniqName = AItems::getByName($req->name);
if (count($uniqName) > 0) {
$apiResp = Responses::bad_request('nama additional item sudah terdata');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if ($req->auth->role === Users::ROLE_ADMIN) {
$crt_type = AItems::CRT_TYPE_ADMIN;
} else if ($req->auth->role === Users::ROLE_FINANCE) {
$crt_type = AItems::CRT_TYPE_FINANCE;
} else {
$crt_type = 99;
}
DB::beginTransaction();
$insAItems = [
'name' => $req->name,
'type' => $req->type,
'price' => $req->price,
'is_active' => $req->status,
'is_adm_price' => $req->is_adm_price,
'crt' => $now,
'crt_by' => $req->auth->uid,
'crt_type' => $crt_type,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$id = AItems::add($insAItems);
$apiResp = Responses::created('success add new additional item');
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']));
}
}
public function api_updt_a_items(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
'name' => $req->name,
'type' => $req->type,
'price' => $req->price,
'status' => $req->status,
'is_adm_price' => $req->is_adm_price,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
'name' => 'required|string',
'type' => 'required|integer|not_in:0',
'price' => 'required|numeric',
'status' => 'required|integer|min:0',
'is_adm_price' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$a_item = AItems::showAItemsById($id);
if (count($a_item) < 1) {
$apiResp = Responses::not_found('additional item not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$uniqName = AItems::getByName($req->name);
if (count($uniqName) > 0) {
$notSameUser = 1;
foreach ($uniqName as $key => $row) {
if ($row->id == $id) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request('nama additional item sudah terdata');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
DB::beginTransaction();
$updtAItems = [
'name' => $req->name,
'type' => $req->type,
'price' => $req->price,
'is_active' => $req->status,
'is_adm_price' => $req->is_adm_price,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
AItems::updt($id, $updtAItems);
$apiResp = Responses::created('success update additional item');
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']));
}
}
public function api_del_a_items(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$a_item = AItems::showAItemsById($id);
if (count($a_item) < 1) {
$apiResp = Responses::not_found('additional item not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
AItems::updt($id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete additional item');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Validator;
use Auth;
use Hash;
use Session;
use App\Models\User;
use DB;
class AuthController extends Controller
{
public function login(Request $request)
{
// print_r($request->all());
$response = ["success" => false];
try {
$data = [
"email" => $request->email,
"password" => $request->password,
];
Auth::attempt($data);
if (Auth::check() && Auth::user()->status != 1) {
Auth::logout();
$response = [
"success" => false,
"code" => 400,
"msg" =>
"Your account is inactive, please contact the Administrator.",
];
}
$response = [
"code" => 200,
"success" => true,
"data" => [
"id" => Auth::user()->id,
],
];
} catch (\Throwable $th) {
$response["error"] = $th->getMessage();
}
return $response;
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}

View File

@ -0,0 +1,224 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use App\Helper;
use App\Models\Users;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\ValidationException;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware("guest")->except("logout");
}
public function username()
{
return "email";
}
public function login(Request $req)
{
$this->validateLogin($req);
// If the class is using the ThrottlesLogins trait, we can automatically throttle
// the login attempts for this application. We'll key this by the username and
// the IP address of the client making these requests into this application.
if (
method_exists($this, "hasTooManyLoginAttempts") &&
$this->hasTooManyLoginAttempts($req)
) {
$this->fireLockoutEvent($req);
return $this->sendLockoutResponse($req);
}
if ($this->guard()->validate($this->credentials($req))) {
$user = $this->guard()->getLastAttempted();
if ($user->dlt != null) {
$this->incrementLoginAttempts($req);
throw ValidationException::withMessages([
$this->username() => [trans("auth.failed")],
]);
}
if ($user->status != Users::STATUS_ACTIVE) {
// Increment the failed login attempts and redirect back to the
// login form with an error message.
$this->incrementLoginAttempts($req);
// return redirect()
// ->back()
// ->withInput($req->only($this->username(), 'remember'))
// ->withErrors(['active' => 'You must be active to login.']);
throw ValidationException::withMessages([
$this->username() => __(
"Your account not active, please contact admin."
),
]);
}
if ($this->attemptLogin($req)) {
return $this->sendLoginResponse($req);
}
}
// If the login attempt was unsuccessful we will increment the number of attempts
// to login and redirect the user back to the login form. Of course, when this
// user surpasses their maximum number of attempts they will get locked out.
$this->incrementLoginAttempts($req);
return $this->sendFailedLoginResponse($req);
}
protected function validateLogin(Request $req)
{
$this->validate($req, [
$this->username() => "required|string|email",
"password" => "required|string",
]);
}
protected function sendLoginResponse(Request $req)
{
$req->session()->regenerate();
$this->clearLoginAttempts($req);
if ($response = $this->authenticated($req, $this->guard()->user())) {
return $response;
}
// return $req->wantsJson()
// ? new JsonResponse([], 204)
// : redirect()->intended($this->redirectPath());
// return $req->wantsJson()
// ? new JsonResponse([], 204)
// : redirect(route('view_dashboard'));
if ($req->wantsJson()) {
return new JsonResponse([], 204);
} else {
$user = Auth::user();
if ($user->role == Users::ROLE_ADMIN) {
return redirect(route("view_dashboard"));
} elseif ($user->role == Users::ROLE_VENDOR) {
return redirect(route("view_dashboard"));
} elseif ($user->role == Users::ROLE_CHECKER) {
return redirect(route("view_user_checker"));
} elseif ($user->role == Users::ROLE_CLIENT_ADMIN) {
return redirect(
route("view_user_client_transaction_add") . "?rdl=1"
);
} elseif ($user->role == Users::ROLE_SPECIAL_TRACKING) {
return redirect(route("view_dashboard"));
} elseif ($user->role == Users::ROLE_FINANCE) {
return redirect(route("view_keuangan_payment"));
} else {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
// return redirect(route('login'));
return redirect(route("login"));
}
}
}
public function logout(Request $req)
{
$user = Auth::user();
if ($user->role == Users::ROLE_ADMIN) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_admin"));
} elseif ($user->role == Users::ROLE_FINANCE) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_admin"));
} elseif ($user->role == Users::ROLE_VENDOR) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_vendor"));
} elseif ($user->role == Users::ROLE_CHECKER) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_checker"));
} elseif ($user->role == Users::ROLE_CLIENT_ADMIN) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_client"));
} elseif ($user->role == Users::ROLE_SPECIAL_TRACKING) {
$this->guard()->logout();
$req->session()->invalidate();
$req->session()->regenerateToken();
if ($response = $this->loggedOut($req)) {
return $response;
}
return $req->wantsJson()
? new JsonResponse([], 204)
: redirect(route("login_admin"));
}
}
}

View File

@ -0,0 +1,73 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}

View File

@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Users;
class AuthController extends Controller
{
// public function view_login(Request $req)
// {
// return 'Do login';
// }
public function view_login_admin(Request $req)
{
return view('auth.loginAdmin');
}
public function view_login_client(Request $req)
{
return view('auth.loginClient');
}
public function view_login_vendor(Request $req)
{
return view('auth.loginVendor');
}
public function view_login_checker(Request $req)
{
return view('auth.loginChecker');
}
public function api_login(Request $req)
{
try {
$now = time();
$input = [
'password' => $req->password,
];
$rulesInput = [
'password' => 'required|string',
];
if ($req->email) {
$input['email'] = $req->email;
$rulesInput['email'] = 'required|email';
}
if ($req->phone) {
$input['phone'] = $req->phone;
$rulesInput['phone'] = 'required|integer';
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$getUser = Users::getUserByEmail($req->email);
if (count($getUser) < 1) {
$getUser = Users::getUserByPhone($req->phone);
if (count($getUser) < 1) {
$apiResp = Responses::not_found('akun tidak ditemukan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
$apiResp = Responses::success('sukses login');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,57 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use Auth;
use DataTables;
class ChecklistController extends Controller
{
public function index()
{
return view("menu_v1.checklist");
}
public function table()
{
$table = DB::table("t_conf_checklists as tcc")
->leftJoin("t_clients as tc", "tc.id", "tcc.client_id")
->leftJoin("t_users as tu", "tu.id", "tcc.crt_by")
->select("tcc.*", "tu.first_name as crt_name", "tc.c_name as company_name")
->whereNull("tcc.dlt")
->where("tcc.client_id", Auth::user()->client_id);
// dd($table);
return DataTables::of($table)
->addIndexColumn()
->make();
}
public function create()
{
return view("menu_v1._addChecklist");
}
public function store(Request $request)
{
$now = time();
$_dtPost = [
"name" => $request->name,
"client_id" => Auth::user()->client_id,
"desc" => $request->desc,
"status" => $request->status,
"crt" => $now,
"updt" => $now,
"crt_by" => Auth::user()->id,
"updt_by" => Auth::user()->id,
];
$dtPost = DB::table("t_conf_checklists")->insert($_dtPost);
if ($dtPost) {
return redirect("checklist");
}
}
}

View File

@ -0,0 +1,591 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Hash;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Clients;
use App\Models\Users;
class ClientController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function view_clients()
{
$data = [
"disc_types" => Clients::select2DiscountTypes(),
];
return view("menu_v1.clients", $data);
}
/**
* API
*/
public function api_list_clients(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
$list = Clients::listClients($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
// $list[$key]->count_trx = 0;
}
$apiResp = Responses::success("success list clients");
$apiResp["data"] = $list;
$apiResp["count"] = count($list);
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_show_client(Request $req, $cid)
{
try {
$now = time();
$input = [
"cid" => $cid,
];
$rulesInput = [
"cid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$client = Clients::showClientById($cid);
if (count($client) < 1) {
$apiResp = Responses::not_found("client not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($client[0]->user_id) {
$client[0]->c_credentials = Clients::CCREDENTIALS_CREATE;
} else {
$client[0]->c_credentials = Clients::CCREDENTIALS_NOT;
}
$apiResp = Responses::success("success get detail client");
$apiResp["data"] = $client[0];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_add_client(Request $req)
{
//dd($req->all());
$url_clogo = "";
try {
$now = time();
$input = [
"client_logo" => $req->clogo_base64,
"client_name" => $req->cname,
"client_office_address" => $req->caddress_office,
"client_phone" => $req->cphone,
"client_email" => $req->cmail,
"pic_name" => $req->picname,
"pic_phone" => $req->picphone,
"pic_email" => $req->picmail,
// "disc_type" => $req->disc_type,
// "disc_amount" => $req->disc_amount,
"client_status" => $req->cstatus,
"is_create_login_credentials" => $req->ccredentials,
];
$rulesInput = [
"client_logo" => "required|string",
"client_name" => "required|string|max:255",
"client_office_address" => "required|string|min:45|max:300",
"client_phone" => "required|integer|not_in:0",
"client_email" => "required|string|email",
"pic_name" => "required|string|max:255",
"pic_phone" => "required|integer|not_in:0",
"pic_email" => "required|string|email",
// "disc_type" => "required|numeric|min:0",
// "disc_amount" => "required|numeric|min:0",
"client_status" => "required|numeric",
"is_create_login_credentials" => "required|numeric",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqCPhone = Clients::getClientByPhone($req->cphone);
if (count($uniqCPhone) > 0) {
$apiResp = Responses::bad_request("client phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqCMail = Clients::getClientByEmail($req->cmail);
if (count($uniqCMail) > 0) {
$apiResp = Responses::bad_request("client email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqPicPhone = Clients::getPicByPhone($req->picphone);
if (count($uniqPicPhone) > 0) {
$apiResp = Responses::bad_request("pic phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqPicMail = Clients::getPicByEmail($req->picmail);
if (count($uniqPicMail) > 0) {
$apiResp = Responses::bad_request("pic email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqUserPhone = Users::getUserByPhone($req->cphone);
if (count($uniqUserPhone) > 0) {
$apiResp = Responses::bad_request("client phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqUserMail = Users::getUserByEmail($req->cmail);
if (count($uniqUserMail) > 0) {
$apiResp = Responses::bad_request("client email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->disc_type == Clients::DISC_TYPE_PERCENT && $req->disc_amount > 100) {
$apiResp = Responses::bad_request("maximum percent is 100%");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
$insClient = [
"c_name" => $req->cname,
"c_addr_office" => $req->caddress_office,
"c_phone" => $req->cphone,
"c_phone_code" => Clients::DEFAULT_PHONE_CODE,
"c_mail" => $req->cmail,
"c_logo" => $url_clogo,
"pic_name" => $req->picname,
"pic_phone" => $req->picphone,
"pic_phone_code" => Clients::DEFAULT_PHONE_CODE,
"pic_mail" => $req->picmail,
"disc_type" => 0,
"disc_amount" => 0,
"c_status" => $req->cstatus,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
$clientId = Clients::addClient($insClient);
$url_clogo = "clients/$clientId/logo_$now.jpeg";
if (!Storage::disk("public")->put($url_clogo, base64_decode($req->clogo_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload client logo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$updtClient = [
"c_logo" => $url_clogo,
];
Clients::updateClient($clientId, $updtClient);
if ($req->ccredentials == Clients::CCREDENTIALS_CREATE) {
$status = Users::STATUS_ACTIVE;
if ($req->cstatus == Clients::CSTTS_INACTIVE) {
$status = Users::STATUS_NOT_ACTIVE;
}
$insAccount = [
"client_id" => $clientId,
"client_group_id" => $clientId,
"first_name" => $req->cname,
"last_name" => null,
"email" => $req->cmail,
"phone" => $req->cphone,
"phone_code" => Users::DEFAULT_PHONE_CODE,
"fulladdress" => $req->caddress_office,
"password" => Hash::make($req->cphone),
"role" => Users::ROLE_VENDOR,
"status" => $status,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Users::addUser($insAccount);
}
$apiResp = Responses::created("success add new client");
DB::commit();
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_clogo);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_edit_client(Request $req, $cid)
{
$url_clogo = "";
try {
$now = time();
$input = [
"cid" => $cid,
"client_logo" => $req->clogo_base64,
"client_name" => $req->cname,
"client_office_address" => $req->caddress_office,
"client_phone" => $req->cphone,
"client_email" => $req->cmail,
"pic_name" => $req->picname,
"pic_phone" => $req->picphone,
"pic_email" => $req->picmail,
"disc_type" => $req->disc_type,
"disc_amount" => $req->disc_amount,
"client_status" => $req->cstatus,
"is_create_login_credentials" => $req->ccredentials,
];
$rulesInput = [
"cid" => "required|integer|not_in:0",
"client_logo" => "required|string",
"client_name" => "required|string|max:255",
"client_office_address" => "required|string|min:45|max:300",
"client_phone" => "required|integer|not_in:0",
"client_email" => "required|string|email",
"pic_name" => "required|string|max:255",
"pic_phone" => "required|integer|not_in:0",
"pic_email" => "required|string|email",
// "disc_type" => "required|numeric|min:0",
// "disc_amount" => "required|numeric|min:0",
"client_status" => "required|numeric",
"is_create_login_credentials" => "required|numeric",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$client = Clients::showClientById($cid);
if (count($client) < 1) {
$apiResp = Responses::not_found("client not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqCPhone = Clients::getClientByPhone($req->cphone);
if (count($uniqCPhone) > 0) {
$notSameUser = 1;
foreach ($uniqCPhone as $key => $row) {
if ($row->id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("client phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqCMail = Clients::getClientByEmail($req->cmail);
if (count($uniqCMail) > 0) {
$notSameUser = 1;
foreach ($uniqCMail as $key => $row) {
if ($row->id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("client email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPicPhone = Clients::getPicByPhone($req->picphone);
if (count($uniqPicPhone) > 0) {
$notSameUser = 1;
foreach ($uniqPicPhone as $key => $row) {
if ($row->id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("pic phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPicMail = Clients::getPicByEmail($req->picmail);
if (count($uniqPicMail) > 0) {
$notSameUser = 1;
foreach ($uniqPicMail as $key => $row) {
if ($row->id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("pic email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqUserPhone = Users::getUserByPhone($req->cphone);
if (count($uniqUserPhone) > 0) {
$notSameUser = 1;
foreach ($uniqUserPhone as $key => $row) {
if ($row->client_group_id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("client phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqUserMail = Users::getUserByEmail($req->cmail);
if (count($uniqUserMail) > 0) {
$notSameUser = 1;
foreach ($uniqUserMail as $key => $row) {
if ($row->client_group_id == $cid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("client email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->disc_type == Clients::DISC_TYPE_PERCENT && $req->disc_amount > 100) {
$apiResp = Responses::bad_request("maximum percent is 100%");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$user = Users::getUserByClientId($cid);
DB::beginTransaction();
$url_clogo = $client[0]->c_logo;
if ($req->clogo_base64 && $req->clogo_base64 != "noupdate") {
$url_clogo = "clients/$cid/logo_$now.jpeg";
if (!Storage::disk("public")->put($url_clogo, base64_decode($req->clogo_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload client logo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($client[0]->c_logo);
}
$updtClient = [
"c_name" => $req->cname,
"c_addr_office" => $req->caddress_office,
"c_phone" => $req->cphone,
"c_phone_code" => Clients::DEFAULT_PHONE_CODE,
"c_mail" => $req->cmail,
"c_logo" => $url_clogo,
"pic_name" => $req->picname,
"pic_phone" => $req->picphone,
"pic_phone_code" => Clients::DEFAULT_PHONE_CODE,
"pic_mail" => $req->picmail,
"disc_type" => $req->disc_type,
"disc_amount" => $req->disc_amount,
"c_status" => $req->cstatus,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Clients::updateClient($cid, $updtClient);
if ($req->ccredentials == Clients::CCREDENTIALS_CREATE && count($user) < 1) {
$status = Users::STATUS_ACTIVE;
if ($req->cstatus == Clients::CSTTS_INACTIVE) {
$status = Users::STATUS_NOT_ACTIVE;
}
$insAccount = [
"client_id" => $cid,
"client_group_id" => $cid,
"first_name" => $req->cname,
"last_name" => null,
"email" => $req->cmail,
"phone" => $req->cphone,
"phone_code" => Users::DEFAULT_PHONE_CODE,
"fulladdress" => $req->caddress_office,
"password" => Hash::make($req->cphone),
"role" => Users::ROLE_CLIENT_ADMIN,
"status" => $status,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Users::addUser($insAccount);
}
$status = Users::STATUS_ACTIVE;
if ($req->cstatus == Clients::CSTTS_INACTIVE) {
$status = Users::STATUS_NOT_ACTIVE;
}
// update the client credentials only
if (count($user) > 0) {
$updtAccount = [
"status" => $status,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Users::UpdateUser($user[0]->id, $updtAccount);
}
// update user group by this client
$updtGroupAccount = [
"status" => $status,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Users::updateUsersByGroupClientId($client[0]->id, $updtGroupAccount);
DB::commit();
$apiResp = Responses::success("success update client");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_clogo);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_del_client(Request $req, $cid)
{
try {
$now = time();
$input = [
"cid" => $cid,
];
$rulesInput = [
"cid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$client = Clients::showClientById($cid);
if (count($client) < 1) {
$apiResp = Responses::not_found("client not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$user = Users::getUserByClientId($cid);
DB::beginTransaction();
Clients::updateClient($cid, [
"dlt" => $now,
"dlt_by" => $req->auth->uid,
]);
// delete the client credentials only
if (count($user) > 0) {
// Users::updateUser($user[0]->id, [
// 'dlt' => $now,
// 'dlt_by' => $req->auth->uid,
// ]);
}
// delete user group by this client
Users::updateUsersByGroupClientId($client[0]->id, [
"dlt" => $now,
"dlt_by" => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success("success delete client");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_universal_show_client_pt(Request $req)
{
try {
$now = time();
$input = [
"cptid" => $req->cptid,
];
$rulesInput = [
"cptid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$client = Clients::showClientById($req->cptid);
if (count($client) < 1) {
$apiResp = Responses::not_found("client not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($client[0]->user_id) {
$client[0]->c_credentials = Clients::CCREDENTIALS_CREATE;
} else {
$client[0]->c_credentials = Clients::CCREDENTIALS_NOT;
}
$apiResp = Responses::success("success get detail client");
$apiResp["data"] = $client[0];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}

View File

@ -0,0 +1,387 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use Hidehalo\Nanoid\Client as Nanoid;
use Hidehalo\Nanoid\GeneratorInterface as NanoidInterface;
use App\Responses;
use App\Helper;
use App\Models\ConfRates;
use App\Models\Region;
use App\Models\ConfTruckTypes;
use App\Models\Users;
class ConfRateController extends Controller
{
/**
* View
*/
public function view_rates(Request $req)
{
$data = [
'lanes' => ConfRates::getLanesActive(),
'provs' => Region::listProv(),
'vendors' => Users::getUsersActiveByRole(Users::ROLE_VENDOR),
'truck_types' => ConfTruckTypes::listTruckTypes(ConfTruckTypes::IS_ACTIVE),
];
return view('menu_v1.configs.pricing', $data);
}
/**
* API
*/
public function api_list_rates(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$list = ConfRates::listRates();
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list rates');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_rate(Request $req, $rid)
{
try {
$now = time();
$input = [
'rid' => $rid,
];
$rulesInput = [
'rid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$rate = ConfRates::showRateById($rid);
if (count($rate) < 1) {
$apiResp = Responses::not_found('rate not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail rate');
$apiResp['data'] = $rate[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_rate(Request $req)
{
try {
$now = time();
$input = [
'origin_prov' => $req->origin_prov,
// 'origin_city' => $req->origin_city,
'via' => $req->via,
'dest_prov' => $req->dest_prov,
'dest_city' => $req->dest_city,
'dest_district' => $req->dest_district,
'vendor' => $req->vendor_id,
'vehicle_type' => $req->vhc_type_id,
'fast_time' => $req->fast_time,
'long_time' => $req->long_time,
'sell_kg' => $req->sell_kg,
'buy_kg' => $req->buy_kg,
'margin_kg' => $req->margin_kg,
'percent_kg' => $req->percent_kg,
'sell_cbm' => $req->sell_cbm,
'buy_cbm' => $req->buy_cbm,
'margin_cbm' => $req->margin_cbm,
'percent_cbm' => $req->percent_cbm,
'sell_ftl' => $req->sell_ftl,
'buy_ftl' => $req->buy_ftl,
'margin_ftl' => $req->margin_ftl,
'percent_ftl' => $req->percent_ftl,
'status' => $req->status,
];
$rulesInput = [
'origin_prov' => 'required|numeric|min:0',
// 'origin_city' => 'required|numeric|min:0',
'via' => 'required|numeric|min:0',
'dest_prov' => 'required|numeric|min:0',
'dest_city' => 'required|numeric|min:0',
'dest_district' => 'nullable|numeric|min:0',
'vendor' => 'required|integer|not_in:0',
'vehicle_type' => 'required|integer|not_in:0',
'fast_time' => 'required|numeric|min:0',
'long_time' => 'required|numeric|min:0',
'sell_kg' => 'required|numeric|min:0',
'buy_kg' => 'required|numeric|min:0',
'margin_kg' => 'required|numeric|min:0',
'percent_kg' => 'required|numeric|min:0',
'sell_cbm' => 'required|numeric|min:0',
'buy_cbm' => 'required|numeric|min:0',
'margin_cbm' => 'required|numeric|min:0',
'percent_cbm' => 'required|numeric|min:0',
'sell_ftl' => 'required|numeric|min:0',
'buy_ftl' => 'required|numeric|min:0',
'margin_ftl' => 'required|numeric|min:0',
'percent_ftl' => 'required|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$nanoid = new Nanoid();
$code = $nanoid->formattedId('123456789', 6);
$uniqCode = ConfRates::getRateByCode($code);
if (count($uniqCode) > 0) {
$apiResp = Responses::bad_request('code has been used, try again');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$insRate = [
'code' => $code,
'origin_prov' => $req->origin_prov,
// 'origin_city' => $req->origin_city,
'lane' => $req->via,
'dest_prov' => $req->dest_prov,
'dest_city' => $req->dest_city,
'vdr_id' => $req->vendor_id,
'vhc_type' => $req->vhc_type_id,
'fast_time' => $req->fast_time,
'long_time' => $req->long_time,
'unit_time' => ConfRates::UNIT_DAY,
'sell_kg' => $req->sell_kg,
'buy_kg' => $req->buy_kg,
'margin_kg' => $req->margin_kg,
'percent_kg' => $req->percent_kg,
'sell_cbm' => $req->sell_cbm,
'buy_cbm' => $req->buy_cbm,
'margin_cbm' => $req->margin_cbm,
'percent_cbm' => $req->percent_cbm,
'sell_ftl' => $req->sell_ftl,
'buy_ftl' => $req->buy_ftl,
'margin_ftl' => $req->margin_ftl,
'percent_ftl' => $req->percent_ftl,
'is_active' => $req->status,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
if ($req->dest_district) {
$insRate['dest_district'] = $req->dest_district;
}
$rid = ConfRates::addRate($insRate);
$apiResp = Responses::created('success add new 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']));
}
}
public function api_edit_rate(Request $req, $rid)
{
try {
$now = time();
$input = [
'rid' => $rid,
'origin_prov' => $req->origin_prov,
// 'origin_city' => $req->origin_city,
'via' => $req->via,
'dest_prov' => $req->dest_prov,
'dest_city' => $req->dest_city,
'dest_district' => $req->dest_district,
'vendor' => $req->vendor_id,
'vehicle_type' => $req->vhc_type_id,
'fast_time' => $req->fast_time,
'long_time' => $req->long_time,
'sell_kg' => $req->sell_kg,
'buy_kg' => $req->buy_kg,
'margin_kg' => $req->margin_kg,
'percent_kg' => $req->percent_kg,
'sell_cbm' => $req->sell_cbm,
'buy_cbm' => $req->buy_cbm,
'margin_cbm' => $req->margin_cbm,
'percent_cbm' => $req->percent_cbm,
'sell_ftl' => $req->sell_ftl,
'buy_ftl' => $req->buy_ftl,
'margin_ftl' => $req->margin_ftl,
'percent_ftl' => $req->percent_ftl,
'status' => $req->status,
];
$rulesInput = [
'rid' => 'required|integer|not_in:0',
'origin_prov' => 'required|numeric|min:0',
// 'origin_city' => 'required|numeric|min:0',
'via' => 'required|numeric|min:0',
'dest_prov' => 'required|numeric|min:0',
'dest_city' => 'required|numeric|min:0',
'dest_district' => 'nullable|numeric|min:0',
'vendor' => 'required|integer|not_in:0',
'vehicle_type' => 'required|integer|not_in:0',
'fast_time' => 'required|numeric|min:0',
'long_time' => 'required|numeric|min:0',
'sell_kg' => 'required|numeric|min:0',
'buy_kg' => 'required|numeric|min:0',
'margin_kg' => 'required|numeric|min:0',
'percent_kg' => 'required|numeric|min:0',
'sell_cbm' => 'required|numeric|min:0',
'buy_cbm' => 'required|numeric|min:0',
'margin_cbm' => 'required|numeric|min:0',
'percent_cbm' => 'required|numeric|min:0',
'sell_ftl' => 'required|numeric|min:0',
'buy_ftl' => 'required|numeric|min:0',
'margin_ftl' => 'required|numeric|min:0',
'percent_ftl' => 'required|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$rate = ConfRates::showRateById($rid);
if (count($rate) < 1) {
$apiResp = Responses::not_found('rate not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$insRate = [
'origin_prov' => $req->origin_prov,
// 'origin_city' => $req->origin_city,
'lane' => $req->via,
'dest_prov' => $req->dest_prov,
'dest_city' => $req->dest_city,
'vdr_id' => $req->vendor_id,
'vhc_type' => $req->vhc_type_id,
'fast_time' => $req->fast_time,
'long_time' => $req->long_time,
'unit_time' => ConfRates::UNIT_DAY,
'sell_kg' => $req->sell_kg,
'buy_kg' => $req->buy_kg,
'margin_kg' => $req->margin_kg,
'percent_kg' => $req->percent_kg,
'sell_cbm' => $req->sell_cbm,
'buy_cbm' => $req->buy_cbm,
'margin_cbm' => $req->margin_cbm,
'percent_cbm' => $req->percent_cbm,
'sell_ftl' => $req->sell_ftl,
'buy_ftl' => $req->buy_ftl,
'margin_ftl' => $req->margin_ftl,
'percent_ftl' => $req->percent_ftl,
'is_active' => $req->status,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
if ($req->dest_district) {
$insRate['dest_district'] = $req->dest_district;
}
$rid = ConfRates::updateRate($rid, $insRate);
$apiResp = Responses::created('success add new 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']));
}
}
public function api_del_rate(Request $req, $rid)
{
try {
$now = time();
$input = [
'rid' => $rid,
];
$rulesInput = [
'rid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$rate = ConfRates::showRateById($rid);
if (count($rate) < 1) {
$apiResp = Responses::not_found('rate not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
ConfRates::updateRate($rid, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete rate');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,321 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use Hidehalo\Nanoid\Client as Nanoid;
use Hidehalo\Nanoid\GeneratorInterface as NanoidInterface;
use App\Responses;
use App\Helper;
use App\Models\ConfRates;
use App\Models\ConfTruckTypes;
use App\Models\Vehicles;
class ConfTruckTypeController extends Controller
{
/**
* View
*/
public function view_truck_types(Request $req)
{
$data = [];
return view('menu_v1.configs.truck_types', $data);
}
/**
* API
*/
public function api_list_truck_types(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$list = ConfTruckTypes::listTruckTypes();
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list truck types');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_truck_type(Request $req, $ttid)
{
try {
$now = time();
$input = [
'ttid' => $ttid,
];
$rulesInput = [
'ttid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$truckType = ConfTruckTypes::showTruckTypeById($ttid);
if (count($truckType) < 1) {
$apiResp = Responses::not_found('truck type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail truck type');
$apiResp['data'] = $truckType[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_truck_type(Request $req)
{
try {
$now = time();
$input = [
'type_name' => $req->type_name,
'max_kg' => $req->max_kg,
'max_cbm' => $req->max_cbm,
'max_koli' => $req->max_koli,
'status' => $req->status,
'publish' => $req->publish,
];
$rulesInput = [
'type_name' => 'required|string',
'max_kg' => 'nullable|numeric|min:0',
'max_cbm' => 'nullable|numeric|min:0',
'max_koli' => 'nullable|numeric|min:0',
'status' => 'required|numeric|min:0',
'publish' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$uniqName = ConfTruckTypes::getTruckTypeByName($req->type_name);
if (count($uniqName) > 0) {
$apiResp = Responses::bad_request('type name has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$type_id = ConfTruckTypes::addTypes([
'cat_id' => Vehicles::DEFAULT_CAT_ID,
'name' => $req->type_name,
'desc' => $req->type_name,
'is_active' => $req->status,
'is_publish' => $req->publish,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
]);
$insTruckType = [
'type_id' => $type_id,
'max_kg' => $req->max_kg ?? 0,
'max_cbm' => $req->max_cbm ?? 0,
'max_koli' => $req->max_koli ?? 0,
'is_active' => $req->status,
'is_publish' => $req->publish,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$ttid = ConfTruckTypes::addTruckType($insTruckType);
$apiResp = Responses::created('success add new truck type');
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']));
}
}
public function api_edit_truck_type(Request $req, $ttid)
{
try {
$now = time();
$input = [
'ttid' => $ttid,
'type_name' => $req->type_name,
'max_kg' => $req->max_kg,
'max_cbm' => $req->max_cbm,
'max_koli' => $req->max_koli,
'status' => $req->status,
'publish' => $req->publish,
];
$rulesInput = [
'ttid' => 'required|integer|not_in:0',
'type_name' => 'required|string',
'max_kg' => 'nullable|numeric|min:0',
'max_cbm' => 'nullable|numeric|min:0',
'max_koli' => 'nullable|numeric|min:0',
'status' => 'required|numeric|min:0',
'publish' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$truckType = ConfTruckTypes::showTruckTypeById($ttid);
if (count($truckType) < 1) {
$apiResp = Responses::not_found('truck type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$uniqName = ConfTruckTypes::getTruckTypeByName($req->type_name);
if (count($uniqName) > 0) {
$notSameUser = 1;
foreach ($uniqName as $key => $row) {
if ($row->id == $ttid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request('type name has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
if ($req->status == ConfTruckTypes::IS_INACTIVE) {
$checkVhcType = ConfRates::checkVhcType($truckType[0]->type_id);
if (count($checkVhcType) > 0) {
$apiResp = Responses::bad_request('cannot change to inactive, still connected on rates');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
DB::beginTransaction();
ConfTruckTypes::updtTypes($truckType[0]->type_id, [
'name' => $req->type_name,
'desc' => $req->type_name,
'is_active' => $req->status,
'is_publish' => $req->publish,
'updt' => $now,
'updt_by' => $req->auth->uid,
]);
$insTruckType = [
'type_id' => $truckType[0]->type_id,
'max_kg' => $req->max_kg ?? 0,
'max_cbm' => $req->max_cbm ?? 0,
'max_koli' => $req->max_koli ?? 0,
'is_active' => $req->status,
'is_publish' => $req->publish,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$ttid = ConfTruckTypes::updateTruckType($ttid, $insTruckType);
$apiResp = Responses::created('success update truck type');
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']));
}
}
public function api_del_truck_type(Request $req, $ttid)
{
try {
$now = time();
$input = [
'ttid' => $ttid,
];
$rulesInput = [
'ttid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$truckType = ConfTruckTypes::showTruckTypeById($ttid);
if (count($truckType) < 1) {
$apiResp = Responses::not_found('truck type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$checkVhcType = ConfRates::checkVhcType($truckType[0]->type_id);
if (count($checkVhcType) > 0) {
$apiResp = Responses::bad_request('cannot delete, still connected on rates');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
ConfTruckTypes::updtTypes($truckType[0]->type_id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
ConfTruckTypes::updateTruckType($ttid, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete truck type');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

View File

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Dana;
class DanaController extends Controller
{
/**
* View
*/
public function view_dana(Request $req)
{
$data = [
'dana' => Dana::getDanaById(Dana::PK_ID)[0],
];
$data['dana']->amt = number_format($data['dana']->amt, 0, ',', '.');
return view('menu_v2.Finance._dana', $data);
}
/**
* API
*/
public function api_edit_dana(Request $req, $dana_id)
{
try {
$now = time();
$input = [
'dana_id' => $dana_id,
'saldo' => $req->amt,
];
$rulesInput = [
'dana_id' => 'required|integer|not_in:0',
'saldo' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$dana = Dana::getDanaById(Dana::PK_ID);
if (count($dana) < 1) {
$apiResp = Responses::not_found('Dana not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if ($input['saldo'] < Dana::MINIMUM_AMT) {
$apiResp = Responses::bad_request('Minimum saldo dana Rp'.number_format(Dana::MINIMUM_AMT, 0, ',', '.'));
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtDana = [
'amt' => $input['saldo'],
];
Dana::updateDana($input['dana_id'], $updtDana);
$apiResp = Responses::success('success update dana');
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']));
}
}
}

View File

@ -0,0 +1,91 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\DataTypes;
class DataTypesController extends Controller
{
/**
* API
*/
public function api_list_dtypes(Request $req)
{
try {
$now = time();
$input = [
'is_active' => $req->is_active,
];
$rulesInput = [
'is_active' => 'nullable|numeric'
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['is_active'] != null && $input['is_active'] != 0) {
$filter['is_active'] = $input['is_active'];
}
$list = DataTypes::listDataTypes($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list data types');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_dtypes(Request $req, $dtypes_id)
{
try {
$now = time();
$input = [
'dtypes_id' => $dtypes_id,
];
$rulesInput = [
'dtypes_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_key = DataTypes::showDataType(['dtypes_id' => $dtypes_id]);
if (count($lgb_key) < 1) {
$apiResp = Responses::not_found('data type key not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail data type key');
$apiResp['data'] = $lgb_key[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,407 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Devices;
use App\Models\Vehicles;
class DevicesController extends Controller
{
public function view_devices(Request $req)
{
$vhcs = Vehicles::listVehicles($req->auth);
$data = [
'vhcs' => $vhcs,
];
return view('menu_v1.configs.devices', $data);
}
/**
* API
*/
public function api_list_devices(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$list = Devices::listDevices();
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
if ($row->vhc_id == null) {
$list[$key]->is_idle = 'yes';
} else {
$list[$key]->is_idle = 'no';
}
}
$apiResp = Responses::success('success list devices');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_device(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$device = Devices::showDeviceById($id);
if (count($device) < 1) {
$apiResp = Responses::not_found('device not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail device');
$apiResp['data'] = $device[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_device(Request $req)
{
try {
$now = time();
$input = [
'device_id' => $req->device_id,
'name' => $req->name,
'simcard' => $req->simcard,
'type' => $req->type,
'status' => $req->status,
'assigned' => $req->assigned,
'vid' => $req->vid,
'available' => $req->available,
];
$rulesInput = [
'device_id' => 'required|numeric',
'name' => 'required|string',
'simcard' => 'required|numeric',
'type' => 'required|integer|not_in:0',
'status' => 'required|numeric|min:0',
'assigned' => 'required|numeric',
'vid' => 'nullable|numeric',
'available' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$device_id = str_pad($req->device_id, Devices::MAX_DEVICE_ID, '0', STR_PAD_LEFT);
if (strlen($device_id) > 16) {
$apiResp = Responses::bad_request('device id maksimal 16 digit');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if (strlen($req->simcard) > 14) {
$apiResp = Responses::bad_request('simcard maksimal 14 digit');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$uniqDeviceId = Devices::getDeviceByDeviceId($device_id);
if (count($uniqDeviceId) > 0) {
$apiResp = Responses::bad_request('device id has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$uniqSimcard = Devices::getDeviceBySimcard($req->simcard);
if (count($uniqSimcard) > 0) {
$apiResp = Responses::bad_request('simcard has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$insDevice = [
'device_id' => $device_id,
'name' => $req->name,
'simcard' => (int)$req->simcard,
'type' => $req->type,
'is_active' => $req->status,
'is_assigned' => $req->assigned,
'is_available' => $req->available,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$id = Devices::addDevice($insDevice);
if ($req->assigned == Devices::IS_ASSIGNED) {
if ($req->vid == null || $req->vid == "") {
DB::rollBack();
$apiResp = Responses::bad_request('kendaraan belum dipilih');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$vhc = Vehicles::getVehicleByDeviceId($device_id);
if (count($vhc) > 0) {
DB::rollBack();
$apiResp = Responses::bad_request('kendaraan sudah dipasang oleh device id ' . $vhc[0]->device_id);
return (new Response($apiResp, $apiResp['meta']['code']));
}
$vhc = Vehicles::getVehicleById($req->vid);
if (count($vhc) > 0 && $vhc[0]->dvc_id !== 0 && $vhc[0]->device_id !== $device_id) {
DB::rollBack();
$apiResp = Responses::bad_request('kendaraan sudah dipasang oleh device id ' . $vhc[0]->device_id);
return (new Response($apiResp, $apiResp['meta']['code']));
}
$vid = $req->vid;
Vehicles::updateVehicle($vid, [
'dvc_id' => $id,
'device_id' => $device_id,
'simcard' => (int)$req->simcard,
]);
} else {
$vid = 0;
}
$apiResp = Responses::created('success add new device');
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']));
}
}
public function api_updt_device(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
'device_id' => $req->device_id,
'name' => $req->name,
'simcard' => $req->simcard,
'type' => $req->type,
'status' => $req->status,
'assigned' => $req->assigned,
'vid' => $req->vid,
'available' => $req->available,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
'device_id' => 'required|numeric',
'name' => 'required|string',
'simcard' => 'required|numeric',
'type' => 'required|integer|not_in:0',
'status' => 'required|numeric',
'assigned' => 'required|numeric',
'vid' => 'nullable|numeric',
'available' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$device = Devices::showDeviceById($id);
if (count($device) < 1) {
$apiResp = Responses::not_found('device not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$device_id = str_pad($req->device_id, Devices::MAX_DEVICE_ID, '0', STR_PAD_LEFT);
if (strlen($device_id) > 16) {
$apiResp = Responses::bad_request('device id maksimal 16 digit');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if (strlen($req->simcard) > 14) {
$apiResp = Responses::bad_request('simcard maksimal 14 digit');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$uniqDeviceId = Devices::getDeviceByDeviceId($device_id);
if (count($uniqDeviceId) > 0) {
$notSameUser = 1;
foreach ($uniqDeviceId as $key => $row) {
if ($row->id == $id) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request('device id has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
$uniqSimcard = Devices::getDeviceBySimcard($req->simcard);
if (count($uniqSimcard) > 0) {
$notSameUser = 1;
foreach ($uniqSimcard as $key => $row) {
if ($row->id == $id) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request('simcard has been used');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
if ($req->status == Devices::IS_INACTIVE) {
$isUsed = Vehicles::getVehicleByDeviceId($device_id);
if (count($isUsed) > 0) {
$apiResp = Responses::bad_request('tidak dapat mengubah menjadi nonaktif, device sedang digunakan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
DB::beginTransaction();
if ($device[0]->vhc_id) {
Vehicles::updateVehicle($device[0]->vhc_id, [
'dvc_id' => 0,
'device_id' => str_pad(0, Devices::MAX_DEVICE_ID, '0', STR_PAD_LEFT),
'simcard' => 0,
]);
}
if ($req->assigned == Devices::IS_ASSIGNED) {
if ($req->vid == null || $req->vid == "") {
DB::rollBack();
$apiResp = Responses::bad_request('kendaraan belum dipilih');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$vhc = Vehicles::getVehicleById($req->vid);
if (count($vhc) > 0 && $vhc[0]->dvc_id !== 0 && $vhc[0]->device_id !== $device_id) {
DB::rollBack();
$apiResp = Responses::bad_request('kendaraan sudah dipasang dengan device id ' . $vhc[0]->device_id);
return (new Response($apiResp, $apiResp['meta']['code']));
}
$vid = $req->vid;
Vehicles::updateVehicle($vid, [
'dvc_id' => $id,
'device_id' => $device_id,
'simcard' => (int)$req->simcard,
]);
} else {
$vhc = Vehicles::getVehicleByDeviceId($device_id);
if (count($vhc) > 0) {
$vid = $vhc[0]->id;
Vehicles::updateVehicle($vid, [
'dvc_id' => 0,
'device_id' => str_pad(0, Devices::MAX_DEVICE_ID, '0', STR_PAD_LEFT),
'simcard' => 0,
]);
}
}
$updtDevice = [
'device_id' => $req->device_id,
'name' => $req->name,
'simcard' => (int)$req->simcard,
'type' => $req->type,
'is_active' => $req->status,
'is_assigned' => $req->assigned,
'is_available' => $req->available,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
Devices::updateDevice($id, $updtDevice);
$apiResp = Responses::created('success update device');
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']));
}
}
public function api_del_device(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$device = Devices::showDeviceById($id);
if (count($device) < 1) {
$apiResp = Responses::not_found('device not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$isUsed = Vehicles::getVehicleByDeviceId($device[0]->device_id);
if (count($isUsed) > 0) {
$apiResp = Responses::bad_request('tidak dapat menghapus, device sedang digunakan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
Devices::updateDevice($id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete device');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,678 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Hash;
use Validator;
use Auth;
use App\Responses;
use App\Helper;
use App\Models\Drivers;
use App\Models\DriversDetail;
use App\Models\Users;
use App\Models\DrvPhoneDevices;
class DriversController extends Controller
{
public function api_list_drivers(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
$list = Drivers::listDrivers($req->auth, $filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->mileage_km = "-";
$list[$key]->action = "-";
}
$apiResp = Responses::success("success list drivers");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_show_driver(Request $req, $did)
{
try {
$now = time();
$input = [
"did" => $did,
];
$rulesInput = [
"did" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$driver = Drivers::showDriverById($did);
if (count($driver) < 1) {
$apiResp = Responses::not_found("driver not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success get detail driver");
$apiResp["data"] = $driver[0];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_add_driver(Request $req)
{
$url_ktp = "";
$url_npwp = "";
$url_license = "";
try {
$now = time();
$input = [
"ktp_photo" => $req->ktp_base64,
"nik" => $req->nik,
"fullname" => $req->fullname,
"fullname2" => $req->fullname2,
"phone" => $req->phone,
"phone2" => $req->phone2,
"email" => $req->email,
"date_of_birth" => $req->dob,
"age" => $req->age,
"blood" => $req->blood,
"home_address" => $req->fulladdress,
"npwp_photo" => $req->npwp_base64,
"npwp_number" => $req->npwp_string,
"npwp_number_hidden" => $req->npwp_number,
"license_photo" => $req->license_base64,
"license_number" => $req->license_number,
"license_exp" => $req->license_exp,
"emergency_fullname" => $req->em_fullname,
"emergency_relationship" => $req->em_relationship,
"emergency_phone" => $req->em_phone,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_kcp" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
"vendor_id" => Auth::user()->id,
];
$rulesInput = [
"ktp_photo" => "nullable|string", // required
"nik" => "nullable|integer", // required
"fullname" => "required|string|min:3|max:125",
"fullname2" => "nullable|string",
"phone" => "required|integer|not_in:0",
"phone2" => "nullable|integer|not_in:0",
"email" => "nullable|email", // required
"date_of_birth" => "nullable|date_format:Y-m-d", // required
"age" => "nullable|integer", // required
"blood" => "nullable|string|max:4", // required
"home_address" => "nullable|string|min:25", // required
"npwp_photo" => "nullable|string", // required
"npwp_number" => "nullable|string", // required
"npwp_number_hidden" => "nullable|numeric", // required
"license_photo" => "nullable|string", // required
"license_number" => "nullable|numeric", // required
"license_exp" => "nullable|date_format:Y-m-d", // required
"emergency_fullname" => "nullable|string|min:3", // required
"emergency_relationship" => "nullable|string", // required
"emergency_phone" => "nullable|integer|not_in:0", // required
"bank_id" => "required|integer|not_in:0",
"bank_code" => "required|numeric",
"bank_short" => "required|string",
"bank_name" => "required|string",
"bank_kcp" => "nullable|string",
"bank_acc_number" => "nullable|numeric", // required
"bank_acc_name" => "nullable|string|max:255", // required
"vendor_id" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->nik && strlen($req->nik) != 16) {
$apiResp = Responses::bad_input("nik must be 16 digit");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->license_number && strlen($req->license_number) < 12) {
$apiResp = Responses::bad_input("license number must be at least 12 digit");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->nik) {
$uniqNik = Drivers::getDriverByNik($req->nik);
if (count($uniqNik) > 0) {
$apiResp = Responses::bad_request("nik has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->phone) {
$uniqPhone = Drivers::getDriverByPhone($req->phone);
if (count($uniqPhone) > 0) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->email) {
$uniqEmail = Drivers::getDriverByEmail($req->email);
if (count($uniqEmail) > 0) {
$apiResp = Responses::bad_request("email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
DB::beginTransaction();
$insDriver = [
"nik" => $req->nik ? $req->nik : 0,
"fullname" => $req->fullname,
"email" => $req->email,
"fullname2" => $req->fullname2,
"phone" => $req->phone,
"phone_code" => Drivers::DEFAULT_PHONE_CODE,
"phone2" => $req->phone2 ?? 0,
"phone2_code" => Drivers::DEFAULT_PHONE_CODE,
"dob" => $req->dob,
"age" => $req->age ? $req->age : 0,
"blood" => $req->blood,
"fulladdress" => $req->fulladdress,
"client_group_id" => $req->auth->client_group_id ?? null,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$insDriver["vendor_id"] = $req->auth->uid;
} else {
$insDriver["vendor_id"] = Auth::user()->id ?? 0;
}
$did = Drivers::addDriver($insDriver);
if ($req->ktp_base64) {
$url_ktp = "drivers/$did/ktp_$now.jpeg";
if (!Storage::disk("public")->put($url_ktp, base64_decode($req->ktp_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload ktp photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->npwp_base64) {
$url_npwp = "drivers/$did/npwp_$now.jpeg";
if (!Storage::disk("public")->put($url_npwp, base64_decode($req->npwp_base64))) {
Storage::disk("public")->delete($url_ktp);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload npwp photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->license_base64) {
$url_license = "drivers/$did/license_$now.jpeg";
if (!Storage::disk("public")->put($url_license, base64_decode($req->license_base64))) {
Storage::disk("public")->delete($url_ktp);
Storage::disk("public")->delete($url_npwp);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload license photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$insDetail = [
"did" => $did,
"ktp_img" => $url_ktp ? $url_ktp : "",
"npwp_img" => $url_npwp ? $url_npwp : "",
"npwp_string" => $req->npwp_string,
"npwp_number" => $req->npwp_number,
"license_img" => $url_license ? $url_license : "",
"license_number" => $req->license_number,
"license_exp" => $req->license_exp,
"em_fullname" => $req->em_fullname,
"em_phone" => $req->em_phone,
"em_relationship" => $req->em_relationship,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short_name" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_branch_name" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
];
DriversDetail::addDetail($insDetail);
$insAccount = [
"client_id" => Auth::user()->client_id,
"client_group_id" => Auth::user()->client_group_id,
"first_name" => $req->fullname,
"last_name" => null,
"email" => $req->email,
"phone" => $req->phone,
"phone_code" => Users::DEFAULT_PHONE_CODE,
"fulladdress" => $req->fulladdress,
"password" => Hash::make("0" . $req->phone),
"role" => Users::ROLE_VENDOR_DRIVER,
"is_driver" => 1,
"status" => 1,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
Users::addUser($insAccount);
$apiResp = Responses::created("success add new driver");
DB::commit();
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_ktp);
Storage::disk("public")->delete($url_npwp);
Storage::disk("public")->delete($url_license);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_edit_driver(Request $req, $did)
{
$url_ktp = "";
$url_npwp = "";
$url_license = "";
try {
$now = time();
$input = [
"did" => $did,
"ktp_photo" => $req->ktp_base64,
"nik" => $req->nik,
"fullname" => $req->fullname,
"fullname2" => $req->fullname2,
"phone" => $req->phone,
"phone2" => $req->phone2,
"email" => $req->email,
"date_of_birth" => $req->dob,
"age" => $req->age,
"blood" => $req->blood,
"home_address" => $req->fulladdress,
"npwp_photo" => $req->npwp_base64,
"npwp_number" => $req->npwp_string,
"npwp_number_hidden" => $req->npwp_number,
"license_photo" => $req->license_base64,
"license_number" => $req->license_number,
"license_exp" => $req->license_exp,
"emergency_fullname" => $req->em_fullname,
"emergency_relationship" => $req->em_relationship,
"emergency_phone" => $req->em_phone,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_kcp" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
"vendor_id" => Auth::user()->id,
];
$rulesInput = [
"did" => "required|integer|not_in:0",
"ktp_photo" => "nullable|string",
"nik" => "required|integer",
"fullname" => "nullable|string|min:3|max:125", // required
"fullname2" => "nullable|string",
"phone" => "required|integer|not_in:0",
"phone2" => "nullable|integer|not_in:0",
"email" => "nullable|email", // required
"date_of_birth" => "nullable|date_format:Y-m-d", // required
"age" => "nullable|integer", // required
"blood" => "nullable|string|max:4", // required
"home_address" => "nullable|string|min:25", // required
"npwp_photo" => "nullable|string",
"npwp_number" => "nullable|string", // required
"npwp_number_hidden" => "nullable|numeric", // required
"license_photo" => "nullable|string",
"license_number" => "nullable|numeric", // required
"license_exp" => "nullable|date_format:Y-m-d", // required
"emergency_fullname" => "nullable|string|min:3", // required
"emergency_relationship" => "nullable|string", // required
"emergency_phone" => "nullable|integer|not_in:0", // required
"bank_id" => "required|integer|not_in:0", // required
"bank_code" => "required|numeric",
"bank_short" => "required|string",
"bank_name" => "required|string",
"bank_kcp" => "nullable|string",
"bank_acc_number" => "required|numeric",
"bank_acc_name" => "required|string|max:255",
"vendor_id" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->nik && strlen($req->nik) != 16) {
$apiResp = Responses::bad_input("nik must be 16 digit");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->license_number && strlen($req->license_number) < 12) {
$apiResp = Responses::bad_input("license number must be at least 12 digit");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$driver = Drivers::showDriverById($did);
if (count($driver) < 1) {
$apiResp = Responses::not_found("driver not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->nik) {
$uniqNik = Drivers::getDriverByNik($req->nik);
if (count($uniqNik) > 0) {
$notSameUser = 1;
foreach ($uniqNik as $key => $row) {
if ($row->id == $did) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("nik has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}
if ($req->phone) {
$uniqPhone = Drivers::getDriverByPhone($req->phone);
if (count($uniqPhone) > 0) {
$notSameUser = 1;
foreach ($uniqPhone as $key => $row) {
if ($row->id == $did) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}
if ($req->email) {
$uniqEmail = Drivers::getDriverByEmail($req->email);
if (count($uniqEmail) > 0) {
$notSameUser = 1;
foreach ($uniqEmail as $key => $row) {
if ($row->id == $did) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}
DB::beginTransaction();
$updtDriver = [
"nik" => $req->nik ? $req->nik : 0,
"fullname" => $req->fullname,
"email" => $req->email,
"fullname2" => $req->fullname2,
"phone" => $req->phone,
"phone_code" => Drivers::DEFAULT_PHONE_CODE,
"phone2" => $req->phone2 ?? 0,
"phone2_code" => Drivers::DEFAULT_PHONE_CODE,
"dob" => $req->dob,
"age" => $req->age ? $req->age : 0,
"blood" => $req->blood,
"fulladdress" => $req->fulladdress,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$updtDriver["vendor_id"] = $req->auth->uid;
} else {
$updtDriver["vendor_id"] = Auth::user()->id ?? 0;
}
Drivers::updateDriver($did, $updtDriver);
if ($req->ktp_base64) {
$url_ktp = "drivers/$did/ktp_$now.jpeg";
if (!Storage::disk("public")->put($url_ktp, base64_decode($req->ktp_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload ktp photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($driver[0]->ktp_img);
}
if ($req->npwp_base64) {
$url_npwp = "drivers/$did/npwp_$now.jpeg";
if (!Storage::disk("public")->put($url_npwp, base64_decode($req->npwp_base64))) {
Storage::disk("public")->delete($url_ktp);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload npwp photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($driver[0]->npwp_img);
}
if ($req->license_base64) {
$url_license = "drivers/$did/license_$now.jpeg";
if (!Storage::disk("public")->put($url_license, base64_decode($req->license_base64))) {
Storage::disk("public")->delete($url_ktp);
Storage::disk("public")->delete($url_npwp);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload license photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($driver[0]->license_img);
}
$updtDetail = [
"npwp_string" => $req->npwp_string,
"npwp_number" => $req->npwp_number,
"license_number" => $req->license_number,
"license_exp" => $req->license_exp,
"em_fullname" => $req->em_fullname,
"em_phone" => $req->em_phone,
"em_relationship" => $req->em_relationship,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short_name" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_branch_name" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
];
if ($req->ktp_base64) {
$updtDetail["ktp_img"] = $url_ktp;
}
if ($req->npwp_base64) {
$updtDetail["npwp_img"] = $url_npwp;
}
if ($req->license_base64) {
$updtDetail["license_img"] = $url_license;
}
DriversDetail::updateDetailByDid($did, $updtDetail);
DB::commit();
$apiResp = Responses::success("success update driver");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_ktp);
Storage::disk("public")->delete($url_npwp);
Storage::disk("public")->delete($url_license);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_del_driver(Request $req, $did)
{
try {
$now = time();
$input = [
"did" => $did,
];
$rulesInput = [
"did" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$driver = Drivers::showDriverById($did);
if (count($driver) < 1) {
$apiResp = Responses::not_found("driver not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
Drivers::updateDriver($did, [
"dlt" => $now,
"dlt_by" => $req->auth->uid,
]);
// Storage::disk('public')->delete($driver[0]->ktp_img);
// Storage::disk('public')->delete($driver[0]->npwp_img);
// Storage::disk('public')->delete($driver[0]->license_img);
DB::commit();
$apiResp = Responses::success("success delete driver");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_search_driver_name(Request $req)
{
try {
$now = time();
$input = [
"name" => $req->name,
];
$rulesInput = [
"name" => "required|string|max:125",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$drivers = Drivers::likeName($req->name);
if (count($drivers) < 1) {
$apiResp = Responses::not_found("driver not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success search driver by name");
$apiResp["data"] = $drivers;
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"]);
}
}
public function api_reset_login_driver(Request $req, $did)
{
try {
$now = time();
$input = [
"did" => $did,
];
$rulesInput = [
"did" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$driver = Drivers::showDriverById($did);
if (count($driver) < 1) {
$apiResp = Responses::not_found("driver not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
DrvPhoneDevices::dltByOrdDrvId($did);
$_dtUpdate = [
"phone" => $driver[0]->phone,
"password" => Hash::make("0" . $driver[0]->phone),
"updt" => $now,
"updt_by" => Auth::user()->id,
];
DB::table("t_users")
->where("email", $driver[0]->email)
->where("status", 1)
->whereNull("dlt")
->update($_dtUpdate);
DB::commit();
$apiResp = Responses::success("success reset login driver");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}

View File

@ -0,0 +1,233 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Dummy;
class DummyController extends Controller
{
public function api_haversineGreatCircleDistance(Request $req)
{
try {
$apiResp = Responses::success();
$apiResp['data'] = [];
// round up with precisions digits = 4
// $distance == miles
// $distance = Helper::haversineGreatCircleDistance($req->start_lat, $req->start_lng, $req->end_lat, $req->end_lng, Helper::EARTH_RADIUS_MILES);
// $apiResp['data']['distance_in_km'] = round($distance*1.609, 4);
// $apiResp['data']['distance_in_miles'] = round($distance, 4);
// $apiResp['data']['distance_in_meters'] = round($distance*1609, 4);
// $distance == km
// $distance = Helper::haversineGreatCircleDistance($req->start_lat, $req->start_lng, $req->end_lat, $req->end_lng, Helper::EARTH_RADIUS_KM);
// $apiResp['data']['distance_in_km'] = round($distance, 4);
// $apiResp['data']['distance_in_miles'] = round($distance/1.609, 4);
// $apiResp['data']['distance_in_meters'] = round($distance*1000, 4);
// $distance == meters
$distance = Helper::haversineGreatCircleDistance($req->start_lat, $req->start_lng, $req->end_lat, $req->end_lng, Helper::EARTH_RADIUS_M);
$apiResp['data']['distance_in_km'] = round($distance / 1000, 4);
$apiResp['data']['distance_in_miles'] = round($distance / 1609, 4);
$apiResp['data']['distance_in_meters'] = round($distance, 4);
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_addBatchDummyTracks(Request $req)
{
try {
$now = time();
$apiResp = Responses::success();
$batch_tracks = $req->batch_tracks;
DB::beginTransaction();
foreach ($batch_tracks as $key => $val) {
$batch_tracks[$key]['crt'] = $now;
$now = strtotime('+2 seconds', $now);
Dummy::addDummyTrack($batch_tracks[$key]);
}
$apiResp['data'] = $batch_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']));
}
}
public function api_getTracksBySeconds(Request $req)
{
try {
$routes = Dummy::getByGpsId($req->gps_id);
if (!isset($routes[0])) {
$apiResp = Responses::not_found();
return (new Response($apiResp, $apiResp['meta']['code']));
}
/**
* ngebandingin dari row yg belum berbeda ke row berikutnya
* jika data: 2,4,6,8,10
* diff_sec: 2
* results: 2,6,...
* diff_sec: 4
* results: 2,8,...
* diff_sec: 6
* results: 2,10,...
*/
// $start_now = strtotime('+'.$req->sec.' seconds', $routes[0]->crt);
// $init_per_chunk = 0;
// foreach ($routes as $key => $val) {
// if ($init_per_chunk == 1) {
// if ($val->crt >= $start_now) {
// $start_now = strtotime('+'.$req->sec.' seconds', $routes[$key-1]->crt);
// $init_per_chunk = 0;
// }
// continue;
// }
// $init_per_chunk = 1;
// $chunk_by_sec[] = $val;
// }
/**
* ngebandingin dari row yg belum berbeda ke row berikutnya
* jika data: 2,4,6,8,10,12,14
* diff_sec: 2
* results: 2,4,6,8
* diff_sec: 4
* results: 2,6,10
* diff_sec: 6
* results: 2,8,14
*/
$chunk_by_sec = [];
$chunk_by_sec[] = $routes[0];
foreach ($routes as $key => $val) {
$diffSec = $val->crt - end($chunk_by_sec)->crt;
if ($diffSec >= $req->sec) {
$chunk_by_sec[] = $val;
}
}
$apiResp = Responses::success();
$apiResp['total'] = count($chunk_by_sec);
$apiResp['data'] = $chunk_by_sec;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_addDummyHub(Request $req)
{
try {
$now = time();
DB::beginTransaction();
$input = [
'name' => $req->name,
'lat' => $req->lat,
'lng' => $req->lng,
'polygon' => $req->polygon,
];
$rulesInput = [
'name' => 'required|string|max:45',
'lat' => 'required',
'lng' => 'required',
'polygon' => 'required|array',
'polygon.*.lat' => 'required',
'polygon.*.lng' => 'required',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
DB::rollBack();
return new Response($apiResp, $apiResp['meta']['code']);
}
/**
* The axis order for coordinates in WKT is Cartesian, so (X Y) or (longitude latitude).
* https://stackoverflow.com/questions/29315117/what-is-the-correct-mysql-polygon-format-for-latitude-and-longitude
* https://stackoverflow.com/questions/5756232/moving-lat-lon-text-columns-into-a-point-type-column
*/
$ins = [
'name' => $req->name,
'lat' => $req->lat,
'lng' => $req->lng,
'lnglat' => DB::raw("ST_GeomFromText('POINT($req->lng $req->lat)')"),
'shape' => "ST_GeomFromText('MULTIPOINT(",
];
foreach ($req->polygon as $key => $val) {
$ins['shape'] .= $val['lng'] . " " . $val['lat'].", ";
}
$ins['shape'] = substr($ins['shape'], 0, -2);
$ins['shape'] .= ")')";
$ins['shape'] = DB::raw($ins['shape']);
// return (new Response($ins['shape'], 200));
Dummy::addDummyHub($ins);
$apiResp = Responses::success();
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']));
}
}
public function api_nearestHub(Request $req)
{
try {
$now = time();
$input = [
'lat' => $req->lat,
'lng' => $req->lng,
];
$rulesInput = [
'lat' => 'required',
'lng' => 'required',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$apiResp = Responses::success();
/**
* The axis order for coordinates in WKT is Cartesian, so (X Y) or (longitude latitude).
* https://stackoverflow.com/questions/29315117/what-is-the-correct-mysql-polygon-format-for-latitude-and-longitude
* https://stackoverflow.com/questions/5756232/moving-lat-lon-text-columns-into-a-point-type-column
*/
$apiResp['data'] = Dummy::nearestHubInCircle($req->lat, $req->lng);
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
// public function __construct()
// {
// $this->middleware('auth');
// }
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
public function check_redirect()
{
if (Auth::guest()) {
return redirect(route('login'));
}
return redirect(route('view_dashboard'));
}
}

View File

@ -0,0 +1,513 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use Hidehalo\Nanoid\Client as Nanoid;
use App\Responses;
use App\Helper;
use App\Models\Tracks;
use App\Models\Zone;
use App\Models\Users;
use App\Models\Clients;
use App\Models\ClientsDivs;
use App\Models\ClientsDivGroups;
use App\Models\ConfRates;
use App\Models\Region;
class InjectController extends Controller
{
/**
* API
*/
// GPS Zones.xlsx
public function add_gps_zones_v1(Request $req)
{
try {
$apiResp = Responses::bad_request('service unavailable');
return (new Response($apiResp, $apiResp['meta']['code']));
$now = time();
$input = [
'Sheet1' => $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. "<br>";
// }
// 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']));
}
}
}

View File

@ -0,0 +1,254 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Users;
use App\Models\Clients;
use App\Models\Insurances;
class InsuranceController extends Controller
{
public function view_insurances(Request $req)
{
return view('menu_v1.configs.insurances');
}
/**
* API
*/
public function api_list_insurances(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$list = Insurances::listInsurances();
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list insurances');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_insurance(Request $req, $iid)
{
try {
$now = time();
$input = [
'iid' => $iid,
];
$rulesInput = [
'iid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$insurance = Insurances::showInsuranceById($iid);
if (count($insurance) < 1) {
$apiResp = Responses::not_found('insurance not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail insurance');
$apiResp['data'] = $insurance[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_insurance(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->name,
'desc' => $req->desc,
'price' => $req->price,
'min_price' => $req->min_price,
'max_price' => $req->max_price,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string',
'desc' => 'nullable|string',
'price' => 'required|numeric|min:0',
'min_price' => 'required|numeric|min:0',
'max_price' => 'required|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// 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();
$insInsurance = [
'premi_name' => $req->name,
'desc' => $req->desc,
'premi_price' => $req->price,
'premi_min_price' => $req->min_price,
'premi_max_price' => $req->max_price,
'is_active' => $req->status,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$iid = Insurances::addInsurance($insInsurance);
$apiResp = Responses::created('success add new insurance');
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']));
}
}
public function api_edit_insurance(Request $req, $iid)
{
try {
$now = time();
$input = [
'iid' => $iid,
'name' => $req->name,
'desc' => $req->desc,
'price' => $req->price,
'min_price' => $req->min_price,
'max_price' => $req->max_price,
'status' => $req->status,
];
$rulesInput = [
'iid' => 'required|integer|not_in:0',
'name' => 'required|string',
'desc' => 'nullable|string',
'price' => 'required|numeric|min:0',
'min_price' => 'required|numeric|min:0',
'max_price' => 'required|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$insurance = Insurances::showInsuranceById($iid);
if (count($insurance) < 1) {
$apiResp = Responses::not_found('insurance not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtInsurance = [
'premi_name' => $req->name,
'desc' => $req->desc,
'premi_price' => $req->price,
'premi_min_price' => $req->min_price,
'premi_max_price' => $req->max_price,
'is_active' => $req->status,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
if ($req->dest_district) {
$updtInsurance['dest_district'] = $req->dest_district;
}
$iid = Insurances::updateInsurance($iid, $updtInsurance);
$apiResp = Responses::created('success update insurance');
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']));
}
}
public function api_del_insurance(Request $req, $iid)
{
try {
$now = time();
$input = [
'iid' => $iid,
];
$rulesInput = [
'iid' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$insurance = Insurances::showInsuranceById($iid);
if (count($insurance) < 1) {
$apiResp = Responses::not_found('insurance not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
Insurances::updateInsurance($iid, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete insurance');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,312 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\LogbookTypes;
use App\Models\LogbookKeys;
use App\Models\DataTypes;
class LogbookKeysController extends Controller
{
/**
* View
*/
public function view_lgb_keys(Request $req)
{
$data = [
'types' => LogbookTypes::listLgbTypes(['is_active' => LogbookTypes::IS_ACTIVE]),
'dtypes' => DataTypes::listDataTypes(['is_active' => DataTypes::IS_ACTIVE]),
];
return view('menu_v1.logbook_keys', $data);
}
/**
* API
*/
public function api_list_lgb_keys(Request $req)
{
try {
$now = time();
$input = [
'cptid' => $req->cptid,
'is_active' => $req->is_active,
];
$rulesInput = [
'cptid' => 'nullable|numeric',
'is_active' => 'nullable|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['cptid'] != null && $input['cptid'] != 0) {
$filter['cptid'] = $input['cptid'];
}
if ($input['is_active'] != null && $input['is_active'] != 0) {
$filter['is_active'] = $input['is_active'];
}
$list = LogbookKeys::listLgbKeys($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list lgb_keys');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_lgb_key(Request $req, $lgb_key_id)
{
try {
$now = time();
$input = [
'lgb_key_id' => $lgb_key_id,
];
$rulesInput = [
'lgb_key_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_key = LogbookKeys::showLgbKey(['lgb_key_id' => $lgb_key_id]);
if (count($lgb_key) < 1) {
$apiResp = Responses::not_found('logbook master not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail logbook master');
$apiResp['data'] = $lgb_key[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_lgb_key(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->add_name,
'type' => $req->add_type,
'keys' => $req->add_keys,
'units' => $req->add_units,
'dtypes' => $req->add_dtypes,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string|max:255',
'type' => 'required|numeric|min:0',
'keys' => 'required|array',
'units' => 'required|array',
'dtypes' => 'required|array',
'status' => 'required|numeric|min:0',
];
// 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();
$insLgbKey = [
'name' => $input['name'],
'type' => $input['type'],
'keys' => json_encode($input['keys']),
'units' => json_encode($input['units']),
'dtypes' => json_encode($input['dtypes']),
'is_active' => $input['status'],
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$lgb_key_id = LogbookKeys::addLgbKey($insLgbKey);
$apiResp = Responses::created('success add new logbook master');
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']));
}
}
public function api_edit_lgb_key(Request $req, $lgb_key_id)
{
try {
$now = time();
$input = [
'lgb_key_id' => $lgb_key_id,
'name' => $req->updt_name,
'type' => $req->updt_type,
'keys' => $req->updt_keys,
'units' => $req->updt_units,
'dtypes' => $req->updt_dtypes,
'status' => $req->status,
];
$rulesInput = [
'lgb_key_id' => 'required|integer|not_in:0',
'name' => 'required|string|max:255',
'type' => 'required|numeric|min:0',
'keys' => 'required|array',
'units' => 'required|array',
'dtypes' => 'required|array',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_key = LogbookKeys::showLgbKey(['lgb_key_id' => $lgb_key_id]);
if (count($lgb_key) < 1) {
$apiResp = Responses::not_found('logbook master not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtPocket = [
'name' => $input['name'],
'type' => $input['type'],
'keys' => json_encode($input['keys']),
'units' => json_encode($input['units']),
'dtypes' => json_encode($input['dtypes']),
'is_active' => $input['status'],
'updt' => $now,
'updt_by' => $req->auth->uid,
];
LogbookKeys::updateLgbKey($input['lgb_key_id'], $updtPocket);
$apiResp = Responses::created('success update logbook master');
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']));
}
}
public function api_del_lgb_key(Request $req, $lgb_key_id)
{
try {
$now = time();
$input = [
'lgb_key_id' => $lgb_key_id,
];
$rulesInput = [
'lgb_key_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_key = LogbookKeys::showLgbKey(['lgb_key_id' => $lgb_key_id]);
if (count($lgb_key) < 1) {
$apiResp = Responses::not_found('logbook master not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
LogbookKeys::updateLgbKey($lgb_key_id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete logbook master');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_selection_lgb_keys(Request $req)
{
try {
$now = time();
$input = [
'is_active' => $req->is_active,
];
$rulesInput = [
'is_active' => 'nullable|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['is_active'] != null && $input['is_active'] != 0) {
$filter['is_active'] = $input['is_active'];
}
$list = LogbookKeys::listLgbKeys($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list logbook master');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,278 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\LogbookTypes;
class LogbookTypesController extends Controller
{
/**
* View
*/
public function view_lgb_types(Request $req)
{
$data = [];
return view('menu_v1.logbook_types', $data);
}
/**
* API
*/
public function api_list_lgb_types(Request $req)
{
try {
$now = time();
$input = [
'cptid' => $req->cptid,
];
$rulesInput = [
'cptid' => 'nullable|numeric'
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['cptid'] != null && $input['cptid'] != 0) {
$filter['cptid'] = $input['cptid'];
}
$list = LogbookTypes::listLgbTypes($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list lgb_types');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_lgb_type(Request $req, $lgb_type_id)
{
try {
$now = time();
$input = [
'lgb_type_id' => $lgb_type_id,
];
$rulesInput = [
'lgb_type_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_type = LogbookTypes::showLgbType(['lgb_type_id' => $lgb_type_id]);
if (count($lgb_type) < 1) {
$apiResp = Responses::not_found('logbook type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail logbook type');
$apiResp['data'] = $lgb_type[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_lgb_type(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->add_name,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string|max:255',
'status' => 'required|numeric|min:0',
];
// 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();
$insLgbType = [
'name' => $input['name'],
'is_active' => $input['status'],
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$lgb_type_id = LogbookTypes::addLgbType($insLgbType);
$apiResp = Responses::created('success add new lgb_type');
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']));
}
}
public function api_edit_lgb_type(Request $req, $lgb_type_id)
{
try {
$now = time();
$input = [
'lgb_type_id' => $lgb_type_id,
'name' => $req->updt_name,
'status' => $req->status,
];
$rulesInput = [
'lgb_type_id' => 'required|integer|not_in:0',
'name' => 'required|string|max:255',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_type = LogbookTypes::showLgbType(['lgb_type_id' => $lgb_type_id]);
if (count($lgb_type) < 1) {
$apiResp = Responses::not_found('logbook type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtPocket = [
'name' => $input['name'],
'is_active' => $input['status'],
'updt' => $now,
'updt_by' => $req->auth->uid,
];
LogbookTypes::updateLgbType($input['lgb_type_id'], $updtPocket);
$apiResp = Responses::created('success update logbook type');
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']));
}
}
public function api_del_lgb_type(Request $req, $lgb_type_id)
{
try {
$now = time();
$input = [
'lgb_type_id' => $lgb_type_id,
];
$rulesInput = [
'lgb_type_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$lgb_type = LogbookTypes::showLgbType(['lgb_type_id' => $lgb_type_id]);
if (count($lgb_type) < 1) {
$apiResp = Responses::not_found('logbook type not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
LogbookTypes::updateLgbType($lgb_type_id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete logbook type');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_selection_lgb_types(Request $req)
{
try {
$now = time();
$input = [
'is_active' => $req->is_active,
];
$rulesInput = [
'is_active' => 'nullable|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['is_active'] != null && $input['is_active'] != 0) {
$filter['is_active'] = $input['is_active'];
}
$list = LogbookTypes::listLgbTypes($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list logbook type');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,75 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Validator;
use App\Responses;
use App\Helper;
class LoggerController extends Controller
{
/**
* API
*/
public function logger(Request $req)
{
$now = time();
try {
$input = [
'label' => $req->label,
'level' => $req->level,
'logtype' => $req->logtype,
'keys' => $req->keys,
'act' => 'email',
'to' => ['rafifmreswara@gmail.com'],
'errors' => $req->errors,
'vers' => '1.2.1',
'source' => 'service',
'payloads' => $req->payloads,
];
$rulesInput = [
'label' => 'required|string',
'level' => 'required|numeric',
'logtype' => 'required|string',
'keys' => 'required|array',
'act' => 'required|string',
'to' => 'nullable|array',
'errors' => 'nullable|string',
'vers' => 'required|string',
'source' => 'required|string',
'payloads' => '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']);
}
$payload = Helper::createPayload([
'usnme' => 'rafif',
'paswd' => 12345678
]);
$login = Helper::req_post('https://api.simerahputih.com/logger/login', [
'Content-Type: application/x-www-form-urlencoded',
], $payload);
// $payload = Helper::createPayload($input);
// dd($payload);
$resp = Helper::req_post('https://api.simerahputih.com/logger/log', [
'Content-Type: application/json',
'x-api-key: ' . $login['data']->data->token
], json_encode($input));
$apiResp = Responses::success('success send log');
return new Response($apiResp, $apiResp['meta']['code']);
} catch (\Exception $e) {
dd($e);
}
}
}

View File

@ -0,0 +1,900 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use Carbon\Carbon;
use App\Responses;
use App\Helper;
use App\Models\Users;
use App\Models\Drivers;
use App\Models\Vehicles;
use App\Models\Devices;
use App\Models\Clients;
use App\Models\ConfRates;
use App\Models\ConfTruckTypes;
use App\Models\Zone;
use App\Models\Banks;
use App\Models\Orders;
use App\Models\OrdersVendors;
use App\Models\OrdersItems;
use App\Models\OrdersAItems;
use App\Models\UnitTypes;
use App\Models\AItems;
use App\Models\OrdersRates;
use App\Models\Finance;
use App\Models\OrdersCheckpoints;
use App\Models\OrdersInvoices;
use App\Models\OrdersDriversUploads;
class MenuController extends Controller
{
public function view_dashboard(Request $req)
{
$data = [
"client_group" => Clients::getClientById($req->auth->client_group_id),
];
if (count($data["client_group"]) > 0) {
$data["client_group"] = $data["client_group"][0];
} else {
$data["client_group"] = null;
}
return view("menu_v1.dashboard", $data);
}
public function view_drivers(Request $req)
{
$data = [
"bloods" => Helper::listBloods(),
"relationships" => Drivers::listRelationships(),
"vendors" => Users::listUsersByRole(Users::ROLE_VENDOR),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
];
return view("menu_v1.drivers", $data);
}
public function view_vehicles(Request $req)
{
$data = [
// 'cats' => Vehicles::listCats(), // default Truck
"brands" => Vehicles::listBrands(),
"types" => Vehicles::listTypes(),
"drivers" => Drivers::getDrivers($req->auth),
"vendors" => Users::listUsersByRole(Users::ROLE_VENDOR),
"devices" => Devices::listDevices([
"is_active" => Devices::IS_ACTIVE,
"type" => Devices::TYPE_BUILT_IN,
"is_idle_yes" => 1,
"is_available" => Devices::IS_AVAIL,
]),
];
// dd($data);
return view("menu_v1.vehicles", $data);
}
/**
* ADMIN TRX
*/
public function view_transactions()
{
$data = [
"availOrdToMerge" => Finance::availOrdToMerge(),
];
return view("menu_v1.transactions", $data);
}
public function view_transactions_view__bak(Request $req)
{
$codes = explode(",", $req->code);
$limit = count($codes);
if ($limit > 2) {
return redirect(route("view_transactions"));
}
// dd($codes[0]);
$orders = Orders::showOrder([
"codes" => $codes,
"get_stts_checker" => 1,
"get_checker_data" => 1,
"get_checker_user" => 1,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_accidents" => 1,
"couple_pck_drop" => 1,
"get_user_aprv_pck" => 1,
"group_by" => "ord.id",
"limit" => $limit,
]);
// dd($orders);
if (count($orders) < 1) {
return redirect(route("view_transactions"));
}
// uang saku / pocket money
$checkpoints = OrdersCheckpoints::listCheckpoints([
"ord_id" => $orders[0]->ord_id,
]);
$bladeViewOrders = [];
foreach ($orders as $iOrd => $order) {
// get multiple point (pick,drop)
$adtPoints = Orders::getPoints([
"id" => $order->ord_id,
"limit" => $order->drop_total,
]);
// hilangkan index 0, karena yang didapatkan adalah childnya
array_splice($adtPoints, 0, 1);
$orders[$iOrd]->adtPoints = $adtPoints;
// uang saku / pocket money
$orders[$iOrd]->checkpoints = $checkpoints;
// formated for blade views
$tmpBladeView = clone $order;
if ($order->ord_pck_docs_client_img) {
$tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
}
if ($order->ord_acdnt_imgs) {
$tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
}
$bladeViewOrders[] = clone $tmpBladeView;
}
$drvs_ups = OrdersDriversUploads::list([
"ord_id" => $orders[0]->ord_id,
"pck_id" => $orders[0]->ord_pck_id,
"drop_id" => $orders[0]->ord_drop_id,
"ord_pck_drop_id" => $orders[0]->ord_pck_drop_id,
]);
$data = [
"orders" => $orders,
"bladeViewOrders" => $bladeViewOrders,
"drvs_ups" => $drvs_ups,
"items" => AItems::listAItems([
"is_active" => AItems::IS_ACTIVE,
"is_adm_price" => AItems::IS_ADM_PRICE_NO,
"crt_type" => AItems::CRT_TYPE_ADMIN,
]),
"unitTypes" => UnitTypes::listUnitTypes([
"is_active" => UnitTypes::IS_ACTIVE,
"is_publish" => UnitTypes::IS_PUBLISH,
]),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
];
return view("menu_v1._viewTransactions", $data);
}
public function view_transactions_view(Request $req)
{
$codes = explode(",", $req->code);
$limit = count($codes);
if ($limit > 2) {
return redirect(route("view_transactions"));
}
$orders = Orders::showOrder([
"codes" => $codes,
"get_stts_checker" => 1,
"get_checker_data" => 1,
"get_checker_user" => 1,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_accidents" => 1,
"group_by" => "ord.id",
"limit" => $limit,
]);
if (count($orders) < 1) {
return redirect(route("view_transactions"));
}
$bladeViewOrders = [];
foreach ($orders as $iOrd => $order) {
// get multiple point (pick,drop)
$adtPoints = Orders::getPoints([
"id" => $order->ord_id,
"limit" => $order->drop_total,
]);
// hilangkan index 0, karena yang didapatkan adalah childnya
array_splice($adtPoints, 0, 1);
$orders[$iOrd]->adtPoints = $adtPoints;
// dd($adtPoints);
// formated for blade views
$tmpBladeView = clone $order;
if ($order->ord_pck_docs_client_img) {
$tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
}
if ($order->ord_acdnt_imgs) {
$tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
}
$bladeViewOrders[] = clone $tmpBladeView;
}
$rawData = DB::table("t_orders_pck_drop as topd")
->leftJoin("t_orders_pickups as top", "top.id", "topd.pck_id")
->leftJoin("t_orders_drops as tod", "tod.id", "topd.drop_id")
->where("topd.ord_code", $codes)
->selectRaw(
"topd.id,
FROM_UNIXTIME(top.set_pck_at, '%d %M %Y') as pck_date,
FROM_UNIXTIME(top.set_pck_at, '%H:%i:%s') as pck_time,
top.pck_name,
top.pck_addr,
tod.drop_name,
tod.drop_addr"
)
->get();
foreach ($rawData as $_data) {
$ehck = DB::table("t_orders_drivers_uploads")
->select(
"id", //
"checklist_name",
"checklist_desc",
"img",
"updt"
)
->where("ord_pck_drop_id", $_data->id)
->get();
$data[] = [
"id" => $_data->id,
"pck_date" => $_data->pck_date,
"pck_time" => $_data->pck_time,
"pck_name" => $_data->pck_name,
"pck_addr" => $_data->pck_addr,
"drop_name" => $_data->drop_name,
"drop_addr" => $_data->drop_addr,
"checklist_array" => $ehck,
];
}
// dd($data[0]["checklist_array"]);
// dd($data);
$data = [
"data" => $data,
"orders" => $orders,
"bladeViewOrders" => $bladeViewOrders,
];
// dd($data);
return view("menu_v1._viewTransactions", $data);
}
public function view_transactions_view_bak_single(Request $req)
{
$codes = explode(",", $req->code);
$order = Orders::showOrder([
"code" => $codes[0],
"get_stts_checker" => 1,
"get_checker_data" => 1,
"get_checker_user" => 1,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_accidents" => 1,
]);
if (count($order) < 1) {
return redirect(route("view_transactions"));
}
$cantConfirmPrice = [Orders::STTS_WAIT, Orders::STTS_CONFIRM, Orders::STTS_HAVE_GET_VHC];
$show_confirm_price = 1;
if (in_array($order[0]->status, $cantConfirmPrice)) {
$show_confirm_price = 0;
}
$adtPoints = Orders::getPoints([
"id" => $order[0]->ord_id,
"limit" => $order[0]->drop_total,
]);
array_splice($adtPoints, 0, 1);
$data = [
"order" => $order[0],
"adtPoints" => $adtPoints,
"adtPointsJson" => json_encode($adtPoints),
"items" => AItems::listAItems([
"is_active" => AItems::IS_ACTIVE,
"is_adm_price" => AItems::IS_ADM_PRICE_NO,
"crt_type" => AItems::CRT_TYPE_ADMIN,
]),
"unitTypes" => UnitTypes::listUnitTypes([
"is_active" => UnitTypes::IS_ACTIVE,
"is_publish" => UnitTypes::IS_PUBLISH,
]),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
];
return view("menu_v1._viewTransactions", $data);
}
public function view_transactions_confirm(Request $req)
{
$order = Orders::showOrder([
"code" => $req->code,
"center_pck" => 1,
"get_prefer_type_truck" => 1,
]);
if (count($order) < 1) {
return redirect(route("view_transactions"));
}
if (isset($order[0]->pck_center)) {
$split = explode(" ", $order[0]->pck_center);
$order[0]->pck_center_lat = substr($split[1], 0, -1);
$order[0]->pck_center_lng = substr($split[0], 6);
}
$rate = OrdersRates::getById($order[0]->ord_rate_id);
$data = [
"order" => $order[0],
"vendors" => OrdersVendors::searchVendorsByRate([
"active_rates" => $rate[0],
"prefer_truck_type" => $order[0]->prefer_truck_type,
]),
];
return view("menu_v1._confirmTransactions", $data);
}
/**
* ADMIN CONFIG
*/
public function view_logs_gps()
{
return view("menu_v1.configs.index_logs_gps");
}
/**
* CLIENT TRX
*/
public function view_transactions_add(Request $req)
{
$data = [
"uclients" => Users::listUsers([
"role" => Users::ROLE_CLIENT_ADMIN,
"status" => Users::STATUS_ACTIVE,
]),
"truck_types" => ConfTruckTypes::listTruckTypesRates(
ConfTruckTypes::IS_ACTIVE,
ConfRates::LANE_EARTH
),
];
return view("menu_v2.Clients._addTransactions", $data);
}
public function view_user_client_transaction()
{
return view("menu_v2.Clients.transactions");
}
public function view_user_client_transaction_view(Request $req)
{
$order = Orders::showOrder([
"code" => $req->code,
"get_stts_checker" => 1,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_accidents" => 1,
]);
if (count($order) < 1) {
return redirect(route("view_user_client_transaction"));
}
$adtPoints = Orders::getPoints([
"id" => $order[0]->ord_id,
"limit" => $order[0]->drop_total,
]);
array_splice($adtPoints, 0, 1);
$data = [
"order" => $order[0],
"adtPoints" => $adtPoints,
"adtPointsJson" => json_encode($adtPoints),
];
return view("menu_v2.Clients._viewTransactions", $data);
}
public function view_user_client_transaction_add(Request $req)
{
$client_group_id = $req->auth->client_group_id;
// if ($req->rdl == 1) {
// // $inActive = Orders::getOrdersClientActive($req->auth->uid);
// $haveOrder = Orders::getOrdersByClient($req->auth->uid, 1);
// if (count($haveOrder) > 0) {
// return redirect(route('view_user_client_transaction'));
// }
// }
$data = [
"pickups" => Zone::getActiveZones($client_group_id, 0, Zone::ZONE_WORKFLOW_PICKUP),
"drops" => Zone::getActiveZones($client_group_id, 0, Zone::ZONE_WORKFLOW_DEST),
"truck_types" => ConfTruckTypes::listTruckTypesRates(
ConfTruckTypes::IS_ACTIVE,
ConfRates::LANE_EARTH
),
];
return view("menu_v2.Clients._addTransactions", $data);
}
// public function view_user_client() {
// return view('menu_v2.Clients._addTransactions');
// }
/**
* VENDOR TRX
*/
public function view_user_vendor_transaction()
{
return view("menu_v2.Vendors.transactions");
}
public function view_user_vendor_transaction_view(Request $req)
{
$codes = explode(",", $req->code);
$limit = count($codes);
if ($limit > 2) {
return redirect(route("view_transactions"));
}
$orders = Orders::showOrder([
"codes" => $codes,
"get_stts_checker" => 1,
"get_checker_data" => 1,
"get_checker_user" => 1,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_accidents" => 1,
"group_by" => "ord.id",
"limit" => $limit,
]);
if (count($orders) < 1) {
return redirect(route("view_transactions"));
}
$bladeViewOrders = [];
foreach ($orders as $iOrd => $order) {
// get multiple point (pick,drop)
$adtPoints = Orders::getPoints([
"id" => $order->ord_id,
"limit" => $order->drop_total,
]);
// hilangkan index 0, karena yang didapatkan adalah childnya
array_splice($adtPoints, 0, 1);
$orders[$iOrd]->adtPoints = $adtPoints;
// dd($adtPoints);
// formated for blade views
$tmpBladeView = clone $order;
if ($order->ord_pck_docs_client_img) {
$tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
}
if ($order->ord_acdnt_imgs) {
$tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
}
$bladeViewOrders[] = clone $tmpBladeView;
}
$rawData = DB::table("t_orders_pck_drop as topd")
->leftJoin("t_orders_pickups as top", "top.id", "topd.pck_id")
->leftJoin("t_orders_drops as tod", "tod.id", "topd.drop_id")
->where("topd.ord_code", $codes)
->selectRaw(
"topd.id,
FROM_UNIXTIME(top.set_pck_at, '%d %M %Y') as pck_date,
FROM_UNIXTIME(top.set_pck_at, '%H:%i:%s') as pck_time,
top.pck_name,
top.pck_addr,
tod.drop_name,
tod.drop_addr"
)
->get();
foreach ($rawData as $_data) {
$ehck = DB::table("t_orders_drivers_uploads")
->select(
"id", //
"checklist_name",
"checklist_desc",
"img",
"updt"
)
->where("ord_pck_drop_id", $_data->id)
->get();
$data[] = [
"id" => $_data->id,
"pck_date" => $_data->pck_date,
"pck_time" => $_data->pck_time,
"pck_name" => $_data->pck_name,
"pck_addr" => $_data->pck_addr,
"drop_name" => $_data->drop_name,
"drop_addr" => $_data->drop_addr,
"checklist_array" => $ehck,
];
}
// dd($data[0]["checklist_array"]);
// dd($data);
$data = [
"data" => $data,
"orders" => $orders,
"bladeViewOrders" => $bladeViewOrders,
];
// dd($data);
return view("menu_v2.Vendors._viewTransactions", $data);
}
public function view_user_vendor_transaction_view_bak_single(Request $req)
{
$order = Orders::showOrder([
"code" => $req->code,
]);
if (count($order) < 1) {
return redirect(route("view_transactions"));
}
$adtPoints = Orders::getPoints([
"id" => $order[0]->ord_id,
"limit" => $order[0]->drop_total,
]);
array_splice($adtPoints, 0, 1);
$data = [
"order" => $order[0],
"adtPoints" => $adtPoints,
"adtPointsJson" => json_encode($adtPoints),
];
return view("menu_v2.Vendors._viewTransactions", $data);
}
public function view_user_vendor_transaction_new_order(Request $req)
{
// dd($req->code);
$order = Orders::showOrder([
"code" => $req->code,
"get_exp_vendor" => 1,
"vdr_id" => $req->auth->uid,
"get_bid_info" => 1,
]);
// dd($order);
// if (count($order) < 1) {
// return redirect(route("view_user_vendor_transaction"));
// }
// if ($order[0]->vdr_status !== OrdersVendors::STTS_WAIT) {
// return redirect(route("view_user_vendor_transaction"));
// }
// if (
// $order[0]->status === Orders::STTS_WAIT ||
// $order[0]->status === Orders::STTS_CONFIRM
// ) {
// } else {
// return redirect(route("view_user_vendor_transaction"));
// }
// // date('Y-m-d H:i:s', $order[0]->vdr_exp_at);
// if ($order[0]->vdr_is_exp === OrdersVendors::LINK_WILL_EXP) {
// if ($order[0]->vdr_exp_at < time()) {
// return redirect(route("view_user_vendor_transaction"));
// }
// }
// if ($order[0]->is_mailing_bid != OrdersVendors::IS_MAILING_BID_SEND) {
// return redirect(route("view_user_vendor_transaction"));
// }
$haveBeenAcc = OrdersVendors::getByOrdIdByStatus($order[0]->ord_id, OrdersVendors::STTS_ACC);
if (count($haveBeenAcc) > 0) {
return redirect(route("view_user_vendor_transaction"));
}
$vehicles = Vehicles::getVehiclesInIdsActiveNoInOrder($order[0]->find_vhcs);
// $drivers = Drivers::getDriversNoInOrder($req->auth, [
// 'status' => Drivers::STTS_ACTIVE
// ]);
$drivers = Drivers::getDriversNoInOrderNew($req->auth, [
"status" => Drivers::STTS_ACTIVE,
]);
$data = [
"order" => $order[0],
"vehicles" => $vehicles,
"drivers" => $drivers,
];
return view("menu_v2.Vendors._newOrder", $data);
}
/**
* CHECKER TRX
*/
// public function view_user_checker()
// {
// return view('menu_v2.Checker.index');
// }
// public function view_user_checker_view(Request $req)
// {
// $order = Orders::showOrder([
// 'code' => $req->code,
// 'get_stts_checker' => 1,
// ]);
// if (count($order) < 1) {
// return redirect(route('view_user_checker'));
// }
// $filter = [
// 'get_not_deleted' => 1,
// ];
// $items = OrdersItems::getsByOrdId($order[0]->ord_id, $filter);
// $data = [
// 'order' => $order[0],
// 'items' => $items,
// ];
// return view('menu_v2.Checker._view', $data);
// }
public function view_user_checker()
{
return view("menu_v2.Checker.index");
}
public function view_user_checker_view(Request $req)
{
$data = [];
$orders = Orders::showOrder([
"code" => $req->code,
"get_stts_checker" => 1,
"get_prefer_type_truck" => 1,
"get_checker_data" => 1,
"get_client_pt" => 1,
"get_accidents" => 1,
"couple_pck_drop" => 1,
"get_user_aprv_pck" => 1,
"get_user_aprv_pck" => 1,
"join_pockets" => 1,
"group_by" => "ord.id",
]);
if (count($orders) < 1) {
return redirect(route("view_user_checker"));
}
$orderOne = clone $orders[0];
if ($orders[0]->group_merge_code) {
$orders = Orders::showOrder([
"group_merge_code" => $orders[0]->group_merge_code,
"get_stts_checker" => 1,
"get_prefer_type_truck" => 1,
"get_checker_data" => 1,
"get_client_pt" => 1,
"get_accidents" => 1,
"couple_pck_drop" => 1,
"get_user_aprv_pck" => 1,
"join_pockets" => 1,
"group_by" => "ord.id",
"limit" => 2,
]);
}
// uang saku / pocket money
$checkpoints = OrdersCheckpoints::listCheckpoints([
"ord_id" => $orders[0]->ord_id,
]);
$truck_types = ConfTruckTypes::listTruckTypes(ConfTruckTypes::IS_ACTIVE, [
"is_publish" => ConfTruckTypes::IS_PUBLISH,
]);
$bladeViewOrders = [];
foreach ($orders as $iOrd => $order) {
// get multiple point (pick,drop)
$adtPoints = Orders::getPoints([
"id" => $order->ord_id,
"limit" => $order->drop_total,
]);
// hilangkan index 0, karena yang didapatkan adalah childnya
array_splice($adtPoints, 0, 1);
$orders[$iOrd]->adtPoints = $adtPoints;
// uang saku / pocket money
$orders[$iOrd]->checkpoints = $checkpoints;
// formated for blade views
$tmpBladeView = clone $order;
if ($order->ord_pck_docs_client_img) {
$tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
}
if ($order->ord_acdnt_imgs) {
$tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
}
$bladeViewOrders[] = clone $tmpBladeView;
// special case for checker, karena meskipun merge tapi tampilnya tetap 1-1 per trx
if ($req->code === $order->ord_code) {
$orderOne = clone $order;
}
}
$drvs_ups = OrdersDriversUploads::list([
"ord_id" => $orders[0]->ord_id,
"pck_id" => $orders[0]->ord_pck_id,
"drop_id" => $orders[0]->ord_drop_id,
"ord_pck_drop_id" => $orders[0]->ord_pck_drop_id,
]);
$data = [
"orders" => $orders,
"drvs_ups" => $drvs_ups,
"order" => $orderOne,
"truck_types" => $truck_types,
"adtPoints" => $orders[0]->adtPoints,
"adtPointsJson" => json_encode($orders[0]->adtPoints),
];
return view("menu_v2.Checker._view", $data);
}
/**
* FINANCE
*/
public function view_keuangan_payment()
{
return view("menu_v2.Finance.payment");
}
public function view_keuangan_payment_view(Request $req)
{
$codes = explode(",", $req->code);
$limit = count($codes);
if ($limit > 2) {
return redirect(route("view_transactions"));
}
$orders = Orders::showOrder([
"codes" => $codes,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_pic_zone" => 1,
// 'get_stts_checker' => 1,
// 'get_checker_data' => 1,
// 'get_checker_user' => 1,
// 'get_accidents' => 1,
"couple_pck_drop" => 1,
"get_user_aprv_pck" => 1,
"group_by" => "ord.id",
"limit" => $limit,
]);
if (count($orders) < 1) {
return redirect(route("view_keuangan_payment"));
}
$bladeViewOrders = [];
foreach ($orders as $iOrd => $order) {
// get multiple point (pick,drop)
$adtPoints = Orders::getPoints([
"id" => $order->ord_id,
"limit" => $order->drop_total,
]);
// hilangkan index 0, karena yang didapatkan adalah childnya
array_splice($adtPoints, 0, 1);
$orders[$iOrd]->adtPoints = $adtPoints;
// formated for blade views
$tmpBladeView = clone $order;
// if ($order->ord_pck_docs_client_img) $tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
// if ($order->ord_acdnt_imgs) $tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
$bladeViewOrders[] = clone $tmpBladeView;
}
$drvs_ups = OrdersDriversUploads::list([
"ord_id" => $orders[0]->ord_id,
"pck_id" => $orders[0]->ord_pck_id,
"drop_id" => $orders[0]->ord_drop_id,
"ord_pck_drop_id" => $orders[0]->ord_pck_drop_id,
]);
$data = [
"orders" => $orders,
"bladeViewOrders" => $bladeViewOrders,
"drvs_ups" => $drvs_ups,
"items" => AItems::listAItems([
"is_active" => AItems::IS_ACTIVE,
"crt_type" => AItems::CRT_TYPE_FINANCE,
]),
"unitTypes" => UnitTypes::listUnitTypes([
"is_active" => UnitTypes::IS_ACTIVE,
"is_publish" => UnitTypes::IS_PUBLISH,
]),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
"availOrdToMerge" => Finance::availOrdToMerge([
"except_ord_id" => $orders[0]->ord_id,
]),
];
return view("menu_v2.Finance._viewPayment", $data);
}
public function view_keuangan_payment_view_single_bak(Request $req)
{
$order = Orders::showOrder([
"code" => $req->code,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_pic_zone" => 1,
// 'get_stts_checker' => 1,
// 'get_checker_data' => 1,
// 'get_checker_user' => 1,
// 'get_accidents' => 1,
]);
if (count($order) < 1) {
return redirect(route("view_keuangan_payment"));
}
$adtPoints = Orders::getPoints([
"id" => $order[0]->ord_id,
"limit" => $order[0]->drop_total,
]);
array_splice($adtPoints, 0, 1);
$data = [
"order" => $order[0],
"adtPoints" => $adtPoints,
"adtPointsJson" => json_encode($adtPoints),
"items" => AItems::listAItems([
"is_active" => AItems::IS_ACTIVE,
"crt_type" => AItems::CRT_TYPE_FINANCE,
]),
"unitTypes" => UnitTypes::listUnitTypes([
"is_active" => UnitTypes::IS_ACTIVE,
"is_publish" => UnitTypes::IS_PUBLISH,
]),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
"availOrdToMerge" => Finance::availOrdToMerge([
"except_ord_id" => $order[0]->ord_id,
]),
];
return view("menu_v2.Finance._viewPayment", $data);
}
public function view_keuangan_billing()
{
return view("menu_v2.Finance.billing");
}
public function view_keuangan_billing_view(Request $req)
{
$order = Orders::showOrder([
"code" => $req->code,
// 'get_prefer_type_truck' => 1,
"get_additional_vehicles_info" => 1,
"get_pic_zone" => 1,
// 'get_stts_checker' => 1,
// 'get_checker_data' => 1,
// 'get_checker_user' => 1,
// 'get_accidents' => 1,
"get_client_pt" => 1,
"couple_pck_drop" => 1,
"get_user_aprv_pck" => 1,
]);
if (count($order) < 1) {
return redirect(route("view_keuangan_billing"));
}
$a_items = Finance::listAdtItemsBillings([
"ord_id" => $order[0]->ord_id,
"group_by" => "ord_a_item.id",
"is_bill_aprv" => OrdersAItems::IS_APRV_YES,
]);
$group_items_by_termin = [];
foreach ($a_items as $i => $row) {
if (!isset($group_items_by_termin[$row->c_group_termin_id])) {
if (
$row->a_item_type === OrdersAItems::A_TYPE_PRIMARY &&
$row->stts_merge !== OrdersAItems::STTS_MERGE_RESULT
) {
$row->previous_termin = OrdersAItems::showAItem([
"ord_id" => $row->ord_id,
"is_active" => OrdersAItems::IS_ACTIVE_YES,
"a_item_type" => OrdersAItems::A_TYPE_PRIMARY,
"prev_main_item_id" => $row->ord_a_item_id,
"c_termin_id_not_zero" => 1,
"limit" => 1,
]);
}
$group_items_by_termin[$row->c_group_termin_id] = [];
$group_items_by_termin[$row->c_group_termin_id][] = $row;
continue;
}
$group_items_by_termin[$row->c_group_termin_id][] = $row;
}
$adtPoints = Orders::getPoints([
"id" => $order[0]->ord_id,
"limit" => $order[0]->drop_total,
]);
array_splice($adtPoints, 0, 1);
$drvs_ups = OrdersDriversUploads::list([
"ord_id" => $order[0]->ord_id,
"pck_id" => $order[0]->ord_pck_id,
"drop_id" => $order[0]->ord_drop_id,
"ord_pck_drop_id" => $order[0]->ord_pck_drop_id,
]);
$data = [
"order" => $order[0],
"adtPoints" => $adtPoints,
"adtPointsJson" => json_encode($adtPoints),
"drvs_ups" => $drvs_ups,
"items" => AItems::listAItems([
"is_active" => AItems::IS_ACTIVE,
"crt_type" => AItems::CRT_TYPE_FINANCE,
]),
"unitTypes" => UnitTypes::listUnitTypes([
"is_active" => UnitTypes::IS_ACTIVE,
"is_publish" => UnitTypes::IS_PUBLISH,
]),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
"group_items_by_termin" => $group_items_by_termin,
];
return view("menu_v2.Finance._viewBilling", $data);
}
}

View File

@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use GuzzleHttp\Client as GuzzleClient;
use App\Responses;
use App\Helper;
use App\Models\Zone;
class OSMController extends Controller
{
public function api_geo_addr(Request $req)
{
try {
$now = time();
$input = [
'address' => $req->address,
'country_code' => $req->country_code,
];
$rulesInput = [
'address' => 'required|string|min:45',
'country_code' => 'required|string|min:2',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$payload = [
'countrycodes' => $req->country_code,
'format' => 'geojson',
'q' => $req->address,
];
$payload = http_build_query($payload);
// $url = env('API_URL_NOMINATIM') . '/search?format=geojson&countrycodes=' . $req->country_code . '&q=' . $req->address;
$url = env('API_URL_NOMINATIM') . '/search?' . $payload;
// $respNominatim = Helper::req_get($url, [
// 'User-Agent: PostmanRuntime/7.28.4',
// 'Accept: */*',
// 'Accept-Encoding: gzip, deflate, br',
// 'Connection: keep-alive'
// ]);
$guzReq = new GuzzleClient();
$respNominatim = $guzReq->request('GET', $url, [
'headers' => [
'Host' => $_SERVER['SERVER_ADDR'] ?? '127.0.0.1',
'User-Agent' => 'curl/7.65.3',
'Accept' => '*/*',
'Accept-Encoding' => 'gzip, deflate, br',
// 'Connection' => 'keep-alive',
]
]);
if ($respNominatim->getStatusCode() != 200) {
$apiResp = Responses::bad_request('fail geo address');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$body = json_decode($respNominatim->getBody()->getContents());
$data = null;
if (count($body->features) > 0) {
$data = [
'lat' => $body->features[0]->geometry->coordinates[1],
'lng' => $body->features[0]->geometry->coordinates[0],
];
}
$apiResp = Responses::success('success geo address');
$apiResp['data'] = $data;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,498 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use Hidehalo\Nanoid\Client as Nanoid;
use Hidehalo\Nanoid\GeneratorInterface as NanoidInterface;
use App\Responses;
use App\Helper;
use App\Models\Clients;
use App\Models\PocketMoney;
use App\Models\Checkpoints;
use App\Models\Zone;
class PocketController extends Controller
{
/**
* View
*/
public function view_pockets(Request $req)
{
$data = [
'types' => PocketMoney::getTypes(),
'flows' => PocketMoney::getFlows(),
// 'clients' => Clients::listClients(['c_status' => Clients::CSTTS_ACTIVE]),
// 'pickups' => Zone::listZones($req->auth, ['is_active' => Zone::STATUS_ACTIVE, 'type' => Zone::ZONE_TYPE_WAREHOUSE, 'workflow_type' => Zone::ZONE_WORKFLOW_PICKUP]),
// 'drops' => Zone::listZones($req->auth, ['is_active' => Zone::STATUS_ACTIVE, 'type' => Zone::ZONE_TYPE_WAREHOUSE, 'workflow_type' => Zone::ZONE_WORKFLOW_DEST]),
];
return view('menu_v1.configs.pocket_money', $data);
}
/**
* API
*/
public function api_list_pockets(Request $req)
{
try {
$now = time();
$input = [
'cptid' => $req->cptid,
];
$rulesInput = [
'cptid' => 'nullable|numeric'
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$filter = [];
if ($input['cptid'] != null && $input['cptid'] != 0) {
$filter['cptid'] = $input['cptid'];
}
$list = PocketMoney::listPockets($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list pockets');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_pocket(Request $req, $pocket_id)
{
try {
$now = time();
$input = [
'pocket_id' => $pocket_id,
];
$rulesInput = [
'pocket_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$pocket = PocketMoney::showPocketById($pocket_id);
if (count($pocket) < 1) {
$apiResp = Responses::not_found('pocket not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$pocket[0]->checkpoints = Checkpoints::listCheckpoints(['pocket_id' => $pocket[0]->id]);
$apiResp = Responses::success('success get detail pocket');
$apiResp['data'] = $pocket[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_pocket(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->add_name,
'type' => $req->add_type,
'pck' => $req->add_pck,
'drop' => $req->add_drop,
'price' => $req->add_price,
'start_checkpoint' => $req->add_start_checkpoints,
// 'end_checkpoint' => $req->add_end_checkpoints,
'price_checkpoint' => $req->add_price_checkpoints,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string|max:255',
'type' => 'required|numeric|min:0',
'pck' => 'required|numeric|min:0',
'drop' => 'required|numeric|min:0',
'price' => 'required|numeric|min:0',
'start_checkpoint' => 'nullable|array',
'start_checkpoint.*' => 'nullable|numeric|min:0',
// 'end_checkpoint' => 'nullable|array',
// 'end_checkpoint.*' => 'nullable|numeric|min:0',
'price_checkpoint' => 'nullable|array',
'price_checkpoint.*' => 'nullable|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$nanoid = new Nanoid();
$code = $nanoid->formattedId('0123456789', 9);
// $code = $now;
$doWhile = true;
do {
if (substr($code, 0, 1) == 0) {
$code = $nanoid->formattedId('0123456789', 9);
} else {
$doWhile = false;
}
} while ($doWhile);
$uniqCode = PocketMoney::getPocketByCode($code);
if (count($uniqCode) > 0) {
$apiResp = Responses::bad_request('code has been used, try again');
return (new Response($apiResp, $apiResp['meta']['code']));
}
// $uniqPckDrop = PocketMoney::getPocketByPckDrop($input['pck'], $input['drop']);
// if (count($uniqPckDrop) > 0) {
// $apiResp = Responses::bad_request('Pickup dan Drop sudah pernah ditambahkan');
// return (new Response($apiResp, $apiResp['meta']['code']));
// }
if ($input['start_checkpoint']) {
if ($input['start_checkpoint'][0] != $input['pck']) {
$apiResp = Responses::bad_request('Titik lokasi pertama checkpoint haruslah sama dengan pickup');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
$pck = Zone::showZoneById($input['pck']);
if (count($pck) < 1) {
$apiResp = Responses::not_found('lokasi pickup tidak ditemukan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$drop = Zone::showZoneById($input['drop']);
if (count($drop) < 1) {
$apiResp = Responses::not_found('lokasi drop tidak ditemukan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if ($pck[0]->client_group_id !== $drop[0]->client_group_id) {
$apiResp = Responses::bad_request('Lokasi pickup dan drop sudah beda perusahaan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$insPocket = [
'code' => $code,
'name' => $input['name'],
'type' => $input['type'],
'flow' => PocketMoney::FLOW_HYBRID,
'pck_id' => $input['pck'],
'drop_id' => $input['drop'],
'is_active' => $input['status'],
'total' => 0,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$pocket_id = PocketMoney::addPocket($insPocket);
$total = 0;
if ($input['start_checkpoint']) {
foreach ($input['start_checkpoint'] as $i => $row) {
$insCheckpoint = [
'pocket_id' => $pocket_id,
'pck_id' => $input['start_checkpoint'][$i],
// 'drop_id' => $input['end_checkpoint'][$i],
'total' => $input['price_checkpoint'][$i],
'sort' => $i + 1,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$total += $input['price_checkpoint'][$i];
Checkpoints::addCheckpoint($insCheckpoint);
}
} else {
$insCheckpoint = [
'pocket_id' => $pocket_id,
'pck_id' => $input['pck'],
'drop_id' => $input['drop'],
'total' => $input['price'],
'sort' => 1,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$total += $input['price'];
Checkpoints::addCheckpoint($insCheckpoint);
}
PocketMoney::updatePocket($pocket_id, ['total' => $total]);
$apiResp = Responses::created('success add new pocket');
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']));
}
}
public function api_edit_pocket(Request $req, $pocket_id)
{
try {
$now = time();
$input = [
'pocket_id' => $pocket_id,
'name' => $req->updt_name,
'type' => $req->updt_type,
'pck' => $req->updt_pck,
'drop' => $req->updt_drop,
'price' => $req->updt_price,
'start_checkpoint' => $req->updt_start_checkpoints,
// 'end_checkpoint' => $req->updt_end_checkpoints,
'price_checkpoint' => $req->updt_price_checkpoints,
'status' => $req->status,
];
$rulesInput = [
'pocket_id' => 'required|integer|not_in:0',
'name' => 'required|string|max:255',
'type' => 'required|numeric|min:0',
'pck' => 'required|numeric|min:0',
'drop' => 'required|numeric|min:0',
'price' => 'required|numeric|min:0',
'start_checkpoint' => 'nullable|array',
'start_checkpoint.*' => 'nullable|numeric|min:0',
// 'end_checkpoint' => 'nullable|array',
// 'end_checkpoint.*' => 'nullable|numeric|min:0',
'price_checkpoint' => 'nullable|array',
'price_checkpoint.*' => 'nullable|numeric|min:0',
'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$pocket = PocketMoney::showPocketById($pocket_id);
if (count($pocket) < 1) {
$apiResp = Responses::not_found('pocket not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$pocket[0]->checkpoints = Checkpoints::listCheckpoints(['pocket_id' => $pocket[0]->id]);
if ($input['start_checkpoint']) {
if ($input['start_checkpoint'][0] != $input['pck']) {
$apiResp = Responses::bad_request('Titik lokasi pertama checkpoint haruslah sama dengan pickup');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
$pck = Zone::showZoneById($input['pck']);
if (count($pck) < 1) {
$apiResp = Responses::not_found('lokasi pickup tidak ditemukan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$drop = Zone::showZoneById($input['drop']);
if (count($drop) < 1) {
$apiResp = Responses::not_found('lokasi drop tidak ditemukan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
if ($pck[0]->client_group_id !== $drop[0]->client_group_id) {
$apiResp = Responses::bad_request('Lokasi pickup dan drop sudah beda perusahaan');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtPocket = [
// 'code' => $code,
'type' => $input['type'],
'name' => $input['name'],
// 'flow' => PocketMoney::FLOW_HYBRID,
'pck_id' => $input['pck'],
'drop_id' => $input['drop'],
'is_active' => $input['status'],
'total' => 0,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
PocketMoney::updatePocket($input['pocket_id'], $updtPocket);
$total = 0;
if ($input['start_checkpoint']) {
Checkpoints::deleteCheckpointByPocketId($input['pocket_id']);
foreach ($input['start_checkpoint'] as $i => $row) {
$insCheckpoint = [
'pocket_id' => $input['pocket_id'],
'pck_id' => $input['start_checkpoint'][$i],
// 'drop_id' => $input['end_checkpoint'][$i],
'total' => $input['price_checkpoint'][$i],
'sort' => $i + 1,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$total += $input['price_checkpoint'][$i];
Checkpoints::addCheckpoint($insCheckpoint);
}
} else {
Checkpoints::deleteCheckpointByPocketId($input['pocket_id']);
$updtCheckpoint = [
'pocket_id' => $input['pocket_id'],
'pck_id' => $input['pck'],
'drop_id' => $input['drop'],
'total' => $input['price'],
'sort' => 1,
'crt' => $now,
'crt_by' => $req->auth->uid,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
$total += $input['price'];
// Checkpoints::updateCheckpoint($pocket[0]->checkpoints[0]->id, $updtCheckpoint);
Checkpoints::addCheckpoint($updtCheckpoint);
}
PocketMoney::updatePocket($input['pocket_id'], ['total' => $total]);
$apiResp = Responses::created('success update pocket');
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']));
}
}
public function api_del_pocket(Request $req, $pocket_id)
{
try {
$now = time();
$input = [
'pocket_id' => $pocket_id,
];
$rulesInput = [
'pocket_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$pocket = PocketMoney::showPocketById($pocket_id);
if (count($pocket) < 1) {
$apiResp = Responses::not_found('pocket not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$pocket[0]->checkpoints = Checkpoints::listCheckpoints(['pocket_id' => $pocket[0]->id]);
DB::beginTransaction();
PocketMoney::updatePocket($pocket_id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
foreach ($pocket[0]->checkpoints as $row) {
Checkpoints::updateCheckpoint($row->id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
}
DB::commit();
$apiResp = Responses::success('success delete pocket');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_pck_drop_pocket(Request $req)
{
try {
$now = time();
$input = [
'client_id' => $req->client_id,
'pck_id' => $req->pck_id,
'drop_id' => $req->drop_id,
];
$rulesInput = [
'client_id' => 'required|integer|not_in:0',
'pck_id' => 'required|integer|not_in:0',
'drop_id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$pockets = PocketMoney::listPockets([
'cptid' => $input['client_id'],
'pck_id' => $input['pck_id'],
'drop_id' => $input['drop_id'],
'is_active' => PocketMoney::IS_ACTIVE,
]);
if (count($pockets) < 1) {
$apiResp = Responses::not_found('pocket not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
foreach ($pockets as $i => $pkt) {
$pockets[$i]->checkpoints = Checkpoints::listCheckpoints(['pocket_id' => $pkt->id]);
}
$apiResp = Responses::success('success get pockets');
$apiResp['data'] = $pockets;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,100 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Zone;
use App\Models\Region;
class RegionController extends Controller
{
public function api_list_city(Request $req)
{
try {
$now = time();
$input = [
'kodeProv' => $req->kodeProv,
];
$rulesInput = [
'kodeProv' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$apiResp = Responses::success('success get list district');
$apiResp['data'] = Region::listCity($req->kodeProv);
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_list_district(Request $req)
{
try {
$now = time();
$input = [
'kodeKab' => $req->kodeKab,
];
$rulesInput = [
'kodeKab' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$apiResp = Responses::success('success get list village');
$apiResp['data'] = Region::listDistrict($req->kodeKab);
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_list_village(Request $req)
{
try {
$now = time();
$input = [
'kodeKec' => $req->kodeKec,
];
$rulesInput = [
'kodeKec' => 'required|numeric',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$apiResp = Responses::success('success get list village');
$apiResp['data'] = Region::listVillage($req->kodeKec);
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,146 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Users;
use App\Models\Clients;
use App\Models\StaticInsurances;
class StaticInsuranceController extends Controller
{
public function view_static_insurances(Request $req)
{
return view('menu_v1.configs.static_insurances');
}
/**
* API
*/
public function api_list_static_insurances(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$list = StaticInsurances::listStaticInsurances();
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list insurances');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_static_insurance(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$insurance = StaticInsurances::getInsuranceById($id);
if (count($insurance) < 1) {
$apiResp = Responses::not_found('insurance not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail insurance');
$apiResp['data'] = $insurance[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_edit_static_insurance(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
'desc' => $req->desc,
'amt_percent' => $req->amt_percent,
// 'status' => $req->status,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
'desc' => 'required|string',
'amt_percent' => 'required|numeric|min:0',
// 'status' => 'required|numeric|min:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$insurance = StaticInsurances::getInsuranceById($id);
if (count($insurance) < 1) {
$apiResp = Responses::not_found('insurance not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
$updtInsurance = [
'desc' => $req->desc,
'amt_percent' => $req->amt_percent,
// 'is_active' => $req->status,
'updt' => $now,
'updt_by' => $req->auth->uid,
];
if ($req->dest_district) {
$updtInsurance['dest_district'] = $req->dest_district;
}
$id = StaticInsurances::updateInsurance($id, $updtInsurance);
$apiResp = Responses::created('success update insurance');
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']));
}
}
}

View File

@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Validator;
use Hidehalo\Nanoid\Client as Nanoid;
use GuzzleHttp\Client as GuzzleClient;
use App\Responses;
use App\Helper;
class StorageController extends Controller
{
public function save_photos(Request $req)
{
$url_photos_base64 = [];
try {
$now = time();
$input = [
'names' => $req->names,
'photos' => $req->photos,
];
$rulesInput = [
'names' => 'required|array',
'names.*' => 'required|string|max:255',
'photos' => 'required|array',
'photos.*' => 'required|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']);
}
if ($req->names && count($req->names) < 1) {
$apiResp = Responses::bad_input('names is required');
return new Response($apiResp, $apiResp['meta']['code']);
}
if ($req->photos && count($req->photos) < 1) {
$apiResp = Responses::bad_input('photos is required');
return new Response($apiResp, $apiResp['meta']['code']);
}
foreach ($req->photos as $i => $img) {
$clearBase64 = preg_replace('/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/', '', $img);
// $type = 'jpeg';
// if (strpos($img, 'application/pdf') !== false) $type = 'pdf';
// $url_photos_base64[$i] = "orders/" . $order[0]->ord_id . "/a_items/" . $oa_id . "/submission/" . $req->auth->uid . "/submission_proof_img_$now" . "_" . "$i.$type";
$url_photos_base64[$i] = $req->names[$i];
if (!Storage::disk('public')->put($url_photos_base64[$i], base64_decode($clearBase64))) {
$apiResp = Responses::bad_request('fail save photo');
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
$apiResp = Responses::success('success save photos');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
if (count($url_photos_base64) > 0) {
foreach ($url_photos_base64 as $path) {
Storage::disk('public')->delete($path);
}
}
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,249 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Tracks;
use App\Models\Vehicles;
use App\Models\Zone;
use App\Models\Users;
use App\Models\Orders;
class TrackController extends Controller
{
public function api_list_currect_track_vhc(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [
"get_order_data" => 1,
];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
if ($req->auth->is_tracking === Users::IS_TRACK_VHC_YES) {
if ($req->auth->vhcs) {
$filter["vids"] = explode(",", $req->auth->vhcs);
} else {
$filter["vid"] = 0;
}
} elseif ($req->auth->is_tracking === Users::IS_TRACK_VHC_DEFAULT) {
if ($req->auth->role === Users::ROLE_ADMIN) {
if ($req->ord_id) {
$ord = Orders::showOrder(["id" => $req->ord_id]);
if (count($ord) > 0) {
$filter["vid"] = $ord[0]->vhc_id;
} else {
$filter["vid"] = 0;
}
} elseif ($req->ord_code) {
$ord = Orders::showOrder(["code" => $req->ord_code]);
if (count($ord) > 0) {
$filter["vid"] = $ord[0]->vhc_id;
} else {
$filter["vid"] = 0;
}
}
} elseif ($req->auth->role === Users::ROLE_VENDOR) {
$filter["own_by_vdr_id"] = $req->auth->uid;
} elseif ($req->auth->role === Users::ROLE_CLIENT_ADMIN) {
$ords = Orders::listOrders([
"client_id_active_orders" => $req->auth->uid,
"is_accident" => Orders::IS_ACCIDENT_NO,
]);
$filter["vids"] = [];
$filter["client_id"] = $req->auth->uid;
foreach ($ords as $k => $v) {
$filter["vids"][] = $v->vhc_id;
}
} elseif ($req->auth->role === Users::ROLE_SPECIAL_TRACKING) {
// $filter['vid'] = 0;
$filter["company"] = $req->auth->client_group_id;
} else {
$filter["vid"] = 0;
}
} else {
$filter["vid"] = 0;
}
$list = Tracks::listCurrentTracks($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
// $list[$key]->mileage_km = '-';
$list[$key]->track_schedule = $row->track_sch_h . "/" . $row->track_sch_d; // combine track_sch_h + track_sch_d
$list[$key]->is_track_holiday_text =
$list[$key]->is_track_holiday == Vehicles::ENABLED_TRACK_HOLIDAY ? "Enabled" : "Disabled";
$list[$key]->alert_zones = "-";
$list[$key]->cameras = "-";
$insideZones = [];
$insideZoneCircle = Zone::insideZoneCircle($row->lst_lat, $row->lst_lng);
if (count($insideZoneCircle) > 0) {
array_push($insideZones, ...$insideZoneCircle);
}
$insideZoneShape = Zone::insideZoneShape($row->lst_lat, $row->lst_lng);
if (count($insideZoneShape) > 0) {
array_push($insideZones, ...$insideZoneShape);
}
if (count($insideZones) > 0) {
$list[$key]->inside_zones = $insideZones;
} else {
$list[$key]->inside_zones = null;
}
}
$apiResp = Responses::success("success list vehicles");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_last_move_track_vhc(Request $req)
{
try {
$now = time();
$input = [
"vid" => $req->vid,
"end_at" => $req->end_at,
];
$rulesInput = [
"vid" => "required|integer",
"end_at" => "nullable|date",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$filter = [
"limit" => 500,
];
// default 500, jika ada filter date maka max 5K
if (
$req->start_date != null &&
$req->start_date != "" &&
($req->end_date != null && $req->end_date != "")
) {
$filter["start_date"] = $req->start_date;
$filter["end_date"] = $req->end_date;
$filter["limit"] = 5000;
}
$list = Tracks::lastMoveTracks($req->vid, $filter);
$apiResp = Responses::success("success get last movements");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_conf_list_logs_gps(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [
"limit" => 1000,
"crt_greater_than" => 1646122574,
];
$list = Tracks::listLogsGps($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = "-";
}
$apiResp = Responses::success("success list gps tracker");
$apiResp["count"] = count($list);
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_track_order(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$ord = [];
$filter = [
"get_pic_zone" => 1,
"get_zone_data" => 1,
];
if ($req->ord_id) {
$filter["id"] = $req->ord_id;
} elseif ($req->ord_code) {
$filter["code"] = $req->ord_code;
}
$ord = Orders::showOrder($filter);
if (count($ord) < 1) {
$apiResp = Responses::not_found("order not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vid = $ord[0]->vhc_id;
$history = Tracks::lastMoveTracks($vid, [
"start_at" => $ord[0]->confirm_at,
]);
$apiResp = Responses::success("success track order");
$apiResp["data"] = [
"order" => $ord[0],
"history" => $history,
];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,651 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Users;
use App\Models\Clients;
use App\Models\Vehicles;
use App\Models\Banks;
use App\Models\UsersMenuPermissions;
class UsersController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function view_users(Request $req)
{
$data = [
"roles" => Users::listRoles($req->auth->role),
"pernus" => UsersMenuPermissions::listPermissionsMenus([
"is_active" => UsersMenuPermissions::IS_ACTIVE,
]),
"vehicles" => Vehicles::getVehicles(),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
];
if ($req->auth->role == Users::ROLE_SUPERADMIN) {
$data["clients"] = Clients::select2Client();
} elseif ($req->auth->role == Users::ROLE_ADMIN) {
$data["clients"] = Clients::select2Client();
} else {
$data["clients"] = Clients::select2Client($req->auth->client_group_id);
}
return view("menu_v1.users", $data);
}
public function view_profile(Request $req)
{
$data = [
"roles" => Users::listRoles($req->auth->role),
"pernus" => UsersMenuPermissions::listPermissionsMenus([
"is_active" => UsersMenuPermissions::IS_ACTIVE,
]),
"vehicles" => Vehicles::getVehicles(),
"banks" => Banks::listBanks(["is_active" => Banks::IS_ACTIVE]),
];
if ($req->auth->role == Users::ROLE_SUPERADMIN) {
$data["clients"] = Clients::select2Client();
} elseif ($req->auth->role == Users::ROLE_ADMIN) {
$data["clients"] = Clients::select2Client();
} else {
$data["clients"] = Clients::select2Client($req->auth->client_group_id);
}
return view("menu_v1._profile", $data);
}
/**
* API
*/
public function api_list_users(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
$list = Users::listUsers($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->count_trx = 0;
$list[$key]->action = "-";
}
$apiResp = Responses::success("success list users");
$apiResp["data"] = $list;
$apiResp["count"] = count($list);
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_show_user(Request $req, $uid)
{
try {
$now = time();
$input = [
"uid" => $uid,
];
$rulesInput = [
"uid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$user = Users::showUserById($uid);
if (count($user) < 1) {
$apiResp = Responses::not_found("user not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success get detail user");
$apiResp["data"] = $user[0];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_add_user(Request $req)
{
try {
$now = time();
$roles = Users::arrRoles();
$statuses = Users::arrStatus();
$input = [
"first_name" => $req->first_name,
"last_name" => $req->last_name,
"phone" => $req->phone,
"email" => $req->email,
"fulladdress" => $req->fulladdress,
"password" => $req->password,
"clients_id" => $req->clients,
"roles" => $req->roles,
"chk_type" => $req->chk_type,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_kcp" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
"status" => $req->status,
"is_tracking" => $req->is_tracking,
"vehicles" => $req->vehicles,
"is_vdr_bcng" => $req->is_vdr_bcng,
];
$rulesInput = [
"first_name" => "required|string|max:125",
"last_name" => "nullable|max:125",
"phone" => "required|numeric",
"email" => "required|email",
"fulladdress" => "required|string|min:45",
"password" => "required|string|max:25",
"clients_id" => "required|integer|not_in:0",
"roles" => "required|integer|not_in:0",
"chk_type" => "nullable|integer|not_in:0",
"bank_id" => "nullable|integer|not_in:0",
"bank_code" => "nullable|numeric",
"bank_short" => "nullable|string",
"bank_name" => "nullable|string",
"bank_kcp" => "nullable|string",
"bank_acc_number" => "nullable|numeric",
"bank_acc_name" => "nullable|string|max:255",
"status" => "required|integer|not_in:0",
"is_tracking" => "nullable|numeric",
"vehicles" => "nullable|array",
"is_vdr_bcng" => "nullable|numeric",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (in_array($req->roles, $roles)) {
} else {
$apiResp = Responses::bad_request("role not valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (in_array($req->status, $statuses)) {
} else {
$apiResp = Responses::bad_request("status not valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->roles == Users::ROLE_VENDOR) {
if (!$req->bank_id) {
$apiResp = Responses::bad_request("bank wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (!$req->bank_acc_number) {
$apiResp = Responses::bad_request("nomor rekening wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (!$req->bank_acc_name) {
$apiResp = Responses::bad_request("nama pemilik rekening wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->clients) {
$clients = Clients::getClientById($req->clients);
if (count($clients) < 1) {
$apiResp = Responses::not_found("clients not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqEmail = Users::getUserByEmail($req->email);
if (count($uniqEmail) > 0) {
$apiResp = Responses::bad_request("email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqPhone = Users::getUserByPhone((int) $req->phone);
if (count($uniqPhone) > 0) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqCPhone = Clients::getClientByPhone((int) $req->phone);
if (count($uniqCPhone) > 0) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vhcs = null;
if ($req->is_tracking == Users::IS_TRACK_VHC_YES) {
if (!$req->vehicles) {
$apiResp = Responses::bad_request("vehicles must be filled");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
foreach ($req->vehicles as $k => $v) {
$vhcs .= $v . ",";
}
if ($vhcs) {
if (substr($vhcs, -1) === ",") {
$vhcs = substr($vhcs, 0, -1);
}
}
}
$data = [
"first_name" => $req->first_name,
"last_name" => $req->last_name ?? null,
"email" => $req->email,
"phone" => (int) $req->phone,
"phone_code" => Users::DEFAULT_PHONE_CODE,
"fulladdress" => $req->fulladdress,
"password" => Hash::make($req->password),
"role" => $req->roles,
"client_id" => $req->clients,
"client_group_id" => $req->clients,
"status" => $req->status,
"is_tracking" => $req->is_tracking,
"vhcs" => $vhcs,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->roles == Users::ROLE_CHECKER) {
// $data['chk_type'] = $req->chk_type;
$data["chk_type"] = Users::CHK_TYPE_ALL;
}
if ($req->roles == Users::ROLE_VENDOR) {
$data["bank_id"] = $req->bank_id;
$data["bank_code"] = $req->bank_code;
$data["bank_name"] = $req->bank_name;
$data["bank_short_name"] = $req->bank_short;
$data["bank_branch_name"] = $req->bank_branch_name;
$data["bank_acc_number"] = $req->bank_acc_number;
$data["bank_acc_name"] = $req->bank_acc_name;
$data["is_vdr_bcng"] = $req->is_vdr_bcng;
}
DB::beginTransaction();
Users::addUser($data);
$apiResp = Responses::created("success add new user");
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"]);
}
}
public function api_edit_user(Request $req)
{
try {
$now = time();
$roles = Users::arrRoles();
$statuses = Users::arrStatus();
$input = [
"uid" => $req->uid,
"is_tracking" => $req->is_tracking,
"vehicles" => $req->vehicles,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_kcp" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
"is_vdr_bcng" => $req->is_vdr_bcng,
];
$rulesInput = [
"uid" => "required|integer|not_in:0",
"is_tracking" => "nullable|numeric",
"vehicles" => "nullable|array",
"bank_id" => "nullable|integer|not_in:0",
"bank_code" => "nullable|numeric",
"bank_short" => "nullable|string",
"bank_name" => "nullable|string",
"bank_kcp" => "nullable|string",
"bank_acc_number" => "nullable|numeric",
"bank_acc_name" => "nullable|string|max:255",
"is_vdr_bcng" => "nullable|numeric",
];
$data = [
"id" => $req->uid,
];
if ($req->first_name) {
$input["first_name"] = $req->first_name;
$rulesInput["first_name"] = "required|string|max:125";
$data["first_name"] = $req->first_name;
}
if ($req->last_name) {
$input["last_name"] = $req->last_name;
$rulesInput["last_name"] = "required|string|max:125";
$data["last_name"] = $req->last_name ?? null;
}
if ($req->email) {
$input["email"] = $req->email;
$rulesInput["email"] = "required|email";
$data["email"] = $req->email;
}
if ($req->phone) {
$input["phone"] = $req->phone;
$rulesInput["phone"] = "required|integer|not_in:0";
$data["phone"] = $req->phone;
$data["phone_code"] = Users::DEFAULT_PHONE_CODE;
}
if ($req->fulladdress) {
$input["fulladdress"] = $req->fulladdress;
$rulesInput["fulladdress"] = "required|string|min:45";
$data["fulladdress"] = $req->fulladdress;
}
if ($req->password) {
$input["password"] = $req->password;
$rulesInput["password"] = "required|string";
$data["password"] = Hash::make($req->password);
}
if ($req->clients) {
$input["clients"] = $req->clients;
$rulesInput["clients"] = "required|integer|not_in:0";
$data["client_group_id"] = $req->clients;
$clients = Clients::getClientById($req->clients);
if (count($clients) < 1) {
$apiResp = Responses::not_found("clients not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->roles) {
$input["roles"] = $req->roles;
$rulesInput["roles"] = "required|integer|not_in:0";
$data["role"] = $req->roles;
if (in_array($req->roles, $roles)) {
} else {
$apiResp = Responses::bad_request("role not valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
if ($req->roles) {
if ($req->roles == Users::ROLE_CHECKER) {
// $data['chk_type'] = $req->chk_type;
$data["chk_type"] = Users::CHK_TYPE_ALL;
}
}
if ($req->status) {
$input["status"] = $req->status;
$rulesInput["status"] = "required|integer|not_in:0";
$data["status"] = $req->status;
if (in_array($req->status, $statuses)) {
} else {
$apiResp = Responses::bad_request("status not valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$getUser = Users::getUserById($req->uid);
if (count($getUser) < 1) {
$apiResp = Responses::not_found("user not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->roles == Users::ROLE_VENDOR) {
if (!$req->bank_id) {
$apiResp = Responses::bad_request("bank wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (!$req->bank_branch_name) {
$apiResp = Responses::bad_request("bank kcp wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (!$req->bank_acc_number) {
$apiResp = Responses::bad_request("nomor rekening wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (!$req->bank_acc_name) {
$apiResp = Responses::bad_request("nama pemilik rekening wajib diisi");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqEmail = Users::getUserByEmail($req->email);
if (count($uniqEmail) > 0) {
$notSameUser = 1;
foreach ($uniqEmail as $key => $row) {
if ($row->id == $req->uid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPhone = Users::getUserByPhone($req->phone);
if (count($uniqPhone) > 0) {
$notSameUser = 1;
foreach ($uniqPhone as $key => $row) {
if ($row->id == $req->uid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
// $uniqCPhone = Clients::getClientByPhone($req->phone);
// if (count($uniqCPhone) > 0) {
// $notSameUser = 1;
// foreach ($uniqCPhone as $key => $row) {
// if ($row->id == $getUser[0]->client_id) {
// $notSameUser = 0;
// }
// }
// if ($notSameUser) {
// $apiResp = Responses::bad_request('phone has been used');
// return (new Response($apiResp, $apiResp['meta']['code']));
// }
// }
$vhcs = null;
if ($req->is_tracking == Users::IS_TRACK_VHC_YES) {
if (!$req->vehicles) {
$apiResp = Responses::bad_request("vehicles must be filled");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
foreach ($req->vehicles as $k => $v) {
$vhcs .= $v . ",";
}
if ($vhcs) {
if (substr($vhcs, -1) === ",") {
$vhcs = substr($vhcs, 0, -1);
}
}
}
$data["is_tracking"] = $req->is_tracking;
$data["vhcs"] = $vhcs;
if ($req->roles == Users::ROLE_VENDOR) {
$data["bank_id"] = $req->bank_id;
$data["bank_code"] = $req->bank_code;
$data["bank_name"] = $req->bank_name;
$data["bank_short_name"] = $req->bank_short;
$data["bank_branch_name"] = $req->bank_branch_name;
$data["bank_acc_number"] = $req->bank_acc_number;
$data["bank_acc_name"] = $req->bank_acc_name;
$data["is_vdr_bcng"] = $req->is_vdr_bcng;
}
$data["updt"] = $now;
$data["updt_by"] = $req->auth->uid;
DB::beginTransaction();
Users::updateUser($req->uid, $data);
$apiResp = Responses::created("success update user");
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"]);
}
}
public function api_del_user(Request $req)
{
try {
$now = time();
$input = [
"uid" => $req->uid,
];
$rulesInput = [
"uid" => "required|integer|not_in:0",
];
$data = [
"id" => $req->uid,
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$getUser = Users::getUserById($req->uid);
if (count($getUser) < 1) {
$apiResp = Responses::not_found("user not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$data["dlt"] = $now;
$data["dlt_by"] = $req->auth->uid;
DB::beginTransaction();
Users::updateUser($req->uid, $data);
$apiResp = Responses::created("success delete user");
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"]);
}
}
public function api_search_user_name(Request $req)
{
try {
$now = time();
$roles = Users::arrRoles();
$statuses = Users::arrStatus();
$input = [
"name" => $req->name,
"roles" => $req->roles,
];
$rulesInput = [
"name" => "required|string|max:125",
"roles" => "nullable|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($req->roles) {
if (in_array($req->roles, $roles)) {
} else {
$apiResp = Responses::bad_request("role not valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$users = Users::likeName($req->name, $req->roles);
} else {
$users = Users::likeName($req->name);
}
if (count($users) < 1) {
$apiResp = Responses::not_found("user not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
foreach ($users as $k => $v) {
// remove from array but no reindex array
// unset($users[$k]);
// remove from array and reindex array
// array_splice($users, $k, 1);
unset($users[$k]->password);
}
$apiResp = Responses::success("success search user by name");
$apiResp["data"] = $users;
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"]);
}
}
}

View File

@ -0,0 +1,358 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Users;
use App\Models\UsersMenuPermissions;
class UsersMenuPermissionsController extends Controller
{
public function view_menu_permissions(Request $req)
{
$data = [
'user' => $req->auth,
];
return view('menu_v1.configs.usersMenuPermissions', $data);
}
/**
* API
*/
public function api_list_menu_permissions(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
$list = UsersMenuPermissions::listPermissionsMenus($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = '-';
}
$apiResp = Responses::success('success list menu permissions');
$apiResp['count'] = count($list);
$apiResp['data'] = $list;
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_show_menu_permissions(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$permis = UsersMenuPermissions::showPermissionsMenusById($id);
if (count($permis) < 1) {
$apiResp = Responses::not_found('permissions not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
$apiResp = Responses::success('success get detail permissions');
$apiResp['data'] = $permis[0];
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
public function api_add_menu_permissions(Request $req)
{
try {
$now = time();
$input = [
'name' => $req->name,
// menu admin
'menu_trx' => $req->menu_trx,
'menu_company' => $req->menu_company,
'menu_zone' => $req->menu_zone,
'menu_users' => $req->menu_users,
'menu_conf_rates' => $req->menu_conf_rates,
'menu_conf_insurance' => $req->menu_conf_insurance,
'menu_conf_truck_type' => $req->menu_conf_truck_type,
'menu_devices' => $req->menu_devices,
'menu_logs_devices' => $req->menu_logs_devices,
'menu_conf_adt_items' => $req->menu_conf_adt_items,
'menu_drivers' => $req->menu_drivers,
'menu_vehicles' => $req->menu_vehicles,
'menu_menu_permission' => $req->menu_menu_permission,
// menu finance
'menu_fnc_ledger_balance' => $req->menu_fnc_ledger_balance,
'menu_fnc_payment' => $req->menu_fnc_payment,
'menu_fnc_billing' => $req->menu_fnc_billing,
'menu_fnc_conf_adt_items' => $req->menu_fnc_conf_adt_items,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string',
// menu admin
'menu_trx' => 'required|numeric|max:2',
'menu_company' => 'required|numeric|max:2',
'menu_zone' => 'required|numeric|max:2',
'menu_users' => 'required|numeric|max:2',
'menu_conf_rates' => 'required|numeric|max:2',
'menu_conf_insurance' => 'required|numeric|max:2',
'menu_conf_truck_type' => 'required|numeric|max:2',
'menu_devices' => 'required|numeric|max:2',
'menu_logs_devices' => 'required|numeric|max:2',
'menu_conf_adt_items' => 'required|numeric|max:2',
'menu_drivers' => 'required|numeric|max:2',
'menu_vehicles' => 'required|numeric|max:2',
'menu_menu_permission' => 'required|numeric|max:2',
// menu finance
'menu_fnc_ledger_balance' => 'required|numeric|max:2',
'menu_fnc_payment' => 'required|numeric|max:2',
'menu_fnc_billing' => 'required|numeric|max:2',
'menu_fnc_conf_adt_items' => 'required|numeric|max:2',
'status' => 'required|integer|min:0|max:2',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$isAdmin = 0;
$isFinance = 0;
if ($req->menu_trx || $req->menu_company || $req->menu_zone || $req->menu_users || $req->menu_conf_rates || $req->menu_conf_insurance || $req->menu_conf_truck_type || $req->menu_devices || $req->menu_logs_devices || $req->menu_conf_adt_items || $req->menu_drivers || $req->menu_vehicles) {
$isAdmin = 1;
}
if ($req->menu_fnc_ledger_balance || $req->menu_fnc_payment || $req->menu_fnc_billing || $req->menu_fnc_conf_adt_items) {
$isFinance = 1;
}
if ($isAdmin && $isFinance) {
$apiResp = Responses::bad_request('Jika salah satu menu admin diizinkan, maka tidak bisa mengizinkan menu finance');
return new Response($apiResp, $apiResp['meta']['code']);
}
DB::beginTransaction();
$insPer = [
'name' => $req->name,
// menu admin
'is_trx' => $req->menu_trx,
'is_company' => $req->menu_company,
'is_zone' => $req->menu_zone,
'is_users' => $req->menu_users,
'is_conf_rates' => $req->menu_conf_rates,
'is_conf_insurance' => $req->menu_conf_insurance,
'is_conf_truck_type' => $req->menu_conf_truck_type,
'is_devices' => $req->menu_devices,
'is_logs_devices' => $req->menu_logs_devices,
'is_conf_adt_items' => $req->menu_conf_adt_items,
'is_drivers' => $req->menu_drivers,
'is_vehicles' => $req->menu_vehicles,
'is_menu_permission' => $req->menu_menu_permission,
// menu finance
'is_fnc_ledger_balance' => $req->menu_fnc_ledger_balance,
'is_fnc_payment' => $req->menu_fnc_payment,
'is_fnc_billing' => $req->menu_fnc_billing,
'is_fnc_conf_adt_items' => $req->menu_fnc_conf_adt_items,
'is_active' => $req->status,
];
$id = UsersMenuPermissions::add($insPer);
$apiResp = Responses::created('success add new permission');
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']));
}
}
public function api_updt_menu_permissions(Request $req, $id)
{
try {
$now = time();
$input = [
'name' => $req->name,
// menu admin
'menu_trx' => $req->menu_trx,
'menu_company' => $req->menu_company,
'menu_zone' => $req->menu_zone,
'menu_users' => $req->menu_users,
'menu_conf_rates' => $req->menu_conf_rates,
'menu_conf_insurance' => $req->menu_conf_insurance,
'menu_conf_truck_type' => $req->menu_conf_truck_type,
'menu_devices' => $req->menu_devices,
'menu_logs_devices' => $req->menu_logs_devices,
'menu_conf_adt_items' => $req->menu_conf_adt_items,
'menu_drivers' => $req->menu_drivers,
'menu_vehicles' => $req->menu_vehicles,
'menu_menu_permission' => $req->menu_menu_permission,
// menu finance
'menu_fnc_ledger_balance' => $req->menu_fnc_ledger_balance,
'menu_fnc_payment' => $req->menu_fnc_payment,
'menu_fnc_billing' => $req->menu_fnc_billing,
'menu_fnc_conf_adt_items' => $req->menu_fnc_conf_adt_items,
'status' => $req->status,
];
$rulesInput = [
'name' => 'required|string',
// menu admin
'menu_trx' => 'required|numeric|max:2',
'menu_company' => 'required|numeric|max:2',
'menu_zone' => 'required|numeric|max:2',
'menu_users' => 'required|numeric|max:2',
'menu_conf_rates' => 'required|numeric|max:2',
'menu_conf_insurance' => 'required|numeric|max:2',
'menu_conf_truck_type' => 'required|numeric|max:2',
'menu_devices' => 'required|numeric|max:2',
'menu_logs_devices' => 'required|numeric|max:2',
'menu_conf_adt_items' => 'required|numeric|max:2',
'menu_drivers' => 'required|numeric|max:2',
'menu_vehicles' => 'required|numeric|max:2',
'menu_menu_permission' => 'required|numeric|max:2',
// menu finance
'menu_fnc_ledger_balance' => 'required|numeric|max:2',
'menu_fnc_payment' => 'required|numeric|max:2',
'menu_fnc_billing' => 'required|numeric|max:2',
'menu_fnc_conf_adt_items' => 'required|numeric|max:2',
'status' => 'required|integer|min:0|max:2',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$isAdmin = 0;
$isFinance = 0;
if ($req->menu_trx || $req->menu_company || $req->menu_zone || $req->menu_users || $req->menu_conf_rates || $req->menu_conf_insurance || $req->menu_conf_truck_type || $req->menu_devices || $req->menu_logs_devices || $req->menu_conf_adt_items || $req->menu_drivers || $req->menu_vehicles) {
$isAdmin = 1;
}
if ($req->menu_fnc_ledger_balance || $req->menu_fnc_payment || $req->menu_fnc_billing || $req->menu_fnc_conf_adt_items) {
$isFinance = 1;
}
if ($isAdmin && $isFinance) {
$apiResp = Responses::bad_request('Jika salah satu menu admin diizinkan, maka tidak bisa mengizinkan menu finance');
return new Response($apiResp, $apiResp['meta']['code']);
}
DB::beginTransaction();
$updtPer = [
'name' => $req->name,
// menu admin
'is_trx' => $req->menu_trx,
'is_company' => $req->menu_company,
'is_zone' => $req->menu_zone,
'is_users' => $req->menu_users,
'is_conf_rates' => $req->menu_conf_rates,
'is_conf_insurance' => $req->menu_conf_insurance,
'is_conf_truck_type' => $req->menu_conf_truck_type,
'is_devices' => $req->menu_devices,
'is_logs_devices' => $req->menu_logs_devices,
'is_conf_adt_items' => $req->menu_conf_adt_items,
'is_drivers' => $req->menu_drivers,
'is_vehicles' => $req->menu_vehicles,
'is_menu_permission' => $req->menu_menu_permission,
// menu finance
'is_fnc_ledger_balance' => $req->menu_fnc_ledger_balance,
'is_fnc_payment' => $req->menu_fnc_payment,
'is_fnc_billing' => $req->menu_fnc_billing,
'is_fnc_conf_adt_items' => $req->menu_fnc_conf_adt_items,
'is_active' => $req->status,
];
UsersMenuPermissions::updt($id, $updtPer);
$apiResp = Responses::created('success update permissions');
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']));
}
}
public function api_del_menu_permissions(Request $req, $id)
{
try {
$now = time();
$input = [
'id' => $id,
];
$rulesInput = [
'id' => 'required|integer|not_in:0',
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp['meta']['code']);
}
$a_item = UsersMenuPermissions::showPermissionsMenusById($id);
if (count($a_item) < 1) {
$apiResp = Responses::not_found('permissions not found');
return (new Response($apiResp, $apiResp['meta']['code']));
}
DB::beginTransaction();
UsersMenuPermissions::updt($id, [
'dlt' => $now,
'dlt_by' => $req->auth->uid,
]);
DB::commit();
$apiResp = Responses::success('success delete permissions');
return (new Response($apiResp, $apiResp['meta']['code']));
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return (new Response($apiResp, $apiResp['meta']['code']));
}
}
}

View File

@ -0,0 +1,706 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use Auth;
use App\Responses;
use App\Helper;
use App\Models\Vehicles;
use App\Models\Devices;
use App\Models\VehiclesDetail;
use App\Models\Users;
class VehiclesController extends Controller
{
public function api_list_vehicles(Request $req)
{
try {
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
$list = Vehicles::listVehicles($req->auth, $filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
// $list[$key]->mileage_km = '-';
// $list[$key]->div_name = 'All Division';
// $list[$key]->group_name = 'All Group';
// $list[$key]->track_schedule = $row->track_sch_h.'/'.$row->track_sch_d; // combine track_sch_h + track_sch_d
// $list[$key]->is_track_holiday_text = ($list[$key]->is_track_holiday == Vehicles::ENABLED_TRACK_HOLIDAY) ? 'Enabled' : 'Disabled';
// $list[$key]->alert_zones = '-';
// $list[$key]->cameras = '-';
$list[$key]->action = "-";
}
$apiResp = Responses::success("success list vehicles");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_show_vehicle(Request $req, $vid)
{
try {
$now = time();
$input = [
"vid" => $vid,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicle = Vehicles::showVehicleById($vid);
if (count($vehicle) < 1) {
$apiResp = Responses::not_found("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success get detail vehicle");
$apiResp["data"] = $vehicle[0];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_add_vehicle(Request $req)
{
$url_fvhc = "";
$url_stnk = "";
try {
$now = time();
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$input = [
"front_vehicle_photo" => $req->fvhc_base64,
"dvc_id" => $req->dvc_id,
"simcard" => $req->simcard,
"device_id" => $req->device_id,
"vehicle_name" => $req->vhc_name,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"model_id" => $req->model_id,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"current_driver" => $req->d_current,
"assign_driver" => $req->d_assign,
"stnk_photo" => $req->stnk_base64,
"stnk_exp" => $req->stnk_exp,
"nopol1" => $req->nopol1,
"nopol2" => $req->nopol2,
"nopol3" => $req->nopol3,
"manufacture_year" => $req->stnk_vyear,
"cylinder_capacity" => $req->cc,
"vehicle_identity_number" => $req->vin,
"engine_number" => $req->en,
"vehicle_color" => $req->color,
"fuel_type" => $req->fuel_type,
"license_plat_color" => $req->tnkb_color,
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
"vendor_id" => $req->vendor_id,
];
$rulesInput = [
"front_vehicle_photo" => "required|string",
"dvc_id" => "nullable|integer",
"simcard" => "nullable|numeric",
"device_id" => "nullable|numeric",
"vehicle_name" => "required|string",
"brand_id" => "required|integer",
"type_id" => "required|integer",
"model_id" => "nullable|integer",
"speed_limit" => "required|numeric",
// "fuel_capacity" => "required|numeric",
// "fuel_drop_treshold" => "required|numeric",
// "max_pressure" => "required|numeric",
"current_driver" => "nullable|integer",
"assign_driver" => "nullable|integer",
"stnk_photo" => "required|string",
"stnk_exp" => "required|date_format:Y-m-d",
"nopol1" => "required|string|max:2",
"nopol2" => "required|string|max:4",
"nopol3" => "required|string|max:3",
"manufacture_year" => "required|digits:4",
"cylinder_capacity" => "required|integer",
"vehicle_identity_number" => "required|string|min:17|max:45",
"engine_number" => "required|string|min:9|max:45",
"vehicle_color" => "required|string|min:3|max:25",
"fuel_type" => "required|string|min:3|max:25",
"license_plat_color" => "required|string|min:3|max:25",
"regis_year" => "required|digits:4",
"tax_exp" => "required|date_format:Y-m-d",
"kir_exp" => "required|date_format:Y-m-d",
"vendor_id" => "nullable|integer|not_in:0",
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$rulesInput["simcard"] = "nullable";
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device_id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if ($device_id !== str_pad(0, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT)) {
$uniqDeviceId = Vehicles::getVehicleByDeviceId($device_id);
if (count($uniqDeviceId) > 0) {
$apiResp = Responses::bad_request("device id has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqSimcard = Vehicles::getVehicleBySimcard($req->simcard);
if (count($uniqSimcard) > 0) {
$apiResp = Responses::bad_request("simcard has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqPlatNo = Vehicles::getVehicleByPlatNo($req->nopol1, $req->nopol2, $req->nopol3);
if (count($uniqPlatNo) > 0) {
$apiResp = Responses::bad_request("plat number has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
$insVhc = [
"name" => $req->vhc_name,
"dvc_id" => $req->dvc_id ?? 0,
"device_id" => $device_id,
"simcard" => $req->simcard ?? 0,
"cat_id" => Vehicles::DEFAULT_CAT_ID,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"nopol1" => strtoupper($req->nopol1),
"nopol2" => strtoupper($req->nopol2),
"nopol3" => strtoupper($req->nopol3),
"c_did" => $req->d_current ?? 0,
"a_did" => $req->d_assign ?? 0,
"is_track_holiday" => Vehicles::DEFAULT_TRACK_HOLIDAY,
"track_sch_d" => Vehicles::DEFAULT_TRACK_SCH_D,
"track_sch_h" => Vehicles::DEFAULT_TRACK_SCH_H,
"client_group_id" => $req->auth->client_group_id ?? null,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->model_id) {
$insVhc["model_id"] = $req->model_id;
}
if ($req->auth->role == Users::ROLE_VENDOR) {
$insVhc["vendor_id"] = $req->auth->uid;
$insVhc["simcard"] = 0;
} else {
$insVhc["vendor_id"] = $req->vendor_id ?? 0;
}
$vid = Vehicles::addVehicle($insVhc);
if ($req->auth->role == Users::ROLE_VENDOR) {
$getUsrId = DB::table("t_users")
->where("id", Auth::user()->id)
->first();
$vhclid = DB::table("t_vehicles")->insertGetId($insVhc);
$new = $getUsrId->vhcs . "," . $vhclid;
$dtupdate = [
"vhcs" => $new,
];
DB::table("t_users")
->where("id", Auth::user()->id)
->update($dtupdate);
$dtUpdataIsTracking = [
"is_tracking" => 1,
];
DB::table("t_users")
->where("id", Auth::user()->id)
->update($dtUpdataIsTracking);
}
$url_fvhc = "vehicles/$vid/front_$now.jpeg";
if (!Storage::disk("public")->put($url_fvhc, base64_decode($req->fvhc_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$url_stnk = "vehicles/$vid/stnk_$now.jpeg";
if (!Storage::disk("public")->put($url_stnk, base64_decode($req->stnk_base64))) {
Storage::disk("public")->delete($url_fvhc);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$insDetail = [
"vid" => $vid,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"fvhc_img" => $url_fvhc,
"stnk_img" => $url_stnk,
"stnk_exp" => $req->stnk_exp,
"vyear" => $req->stnk_vyear, // manufacture_year
"cc" => $req->cc, // cylinder_capacity
"vin" => strtoupper($req->vin), // vehicle_identity_number
"en" => strtoupper($req->en), // engine_number
"vcolor" => strtoupper($req->color),
"fuel_type" => strtoupper($req->fuel_type),
"tnkb_color" => strtoupper($req->tnkb_color), // license_plat_color
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
];
VehiclesDetail::addDetail($insDetail);
$apiResp = Responses::created("success add new vehicle");
DB::commit();
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_fvhc);
Storage::disk("public")->delete($url_stnk);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_edit_vehicle(Request $req, $vid)
{
$url_fvhc = "";
$url_stnk = "";
try {
$now = time();
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$input = [
"vid" => $vid,
"front_vehicle_photo" => $req->fvhc_base64,
"dvc_id" => $req->dvc_id ?? 0,
"simcard" => $req->simcard,
"device_id" => $req->device_id,
"vehicle_name" => $req->vhc_name,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"model_id" => $req->model_id,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"current_driver" => $req->d_current,
"assign_driver" => $req->d_assign,
"stnk_photo" => $req->stnk_base64,
"stnk_exp" => $req->stnk_exp,
"nopol1" => $req->nopol1,
"nopol2" => $req->nopol2,
"nopol3" => $req->nopol3,
"manufacture_year" => $req->stnk_vyear,
"cylinder_capacity" => $req->cc,
"vehicle_identity_number" => $req->vin,
"engine_number" => $req->en,
"vehicle_color" => $req->color,
"fuel_type" => $req->fuel_type,
"license_plat_color" => $req->tnkb_color,
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
"vendor_id" => $req->vendor_id,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
"front_vehicle_photo" => "nullable|string",
// "dvc_id" => "nullable|integer",
"simcard" => "nullable|numeric",
"device_id" => "nullable|numeric",
"vehicle_name" => "required|string",
"brand_id" => "required|integer",
"type_id" => "required|integer",
"model_id" => "nullable|integer",
"speed_limit" => "required|numeric",
// "fuel_capacity" => "required|numeric",
// "fuel_drop_treshold" => "required|numeric",
// "max_pressure" => "required|numeric",
"current_driver" => "nullable|integer",
"assign_driver" => "nullable|integer",
"stnk_photo" => "nullable|string",
"stnk_exp" => "required|date_format:Y-m-d",
"nopol1" => "required|string|max:2",
"nopol2" => "required|string|max:4",
"nopol3" => "required|string|max:3",
"manufacture_year" => "required|digits:4",
"cylinder_capacity" => "required|integer",
"vehicle_identity_number" => "required|string|min:17|max:45",
"engine_number" => "required|string|min:9|max:45",
"vehicle_color" => "required|string|min:3|max:25",
"fuel_type" => "required|string|min:3|max:25",
"license_plat_color" => "required|string|min:3|max:25",
"regis_year" => "required|digits:4",
"tax_exp" => "required|date_format:Y-m-d",
"kir_exp" => "required|date_format:Y-m-d",
"vendor_id" => "nullable|integer|not_in:0",
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$rulesInput["simcard"] = "nullable";
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vhc = Vehicles::getVehicleById($vid);
if (count($vhc) < 1) {
$apiResp = Responses::bad_request("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vd = VehiclesDetail::getDetailByVid($vid);
if (count($vd) < 1) {
$apiResp = Responses::bad_request("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
// if ($req->dvc_id) {
// $uniqDeviceId = Vehicles::getVehicleByDeviceId($device_id);
// if (count($uniqDeviceId) > 0) {
// $notSameUser = 1;
// foreach ($uniqDeviceId as $key => $row) {
// if ($row->id == $vid) {
// $notSameUser = 0;
// }
// }
// if ($notSameUser) {
// $apiResp = Responses::bad_request("device id has been used");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// }
// }
$uniqSimcard = Vehicles::getVehicleBySimcard($req->simcard);
if (count($uniqSimcard) > 0) {
$notSameUser = 1;
foreach ($uniqSimcard as $key => $row) {
if ($row->id == $vid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("simcard has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPlatNo = Vehicles::getVehicleByPlatNo($req->nopol1, $req->nopol2, $req->nopol3);
if (count($uniqPlatNo) > 0) {
$notSameUser = 1;
foreach ($uniqPlatNo as $key => $row) {
if ($row->id == $vid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("plat number has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
DB::beginTransaction();
$updtVhc = [
"name" => $req->vhc_name,
"dvc_id" => $req->dvc_id,
"device_id" => $device_id,
"simcard" => (int) $req->simcard,
"cat_id" => Vehicles::DEFAULT_CAT_ID,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"nopol1" => strtoupper($req->nopol1),
"nopol2" => strtoupper($req->nopol2),
"nopol3" => strtoupper($req->nopol3),
"c_did" => $req->d_current ?? 0,
"a_did" => $req->d_assign ?? 0,
"is_track_holiday" => Vehicles::DEFAULT_TRACK_HOLIDAY,
"track_sch_d" => Vehicles::DEFAULT_TRACK_SCH_D,
"track_sch_h" => Vehicles::DEFAULT_TRACK_SCH_H,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->model_id) {
$updtVhc["model_id"] = $req->model_id;
}
if ($req->auth->role == Users::ROLE_VENDOR) {
$updtVhc["vendor_id"] = $req->auth->uid;
// $updtVhc["simcard"] = (int) $uniqDeviceId[0]->simcard;
} else {
$updtVhc["vendor_id"] = $req->vendor_id ?? 0;
}
Vehicles::updateVehicle($vid, $updtVhc);
if ($req->dvc_id) {
Devices::updateDevice($req->dvc_id, [
"is_assigned" => Devices::IS_ASSIGNED,
]);
} else {
Devices::updateDevice($vhc[0]->dvc_id, [
"is_assigned" => Devices::IS_UNASSIGNED,
]);
}
if ($req->fvhc_base64) {
$url_fvhc = "vehicles/$vid/front_$now.jpeg";
if (!Storage::disk("public")->put($url_fvhc, base64_decode($req->fvhc_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($vd[0]->fvhc_img);
}
if ($req->stnk_base64) {
$url_stnk = "vehicles/$vid/stnk_$now.jpeg";
if (!Storage::disk("public")->put($url_stnk, base64_decode($req->stnk_base64))) {
Storage::disk("public")->delete($url_fvhc);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($vd[0]->stnk_img);
}
$updtDetail = [
"vid" => $vid,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"stnk_exp" => $req->stnk_exp,
"vyear" => $req->stnk_vyear, // manufacture_year
"cc" => $req->cc, // cylinder_capacity
"vin" => strtoupper($req->vin), // vehicle_identity_number
"en" => strtoupper($req->en), // engine_number
"vcolor" => strtoupper($req->color),
"fuel_type" => strtoupper($req->fuel_type),
"tnkb_color" => strtoupper($req->tnkb_color), // license_plat_color
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
];
if ($req->fvhc_base64) {
$updtDetail["fvhc_img"] = $url_fvhc;
}
if ($req->stnk_base64) {
$updtDetail["stnk_img"] = $url_stnk;
}
VehiclesDetail::updateDetailByVid($vid, $updtDetail);
DB::commit();
$apiResp = Responses::success("success update vehicle");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_fvhc);
Storage::disk("public")->delete($url_stnk);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_del_vehicle(Request $req, $vid)
{
try {
$now = time();
$input = [
"vid" => $vid,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicle = Vehicles::showVehicleById($vid);
if (count($vehicle) < 1) {
$apiResp = Responses::not_found("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
$device_id = str_pad(0, Devices::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
Vehicles::updateVehicle($vid, [
"dvc_id" => 0,
"device_id" => $device_id,
"simcard" => 0,
"dlt" => $now,
"dlt_by" => $req->auth->uid,
]);
if ($vehicle[0]->dvc_id != 0) {
Devices::updateDevice($vehicle[0]->dvc_id, [
"is_assigned" => Devices::IS_UNASSIGNED,
]);
}
// Storage::disk('public')->delete($vehicle[0]->fvhc_img);
// Storage::disk('public')->delete($vehicle[0]->stnk_img);
DB::commit();
$apiResp = Responses::success("success delete vehicle");
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_search_device_id(Request $req)
{
try {
$now = time();
$input = [
"device_id" => $req->device_id,
];
$rulesInput = [
"device_id" => "required|numeric",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$devices = Vehicles::getVehicleByDeviceId($device_id);
if (count($devices) < 1) {
$apiResp = Responses::not_found("device id not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success search device id");
$apiResp["data"] = $devices;
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"]);
}
}
public function api_search_nopol(Request $req)
{
try {
$now = time();
$input = [
"nopol" => $req->nopol,
];
$rulesInput = [
"nopol" => "required|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"]);
}
$nopol = explode(" ", strtoupper($req->nopol));
$cNopol = count($nopol);
if ($cNopol === 3) {
} elseif ($cNopol === 2) {
$nopol[2] = "";
} elseif ($cNopol === 1) {
$nopol[1] = "";
$nopol[2] = "";
} else {
$apiResp = Responses::bad_input("Nomor polisi kendaraan tidak valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicles = Vehicles::searchVehicleByPlatNo($nopol[0], $nopol[1], $nopol[2]);
if (count($vehicles) < 1) {
$apiResp = Responses::not_found("vehicles not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success search vehicles");
$apiResp["data"] = $vehicles;
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"]);
}
}
}

File diff suppressed because it is too large Load Diff

68
app/Http/Kernel.php Executable file
View File

@ -0,0 +1,68 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.user' => \App\Http\Middleware\AuthUser::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
}

242
app/Http/Middleware/AuthUser.php Executable file
View File

@ -0,0 +1,242 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\Models\Users;
class AuthUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$request->auth = Auth::user();
$request->auth->uid = $request->auth->id;
if ($request->auth->role == Users::ROLE_ADMIN) {
// views
if ($request->is("home/*")) {
} elseif ($request->is("home")) {
} elseif ($request->is("dashboard/*")) {
} elseif ($request->is("dashboard")) {
} elseif ($request->is("drivers/*")) {
} elseif ($request->is("drivers")) {
} elseif ($request->is("transactions/*")) {
} elseif ($request->is("transactions")) {
} elseif ($request->is("vehicles/*")) {
} elseif ($request->is("vehicles")) {
} elseif ($request->is("clients/*")) {
} elseif ($request->is("clients")) {
} elseif ($request->is("zone/*")) {
} elseif ($request->is("zone")) {
} elseif ($request->is("users/*")) {
} elseif ($request->is("users")) {
} elseif ($request->is("profile/*")) {
} elseif ($request->is("profile")) {
} elseif ($request->is("config/*")) {
} elseif ($request->is("config")) {
} elseif ($request->is("pocket/*")) {
} elseif ($request->is("pocket")) {
} elseif ($request->is("lgb_types/*")) {
} elseif ($request->is("lgb_types")) {
} elseif ($request->is("lgb_masters/*")) {
} elseif ($request->is("lgb_masters")) {
} elseif ($request->is("insurances/*")) {
} elseif ($request->is("static_insurances/*")) {
}
// api
elseif ($request->is("api/conf/*")) {
} elseif ($request->is("api/conf")) {
} elseif ($request->is("api/osm/*")) {
} elseif ($request->is("api/osm")) {
} elseif ($request->is("api/region/*")) {
} elseif ($request->is("api/region")) {
} elseif ($request->is("api/zones/*")) {
} elseif ($request->is("api/zones")) {
} elseif ($request->is("api/vehicles/*")) {
} elseif ($request->is("api/vehicles")) {
} elseif ($request->is("api/drivers/*")) {
} elseif ($request->is("api/drivers")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/clients/*")) {
} elseif ($request->is("api/clients")) {
} elseif ($request->is("api/tracks/*")) {
} elseif ($request->is("api/tracks")) {
} elseif ($request->is("api/transactions/*")) {
} elseif ($request->is("api/transactions")) {
} elseif ($request->is("api/transactions_spc/*")) {
} elseif ($request->is("api/transactions_spc")) {
} elseif ($request->is("api/insurances/*")) {
} elseif ($request->is("api/insurances")) {
} elseif ($request->is("api/devices/*")) {
} elseif ($request->is("api/devices")) {
} elseif ($request->is("api/user/clients/*")) {
} elseif ($request->is("api/user/clients")) {
} elseif ($request->is("api/a_items/*")) {
} elseif ($request->is("api/a_items")) {
} elseif ($request->is("api/admin/*")) {
} elseif ($request->is("api/admin")) {
} elseif ($request->is("api/static_insurances/*")) {
} elseif ($request->is("api/static_insurances")) {
} elseif ($request->is("api/menu_permissions/*")) {
} elseif ($request->is("api/menu_permissions")) {
} elseif ($request->is("api/pocket/*")) {
} elseif ($request->is("api/pocket")) {
} elseif ($request->is("api/lgb_types/*")) {
} elseif ($request->is("api/lgb_types")) {
} elseif ($request->is("api/lgb_keys/*")) {
} elseif ($request->is("api/lgb_keys")) {
} elseif ($request->is("api/dtypes/*")) {
} elseif ($request->is("api/dtypes")) {
} elseif ($request->is("api/dana/*")) {
} elseif ($request->is("api/dana")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} elseif ($request->auth->role == Users::ROLE_VENDOR) {
// views
if ($request->is("home/*")) {
} elseif ($request->is("home")) {
} elseif ($request->is("dashboard/*")) {
} elseif ($request->is("dashboard")) {
} elseif ($request->is("checklist/*")) {
} elseif ($request->is("checklist")) {
} elseif ($request->is("zone/*")) {
} elseif ($request->is("zone")) {
} elseif ($request->is("drivers/*")) {
} elseif ($request->is("drivers")) {
} elseif ($request->is("vehicles/*")) {
} elseif ($request->is("vehicles")) {
} elseif ($request->is("profile/*")) {
} elseif ($request->is("transactions/*")) {
} elseif ($request->is("transactions")) {
} elseif ($request->is("profile")) {
} elseif ($request->is("user/vendor/*")) {
} elseif ($request->is("user/vendor")) {
}
// api
elseif ($request->is("api/conf")) {
} elseif ($request->is("api/osm/*")) {
} elseif ($request->is("api/osm")) {
} elseif ($request->is("api/region/*")) {
} elseif ($request->is("api/region")) {
} elseif ($request->is("api/tracks/*")) {
} elseif ($request->is("api/tracks")) {
} elseif ($request->is("api/vehicles/*")) {
} elseif ($request->is("api/vehicles")) {
} elseif ($request->is("api/drivers/*")) {
} elseif ($request->is("api/drivers")) {
} elseif ($request->is("api/user/vendor/*")) {
} elseif ($request->is("api/user/vendor")) {
} elseif ($request->is("api/transactions_spc/*")) {
} elseif ($request->is("api/transactions_spc")) {
} elseif ($request->is("api/zones/*")) {
} elseif ($request->is("api/zones")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} elseif ($request->auth->role == Users::ROLE_CLIENT_ADMIN) {
// views
if ($request->is("home/*")) {
} elseif ($request->is("home")) {
} elseif ($request->is("dashboard/*")) {
} elseif ($request->is("dashboard")) {
} elseif ($request->is("zone/*")) {
} elseif ($request->is("zone")) {
} elseif ($request->is("profile/*")) {
} elseif ($request->is("profile")) {
} elseif ($request->is("user/clients/*")) {
} elseif ($request->is("user/clients")) {
}
// api
elseif ($request->is("api/conf")) {
} elseif ($request->is("api/osm/*")) {
} elseif ($request->is("api/osm")) {
} elseif ($request->is("api/region/*")) {
} elseif ($request->is("api/region")) {
} elseif ($request->is("api/zones/*")) {
} elseif ($request->is("api/zones")) {
} elseif ($request->is("api/tracks/*")) {
} elseif ($request->is("api/tracks")) {
} elseif ($request->is("api/user/clients/*")) {
} elseif ($request->is("api/user/clients")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} elseif ($request->auth->role == Users::ROLE_CHECKER) {
// views
if ($request->is("user/checker/*")) {
} elseif ($request->is("user/checker")) {
} elseif ($request->is("profile/*")) {
} elseif ($request->is("profile")) {
}
// api
elseif ($request->is("api/user/checker/*")) {
} elseif ($request->is("api/user/checker")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} elseif ($request->auth->role == Users::ROLE_FINANCE) {
// views
if ($request->is("finance/*")) {
} elseif ($request->is("profile/*")) {
} elseif ($request->is("profile")) {
}
// api
elseif ($request->is("api/finance/*")) {
} elseif ($request->is("api/finance")) {
} elseif ($request->is("api/a_items/*")) {
} elseif ($request->is("api/a_items")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/dana/*")) {
} elseif ($request->is("api/dana")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} elseif ($request->auth->role == Users::ROLE_SPECIAL_TRACKING) {
// views
if ($request->is("dashboard/*")) {
} elseif ($request->is("dashboard")) {
}
// api
elseif ($request->is("api/tracks/*")) {
} elseif ($request->is("api/tracks")) {
} elseif ($request->is("api/users/*")) {
} elseif ($request->is("api/users")) {
} elseif ($request->is("api/universal/*")) {
} elseif ($request->is("api/universal")) {
} else {
return abort(403, "Unauthorized action.");
}
} else {
return abort(403, "Unauthorized action.");
}
return $next($request);
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustHosts as Middleware;
class TrustHosts extends Middleware
{
/**
* Get the host patterns that should be trusted.
*
* @return array
*/
public function hosts()
{
return [
$this->allSubdomainsOfApplicationUrl(),
];
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string|null
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}

91
app/Models/AItems.php Executable file
View File

@ -0,0 +1,91 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class AItems extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const IS_ADM_PRICE_NO = 0;
const IS_ADM_PRICE_YES = 1;
// 0=>system, 1=>admin, 2=>finance
const CRT_TYPE_SYSTEM = 0;
const CRT_TYPE_ADMIN = 1;
const CRT_TYPE_FINANCE = 2;
public static function listAItems($filter = [])
{
$params = [];
$select = '';
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND a_item.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['crt_type'])) {
$where .= ' AND a_item.crt_type = ?';
$params[] = $filter['crt_type'];
}
return DB::select("SELECT
a_item.*,ut.name as type_name
$select
FROM
t_a_items as a_item
INNER JOIN t_unit_types as ut ON a_item.type = ut.id
WHERE a_item.dlt is null
$where
ORDER BY a_item.name ASC
;",
$params);
}
public static function showAItemsById($id)
{
return DB::select("SELECT * FROM t_a_items as a_item WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function get()
{
return DB::select("SELECT * FROM t_a_items as a_item WHERE dlt is null ORDER BY a_item.name ASC;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_a_items as a_item WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getByName($name, $filter = [])
{
$params = [$name];
$where = '';
if (isset($filter['crt_type'])) {
$where .= ' AND a_item.crt_type = ?';
$params[] = $filter['crt_type'];
}
return DB::select("SELECT * FROM t_a_items as a_item WHERE dlt is null AND name = ? $where LIMIT 1;", $params);
}
public static function add($data)
{
$id = DB::table("t_a_items")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_a_items")->where("id", $id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_a_items")->where("id", $id)->delete();
}
}

93
app/Models/Banks.php Executable file
View File

@ -0,0 +1,93 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Banks extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const DFT_BANK_ID = 1; // BCA
const DFT_BANK_CODE = 014;
const DFT_BANK_NAME = "Bank Central Asia";
const DFT_BANK_SHORT_NAME = "BCA";
const DFT_BANK_ACC_NUMBER = 5270860721;
const DFT_BANK_ACC_NAME = "PT Bonceng Indonesia";
const defaultSelectedBanks = "
banks.*
";
public static function listBanks($filter = [])
{
$params = [];
$select = '';
$join = '';
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND is_active = ?';
$params[] = $filter['is_active'];
}
return DB::select("SELECT "
. Banks::defaultSelectedBanks . "
$select
FROM t_banks as banks
$join
WHERE banks.dlt is null
$where
;", $params);
}
public static function showBankById($bid)
{
return DB::select("SELECT "
. Banks::defaultSelectedBanks . "
FROM t_banks as banks
WHERE banks.dlt is null AND banks.id = ?
LIMIT 1;", [$bid]);
}
public static function showBankByCode($code)
{
return DB::select("SELECT "
. Banks::defaultSelectedBanks . "
FROM t_banks as banks
WHERE banks.dlt is null AND banks.bank_code = ?
LIMIT 1;", [$code]);
}
public static function getBanks()
{
return DB::select("SELECT * FROM t_banks WHERE dlt is null;");
}
public static function getBankById($bid)
{
return DB::select("SELECT * FROM t_banks WHERE dlt is null AND id = ? LIMIT 1;", [$bid]);
}
public static function getBankByCode($code)
{
return DB::select("SELECT * FROM t_banks WHERE dlt is null AND bank_code = ? LIMIT 1;", [$code]);
}
public static function addBank($data)
{
$bid = DB::table("t_banks")->insertGetId($data);
return $bid;
}
public static function updateBank($bid, $data)
{
return DB::table("t_banks")->where("id", $bid)->update($data);
}
public static function deleteBank($bid)
{
return DB::table("t_banks")->where("id", $bid)->delete();
}
}

80
app/Models/Checkpoints.php Executable file
View File

@ -0,0 +1,80 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Checkpoints extends Model
{
const defaultSelectedCheckpoints = "
point.*
,pck.name as pck_name,pck.fulladdress as pck_fulladdress
,drp.name as drop_name,drp.fulladdress as drop_fulladdress
";
public static function listCheckpoints($filter = [])
{
$where = '';
$params = [];
if (isset($filter['pocket_id'])) {
$where .= ' AND point.pocket_id = ?';
$params[] = $filter['pocket_id'];
}
return DB::select("SELECT "
. Checkpoints::defaultSelectedCheckpoints . "
FROM t_checkpoints as point
INNER JOIN t_zones as pck ON point.pck_id = pck.id
LEFT JOIN t_zones as drp ON point.drop_id = drp.id
WHERE point.dlt is null $where;", $params);
}
public static function showCheckpointById($pocket_id)
{
return DB::select("SELECT "
. Checkpoints::defaultSelectedCheckpoints . "
FROM t_checkpoints as point
LEFT JOIN t_zones as pck ON point.pck_id = pck.id
LEFT JOIN t_zones as drp ON point.drop_id = drp.id
WHERE point.dlt is null AND point.id = ?
LIMIT 1;", [$pocket_id]);
}
public static function getCheckpoints()
{
return DB::select("SELECT * FROM t_checkpoints WHERE dlt is null;");
}
public static function getCheckpointById($id)
{
return DB::select("SELECT * FROM t_checkpoints WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getCheckpointByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_checkpoints WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addCheckpoint($data)
{
$pid = DB::table("t_checkpoints")->insertGetId($data);
return $pid;
}
public static function updateCheckpoint($id, $data)
{
return DB::table("t_checkpoints")->where("id", $id)->update($data);
}
public static function deleteCheckpoint($id)
{
return DB::table("t_checkpoints")->where("id", $id)->delete();
}
public static function deleteCheckpointByPocketId($pocket_id)
{
return DB::table("t_checkpoints")->where("pocket_id", $pocket_id)->delete();
}
}

172
app/Models/Clients.php Executable file
View File

@ -0,0 +1,172 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Clients extends Model
{
const CSTTS_ACTIVE = 1;
const CSTTS_INACTIVE = 2;
const CCREDENTIALS_CREATE = 1;
const CCREDENTIALS_NOT = 2;
const DEFAULT_PHONE_CODE = 62;
const DEFAULT_CID = 1; // swanusa account
const DISC_TYPE_NO = 0;
const DISC_TYPE_FIX = 1;
const DISC_TYPE_PERCENT = 2;
public static function listClients($filter = [])
{
$params = [];
$select = "";
$join = "";
$where = "";
if (isset($filter["company"])) {
$where .= " AND c.id = ?";
$params[] = $filter["company"];
}
if (isset($filter["c_status"])) {
$where .= " AND c.c_status = ?";
$params[] = $filter["c_status"];
}
return DB::select(
"SELECT c.*
,c.id as client_id,u.id as user_id
,c.crt as join_date
,(SELECT COUNT(id) FROM t_orders_clients WHERE c_pt_id = c.id) as count_trx
" .
$select .
"
FROM t_clients AS c
LEFT JOIN t_users AS u ON c.id = u.client_id
" .
$join .
"
WHERE c.dlt is null
" .
$where .
"
GROUP BY c.id
;",
$params
);
}
public static function showClientById($cid)
{
$params = [$cid];
return DB::select(
"SELECT c.*
,c.id as client_id,u.id as user_id
,c.crt as join_date
FROM t_clients AS c
LEFT JOIN t_users AS u ON c.id = u.client_id
WHERE c.dlt is null
AND c.id = ?
LIMIT 1;",
$params
);
}
public static function getClients()
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null;");
}
public static function getClientById($cid)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND id = ? LIMIT 1;", [$cid]);
}
public static function getClientByEmail($email)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND c_mail = ? LIMIT 2;", [$email]);
}
public static function getClientByPhone($phone)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND c_phone = ? LIMIT 2;", [$phone]);
}
public static function getClientByName($name)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND c_name = ? LIMIT 2;", [$name]);
}
public static function getPicByEmail($email)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND pic_mail = ? LIMIT 2;", [$email]);
}
public static function getPicByPhone($phone)
{
return DB::select("SELECT * FROM t_clients WHERE dlt is null AND pic_phone = ? LIMIT 2;", [$phone]);
}
public static function addClient($data)
{
$cid = DB::table("t_clients")->insertGetId($data);
return $cid;
}
public static function updateClient($cid, $data)
{
return DB::table("t_clients")
->where("id", $cid)
->update($data);
}
public static function deleteClient($cid)
{
return DB::table("t_clients")
->where("id", $cid)
->delete();
}
public static function select2Client($cid = null)
{
$query = "";
$params = [];
if ($cid) {
$query .= "SELECT id,c_name as name FROM t_clients AS c WHERE dlt is null AND c.id = ?;";
$params[] = $cid;
} else {
$query .= "SELECT id,c_name as name FROM t_clients AS c WHERE dlt is null;";
}
return DB::select($query, $params);
}
public static function arrDiscountTypes()
{
return [Clients::DISC_TYPE_NO, Clients::DISC_TYPE_FIX, Clients::DISC_TYPE_PERCENT];
}
public static function select2DiscountTypes()
{
return [
[
"id" => Clients::DISC_TYPE_NO,
"name" => "No Discount",
],
[
"id" => Clients::DISC_TYPE_FIX,
"name" => "Fix Amount",
],
[
"id" => Clients::DISC_TYPE_PERCENT,
"name" => "Percent Amount",
],
];
}
}

43
app/Models/ClientsDivGroups.php Executable file
View File

@ -0,0 +1,43 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ClientsDivGroups extends Model
{
const DEFAULT_CID = 1; // swanusa account
public static function getCDivGroups()
{
return DB::select("SELECT * FROM t_clients_div_groups WHERE dlt is null;");
}
public static function getCDivGroupById($c_div_group_id)
{
return DB::select("SELECT * FROM t_clients_div_groups WHERE dlt is null AND id = ? LIMIT 1;", [$c_div_group_id]);
}
public static function getCDivGroupByName($name)
{
return DB::select("SELECT * FROM t_clients_div_groups WHERE dlt is null AND name = ? LIMIT 2;", [$name]);
}
public static function addCDivGroup($data)
{
$c_div_group_id = DB::table("t_clients_div_groups")->insertGetId($data);
return $c_div_group_id;
}
public static function updateCDivGroup($c_div_group_id, $data)
{
return DB::table("t_clients_div_groups")->where("id", $c_div_group_id)->update($data);
}
public static function deleteCDivGroup($c_div_group_id)
{
return DB::table("t_clients_div_groups")->where("id", $c_div_group_id)->delete();
}
}

43
app/Models/ClientsDivs.php Executable file
View File

@ -0,0 +1,43 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ClientsDivs extends Model
{
const DEFAULT_CID = 1; // swanusa account
public static function getCDivs()
{
return DB::select("SELECT * FROM t_clients_divs WHERE dlt is null;");
}
public static function getCDivById($client_div_id)
{
return DB::select("SELECT * FROM t_clients_divs WHERE dlt is null AND id = ? LIMIT 1;", [$client_div_id]);
}
public static function getCDivByName($name)
{
return DB::select("SELECT * FROM t_clients_divs WHERE dlt is null AND name = ? LIMIT 2;", [$name]);
}
public static function addCDiv($data)
{
$client_div_id = DB::table("t_clients_divs")->insertGetId($data);
return $client_div_id;
}
public static function updateCDiv($client_div_id, $data)
{
return DB::table("t_clients_divs")->where("id", $client_div_id)->update($data);
}
public static function deleteCDiv($client_div_id)
{
return DB::table("t_clients_divs")->where("id", $client_div_id)->delete();
}
}

149
app/Models/ConfRates.php Executable file
View File

@ -0,0 +1,149 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ConfRates extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const UNIT_DAY = 1;
const LANE_EARTH = 1;
const LANE_SEA = 2;
const CRT_TYPE_SYSTEM = 0;
const CRT_TYPE_ADMIN = 1;
const defaultSelectedRates = "
rates.*
,(SELECT name FROM t_conf_lanes WHERE id = rates.lane LIMIT 1) as lane_name
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = rates.origin_prov LIMIT 1) as origin_prov_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = rates.origin_city LIMIT 1) as origin_city_name
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = rates.dest_prov LIMIT 1) as dest_prov_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = rates.dest_city LIMIT 1) as dest_city_name
,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = rates.dest_district LIMIT 1) as dest_district_name
,u.first_name as vdr_name,u.email as vdr_mail,vt.name as vhc_type_name
";
public static function listRates()
{
return DB::select("SELECT "
. ConfRates::defaultSelectedRates . "
FROM t_conf_rates as rates
LEFT JOIN t_users as u ON rates.vdr_id = u.id
LEFT JOIN t_vehicles_types as vt ON rates.vhc_type = vt.id
WHERE rates.dlt is null;");
}
public static function showRateById($rid)
{
return DB::select("SELECT "
. ConfRates::defaultSelectedRates . "
FROM t_conf_rates as rates
LEFT JOIN t_users as u ON rates.vdr_id = u.id
LEFT JOIN t_vehicles_types as vt ON rates.vhc_type = vt.id
WHERE rates.dlt is null AND rates.id = ?
LIMIT 1;", [$rid]);
}
public static function getRates()
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null;");
}
public static function getRateById($rid)
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND id = ? LIMIT 1;", [$rid]);
}
public static function getRateByCode($code)
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
// // start packing list data
// public static function getRateByDestCity($ori_prid, $dest_ktid)
// {
// return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND is_active = " . ConfRates::IS_ACTIVE . " AND vdr_id != 0 AND vhc_type != 0 AND origin_prov = ? AND dest_city = ? GROUP BY long_time,sell_cbm,sell_kg ORDER BY fast_time ASC;", [$ori_prid, $dest_ktid]);
// }
// public static function getRateByDestDistrict($ori_prid, $dest_kcid)
// {
// return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND is_active = " . ConfRates::IS_ACTIVE . " AND vdr_id != 0 AND vhc_type != 0 AND origin_prov = ? AND dest_district = ? GROUP BY long_time,sell_cbm,sell_kg ORDER BY fast_time ASC;", [$ori_prid, $dest_kcid]);
// }
// // end packing list data
// // start without packing list data
public static function getRateByDestCity($ori_prid, $dest_ktid)
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND is_active = " . ConfRates::IS_ACTIVE . " AND vdr_id != 0 AND vhc_type != 0 AND origin_prov = ? AND dest_city = ? GROUP BY long_time,sell_ftl ORDER BY fast_time ASC;", [$ori_prid, $dest_ktid]);
}
public static function getRateByDestDistrict($ori_prid, $dest_kcid)
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND is_active = " . ConfRates::IS_ACTIVE . " AND vdr_id != 0 AND vhc_type != 0 AND origin_prov = ? AND dest_district = ? GROUP BY long_time,sell_ftl ORDER BY fast_time ASC;", [$ori_prid, $dest_kcid]);
}
// // end without packing list data
public static function getUniqRate($filter = [])
{
$params = [];
$select = '';
$where = '';
$join = '';
if (isset($filter['origin_prov_dest_ktid_dest_kcid_vhc_type_sell_ftl_long_time'])) {
$where .= ' AND ((origin_prov = ? AND dest_city = ?) OR (origin_prov = ? AND dest_district = ?)) AND vhc_type = ? AND sell_ftl = ? AND long_time = ?';
array_push($params, $filter['origin_prov'], $filter['dest_city'], $filter['origin_prov'], $filter['dest_district'], $filter['vhc_type'], $filter['sell_ftl'], $filter['long_time']);
}
if (isset($filter['is_active'])) {
$where .= ' AND rate.is_active = ?';
$params[] = $filter['is_active'];
}
return DB::select("SELECT
rate.*
$select
FROM t_conf_rates as rate
$join
WHERE rate.dlt is null
$where
ORDER BY fast_time ASC;", $params);
}
public static function checkVhcType($type_id)
{
return DB::select("SELECT * FROM t_conf_rates WHERE dlt is null AND vhc_type = ? LIMIT 1;", [$type_id]);
}
public static function addRate($data)
{
$rid = DB::table("t_conf_rates")->insertGetId($data);
return $rid;
}
public static function updateRate($rid, $data)
{
return DB::table("t_conf_rates")->where("id", $rid)->update($data);
}
public static function deleteRate($rid)
{
return DB::table("t_conf_rates")->where("id", $rid)->delete();
}
/**
* t_conf_lane
*/
public static function getLanesActive()
{
return DB::select("SELECT * FROM t_conf_lanes WHERE dlt is null AND is_active = 1;");
}
}

104
app/Models/ConfTruckTypes.php Executable file
View File

@ -0,0 +1,104 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ConfTruckTypes extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const IS_PUBLISH = 1;
const IS_UNPUBLISH = 2;
const defaultSelectedTruckTypes = "
tt.*
,vt.name as type_name,vt.desc as type_desc
";
public static function listTruckTypes($isActive = 0, $filter = [])
{
$params = [];
$whereIsActive = '';
if ($isActive != 0) {
$whereIsActive = ' AND vt.is_active = ' . ConfTruckTypes::IS_ACTIVE;
}
if (isset($filter['is_publish'])) {
$whereIsActive = ' AND vt.is_publish = ?';
$params[] = $filter['is_publish'];
}
return DB::select("SELECT " . ConfTruckTypes::defaultSelectedTruckTypes . " FROM t_conf_truck_types as tt LEFT JOIN t_vehicles_types as vt ON tt.type_id = vt.id WHERE tt.dlt is null " . $whereIsActive . " ;", $params);
}
public static function listTruckTypesRates($isActive = 0, $lane)
{
$params = [];
$params[] = $lane;
$whereIsActive = '';
if ($isActive != 0) {
$whereIsActive = ' AND vt.is_active = ' . ConfTruckTypes::IS_ACTIVE;
}
return DB::select("SELECT "
. ConfTruckTypes::defaultSelectedTruckTypes . "
FROM t_conf_truck_types as tt
LEFT JOIN t_vehicles_types as vt ON tt.type_id = vt.id
INNER JOIN t_conf_rates as rate ON tt.type_id = rate.vhc_type
WHERE tt.dlt is null "
. $whereIsActive . "
AND rate.lane = ?
GROUP BY vhc_type
;", $params);
}
public static function showTruckTypeById($ttid)
{
return DB::select("SELECT " . ConfTruckTypes::defaultSelectedTruckTypes . " FROM t_conf_truck_types as tt LEFT JOIN t_vehicles_types as vt ON tt.type_id = vt.id WHERE tt.dlt is null AND tt.id = ? LIMIT 1;", [$ttid]);
}
public static function getTruckTypeByName($type_name)
{
return DB::select("SELECT " . ConfTruckTypes::defaultSelectedTruckTypes . " FROM t_conf_truck_types as tt LEFT JOIN t_vehicles_types as vt ON tt.type_id = vt.id WHERE tt.dlt is null AND vt.name LIKE ? LIMIT 2;", ['%'.$type_name.'%']);
}
public static function addTruckType($data)
{
$ttid = DB::table("t_conf_truck_types")->insertGetId($data);
return $ttid;
}
public static function updateTruckType($ttid, $data)
{
return DB::table("t_conf_truck_types")->where("id", $ttid)->update($data);
}
public static function deleteTruckType($ttid)
{
return DB::table("t_conf_truck_types")->where("id", $ttid)->delete();
}
/**
* t_vehicles_types
*/
public static function getTypeById($id)
{
return DB::select("SELECT * FROM t_vehicles_types WHERE id = ? LIMIT 1;", [$id]);
}
public static function addTypes($data)
{
return DB::table("t_vehicles_types")->insertGetId($data);
}
public static function updtTypes($tid, $data)
{
return DB::table("t_vehicles_types")->where("id", $tid)->update($data);
}
}

65
app/Models/Dana.php Executable file
View File

@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Dana extends Model
{
const defaultSelectedDana = "
dana.*
";
const PK_ID = 1;
const MINIMUM_AMT = 1000000; // 9M
public static function listDana($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['id'])) {
$where .= ' AND dana.id = ?';
$params[] = $filter['id'];
}
return DB::select("SELECT "
. Dana::defaultSelectedDana . "
$select
FROM t_dana as dana
$join
WHERE dana.id is not null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function getDana()
{
return DB::select("SELECT * FROM t_dana WHERE id is not null;");
}
public static function getDanaById($id)
{
return DB::select("SELECT * FROM t_dana WHERE id is not null AND id = ? LIMIT 1;", [$id]);
}
public static function addDana($data)
{
$pid = DB::table("t_dana")->insertGetId($data);
return $pid;
}
public static function updateDana($id, $data)
{
return DB::table("t_dana")->where("id", $id)->update($data);
}
public static function deleteDana($id)
{
return DB::table("t_dana")->where("id", $id)->delete();
}
}

107
app/Models/DataTypes.php Executable file
View File

@ -0,0 +1,107 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class DataTypes extends Model
{
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
const defaultSelectedDataTypes = "
dtypes.*
";
public static function listDataTypes($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['is_active'])) {
$where .= ' AND dtypes.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. DataTypes::defaultSelectedDataTypes . "
$select
FROM t_datatypes as dtypes
$join
WHERE dtypes.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function showDataType($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['data_types_id'])) {
$where .= ' AND dtypes.id = ?';
$params[] = $filter['data_types_id'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. DataTypes::defaultSelectedDataTypes . "
$select
FROM t_datatypes as dtypes
$join
WHERE dtypes.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function getDataTypes()
{
return DB::select("SELECT * FROM t_datatypes WHERE dlt is null;");
}
public static function getDataTypeById($data_types_id)
{
return DB::select("SELECT * FROM t_datatypes WHERE dlt is null AND id = ? LIMIT 1;", [$data_types_id]);
}
public static function getDataTypeByCode($code)
{
return DB::select("SELECT * FROM t_datatypes WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getDataTypeByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_datatypes WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addDataType($data)
{
$data_types_id = DB::table("t_datatypes")->insertGetId($data);
return $data_types_id;
}
public static function updateDataType($data_types_id, $data)
{
return DB::table("t_datatypes")->where("id", $data_types_id)->update($data);
}
public static function deleteDataType($data_types_id)
{
return DB::table("t_datatypes")->where("id", $data_types_id)->delete();
}
}

110
app/Models/Devices.php Executable file
View File

@ -0,0 +1,110 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Devices extends Model
{
const MAX_DEVICE_ID = 16;
const TYPE_BUILT_IN = 1;
const TYPE_PORTABLE = 2;
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const IS_ASSIGNED = 1;
const IS_UNASSIGNED = 2;
const IS_AVAIL = 1;
const IS_UNAVAIL = 2;
const defaultSelectedDevices = "
devices.*,vhc.id as vhc_id,vhc.nopol1 as vhc_nopol1,vhc.nopol2 as vhc_nopol2,vhc.nopol3 as vhc_nopol3
";
public static function listDevices($filter = [])
{
$params = [];
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND devices.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['is_available'])) {
$where .= ' AND devices.is_available = ?';
$params[] = $filter['is_available'];
}
if (isset($filter['type'])) {
$where .= ' AND devices.type = ?';
$params[] = $filter['type'];
}
if (isset($filter['is_idle_yes'])) {
$where .= ' AND vhc.id is null';
}
if (isset($filter['is_idle_no'])) {
$where .= ' AND vhc.id is not null';
}
return DB::select("SELECT "
. Devices::defaultSelectedDevices . "
FROM t_devices as devices
LEFT JOIN t_vehicles as vhc ON devices.device_id = vhc.device_id
WHERE devices.dlt is null
$where
;", $params);
}
public static function showDeviceById($id)
{
return DB::select("SELECT "
. Devices::defaultSelectedDevices . "
FROM t_devices as devices
LEFT JOIN t_vehicles as vhc ON devices.device_id = vhc.device_id
WHERE devices.dlt is null AND devices.id = ?
LIMIT 1;", [$id]);
}
public static function getDevices()
{
return DB::select("SELECT * FROM t_devices WHERE dlt is null;");
}
public static function getDeviceById($id)
{
return DB::select("SELECT * FROM t_devices WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getDeviceByDeviceId($device_id)
{
return DB::select("SELECT * FROM t_devices WHERE dlt is null AND device_id = ? LIMIT 1;", [$device_id]);
}
public static function getDeviceBySimcard($simcard)
{
return DB::select("SELECT * FROM t_devices WHERE dlt is null AND simcard = ? LIMIT 1;", [$simcard]);
}
public static function addDevice($data)
{
$id = DB::table("t_devices")->insertGetId($data);
return $id;
}
public static function updateDevice($id, $data)
{
return DB::table("t_devices")->where("id", $id)->update($data);
}
public static function deleteDevice($id)
{
return DB::table("t_devices")->where("id", $id)->delete();
}
}

318
app/Models/Drivers.php Executable file
View File

@ -0,0 +1,318 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\Orders;
class Drivers extends Model
{
const DEFAULT_PHONE_CODE = 62;
const STTS_ACTIVE = 1;
const STTS_INACTIVE = 2;
// const IN_ORD_YES = 1;
// const IN_ORD_NO = 2;
const IN_ORD_YES = 2;
const IN_ORD_NO = 1;
private const defaultSelectDriver = "d.*,dt.*,d.id,d.crt,d.crt_by,d.updt,d.updt_by,d.dlt,d.dlt_by";
public static function listDrivers($auth, $filter = [])
{
$params = [];
$select = "";
$join = "";
$where = "";
if ($auth->role == Users::ROLE_VENDOR) {
$where .= " AND d.vendor_id = " . $auth->uid;
}
if (isset($filter["company"])) {
$where .= " AND client.id = ?";
$params[] = $filter["company"];
}
// d.nik,d.fullname,d.phone,d.phone_code,d.email,d.dob,d.age,d.gender,d.blood,d.fulladdress,d.crt,d.crt_by,d.updt,d.updt_by,
// dt.ktp_img,dt.npwp_img,dt.npwp_number,dt.npwp_string,dt.license_img,dt.license_number,dt.license_exp,dt.em_fullname,dt.em_phone,dt.em_phone_code,dt.em_relationship
return DB::select(
"SELECT
" .
self::defaultSelectDriver .
"
,client.c_name as company_name
" .
$select .
"
FROM t_drivers as d
INNER JOIN t_drivers_detail AS dt ON d.id = dt.did
LEFT JOIN t_users AS vdr ON d.vendor_id = vdr.id
LEFT JOIN t_clients AS client ON vdr.client_group_id = client.id
" .
$join .
"
WHERE d.dlt is null
" .
$where .
"
ORDER BY d.id ASC;",
$params
);
}
public static function getDrivers($auth, $filter = [])
{
$params = [];
$where_vendor = "";
$join_vendor = "";
if ($auth->role != Users::ROLE_ADMIN) {
$where_vendor .= " AND d.vendor_id = " . $auth->uid;
}
if (isset($filter["status"])) {
$where_vendor .= " AND d.status = ?";
array_push($params, $filter["status"]);
}
return DB::select(
"SELECT * FROM t_drivers as d WHERE dlt is null " .
$where_vendor .
";",
$params
);
}
public static function showDriverById($did)
{
return DB::select(
"SELECT
" .
self::defaultSelectDriver .
"
FROM t_drivers AS d
INNER JOIN t_drivers_detail AS dt ON d.id = dt.did
WHERE d.dlt is null AND d.id = ? LIMIT 1;",
[$did]
);
}
public static function getDriverById($did)
{
return DB::select(
"SELECT * FROM t_drivers WHERE dlt is null AND id = ? LIMIT 1;",
[$did]
);
}
public static function getDriverByEmail($email)
{
return DB::select(
"SELECT * FROM t_drivers WHERE dlt is null AND email = ? LIMIT 2;",
[$email]
);
}
public static function getDriverByPhone($phone)
{
return DB::select(
"SELECT * FROM t_drivers WHERE dlt is null AND phone = ? LIMIT 2;",
[$phone]
);
}
public static function getDriverByNik($nik)
{
return DB::select(
"SELECT * FROM t_drivers WHERE dlt is null AND nik = ? LIMIT 2;",
[$nik]
);
}
public static function getDriverByIdAllData($did)
{
return DB::select(
"SELECT
*,d.id as drv_id
FROM t_drivers as d
INNER JOIN t_drivers_detail as dt ON d.id = dt.did
WHERE d.dlt is null
AND d.id = ?
LIMIT 1;",
[$did]
);
}
public static function getDriversNoInOrder($auth, $filter = [])
{
$params = [];
$where_vendor = "";
$join_vendor = "";
if ($auth->role != Users::ROLE_ADMIN) {
$where_vendor .= " AND d.vendor_id = " . $auth->uid;
}
if (isset($filter["status"])) {
$where_vendor .= " AND d.status = ?";
array_push($params, $filter["status"]);
}
return DB::select(
"SELECT
d.*,ord.status as ord_status
FROM t_drivers as d
LEFT JOIN (SELECT MAX(ord_id) as max_ord_id,drv_id FROM t_orders_drivers GROUP BY drv_id) as ord_drv1 ON (d.id = ord_drv1.drv_id)
LEFT JOIN t_orders as ord ON (ord_drv1.max_ord_id = ord.id)
WHERE d.dlt is null
AND (ord.status is null OR ord.status IN (" .
Orders::STTS_CLIENT_PAY .
"," .
Orders::STTS_VENDOR_PAYED .
"," .
Orders::STTS_CLOSE .
"," .
Orders::STTS_CANCEL .
"))
" .
$where_vendor .
"
;",
$params
);
}
public static function getDriversNoInOrderNew($auth, $filter = [])
{
$params = [];
$where_vendor = "";
$join_vendor = "";
if ($auth->role != Users::ROLE_ADMIN) {
$where_vendor .= " AND d.vendor_id = " . $auth->uid;
}
if (isset($filter["status"])) {
$where_vendor .= " AND d.status = ?";
array_push($params, $filter["status"]);
}
return DB::select(
"SELECT
d.*
FROM t_drivers as d
WHERE d.dlt is null
AND d.is_in_ord = " .
Drivers::IN_ORD_NO .
"
" .
$where_vendor .
"
;",
$params
);
}
public static function likeName($name)
{
$params = ["%" . $name . "%"];
return DB::select(
"SELECT drv.*,drv_dtl.bank_id,drv_dtl.bank_code,drv_dtl.bank_name,drv_dtl.bank_short_name,drv_dtl.bank_branch_name,drv_dtl.bank_acc_number,drv_dtl.bank_acc_name FROM t_drivers as drv INNER JOIN t_drivers_detail as drv_dtl ON drv.id = drv_dtl.did WHERE dlt is null AND fullname LIKE ?;",
$params
);
}
public static function addDriver($data)
{
$did = DB::table("t_drivers")->insertGetId($data);
return $did;
}
public static function updateDriver($did, $data)
{
return DB::table("t_drivers")
->where("id", $did)
->update($data);
}
public static function deleteDriver($did)
{
return DB::table("t_drivers")
->where("id", $did)
->delete();
}
public static function listRelationships()
{
// ENUM('wife', 'husband', 'sister', 'brother', 'father', 'mother', 'uncle', 'aunt', 'daughter', 'children', 'grandfather', 'grandmother', 'nephew', 'niece', 'family', 'sibling', 'son', 'cousin')
return [
[
"id" => "wife",
"name" => "Wife",
],
[
"id" => "husband",
"name" => "Husband",
],
[
"id" => "sister",
"name" => "Sister",
],
[
"id" => "brother",
"name" => "Brother",
],
[
"id" => "father",
"name" => "Father",
],
[
"id" => "mother",
"name" => "Mother",
],
[
"id" => "uncle",
"name" => "Uncle",
],
[
"id" => "aunt",
"name" => "Aunt",
],
[
"id" => "cousin",
"name" => "Cousin",
],
[
"id" => "daughter",
"name" => "Daughter",
],
[
"id" => "son",
"name" => "Son",
],
[
"id" => "children",
"name" => "Children",
],
[
"id" => "grandfather",
"name" => "Grandfather",
],
[
"id" => "grandmother",
"name" => "Grandmother",
],
[
"id" => "nephew",
"name" => "Nephew",
],
[
"id" => "niece",
"name" => "Niece",
],
[
"id" => "family",
"name" => "Family",
],
[
"id" => "sibling",
"name" => "Sibling",
],
];
}
}

40
app/Models/DriversDetail.php Executable file
View File

@ -0,0 +1,40 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class DriversDetail extends Model
{
public static function getDetailByDid($did)
{
return DB::select("SELECT * FROM t_drivers_detail WHERE did = ? LIMIT 1;", [$did]);
}
public static function getDetailById($id)
{
return DB::select("SELECT * FROM t_drivers_detail WHERE id = ? LIMIT 1;", [$id]);
}
public static function addDetail($data)
{
$id = DB::table("t_drivers_detail")->insertGetId($data);
return $id;
}
public static function updateDetailByDid($id, $data)
{
return DB::table("t_drivers_detail")->where("did", $id)->update($data);
}
public static function updateDetail($id, $data)
{
return DB::table("t_drivers_detail")->where("id", $id)->update($data);
}
public static function deleteDetail($id)
{
return DB::table("t_drivers_detail")->where("id", $id)->delete();
}
}

87
app/Models/DrvPhoneDevices.php Executable file
View File

@ -0,0 +1,87 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class DrvPhoneDevices extends Model
{
// t_phone_devices
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
const IS_LOGOUT = 0;
const IS_LOGIN = 1;
public static function get($filter = [])
{
$select = '';
$where = '';
$params = [];
if (isset($filter['id'])) {
$where .= ' AND phn_drv.id = ?';
$params[] = $filter['id'];
}
if (isset($filter['device_id'])) {
$where .= ' AND phn_drv.device_id = ?';
$params[] = $filter['device_id'];
}
if (isset($filter['id'])) {
$where .= ' AND phn_drv.id = ?';
$params[] = $filter['id'];
}
if (isset($filter['uid'])) {
$where .= ' AND phn_drv.uid = ?';
$params[] = $filter['uid'];
}
if (isset($filter['drv_id'])) {
$where .= ' AND phn_drv.did = ?';
$params[] = $filter['drv_id'];
}
if (isset($filter['is_login'])) {
$where .= ' AND phn_drv.is_login = ?';
$params[] = $filter['is_login'];
}
if (isset($filter['is_active'])) {
$where .= ' AND phn_drv.is_active = ?';
$params[] = $filter['is_active'];
}
return DB::select("SELECT
phn_drv.*
$select
FROM t_phone_devices as phn_drv
WHERE phn_drv.dlt is null
$where
;", $params);
}
public static function add($data)
{
$id = DB::table("t_phone_devices")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_phone_devices")->where("id", $id)->update($data);
}
public static function updtByOrdDrvId($did, $data)
{
return DB::table("t_phone_devices")->where("did", $did)->update($data);
}
public static function dlt($id)
{
return DB::table("t_phone_devices")->where("id", $id)->delete();
}
public static function dltByOrdDrvId($did)
{
return DB::table("t_phone_devices")->where("did", $did)->delete();
}
}

60
app/Models/Dummy.php Executable file
View File

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Dummy extends Model
{
public static function addDummyTrack($data)
{
$id = DB::table("t_dummy_tracks")->insertGetId($data);
return $id;
}
public static function getByGpsId($gps_id)
{
return DB::select("SELECT * FROM t_dummy_tracks WHERE gps_id = ?;", [$gps_id]);
}
public static function updateDummyTrack($data)
{
return DB::table("t_dummy_tracks")->where("id", $data['id'])->update($data);
}
public static function deleteDummyTrack($data)
{
return DB::table("t_dummy_tracks")->where("id", $data['id'])->delete();
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------
public static function addDummyHub($data)
{
$id = DB::table("t_dummy_hubs")->insertGetId($data);
return $id;
}
/**
* https://stackoverflow.com/questions/574691/mysql-great-circle-distance-haversine-formula
* miles: 3958.756 || 3959
* km: 6371
* meters: 6371000
* more accurate using km/meters than miles i think ~ rafifmulia
*/
public static function nearestHubInCircle($lat, $lng)
{
$query = "SELECT id,name, ( 6371000 * acos( cos( radians( :lat1 ) ) * cos( radians( lat ) )
* cos( radians( lng ) - radians( :lng ) ) + sin( radians( :lat2 ) ) * sin(radians( lat )) ) ) AS distance
FROM t_dummy_hubs
HAVING distance <= 800
ORDER BY distance;";
$params = [
'lat1' => $lat,
'lat2' => $lat,
'lng' => $lng,
];
return DB::select($query, $params);
}
}

621
app/Models/Finance.php Executable file
View File

@ -0,0 +1,621 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\OrdersVendors;
use App\Models\Users;
use App\Models\Orders;
use App\Models\OrdersAItems;
use App\Models\OrdersInvoices;
class Finance extends Model
{
public static function listBillings($filter = [])
{
$params = [
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['ord_id'])) {
$where_where .= ' AND ord.id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$where_where .= ' AND ord.crt BETWEEN ? AND ?';
$params[] = $filter['start_date'];
$params[] = $filter['end_date'];
}
if (isset($filter['group_by'])) {
$group_by .= ' GROUP BY ' . $filter['group_by'];
}
return DB::select(
"SELECT
ord.id as ord_id,ord.code as ord_code,ord.status as ord_status
,(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_vdr = ? AND invc_to_client = ? AND is_bill_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_billing
,(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_vdr = ? AND invc_to_client = ? AND is_bill_paid = ? AND is_bill_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_payed
,(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_vdr = ? AND invc_to_client = ? AND is_bill_paid = ? AND is_bill_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_remaining
,ord.is_invc_paid,ord.invc_paid_at
,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name
,ord_drop.drop_name,ord_drop.drop_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name
,ord_c.c_name,ord_c.c_pt_name
" . $select_order . "
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
" . $join_join . "
WHERE ord.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
" . $where_where . "
" . $group_by . "
;",
$params
);
}
public static function summaryBillings($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
// for sum
$join_sum = '';
$where_sum = '';
$params_sum_totbilling = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totpayed = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totremaining = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,];
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$join_sum .= ' INNER JOIN t_orders as o ON a.ord_id = o.id';
$where_sum .= ' AND o.crt BETWEEN ? AND ?';
array_push($params_sum_totbilling, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totpayed, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totremaining, $filter['start_date'], $filter['end_date']);
}
// php spread operator was invented on 7.2
$params_real = array_merge($params_sum_totbilling, $params_sum_totpayed, $params_sum_totremaining, $params);
return DB::select(
"SELECT
-- (SELECT SUM(price) FROM t_orders WHERE dlt is null AND confirm_client_pay_at != 0) as total_billing
-- (SELECT SUM(price) FROM t_orders WHERE dlt is null) as total_billing -- sebelum ada fitur merge
(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_vdr = ? AND a.invc_to_client = ? AND a.is_bill_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_billing
,(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_vdr = ? AND a.invc_to_client = ? AND a.is_bill_paid = ? AND a.is_bill_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_payed
,(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_vdr = ? AND a.invc_to_client = ? AND a.is_bill_paid = ? AND a.is_bill_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_remaining
" . $select_order . "
FROM t_orders_a_items as ord_a
" . $join_join . "
WHERE ord_a.dlt is null
AND ord_a.is_active = " . OrdersAItems::IS_ACTIVE_YES . "
" . $where_where . "
LIMIT 1
;",
$params_real
);
}
public static function listPayments($filter = [])
{
$params = [
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['ord_id'])) {
$where_where .= ' AND ord.id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$where_where .= ' AND ord.crt BETWEEN ? AND ?';
$params[] = $filter['start_date'];
$params[] = $filter['end_date'];
}
if (isset($filter['group_by'])) {
$group_by .= ' GROUP BY ' . $filter['group_by'];
}
return DB::select(
"SELECT
ord.id as ord_id,ord.code as ord_code,ord.status as ord_status
,ord.group_code as ord_group_code
,(SELECT SUM(amt_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_client = ? AND calc_to_vdr = ? AND is_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_payment
,(SELECT SUM(amt_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_client = ? AND calc_to_vdr = ? AND is_aprv = ? AND is_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_payed
,(SELECT SUM(amt_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_client = ? AND calc_to_vdr = ? AND is_aprv = ? AND is_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_remaining
,ord.is_vdr_paid,ord.vdr_paid_at
,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name
,ord_drop.drop_name,ord_drop.drop_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name
,ord_c.c_name,ord_c.c_pt_name
,ord_vdr.vdr_name,ord_vdr.vdr_pt_name
" . $select_order . "
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
INNER JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id
" . $join_join . "
WHERE ord.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
" . $where_where . "
" . $group_by . "
;",
$params
);
}
// admin bank tetap terkalkulasi
// bagaimana caranya main item client tidak tecalc di pembayaran ? where column only_client is no
public static function summaryPayments($filter = [])
{
// general
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
// for sum
$join_sum = '';
$where_sum = '';
$params_sum_totpayment = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totpayed = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totremaining = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$join_sum .= ' INNER JOIN t_orders as o ON a.ord_id = o.id';
$where_sum .= ' AND o.crt BETWEEN ? AND ?';
array_push($params_sum_totpayment, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totpayed, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totremaining, $filter['start_date'], $filter['end_date']);
}
// php spread operator was invented on 7.2
$params_real = array_merge($params_sum_totpayment, $params_sum_totpayed, $params_sum_totremaining, $params);
return DB::select(
"SELECT
-- (SELECT SUM(buy_price) FROM t_orders WHERE dlt is null) as total_payment
(SELECT SUM(a.amt_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_client = ? AND a.calc_to_vdr = ? AND a.is_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_payment
,(SELECT SUM(a.amt_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_client = ? AND a.calc_to_vdr = ? AND a.is_aprv = ? AND a.is_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_payed
,(SELECT SUM(a.amt_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_client = ? AND a.calc_to_vdr = ? AND a.is_aprv = ? AND a.is_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_remaining
" . $select_order . "
FROM t_orders_a_items as ord_a
" . $join_join . "
WHERE ord_a.dlt is null
AND ord_a.is_active = " . OrdersAItems::IS_ACTIVE_YES . "
" . $where_where . "
LIMIT 1
;",
$params_real
);
}
public static function listAdtItemsPayments($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['is_access_by_admin'])) {
$where_where .= ' AND crt_type = ?';
$params[] = OrdersAItems::CRT_TYPE_ADMIN;
}
if (isset($filter['ord_id'])) {
// $where_where .= ' AND ord.id = ?';
$where_where .= ' AND ord_a_item.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['ord_ids'])) {
$binds_ids = "";
foreach ($filter['ord_ids'] as $k => $v) {
$binds_ids .= "?,";
$params[] = $v;
}
if (substr($binds_ids, -1) === ',') {
$binds_ids = substr($binds_ids, 0, -1);
}
$where_where .= " AND ord_a_item.ord_id IN ($binds_ids)";
}
if (isset($filter['is_aprv'])) {
$where_where .= ' AND ord_a_item.is_aprv = ?';
$params[] = $filter['is_aprv'];
}
if (isset($filter['get_user_crt'])) {
$select_order .= ',ucrt.first_name as ucrt_name';
$join_join .= ' LEFT JOIN t_users as ucrt ON ord_a_item.crt_by = ucrt.id';
}
if (isset($filter['get_user_rjct'])) {
$select_order .= ',urjct.first_name as urjct_name,urjct_bill.first_name as urjct_bill_name';
$join_join .= ' LEFT JOIN t_users as urjct ON ord_a_item.rjct_by = urjct.id';
$join_join .= ' LEFT JOIN t_users as urjct_bill ON ord_a_item.rjct_bill_by = urjct_bill.id';
}
$params[] = OrdersAItems::ONLY_CLIENT_NO;
$params[] = OrdersAItems::CALC_TO_VDR_YES;
$params[] = OrdersAItems::IS_HIDDEN_NO;
$params[] = OrdersAItems::STTS_MERGE_NO;
$params[] = OrdersAItems::STTS_MERGE_RESULT;
if (isset($filter['group_by'])) {
$group_by .= ' GROUP BY ' . $filter['group_by'];
}
return DB::select(
"SELECT
ord_a_item.id as ord_a_item_id,ord_a_item.v_termin_id,ord_a_item.ord_id,ord_a_item.ord_code
,ord_a_item.desc,ord_a_item.a_item_type,ord_a_item.crt_type as a_item_crt_type
,ord_a_item.crt as a_item_crt_at
,ord_a_item.amt_base_flat,ord_a_item.unit_qty,ord_a_item.amt_tax_type,ord_a_item.amt_total_tax_flat,ord_a_item.amt_total_flat
,ord_a_item.ddln_pay_at,ord_a_item.ddln_pay_type
,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.paid_method,ord_a_item.paid_by
,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at,ord_a_item.paid_bill_method,ord_a_item.paid_bill_by
,ord_a_item.bank_name,ord_a_item.bank_short_name,ord_a_item.bank_acc_number,ord_a_item.bank_acc_name
,ord_a_item.invc_to_client
,ord_a_item.img_proof_submission
,ord_a_item.is_aprv,ord_a_item.rjct_at,ord_a_item.rjct_by,ord_a_item.rjct_bill_at,ord_a_item.rjct_bill_by
-- ,ord_a_item.is_merge_to,ord_a_item.merge_to_a_id,ord_a_item.merge_to_ord_id,ord_a_item.merge_to_ord_code,ord_a_item.merge_to_at
-- ,ord_a_item.is_merge_from,ord_a_item.merge_from_a_id,ord_a_item.merge_from_ord_id,ord_a_item.merge_from_ord_code,ord_a_item.merge_from_at
,ord_a_item.stts_merge,ord_a_item.merge_to_code,ord_a_item.group_merge_code,ord_a_item.merge_at
,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr
-- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name
-- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name
,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.chk_at as drop_chk_at
-- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name
-- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name
,ord_c.c_name,ord_c.c_pt_name
" . $select_order . "
FROM t_orders_a_items as ord_a_item
INNER JOIN t_orders as ord ON ord_a_item.ord_id = ord.id
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
" . $join_join . "
WHERE ord.dlt is null
AND ord_a_item.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
AND ord_a_item.is_active = " . OrdersAItems::IS_ACTIVE_YES . "
" . $where_where . "
AND ord_a_item.only_client = ?
AND ord_a_item.calc_to_vdr = ?
AND ord_a_item.is_hidden = ?
AND ord_a_item.stts_merge IN (?,?)
" . $group_by . "
;",
$params
);
}
public static function listAdtItemsBillings($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['ord_id'])) {
$where_where .= ' AND ord.id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['is_bill_aprv'])) {
$where_where .= ' AND ord_a_item.is_bill_aprv = ?';
$params[] = $filter['is_bill_aprv'];
}
$params[] = OrdersAItems::ONLY_VDR_NO;
$params[] = OrdersAItems::INVC_TO_CLIENT_YES;
$params[] = OrdersAItems::IS_HIDDEN_NO;
$params[] = OrdersAItems::STTS_MERGE_NO;
$params[] = OrdersAItems::STTS_MERGE_RESULT;
if (isset($filter['group_by'])) {
$group_by .= ' GROUP BY ' . $filter['group_by'];
}
return DB::select(
"SELECT
ord_a_item.id as ord_a_item_id,ord_a_item.v_termin_id,ord_a_item.ord_id,ord_a_item.ord_code
,ord_a_item.desc,ord_a_item.a_item_type,ord_a_item.crt_type as a_item_crt_type
,ord_a_item.unit_type,ut.name as unit_type_name,ord_a_item.unit_qty
,ord_a_item.amt_bill_base_flat,ord_a_item.unit_qty,ord_a_item.amt_bill_total_flat
,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.paid_method,ord_a_item.paid_by
,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at,ord_a_item.paid_bill_method,ord_a_item.paid_bill_by
,ord_termin.id as c_group_termin_id,ord_termin.termin_is_paid,ord_termin.termin_paid_at
,ord_termin.sequence as termin_sequence,ord_termin.termin_ddln_type
,ord_termin.termin_tax_type,ord_termin.termin_tax_ppn_percent,ord_termin.termin_tax_ppn_flat,ord_termin.termin_tax_pph_percent,ord_termin.termin_tax_pph_flat
,ord_termin.amt_bill_confirm,ord_termin.amt_bill_confirm_note
,ord_invc.id as invc_id,ord_invc.code as invc_code
,ord_invc.amt_disc_type as invc_disc_type,ord_invc.amt_disc_percent as invc_disc_percent,ord_invc.amt_disc_flat as invc_disc_flat
,ord_invc.is_gnrt_invc
,ord_a_item.is_aprv,ord_a_item.rjct_at,ord_a_item.rjct_by,ord_a_item.rjct_bill_at,ord_a_item.rjct_bill_by
,ord_a_item.stts_merge,ord_a_item.merge_to_code,ord_a_item.group_merge_code,ord_a_item.merge_at
,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr
-- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name
-- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name
,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.chk_at as drop_chk_at
-- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name
-- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name
,ord_c.c_id,ord_c.c_name,ord_c.c_pt_id,ord_c.c_pt_name
" . $select_order . "
FROM t_orders_a_items as ord_a_item
INNER JOIN t_orders as ord ON ord_a_item.ord_id = ord.id
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
INNER JOIN t_orders_termins as ord_termin ON ord_a_item.c_termin_id = ord_termin.id
LEFT JOIN t_orders_invoices as ord_invc ON ord_termin.id = ord_invc.c_termin_id
LEFT JOIN t_unit_types as ut ON ord_a_item.unit_type = ut.id
" . $join_join . "
WHERE ord.dlt is null
AND ord_a_item.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
AND ord_a_item.is_active = " . OrdersAItems::IS_ACTIVE_YES . "
" . $where_where . "
AND only_vdr = ?
AND invc_to_client = ?
AND ord_a_item.is_hidden = ?
AND ord_a_item.stts_merge IN (?,?)
" . $group_by . "
;",
$params
);
}
public static function listLedgerBl($filter = [])
{
$params = [
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['ord_id'])) {
$where_where .= ' AND ord.id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['with_items'])) {
$select_order .= "
,ord_a_item.id as ord_a_item_id
,ord_a_item.a_item_type,ord_a_item.desc as item_desc,ord_a_item.unit_type,unit_type.name as unit_type_name,ord_a_item.unit_qty
,ord_a_item.amt_base_flat,ord_a_item.amt_result_flat,ord_a_item.amt_total_flat
,ord_a_item.amt_bill_base_flat,ord_a_item.amt_bill_result_flat,ord_a_item.amt_bill_total_flat
,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at
,ord_a_item.invc_to_client,ord_a_item.calc_to_vdr,ord_a_item.is_adm_price,ord_a_item.only_client,ord_a_item.only_vdr,ord_a_item.is_hidden,ord_a_item.is_tax,ord_a_item.is_disc
,ord_a_item.is_aprv,ord_a_item.is_bill_aprv
";
$join_join .= "
INNER JOIN t_orders_a_items as ord_a_item ON ord.id = ord_a_item.ord_id
LEFT JOIN t_unit_types as unit_type ON ord_a_item.unit_type = unit_type.id
";
// perlu diperbaiki cara if di query, jika kalkulasi ke vendor maka is_aprv = , jika ke client is_bill_aprv = 1
$where_where .= ' AND ord_a_item.dlt is null AND (ord_a_item.calc_to_vdr = ' . OrdersAItems::CALC_TO_VDR_YES . ' OR ord_a_item.invc_to_client = ' . OrdersAItems::INVC_TO_CLIENT_YES . ') AND (ord_a_item.is_aprv = ' . OrdersAItems::IS_APRV_YES . ' OR ord_a_item.is_bill_aprv = ' . OrdersAItems::IS_APRV_YES . ')';
}
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$where_where .= ' AND ord.crt BETWEEN ? AND ?';
$params[] = $filter['start_date'];
$params[] = $filter['end_date'];
}
if (isset($filter['group_by'])) {
$group_by .= ' GROUP BY ' . $filter['group_by'];
}
return DB::select(
"SELECT
ord.id as ord_id,ord.code as ord_code,ord.status as ord_status
,@total_in:=(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_vdr = ? AND invc_to_client = ? AND is_bill_aprv = ? AND is_bill_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_in
,@total_out:=(SELECT SUM(amt_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_client = ? AND calc_to_vdr = ? AND is_aprv = ? AND is_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_out
,(IFNULL(@total_in, 0) - IFNULL(@total_out, 0)) as total_bl
,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name
,ord_drop.drop_name,ord_drop.drop_addr
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name
,ord_c.c_name,ord_c.c_pt_name
,ord_vdr.vdr_name,ord_vdr.vdr_pt_name
" . $select_order . "
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
INNER JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id
" . $join_join . "
WHERE ord.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
" . $where_where . "
" . $group_by . "
;",
$params
);
}
public static function summaryLedgerBl($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
// for sum
$join_sum = '';
$where_sum = '';
$params_sum_totin = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totout = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
if (isset($filter['start_date']) && isset($filter['end_date'])) {
$join_sum .= ' INNER JOIN t_orders as o ON a.ord_id = o.id';
$where_sum .= ' AND o.crt BETWEEN ? AND ?';
array_push($params_sum_totin, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totout, $filter['start_date'], $filter['end_date']);
}
// php spread operator was invented on 7.2
$params_real = array_merge($params_sum_totin, $params_sum_totout, $params);
return DB::select(
"SELECT
@total_in:=(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_vdr = ? AND a.invc_to_client = ? AND a.is_bill_aprv = ? AND a.is_bill_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_in
,@total_out:=(SELECT SUM(amt_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_client = ? AND a.calc_to_vdr = ? AND a.is_aprv = ? AND a.is_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_out
,(IFNULL(@total_in, 0) - IFNULL(@total_out, 0)) as total_bl
" . $select_order . "
FROM t_orders_a_items as ord_a
" . $join_join . "
WHERE ord_a.dlt is null
AND ord_a.is_active = " . OrdersAItems::IS_ACTIVE_YES . "
" . $where_where . "
LIMIT 1
;",
$params_real
);
}
/**
* Baru saja pembayaran dilunaskan baik dari client / vendor
* false => error
* 0 => not paid, 1 => just paid off, 2 => paid off
*/
public static function checkJustPaidOff($ord_id)
{
$order = Orders::showOrder(['id' => $ord_id]);
if (count($order) < 1 || $order === false) return false;
$out = [
'invc_paid' => 0,
'vdr_paid' => 0,
'invc_vdr_paid' => 0,
];
$currentBill = Finance::listBillings(['ord_id' => $ord_id]);
$currentPay = Finance::listPayments(['ord_id' => $ord_id]);
// paid off
if ($currentBill[0]->total_billing === $currentBill[0]->total_payed || $currentPay[0]->total_payment === $currentPay[0]->total_payed) {
if ($currentBill[0]->total_billing === $currentBill[0]->total_payed) {
// just paid off
if ($order[0]->is_invc_paid !== Orders::IS_PAID_YES) {
$out['invc_paid'] = 1;
} else {
$out['invc_paid'] = 2;
}
}
if ($currentPay[0]->total_payment === $currentPay[0]->total_payed) {
// just paid off
if ($order[0]->is_vdr_paid !== Orders::IS_PAID_YES) {
$out['vdr_paid'] = 1;
} else {
$out['vdr_paid'] = 2;
}
}
if ($currentBill[0]->total_billing === $currentBill[0]->total_payed && $currentPay[0]->total_payment === $currentPay[0]->total_payed) {
// just paid off
if ($out['invc_paid'] === 1 || $out['vdr_paid'] === 1) {
$out['invc_vdr_paid'] = 1;
} else {
$out['invc_vdr_paid'] = 2;
}
}
}
return $out;
}
public static function updtChangeInvc($c_termin_id)
{
$ord_invc = OrdersInvoices::getByTerminId($c_termin_id);
if ($ord_invc !== false && count($ord_invc) > 0) {
OrdersInvoices::updt($ord_invc[0]->id, [
'is_gnrt_invc' => OrdersInvoices::IS_GNRT_INVC_NO,
]);
return true;
}
return false;
}
public static function availOrdToMerge($filter = [])
{
$params = [];
$select = '';
$join = '';
$where = '';
$group_by = '';
$where .= ' AND ord.stts_merge IN (?,?)';
$params[] = OrdersAItems::STTS_MERGE_NO;
$params[] = OrdersAItems::STTS_MERGE_RESULT;
if (isset($filter['except_ord_id'])) {
$where .= ' AND ord.id = ?';
$params[] = $filter['except_ord_id'];
}
return DB::select(
"SELECT
ord.*
" . $select . "
FROM t_orders as ord
" . $join . "
WHERE ord.dlt is null
AND ord.stts_merge = " . Orders::STTS_MERGE_NO . "
" . $where . "
ORDER BY ord.id DESC
" . $group_by . "
LIMIT 100
;",
$params
);
}
}

65
app/Models/Insurances.php Executable file
View File

@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Insurances extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const defaultSelectedInsurances = "
insurances.*
";
public static function listInsurances()
{
return DB::select("SELECT "
. Insurances::defaultSelectedInsurances . "
FROM t_insurances as insurances
WHERE insurances.dlt is null;");
}
public static function showInsuranceById($iid)
{
return DB::select("SELECT "
. Insurances::defaultSelectedInsurances . "
FROM t_insurances as insurances
WHERE insurances.dlt is null AND insurances.id = ?
LIMIT 1;", [$iid]);
}
public static function getInsurances()
{
return DB::select("SELECT * FROM t_insurances WHERE dlt is null;");
}
public static function getInsuranceById($iid)
{
return DB::select("SELECT * FROM t_insurances WHERE dlt is null AND id = ? LIMIT 1;", [$iid]);
}
public static function getInsurancesByRangeBeneficiaryAndActive($price)
{
return DB::select("SELECT * FROM t_insurances WHERE dlt is null AND is_active = " . Insurances::IS_ACTIVE . " AND ((premi_min_price >= ? AND premi_max_price <= ?) OR (premi_min_price <= ? AND premi_max_price >= ?)) ORDER BY premi_price DESC;", [$price, $price, $price, $price]);
}
public static function addInsurance($data)
{
$iid = DB::table("t_insurances")->insertGetId($data);
return $iid;
}
public static function updateInsurance($iid, $data)
{
return DB::table("t_insurances")->where("id", $iid)->update($data);
}
public static function deleteInsurance($iid)
{
return DB::table("t_insurances")->where("id", $iid)->delete();
}
}

106
app/Models/LogbookKeys.php Executable file
View File

@ -0,0 +1,106 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class LogbookKeys extends Model
{
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
const defaultSelectedLgbKeys = "
lgb_key.*
";
public static function listLgbKeys($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['is_active'])) {
$where .= ' AND lgb_key.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. LogbookKeys::defaultSelectedLgbKeys . "
$select
FROM t_lgb_keys as lgb_key
$join
WHERE lgb_key.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function showLgbKey($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['lgb_key_id'])) {
$where .= ' AND lgb_key.id = ?';
$params[] = $filter['lgb_key_id'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. LogbookKeys::defaultSelectedLgbKeys . "
$select
FROM t_lgb_keys as lgb_key
$join
WHERE lgb_key.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function getLgbKeys()
{
return DB::select("SELECT * FROM t_lgb_keys WHERE dlt is null;");
}
public static function getLgbKeyById($lgb_key_id)
{
return DB::select("SELECT * FROM t_lgb_keys WHERE dlt is null AND id = ? LIMIT 1;", [$lgb_key_id]);
}
public static function getLgbKeyByCode($code)
{
return DB::select("SELECT * FROM t_lgb_keys WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getLgbKeyByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_lgb_keys WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addLgbKey($data)
{
$lgb_key_id = DB::table("t_lgb_keys")->insertGetId($data);
return $lgb_key_id;
}
public static function updateLgbKey($lgb_key_id, $data)
{
return DB::table("t_lgb_keys")->where("id", $lgb_key_id)->update($data);
}
public static function deleteLgbKey($lgb_key_id)
{
return DB::table("t_lgb_keys")->where("id", $lgb_key_id)->delete();
}
}

107
app/Models/LogbookTypes.php Executable file
View File

@ -0,0 +1,107 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class LogbookTypes extends Model
{
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
const defaultSelectedLgbTypes = "
lgb_type.*
";
public static function listLgbTypes($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['is_active'])) {
$where .= ' AND lgb_type.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. LogbookTypes::defaultSelectedLgbTypes . "
$select
FROM t_lgb_types as lgb_type
$join
WHERE lgb_type.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function showLgbType($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['lgb_type_id'])) {
$where .= ' AND lgb_type.id = ?';
$params[] = $filter['lgb_type_id'];
}
if (isset($filter['group_by'])) $where .= ' GROUP BY ' . $filter['group_by'];
if (isset($filter['order_by'])) $where .= ' ORDER BY ' . $filter['order_by'];
if (isset($filter['limit'])) $where .= ' LIMIT ' . $filter['limit'];
return DB::select("SELECT "
. LogbookTypes::defaultSelectedLgbTypes . "
$select
FROM t_lgb_types as lgb_type
$join
WHERE lgb_type.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function getLgbTypes()
{
return DB::select("SELECT * FROM t_lgb_types WHERE dlt is null;");
}
public static function getLgbTypeById($lgb_type_id)
{
return DB::select("SELECT * FROM t_lgb_types WHERE dlt is null AND id = ? LIMIT 1;", [$lgb_type_id]);
}
public static function getLgbTypeByCode($code)
{
return DB::select("SELECT * FROM t_lgb_types WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getLgbTypeByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_lgb_types WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addLgbType($data)
{
$lgb_type_id = DB::table("t_lgb_types")->insertGetId($data);
return $lgb_type_id;
}
public static function updateLgbType($lgb_type_id, $data)
{
return DB::table("t_lgb_types")->where("id", $lgb_type_id)->update($data);
}
public static function deleteLgbType($lgb_type_id)
{
return DB::table("t_lgb_types")->where("id", $lgb_type_id)->delete();
}
}

635
app/Models/Orders.php Executable file
View File

@ -0,0 +1,635 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\OrdersVendors;
use App\Models\Users;
class Orders extends Model
{
const ONE_KG_ONE_CBM = 1328;
const TYPE_FCL = 1;
const TYPE_LCL = 2;
const STTS_WAIT = 1;
const STTS_CONFIRM = 21;
const STTS_HAVE_GET_VHC = 22;
const STTS_PCK = 2;
const STTS_GO = 3;
const STTS_ARV = 4;
const STTS_DROP = 5;
const STTS_CLIENT_PAY = 6;
const STTS_VENDOR_PAYED = 8;
const STTS_CLOSE = 10;
const STTS_CANCEL = 11;
const IS_FIX_PRICE_NO = 0;
const IS_FIX_PRICE_YES = 1;
const CANCEL_TYPE_IGNORE = 1;
const CANCEL_TYPE_CLIENT = 2;
const CANCEL_TYPE_VDR_NOT_READY = 3;
const IS_ACCIDENT_NO = 0;
const IS_ACCIDENT_YES = 1;
const CHK_STTS_WAITING = 0;
const CHK_STTS_HAS_PICKUP = 1;
const CHK_STTS_HAS_DROP = 3;
const IS_PAID_NO = 0;
const IS_PAID_YES = 1;
const IS_ACTIVE_NO = 0;
const IS_ACTIVE_YES = 1;
const CRT_TYPE_ORDER_CLIENT = 1; // normal_via_client;
const CRT_TYPE_ORDER_ADMIN = 2; // normal_via_admin;
const CRT_TYPE_ORDER_ADMIN_SPECIAL = 3; // special_via_admin;
// merge per trx
const STTS_MERGE_NO = 0;
const STTS_MERGE_TO = 1;
const STTS_MERGE_RESULT = 2;
/**
* column merge disini untuk merge per trx
*/
const defaultSelectedOrders = "
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_pck.pck_name,ord_pck.stts_pck,ord_pck.pck_addr
,ord_drop.drop_name,ord_drop.stts_drop,ord_drop.drop_addr
,ord_c.c_name
,ord_vdr.vdr_name
,ord_drv.drv_name
,ord_vhc.vhc_id,ord_vhc.vhc_name,ord_vhc.vhc_nopol1,ord_vhc.vhc_nopol2,ord_vhc.vhc_nopol3
,ord_rate.id as ord_rate_id
";
const defaultWhereOrders = "
WHERE ord.dlt is null
";
const defaultSelectedOrdersDetail = "
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_pck.id as ord_pck_id,ord_pck.pck_id as ord_pck_zone_id,ord_pck.pck_name,ord_pck.pck_addr,ord_pck.set_pck_at,ord_pck.pck_at,ord_pck.pck_enter_at,ord_pck.pck_leave_at
,ord_drop.id as ord_drop_id,ord_drop.drop_id as ord_drop_zone_id,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.drop_at,ord_drop.drop_enter_at,ord_drop.drop_leave_at
,ord_c.id as ord_client_id,ord_c.c_id,ord_c.c_name,ord_c.c_phone_code,ord_c.c_phone_val,ord_c.c_mail,ord_c.prefer_truck_type
,ord_vdr.id as ord_vdr_id,ord_vdr.vdr_id,ord_vdr.vdr_name,ord_vdr.vdr_phone_code,ord_vdr.vdr_phone_val,ord_vdr.vdr_mail,ord_vdr.vdr_addr,ord_vdr.status as vdr_status,ord_vdr.respond_at as vdr_respond_at,ord_vdr.crt as vdr_crt,ord_vdr.is_pkp as is_vdr_pkp
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_phone_code,ord_drv.drv_phone_val,ord_drv.drv_name2,ord_drv.drv_phone2_val,ord_drv.drv_mail,ord_drv.drv_addr
,ord_vhc.vhc_id,ord_vhc.vhc_name,ord_vhc.vhc_nopol1,ord_vhc.vhc_nopol2,ord_vhc.vhc_nopol3
,ord_rate.id as ord_rate_id,ord_rate.buy_ftl
";
const defaultWhereOrdersDetail = "
WHERE ord.dlt is null
";
public static function listOrders($filter = [])
{
$params = [];
$select_order = "";
$join_join = "";
$where_where = "";
$group_by = "";
$order_by = "";
if (isset($filter["client_id"])) {
$where_where .= " AND ord_c.c_id = ? ";
array_push($params, $filter["client_id"]);
}
if (isset($filter["client_pt_id"])) {
$where_where .= " AND ord_c.c_pt_id = ? ";
array_push($params, $filter["client_pt_id"]);
}
if (isset($filter["vendor_id"])) {
$where_where .= " AND ord_vdr.vdr_id = ? ";
$where_where .= " AND ord_vdr.status = " . OrdersVendors::STTS_ACC;
array_push($params, $filter["vendor_id"]);
}
if (isset($filter["get_stts_checker"])) {
$select_order .=
" ,ord_pck.chk_id as pck_chk_id,ord_pck.chk_at as pck_chk_at,ord_pck.chk_stts as pck_chk_stts";
$select_order .=
" ,ord_drop.chk_id as drop_chk_id,ord_drop.chk_at as drop_chk_at,ord_drop.chk_stts as drop_chk_stts";
}
if (isset($filter["chk_id"])) {
if ($filter["chk_type"] == Users::CHK_TYPE_PICKUP) {
$where_where .= " AND (ord_pck.chk_id = ? OR ord_pck.chk_id = 0) ";
array_push($params, $filter["chk_id"]);
} elseif ($filter["chk_type"] == Users::CHK_TYPE_DROP) {
$where_where .= " AND (ord_drop.chk_id = ? OR ord_drop.chk_id = 0) ";
array_push($params, $filter["chk_id"]);
}
}
if (isset($filter["order_open"])) {
$where_where .= " AND ord.status IN (?,?,?,?,?,?,?,?) ";
array_push(
$params,
Orders::STTS_WAIT,
Orders::STTS_WAIT,
Orders::STTS_CONFIRM,
Orders::STTS_HAVE_GET_VHC,
Orders::STTS_GO,
Orders::STTS_PCK,
Orders::STTS_ARV,
Orders::STTS_DROP,
);
}
if (isset($filter["ready_checker"])) {
$where_where .= " AND ord.status IN (?,?,?,?,?,?,?,?) ";
array_push(
$params,
Orders::STTS_HAVE_GET_VHC,
Orders::STTS_GO,
Orders::STTS_PCK,
Orders::STTS_ARV,
Orders::STTS_DROP,
Orders::STTS_CLIENT_PAY,
Orders::STTS_VENDOR_PAYED,
Orders::STTS_CLOSE,
);
}
if (isset($filter["client_id_active_orders"])) {
$where_where .= " AND ord_c.c_id = ? AND ord.status IN (?,?,?,?,?) ";
array_push(
$params,
$filter["client_id_active_orders"],
Orders::STTS_HAVE_GET_VHC,
Orders::STTS_GO,
Orders::STTS_PCK,
Orders::STTS_ARV,
Orders::STTS_DROP,
);
}
if (isset($filter["is_accident"])) {
$where_where .= " AND ord.is_accident = ? ";
array_push($params, $filter["is_accident"]);
}
if (isset($filter["couple_pck_drop"])) {
$select_order .=
" ,ord_pck_drop.id as ord_pck_drop_id,ord_pck_drop.stts as stts_delivery,ord_pck_drop.is_aprv_pck,ord_pck_drop.aprv_pck_at";
$join_join .= " INNER JOIN t_orders_pck_drop as ord_pck_drop ON ord.id = ord_pck_drop.ord_id";
$join_join .= " INNER JOIN t_orders_pickups as ord_pck ON ord_pck_drop.pck_id = ord_pck.id";
$join_join .= " INNER JOIN t_orders_drops as ord_drop ON ord_pck_drop.drop_id = ord_drop.id";
if (isset($filter["ord_pck_drop_id"])) {
$where_where .= " AND ord_pck_drop.id = ?";
array_push($params, $filter["ord_pck_drop_id"]);
}
} else {
$join_join .= " INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id";
$join_join .= " INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id";
}
if (isset($filter["join_pockets"])) {
$select_order .=
" ,ord_pocket.pocket_id,ord_pocket.pocket_type,ord_pocket.id as ord_pocket_id,ord_pocket.pocket_name";
$join_join .= " INNER JOIN t_orders_pockets as ord_pocket ON ord.id = ord_pocket.ord_id";
}
// $group_by .= ' GROUP BY ord.group_code';
if (isset($filter["group_by"])) {
$group_by .= " GROUP BY " . $filter["group_by"];
}
if (isset($filter["order_by"])) {
$order_by .= " ORDER BY " . $filter["order_by"];
}
return DB::select(
"SELECT
" .
Orders::defaultSelectedOrders .
"
" .
$select_order .
"
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
LEFT JOIN t_orders_rates as ord_rate ON ord.id = ord_rate.ord_id
LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = " .
OrdersVendors::STTS_ACC .
" GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
LEFT JOIN t_orders_drivers as ord_drv ON ord.id = ord_drv.ord_id
LEFT JOIN t_orders_vehicles as ord_vhc ON ord.id = ord_vhc.ord_id
" .
$join_join .
"
" .
Orders::defaultWhereOrders .
"
" .
$where_where .
"
" .
$group_by .
"
" .
$order_by .
"
;",
$params,
);
}
public static function showOrder($filter)
{
$params = [];
$select_order = "";
$where_order = "";
$join_order = "";
$group_by = "";
if (isset($filter["id"])) {
$where_order .= " AND ord.id = ? ";
array_push($params, $filter["id"]);
} elseif (isset($filter["code"])) {
$where_order .= " AND ord.code = ? ";
array_push($params, $filter["code"]);
} elseif (isset($filter["codes"])) {
$binds_codes = "";
foreach ($filter["codes"] as $k => $v) {
$binds_codes .= "?,";
$params[] = $v;
}
if (substr($binds_codes, -1) === ",") {
$binds_codes = substr($binds_codes, 0, -1);
}
$where_order .= " AND ord.code IN ($binds_codes)";
} elseif (isset($filter["group_merge_code"])) {
$where_order .= " AND ord.group_merge_code IN (?)";
$params[] = $filter["group_merge_code"];
} else {
return false;
}
if (isset($filter["center_pck"])) {
$select_order .= ",ST_AsText(ST_Centroid(pck_points)) as pck_center";
}
if (isset($filter["get_prefer_type_truck"])) {
$select_order .= ",tt.name as prefer_truck_type_name";
$join_order .= " LEFT JOIN t_vehicles_types as tt ON ord_c.prefer_truck_type = tt.id";
}
if (isset($filter["get_additional_vehicles_info"])) {
$select_order .=
",ord_vhc.vhc_type_id, tt2.name as vhc_type_name, ord_vhc.vhc_brand_id, tb.name as vhc_brand_name";
$join_order .= " LEFT JOIN t_vehicles_types as tt2 ON ord_vhc.vhc_type_id = tt2.id";
$join_order .= " LEFT JOIN t_vehicles_brands as tb ON ord_vhc.vhc_brand_id = tb.id";
}
if (isset($filter["get_zone_data"])) {
$select_order .=
",ord_pck.pck_hex_color,ord_pck.pck_shape,ord_pck.pck_radius,ord_pck.pck_bounds,ord_pck.pck_latlngs,ST_AsText(ST_Centroid(pck_points)) as pck_center";
$select_order .=
",ord_drop.drop_hex_color,ord_drop.drop_shape,ord_drop.drop_radius,ord_drop.drop_bounds,ord_drop.drop_latlngs,ST_AsText(ST_Centroid(drop_points)) as drop_center";
}
if (isset($filter["get_zone_zonasi"])) {
$select_order .=
",(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name";
$select_order .=
",(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name";
}
if (isset($filter["get_pic_zone"])) {
$select_order .=
",ord_pck.pic_name as pck_pic_name,ord_pck.pic_phone_code as pck_pic_phone_code,ord_pck.pic_phone_val as pck_pic_phone_val,ord_pck.pic_mail as pck_pic_mail";
$select_order .=
",ord_drop.pic_name as drop_pic_name,ord_drop.pic_phone_code as drop_pic_phone_code,ord_drop.pic_phone_val as drop_pic_phone_val,ord_drop.pic_mail as drop_pic_mail";
}
if (isset($filter["get_client_pt"])) {
$select_order .=
",ord_c.c_pt_id,ord_c.c_pt_name,ord_c.c_pt_phone_code,ord_c.c_pt_phone_val,ord_c.c_pt_mail,ord_c.c_pt_addr";
$select_order .=
",ord_c.c_pt_pic_name,ord_c.c_pt_pic_phone_code,ord_c.c_pt_pic_phone_val,ord_c.c_pt_pic_mail,ord_c.c_pt_pic_addr";
}
if (isset($filter["get_exp_vendor"])) {
$select_order .= ",ord_vdr.is_exp as vdr_is_exp,ord_vdr.exp_at as vdr_exp_at";
}
if (isset($filter["vdr_id"])) {
$select_order .= ",ord_vdr.find_vhcs";
$where_order .= " AND ord_vdr.vdr_id = ?";
array_push($params, $filter["vdr_id"]);
$join_order .= " LEFT JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id";
} else {
$join_order .=
"
LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = " .
OrdersVendors::STTS_ACC .
" GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
";
}
if (isset($filter["get_drv_bank"])) {
$select_order .=
",ord_drv.drv_bank_id,ord_drv.drv_bank_code,ord_drv.drv_bank_name,ord_drv.drv_bank_short_name,ord_drv.drv_bank_branch_name,ord_drv.drv_bank_acc_number,ord_drv.drv_bank_acc_name";
}
if (isset($filter["get_vdr_bank"])) {
$select_order .=
",ord_vdr.vdr_bank_id,ord_vdr.vdr_bank_code,ord_vdr.vdr_bank_name,ord_vdr.vdr_bank_short_name,ord_vdr.vdr_bank_acc_number,ord_vdr.vdr_bank_acc_name";
}
if (isset($filter["get_stts_checker"])) {
$select_order .=
" ,ord_pck.chk_id as pck_chk_id,ord_pck.chk_at as pck_chk_at,ord_pck.chk_stts as pck_chk_stts";
$select_order .=
" ,ord_drop.chk_id as drop_chk_id,ord_drop.chk_at as drop_chk_at,ord_drop.chk_stts as drop_chk_stts";
}
if (isset($filter["chk_id"])) {
if ($filter["chk_type"] == Users::CHK_TYPE_PICKUP) {
$where_order .= " AND (ord_pck.chk_id = ? OR ord_pck.chk_id = 0) ";
array_push($params, $filter["chk_id"]);
} elseif ($filter["chk_type"] == Users::CHK_TYPE_DROP) {
$where_order .= " AND (ord_drop.chk_id = ? OR ord_drop.chk_id = 0) ";
array_push($params, $filter["chk_id"]);
}
}
if (isset($filter["get_checker_user"])) {
$select_order .=
" ,ord_pck.chk_name as pck_chk_name,ord_pck.chk_mail as pck_chk_mail,ord_pck.chk_phone_val as pck_chk_phone_val";
$select_order .=
" ,ord_drop.chk_name as drop_chk_name,ord_drop.chk_mail as drop_chk_mail,ord_drop.chk_phone_val as drop_chk_phone_val";
}
if (isset($filter["get_bid_info"])) {
$select_order .=
" ,ord_vdr.is_mailing_bid,ord_vdr.is_mailing_bid_at,ord_vdr.is_want,ord_vdr.is_want_at";
}
// get img pickup and drop
if (isset($filter["get_checker_data"])) {
$select_order .=
" ,ord_pck.chk_seal_number as ord_pck_seal_number,ord_pck.chk_seal_img as ord_pck_seal_img,ord_pck.chk_drv_armd_img as ord_pck_drv_armd_img,ord_pck.chk_nopol_img as ord_pck_nopol_img,ord_pck.chk_docs_client_img as ord_pck_docs_client_img,ord_pck.chk_seal_install_img as ord_pck_seal_install_img,ord_pck.chk_goods_img as ord_pck_goods_img";
$select_order .=
" ,ord_drop.chk_arrived_img as ord_drop_arrived_img,ord_drop.chk_handover_img as ord_drop_handover_img,ord_drop.chk_do_ttd_img as ord_drop_do_ttd_img,ord_drop.chk_spk_img as ord_drop_spk_img";
}
if (isset($filter["get_accidents"])) {
$select_order .=
",ord_acdnt.id as ord_acdnt_id,ord_acdnt.accident_location as ord_acdnt_location,ord_acdnt.accident_story as ord_acdnt_story,ord_acdnt.accident_imgs as ord_acdnt_imgs";
$select_order .=
",ord_acdnt.new_nopol1 as ord_acdnt_new_nopol1,ord_acdnt.new_nopol2 as ord_acdnt_new_nopol2,ord_acdnt.new_nopol3 as ord_acdnt_new_nopol3,ord_acdnt.new_vhc_type_id as ord_acdnt_new_vhc_type_id";
$select_order .= ",tt3.name as ord_acdnt_new_vhc_type_name";
$select_order .=
",ord_acdnt.new_drv_name as ord_acdnt_new_drv_name,ord_acdnt.new_drv_phone_code as ord_acdnt_new_drv_phone_code,ord_acdnt.new_drv_phone_val as ord_acdnt_new_drv_phone_val";
$select_order .= ",ord_acdnt.crt as ord_acdnt_crt_at,ord_acdnt.updt as ord_acdnt_updt_at";
$join_order .= " LEFT JOIN t_orders_accidents as ord_acdnt ON ord.id = ord_acdnt.ord_id";
$join_order .= " LEFT JOIN t_vehicles_types as tt3 ON ord_vhc.vhc_type_id = tt3.id";
}
if (isset($filter["select_region_pck_drop"])) {
$select_order .=
",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) drop_ktname";
}
if (isset($filter["couple_pck_drop"])) {
$select_order .=
" ,ord_pck_drop.id as ord_pck_drop_id,ord_pck_drop.stts as stts_delivery,ord_pck_drop.is_aprv_pck,ord_pck_drop.aprv_pck_at";
$join_order .= " INNER JOIN t_orders_pck_drop as ord_pck_drop ON ord.id = ord_pck_drop.ord_id";
$join_order .= " INNER JOIN t_orders_pickups as ord_pck ON ord_pck_drop.pck_id = ord_pck.id";
$join_order .= " INNER JOIN t_orders_drops as ord_drop ON ord_pck_drop.drop_id = ord_drop.id";
if (isset($filter["ord_pck_drop_id"])) {
$where_order .= " AND ord_pck_drop.id = ?";
array_push($params, $filter["ord_pck_drop_id"]);
}
if (isset($filter["get_user_aprv_pck"])) {
$select_order .=
" ,(SELECT first_name FROM t_users WHERE id = ord_pck_drop.aprv_pck_by LIMIT 1) as aprv_pck_by_name";
}
} else {
$join_order .= " INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id";
$join_order .= " INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id";
}
if (isset($filter["join_pockets"])) {
$select_order .=
" ,ord_pocket.pocket_id,ord_pocket.pocket_type,ord_pocket.id as ord_pocket_id,ord_pocket.pocket_name";
$join_order .= " INNER JOIN t_orders_pockets as ord_pocket ON ord.id = ord_pocket.ord_id";
}
if (isset($filter["group_by"])) {
$group_by .= " GROUP BY " . $filter["group_by"];
}
if (!isset($filter["limit"])) {
$filter["limit"] = 1;
}
return DB::select(
"SELECT
" .
Orders::defaultSelectedOrdersDetail .
"
" .
$select_order .
"
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
LEFT JOIN t_orders_rates as ord_rate ON ord.id = ord_rate.ord_id
LEFT JOIN t_orders_drivers as ord_drv ON ord.id = ord_drv.ord_id
LEFT JOIN t_orders_vehicles as ord_vhc ON ord.id = ord_vhc.ord_id
" .
$join_order .
"
" .
Orders::defaultWhereOrdersDetail .
"
" .
$where_order .
"
" .
$group_by .
"
LIMIT " .
$filter["limit"] .
";",
$params,
);
}
public static function getOrders()
{
return DB::select("SELECT * FROM t_orders WHERE dlt is null;");
}
public static function getOrdersClientActive($client_id)
{
$stts =
Orders::STTS_WAIT .
"," .
Orders::STTS_CONFIRM .
"," .
Orders::STTS_HAVE_GET_VHC .
"," .
Orders::STTS_PCK .
"," .
Orders::STTS_GO .
"," .
Orders::STTS_ARV .
"," .
Orders::STTS_DROP;
return DB::select(
"SELECT
ord.*,ord_c.*
,ord_c.pay_at as client_pay_at,ord_c.is_pay as client_is_pay
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
WHERE ord.dlt is null AND ord.status IN (?) AND ord_c.c_id = ?;",
[$stts, $client_id],
);
}
public static function getOrdersByClient($client_id, $limit = 1000)
{
return DB::select(
"SELECT
ord.*,ord_c.*
,ord_c.pay_at as client_pay_at,ord_c.is_pay as client_is_pay
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
WHERE ord.dlt is null AND ord_c.c_id = ?
LIMIT ?;",
[$client_id, $limit],
);
}
public static function getOrderById($ordid)
{
return DB::select("SELECT * FROM t_orders WHERE dlt is null AND id = ? LIMIT 1;", [$ordid]);
}
public static function getOrderByCode($ordcode)
{
return DB::select("SELECT * FROM t_orders WHERE dlt is null AND code = ? LIMIT 1;", [$ordcode]);
}
// special case utk generate order code tanpa where dlt is null
public static function getOrderLikeCode($ordcode)
{
// return DB::select("SELECT COUNT(id) as total FROM t_orders WHERE dlt is null AND code LIKE ? LIMIT 1;", [$ordcode.'%']);
return DB::select("SELECT COUNT(id) as total FROM t_orders WHERE code LIKE ? LIMIT 1;", [
$ordcode . "%",
]);
}
public static function getPoints($filter)
{
$params = [];
$select = "";
$join = "";
$where = "";
$limit = "";
if (isset($filter["id"])) {
$where .= " AND ord.id = ? ";
array_push($params, $filter["id"]);
} elseif (isset($filter["code"])) {
$where .= " AND ord.code = ? ";
array_push($params, $filter["code"]);
} else {
return false;
}
if (isset($filter["point_id"])) {
$where .= " AND topd.id = ? ";
array_push($params, $filter["point_id"]);
}
if (isset($filter["center_pck"])) {
$select .= ",ST_AsText(ST_Centroid(pck_points)) as pck_center";
}
if (isset($filter["get_zone_data"])) {
$select .=
",ord_pck.pck_hex_color,ord_pck.pck_shape,ord_pck.pck_radius,ord_pck.pck_bounds,ord_pck.pck_latlngs,ST_AsText(ST_Centroid(pck_points)) as pck_center";
$select .=
",ord_drop.drop_hex_color,ord_drop.drop_shape,ord_drop.drop_radius,ord_drop.drop_bounds,ord_drop.drop_latlngs,ST_AsText(ST_Centroid(drop_points)) as drop_center";
}
if (isset($filter["get_pic_zone"])) {
$select .=
",ord_pck.pic_name as pck_pic_name,ord_pck.pic_phone_code as pck_pic_phone_code,ord_pck.pic_phone_val as pck_pic_phone_val,ord_pck.pic_mail as pck_pic_mail";
$select .=
",ord_drop.pic_name as drop_pic_name,ord_drop.pic_phone_code as drop_pic_phone_code,ord_drop.pic_phone_val as drop_pic_phone_val,ord_drop.pic_mail as drop_pic_mail";
}
if (isset($filter["select_region_pck_drop"])) {
$select .=
",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) drop_ktname";
}
if (isset($filter["limit"])) {
$limit .= " LIMIT " . $filter["limit"];
}
// -- total_pck must be equal to total_drop
return DB::select(
"SELECT
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_pck.id as ord_pck_id,ord_pck.pck_id as ord_pck_zone_id,ord_pck.pck_name,ord_pck.pck_addr,ord_pck.set_pck_at,ord_pck.pck_at,ord_pck.pck_enter_at,ord_pck.pck_leave_at
,ord_drop.id as ord_drop_id,ord_drop.drop_id as ord_drop_zone_id,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.drop_at,ord_drop.drop_enter_at,ord_drop.drop_leave_at
,topd.id as point_id
" .
$select .
"
FROM t_orders as ord
LEFT JOIN t_orders_pck_drop topd ON
topd.ord_id = ord.id
LEFT JOIN t_orders_pickups as ord_pck ON
topd.pck_id = ord_pck.id
LEFT JOIN t_orders_drops as ord_drop ON
topd.drop_id = ord_drop.id
" .
$join .
"
" .
Orders::defaultWhereOrdersDetail .
"
" .
$where .
"
" .
$limit .
"
",
$params,
);
}
public static function addOrder($data)
{
$ordid = DB::table("t_orders")->insertGetId($data);
return $ordid;
}
public static function updateOrder($ordid, $data)
{
return DB::table("t_orders")
->where("id", $ordid)
->update($data);
}
public static function deleteOrder($ordid)
{
return DB::table("t_orders")
->where("id", $ordid)
->delete();
}
}

397
app/Models/OrdersAItems.php Executable file
View File

@ -0,0 +1,397 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersAItems extends Model
{
// t_orders_a_items fungsinya untuk nalangin pembayaran
const FLOW_TYPE_PAYMENT = 1;
const FLOW_TYPE_BILLING = 2;
const FLOW_TYPE_HYBRID = 3;
const TYPE_CASH_OUT = 1;
const TYPE_CASH_IN = 2;
const TYPE_CASH_HYBRID = 3;
const A_TYPE_PRIMARY = 1;
const A_TYPE_SECONDARY = 2;
const AMT_TYPE_FLAT = 1;
const AMT_TYPE_PERCENT = 2;
// 1=>refer ddln_pay_at, 2=>refer to order finish(pengantaran selesai)
const DDLN_PAY_TYPE_TIME = 1;
const DDLN_PAY_TYPE_ORD_FINISH = 2;
const IS_PAID_NO = 0;
const IS_PAID_YES = 1;
const IS_HIDDEN_NO = 0;
const IS_HIDDEN_YES = 1;
// tax yang berlaku utk 1 row saja
const IS_TAX_NO = 0;
const IS_TAX_YES = 1;
const IS_DISC_NO = 0;
const IS_DISC_YES = 1;
const IS_SUBTRACT_NO = 0;
const IS_SUBTRACT_YES = 1;
// 1=>transfer
const PAID_TYPE_TF = 1;
const INVC_TO_CLIENT_YES = 1;
const INVC_TO_CLIENT_NO = 2;
const CALC_TO_VDR_YES = 1;
const CALC_TO_VDR_NO = 2;
const ONLY_CLIENT_YES = 1;
const ONLY_CLIENT_NO = 2;
const ONLY_VDR_YES = 1;
const ONLY_VDR_NO = 2;
const IS_ADM_PRICE_NO = 0;
const IS_ADM_PRICE_YES = 1;
const IS_APRV_NO = 0;
const IS_APRV_YES = 1;
const IS_ACTIVE_NO = 0;
const IS_ACTIVE_YES = 1;
// tax yang include dengan itemnya
const AMT_TAX_TYPE_WITHOUT = 0; // tanpa pajak
const AMT_TAX_TYPE_INCLUDE = 1; // termasuk pajak || pajak dibayarkan sendiri oleh (client/vendor)
const AMT_TAX_TYPE_EXCLUDE = 2; // belum termasuk pajak || pajak dibayarkan oleh bonceng
const PPN_PERCENT = 1.1;
const PPN_PERCENT_INCLUDE = 1.011;
const PPH_PERCENT = 2;
// merge satuan
const IS_MERGE_NO = 0;
const IS_MERGE_YES = 1;
// merge per trx
const STTS_MERGE_NO = 0;
const STTS_MERGE_TO = 1;
const STTS_MERGE_RESULT = 2;
// 0=>system, 1=>admin, 2=>finance
const CRT_TYPE_SYSTEM = 0;
const CRT_TYPE_ADMIN = 1;
const CRT_TYPE_FINANCE = 2;
/**
* termin_at itu deadline pembayaran
* column merge disini untuk merge satuan:
* is_merge_to, merge_to_a_id, merge_to_ord_id, merge_to_ord_code, merge_to_at, merge_to_by
* is_merge_from, merge_from_a_id, merge_from_ord_id, merge_from_ord_code, merge_from_at, merge_from_by
* column merge disini untuk merge per trx:
* stts_merge, merge_to_code, group_merge_code, merge_at
*/
public static function listAItems($filter = [])
{
$params = [];
$select = '';
$where = '';
if (isset($filter['c_termin_id'])) {
$where .= ' AND ord_a_item.c_termin_id = ?';
$params[] = $filter['c_termin_id'];
}
if (isset($filter['is_hidden'])) {
$where .= ' AND ord_a_item.is_hidden = ?';
$params[] = $filter['is_hidden'];
}
if (isset($filter['is_tax'])) {
$where .= ' AND ord_a_item.is_tax = ?';
$params[] = $filter['is_tax'];
}
if (isset($filter['is_ppn'])) {
$where .= ' AND ord_a_item.is_ppn = ?';
$params[] = $filter['is_ppn'];
}
if (isset($filter['is_pph'])) {
$where .= ' AND ord_a_item.is_pph = ?';
$params[] = $filter['is_pph'];
}
if (isset($filter['is_disc'])) {
$where .= ' AND ord_a_item.is_disc = ?';
$params[] = $filter['is_disc'];
}
return DB::select("SELECT
ord_a_item.id as ord_a_item_id
,ord_a_item.*
$select
FROM
t_orders_a_items as ord_a_item
WHERE dlt is null
$where
;",
$params);
}
public static function get()
{
return DB::select("SELECT * FROM t_orders_a_items;");
}
public static function showAItem($filter = [])
{
$params = [];
$join = '';
$select = '';
$where = '';
$group_by = '';
$limit = '';
if (isset($filter['ord_a_item_id'])) {
$where .= ' AND ord_a_item.id = ?';
$params[] = $filter['ord_a_item_id'];
} else if (isset($filter['group_merge_code'])) {
$where .= ' AND ord_a_item.group_merge_code IN (?)';
$params[] = $filter['group_merge_code'];
}
if (isset($filter['ord_id'])) {
$where .= ' AND ord_a_item.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['exclude_ord_a_item_id'])) {
$where .= ' AND ord_a_item.id != ?';
$params[] = $filter['exclude_ord_a_item_id'];
}
if (isset($filter['is_adm_price'])) {
$where .= ' AND ord_a_item.is_adm_price = ?';
$params[] = $filter['is_adm_price'];
}
if (isset($filter['is_active'])) {
$where .= ' AND ord_a_item.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['a_item_type'])) {
$where .= ' AND ord_a_item.a_item_type = ?';
$params[] = $filter['a_item_type'];
}
if (isset($filter['v_termin_id_not_zero'])) {
$where .= ' AND ord_a_item.v_termin_id != 0';
}
if (isset($filter['c_termin_id_not_zero'])) {
$where .= ' AND ord_a_item.c_termin_id != 0';
}
if (isset($filter['get_user_crt'])) {
$select .= ',ucrt.first_name as ucrt_name';
$join .= ' LEFT JOIN t_users as ucrt ON ord_a_item.crt_by = ucrt.id';
}
if (isset($filter['get_user_rjct'])) {
$select .= ',urjct.first_name as urjct_name,urjct_bill.first_name as urjct_bill_name';
$join .= ' LEFT JOIN t_users as urjct ON ord_a_item.rjct_by = urjct.id';
$join .= ' LEFT JOIN t_users as urjct_bill ON ord_a_item.rjct_bill_by = urjct_bill.id';
}
if (isset($filter['prev_main_item_id'])) {
$where .= ' AND ord_a_item.id < ?';
$params[] = $filter['prev_main_item_id'];
}
if (isset($filter['limit'])) {
$limit .= ' LIMIT ?';
$params[] = $filter['limit'];
}
return DB::select("SELECT
ord_a_item.id as ord_a_item_id
,ord_a_item.*
$select
FROM
t_orders_a_items as ord_a_item
$join
WHERE ord_a_item.dlt is null
$where
$group_by
$limit
;",
$params);
}
public static function showAItemById($ord_a_item_id, $filter = [])
{
$params = [];
$join = '';
$select = '';
$where = '';
if (isset($filter['is_adm_price'])) {
$where .= ' AND ord_a_item.is_adm_price = ?';
$params[] = $filter['is_adm_price'];
}
if (isset($filter['get_user_crt'])) {
$select .= ',ucrt.first_name as ucrt_name';
$join .= ' LEFT JOIN t_users as ucrt ON ord_a_item.crt_by = ucrt.id';
}
if (isset($filter['get_user_rjct'])) {
$select .= ',urjct.first_name as urjct_name,urjct_bill.first_name as urjct_bill_name';
$join .= ' LEFT JOIN t_users as urjct ON ord_a_item.rjct_by = urjct.id';
$join .= ' LEFT JOIN t_users as urjct_bill ON ord_a_item.rjct_bill_by = urjct_bill.id';
}
$params[] = $ord_a_item_id;
return DB::select("SELECT
ord_a_item.id as ord_a_item_id
,ord_a_item.*
$select
FROM
t_orders_a_items as ord_a_item
$join
WHERE ord_a_item.dlt is null
$where
AND ord_a_item.id = ?
;",
$params);
}
public static function showAItemByIds($ids)
{
$params = [];
$select = '';
$where = '';
if ($ids && count($ids) > 0) {
$binds_ids = "";
foreach ($ids as $k => $v) {
$binds_ids .= "?,";
$params[] = $v;
}
if (substr($binds_ids, -1) === ',') {
$binds_ids = substr($binds_ids, 0, -1);
}
$where .= " AND ord_a_item.id IN ($binds_ids)";
} else {
$where .= " AND ord_a_item.id = ?";
$params[] = 0;
}
return DB::select("SELECT
ord_a_item.id as ord_a_item_id
,ord_a_item.*
,ut.name as unit_type_name
$select
FROM t_orders_a_items as ord_a_item
LEFT JOIN t_unit_types as ut ON ord_a_item.unit_type = ut.id
WHERE ord_a_item.dlt is null
$where
;",
$params);
}
// termin ids
public static function showAItemByVids($tids, $filter = [])
{
$params = [];
$select = '';
$where = '';
if ($tids && count($tids) > 0) {
$binds_ids = "";
foreach ($tids as $k => $v) {
$binds_ids .= "?,";
$params[] = $v;
}
if (substr($binds_ids, -1) === ',') {
$binds_ids = substr($binds_ids, 0, -1);
}
if (isset($filter['c_termin_id'])) {
$where .= " AND ord_a_item.c_termin_id IN ($binds_ids)";
} else {
$where .= " AND ord_a_item.v_termin_id IN ($binds_ids)";
}
} else {
if (isset($filter['c_termin_id'])) {
$where .= " AND ord_a_item.c_termin_id = ?";
} else {
$where .= " AND ord_a_item.v_termin_id = ?";
}
$params[] = 0;
}
if (isset($filter['a_item_type'])) {
$where .= " AND ord_a_item.a_item_type = ?";
$params[] = $filter['a_item_type'];
}
return DB::select("SELECT
ord_a_item.id as ord_a_item_id
,ord_a_item.*
,ut.name as unit_type_name
$select
FROM t_orders_a_items as ord_a_item
LEFT JOIN t_unit_types as ut ON ord_a_item.unit_type = ut.id
WHERE ord_a_item.dlt is null
$where
;",
$params);
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_a_items WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_a_items WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_a_items WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_a_items")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_a_items")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_a_items")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_a_items")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_a_items")->where("ord_id", $ord_id)->delete();
}
}

50
app/Models/OrdersAccidents.php Executable file
View File

@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersAccidents extends Model
{
public static function getAccidents()
{
return DB::select("SELECT * FROM t_orders_accidents WHERE dlt is null;");
}
public static function getAccidentById($id)
{
return DB::select("SELECT * FROM t_orders_accidents WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getAccidentByOrdId($ord_id)
{
return DB::select("SELECT * FROM t_orders_accidents WHERE dlt is null AND ord_id = ? LIMIT 1;", [$ord_id]);
}
public static function addAccident($data)
{
$id = DB::table("t_orders_accidents")->insertGetId($data);
return $id;
}
public static function updateAccident($id, $data)
{
return DB::table("t_orders_accidents")->where("id", $id)->update($data);
}
public static function updateAccidentByOrdId($ord_id, $data)
{
return DB::table("t_orders_accidents")->where("ord_id", $ord_id)->update($data);
}
public static function deleteAccident($id)
{
return DB::table("t_orders_accidents")->where("id", $id)->delete();
}
public static function deleteAccidentByOrdId($ord_id)
{
return DB::table("t_orders_accidents")->where("ord_id", $ord_id)->delete();
}
}

142
app/Models/OrdersCheckpoints.php Executable file
View File

@ -0,0 +1,142 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersCheckpoints extends Model
{
const defaultSelectedCheckpoints = "
point.*
,point.id as ord_checkpoint_id
,pck.name as pck_name,pck.fulladdress as pck_fulladdress
,drp.name as drop_name,drp.fulladdress as drop_fulladdress
";
const IS_UNPAID = 0;
const IS_PAID = 1;
const IS_TF_FAIL = 2;
const TF_METHOD_MANUAL = 1;
const TF_METHOD_DANA = 2;
public static function listCheckpoints($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['id'])) {
$where .= ' AND point.id = ?';
$params[] = $filter['id'];
}
if (isset($filter['pocket_id'])) {
$where .= ' AND point.pocket_id = ?';
$params[] = $filter['pocket_id'];
}
if (isset($filter['ord_pocket_id'])) {
$where .= ' AND point.ord_pocket_id = ?';
$params[] = $filter['ord_pocket_id'];
}
if (isset($filter['sort'])) {
$where .= ' AND point.pocket_sort = ?';
$params[] = $filter['sort'];
}
if (isset($filter['ord_id'])) {
$where .= ' AND point.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['ord_code'])) {
$where .= ' AND point.ord_code = ?';
$params[] = $filter['ord_code'];
}
if (isset($filter['tf_method'])) {
$where .= ' AND point.tf_method = ?';
$params[] = $filter['tf_method'];
}
if (isset($filter['where_not_tf_at'])) {
$where .= ' AND point.tf_at != ?';
$params[] = $filter['where_not_tf_at'];
}
if (isset($filter['order_by'])) {
$order_by = 'ORDER BY ' . $filter['order_by'];
}
if (isset($filter['group_by'])) {
$group_by = 'GROUP BY ' . $filter['group_by'];
}
if (isset($filter['limit'])) {
$limit = 'LIMIT ' . $filter['limit'];
}
return DB::select("SELECT "
. OrdersCheckpoints::defaultSelectedCheckpoints . "
$select
FROM t_orders_checkpoints as point
INNER JOIN t_zones as pck ON point.pck_id = pck.id
LEFT JOIN t_zones as drp ON point.drop_id = drp.id
WHERE point.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function showCheckpointById($pocket_id)
{
return DB::select("SELECT "
. OrdersCheckpoints::defaultSelectedCheckpoints . "
FROM t_orders_checkpoints as point
LEFT JOIN t_zones as pck ON point.pck_id = pck.id
LEFT JOIN t_zones as drp ON point.drop_id = drp.id
WHERE point.dlt is null AND point.id = ?
LIMIT 1;", [$pocket_id]);
}
public static function getCheckpoints()
{
return DB::select("SELECT * FROM t_orders_checkpoints WHERE dlt is null;");
}
public static function getCheckpointById($id)
{
return DB::select("SELECT * FROM t_orders_checkpoints WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getCheckpointByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_orders_checkpoints WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addCheckpoint($data)
{
$pid = DB::table("t_orders_checkpoints")->insertGetId($data);
return $pid;
}
public static function updateCheckpoint($id, $data)
{
return DB::table("t_orders_checkpoints")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_checkpoints")->where("ord_id", $ord_id)->update($data);
}
public static function deleteCheckpoint($id)
{
return DB::table("t_orders_checkpoints")->where("id", $id)->delete();
}
public static function deleteCheckpointByPocketId($pocket_id)
{
return DB::table("t_orders_checkpoints")->where("pocket_id", $pocket_id)->delete();
}
public static function deleteCheckpointByOrdPocketId($ord_pocket_id)
{
return DB::table("t_orders_checkpoints")->where("ord_pocket_id", $ord_pocket_id)->delete();
}
}

62
app/Models/OrdersClients.php Executable file
View File

@ -0,0 +1,62 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersClients extends Model
{
const IS_NON_PKP = 0;
const IS_PKP_YES = 1;
const IS_NOT_PAY = 1;
const IS_PAYED = 2;
public static function get()
{
return DB::select("SELECT * FROM t_orders_clients;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_clients WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_clients WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_clients WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_clients")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_clients")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_clients")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_clients")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_clients")->where("ord_id", $ord_id)->delete();
}
}

60
app/Models/OrdersDrivers.php Executable file
View File

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersDrivers extends Model
{
public static function get()
{
return DB::select("SELECT * FROM t_orders_drivers;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_drivers WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_drivers WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdCodeByStatus($code, $status)
{
return DB::select("SELECT * FROM t_orders_drivers WHERE ord_code = ? AND status = ? LIMIT 1;", [$code, $status]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_drivers WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_drivers")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_drivers")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_drivers")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_drivers")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_drivers")->where("ord_id", $ord_id)->delete();
}
}

View File

@ -0,0 +1,111 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersDriversUploads extends Model
{
const STTS_UP_OTW_PICKUP = 1;
const STTS_UP_ARRIVED_PICKUP = 2;
const STTS_UP_PROCESS_PICKUP = 3;
const STTS_UP_FINISH_PICKUP = 4;
const STTS_UP_TRAVEL_DOCUMENT = 5;
const STTS_UP_OTW_DROP = 6;
const STTS_UP_ARRIVED_DROP = 7;
const STTS_UP_PROCESS_DROP = 8;
const STTS_UP_FINISH_DROP = 9;
const STTS_UP_HANDOVER_DOCUMENT = 10;
const STTS_UP_ACCIDENT = 11;
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
public static function list($filter = [])
{
$params = [];
$select = '';
$where = '';
$join = '';
$limit = '';
if (isset($filter['id'])) {
$where .= ' AND drv_up.id = ?';
$params[] = $filter['id'];
}
if (isset($filter['ord_id'])) {
$where .= ' AND drv_up.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['ord_code'])) {
$where .= ' AND drv_up.ord_code = ?';
$params[] = $filter['ord_code'];
}
if (isset($filter['did'])) {
$where .= ' AND drv_up.did = ?';
$params[] = $filter['did'];
}
if (isset($filter['pck_id'])) {
$where .= ' AND drv_up.pck_id = ?';
$params[] = $filter['pck_id'];
}
if (isset($filter['drop_id'])) {
$where .= ' AND drv_up.drop_id = ?';
$params[] = $filter['drop_id'];
}
if (isset($filter['ord_pck_drop_id'])) {
$where .= ' AND drv_up.ord_pck_drop_id = ?';
$params[] = $filter['ord_pck_drop_id'];
}
$query = "SELECT drv_up.* $select FROM t_orders_drivers_uploads as drv_up $join WHERE drv_up.dlt is null $where $limit;";
return DB::select($query, $params);
}
public static function get()
{
return DB::select("SELECT * FROM t_orders_drivers_uploads;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_drivers_uploads WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_drivers_uploads WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_drivers_uploads WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_drivers_uploads")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_drivers_uploads")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_drivers_uploads")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_drivers_uploads")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_drivers_uploads")->where("ord_id", $ord_id)->delete();
}
}

63
app/Models/OrdersDrops.php Executable file
View File

@ -0,0 +1,63 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersDrops extends Model
{
const STTS_WAIT = 1;
const STTS_DROPING = 2;
const STTS_DROPED = 3;
const STTS_FAIL = 4;
const CHK_STTS_NO = 1;
const CHK_STTS_SUBMIT = 2;
public static function get()
{
return DB::select("SELECT * FROM t_orders_drops;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_drops WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_drops WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_drops WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_drops")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_drops")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_drops")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_drops")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_drops")->where("ord_id", $ord_id)->delete();
}
}

59
app/Models/OrdersInsurances.php Executable file
View File

@ -0,0 +1,59 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersInsurances extends Model
{
const AMT_TYPE_FLAT = 1;
const AMT_TYPE_PERCENT = 2;
public static function get()
{
return DB::select("SELECT * FROM t_orders_insurances;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_insurances WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_insurances WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_insurances WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_insurances")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_insurances")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_insurances")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_insurances")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_insurances")->where("ord_id", $ord_id)->delete();
}
}

109
app/Models/OrdersInvoices.php Executable file
View File

@ -0,0 +1,109 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersInvoices extends Model
{
const FLOW_TYPE_PAYMENT = 1;
const FLOW_TYPE_BILLING = 2;
const FLOW_TYPE_HYBRID = 3;
const TYPE_CASH_OUT = 1;
const TYPE_CASH_IN = 2;
const TYPE_CASH_HYBRID = 3;
const AMT_TYPE_FLAT = 1;
const AMT_TYPE_PERCENT = 2;
// 1=>refer pay_due_at, 2=>jatuh tempo 14 hari kerja
const PAY_DUE_TYPE_TIME = 1;
const PAY_DUE_TYPE_14_WORK_DAY = 2;
const IS_PAID_NO = 0;
const IS_PAID_YES = 1;
const IS_GNRT_INVC_NO = 0;
const IS_GNRT_INVC_YES = 1;
// 1=>transfer
const PAID_TYPE_TF = 1;
// 1=>admin, 2=>finance
const CRT_TYPE_SYSTEM = 0;
const CRT_TYPE_ADMIN = 1;
const CRT_TYPE_FINANCE = 2;
// 1=>client
const INVC_FOR_CLIENT = 1;
const DFT_TAX_PERCENT = 0;
public static function get()
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getByCode($code)
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null AND ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null AND ord_id = ? LIMIT 1;", [$ordid]);
}
public static function getByTerminId($terminid)
{
return DB::select("SELECT * FROM t_orders_invoices WHERE dlt is null AND c_termin_id = ? LIMIT 1;", [$terminid]);
}
public static function getLikeCode($code)
{
return DB::select("SELECT COUNT(id) as total FROM t_orders_invoices WHERE dlt is null AND code LIKE ? LIMIT 1;", [$code.'%']);
}
public static function getLikeCodeLastRunningNumber($code)
{
return DB::select("SELECT code FROM t_orders_invoices WHERE dlt is null AND code LIKE ? ORDER BY code DESC LIMIT 1;", [$code.'%']);
}
public static function add($data)
{
$id = DB::table("t_orders_invoices")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_invoices")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_invoices")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_invoices")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_invoices")->where("ord_id", $ord_id)->delete();
}
}

87
app/Models/OrdersItems.php Executable file
View File

@ -0,0 +1,87 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersItems extends Model
{
const DEFAULT_WEIGHT_UNIT = 'kg';
const DEFAULT_DIMENSION_UNIT = 'm';
public static function get()
{
return DB::select("SELECT * FROM t_orders_items;");
}
public static function getsByOrdId($ordid, $filter = [])
{
$params = [$ordid];
$where_item = '';
if (isset($filter['get_not_deleted'])) {
$where_item .= ' AND item.chk_pck_dlt = 0';
$where_item .= ' AND item.chk_drop_dlt = 0';
}
return DB::select("SELECT
*
FROM t_orders_items as item
WHERE item.ord_id = ?
" . $where_item . "
;", $params);
}
public static function getsByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_items WHERE ord_code = ?;", [$code]);
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_items WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_items WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_items WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function getOrderItemByCode($code)
{
return DB::select("SELECT * FROM t_orders_items WHERE item_code = ? LIMIT 1;", [$code]);
}
public static function add($data)
{
$id = DB::table("t_orders_items")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_items")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_items")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_items")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_items")->where("ord_id", $ord_id)->delete();
}
}

103
app/Models/OrdersLogsTf.php Executable file
View File

@ -0,0 +1,103 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersLogsTf extends Model
{
const defaultSelectedLogsTf = "
log_tf.*
";
const TYPE_TF_CHECKPOINT = 1;
const STTS_UNPAID = 0;
const STTS_PAID = 1;
const STTS_FAIL = 2;
const STTS_PENDING = 3;
const METHOD_MANUAL = 1;
const METHOD_DANA = 2;
public static function listLogsTf($filter = [])
{
$select = ''; $join = ''; $where = ''; $group_by = ''; $order_by = ''; $limit = '';
$params = [];
if (isset($filter['ord_id'])) {
$where .= ' AND log_tf.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['ord_code'])) {
$where .= ' AND log_tf.ord_code = ?';
$params[] = $filter['ord_code'];
}
if (isset($filter['checkpoint_id'])) {
$where .= ' AND log_tf.checkpoint_id = ?';
$params[] = $filter['checkpoint_id'];
}
if (isset($filter['type'])) {
$where .= ' AND log_tf.type = ?';
$params[] = $filter['type'];
}
if (isset($filter['method'])) {
$where .= ' AND log_tf.method = ?';
$params[] = $filter['method'];
}
if (isset($filter['order_by'])) {
$order_by = 'ORDER BY ' . $filter['order_by'];
}
if (isset($filter['group_by'])) {
$group_by = 'GROUP BY ' . $filter['group_by'];
}
if (isset($filter['limit'])) {
$limit = 'LIMIT ' . $filter['limit'];
}
return DB::select("SELECT "
. OrdersLogsTf::defaultSelectedLogsTf . "
$select
FROM t_orders_logs_tf as log_tf
$join
WHERE log_tf.dlt is null
$where
$group_by
$order_by
$limit
;", $params);
}
public static function getLogsTf()
{
return DB::select("SELECT * FROM t_orders_logs_tf WHERE dlt is null;");
}
public static function getLogsTfById($id)
{
return DB::select("SELECT * FROM t_orders_logs_tf WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function addLogsTf($data)
{
$pid = DB::table("t_orders_logs_tf")->insertGetId($data);
return $pid;
}
public static function updateLogsTf($id, $data)
{
return DB::table("t_orders_logs_tf")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_logs_tf")->where("ord_id", $ord_id)->update($data);
}
public static function deleteLogsTf($id)
{
return DB::table("t_orders_logs_tf")->where("id", $id)->delete();
}
}

70
app/Models/OrdersPckDrop.php Executable file
View File

@ -0,0 +1,70 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersPckDrop extends Model
{
// stts_delivery
const STTS_DELIVERY_OTW_PICKUP = 1;
const STTS_DELIVERY_ARRIVED_PICKUP = 2;
const STTS_DELIVERY_PROCESS_PICKUP = 3;
const STTS_DELIVERY_FINISH_PICKUP = 4;
const STTS_DELIVERY_TRAVEL_DOC = 5;
const STTS_DELIVERY_OTW_DROP = 6;
const STTS_DELIVERY_ARRIVED_DROP = 7;
const STTS_DELIVERY_PROCESS_DROP = 8;
const STTS_DELIVERY_FINISH_DROP = 9;
const STTS_DELIVERY_HANDOVER_DOC = 10;
const IS_APRV_NO = 0;
const IS_APRV_YES = 1;
public static function get()
{
return DB::select("SELECT * FROM t_orders_pck_drop;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_pck_drop WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_pck_drop WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_pck_drop WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_pck_drop")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_pck_drop")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_pck_drop")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_pck_drop")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_pck_drop")->where("ord_id", $ord_id)->delete();
}
}

63
app/Models/OrdersPickups.php Executable file
View File

@ -0,0 +1,63 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersPickups extends Model
{
const STTS_WAIT = 1;
const STTS_PICKING = 2;
const STTS_PICKED = 3;
const STTS_FAIL = 4;
const CHK_STTS_NO = 1;
const CHK_STTS_SUBMIT = 2;
public static function get()
{
return DB::select("SELECT * FROM t_orders_pickups;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_pickups WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_pickups WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_pickups WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_pickups")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_pickups")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_pickups")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_pickups")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_pickups")->where("ord_id", $ord_id)->delete();
}
}

104
app/Models/OrdersPockets.php Executable file
View File

@ -0,0 +1,104 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersPockets extends Model
{
const defaultSelectedPockets = "
pm.*
,pck.name as pck_name,pck.fulladdress as pck_fulladdress
,drp.name as drop_name,drp.fulladdress as drop_fulladdress
";
public static function listPockets($filter = [])
{
$select = '';
$where = '';
$params = [];
if (isset($filter['pck_id'])) {
$where .= ' AND pm.pck_id = ?';
$params[] = $filter['pck_id'];
}
if (isset($filter['drop_id'])) {
$where .= ' AND pm.drop_id = ?';
$params[] = $filter['drop_id'];
}
if (isset($filter['is_active'])) {
$where .= ' AND pm.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['cptid'])) {
$where .= ' AND pck.client_group_id = ?';
$params[] = $filter['cptid'];
$where .= ' AND drp.client_group_id = ?';
$params[] = $filter['cptid'];
}
return DB::select("SELECT "
. OrdersPockets::defaultSelectedPockets . "
$select
FROM t_orders_pockets as pm
INNER JOIN t_zones as pck ON pm.pck_id = pck.id
INNER JOIN t_zones as drp ON pm.drop_id = drp.id
WHERE pm.dlt is null
$where
;", $params);
}
public static function showPocketById($pocket_id)
{
return DB::select("SELECT "
. OrdersPockets::defaultSelectedPockets . "
FROM t_orders_pockets as pm
INNER JOIN t_zones as pck ON pm.pck_id = pck.id
INNER JOIN t_zones as drp ON pm.drop_id = drp.id
WHERE pm.dlt is null AND pm.id = ?
LIMIT 1;", [$pocket_id]);
}
public static function getPockets()
{
return DB::select("SELECT * FROM t_orders_pockets WHERE dlt is null;");
}
public static function getPocketById($pocket_id)
{
return DB::select("SELECT * FROM t_orders_pockets WHERE dlt is null AND id = ? LIMIT 1;", [$pocket_id]);
}
public static function getPocketByCode($code)
{
return DB::select("SELECT * FROM t_orders_pockets WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getPocketByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_orders_pockets WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addPocket($data)
{
$pocket_id = DB::table("t_orders_pockets")->insertGetId($data);
return $pocket_id;
}
public static function updatePocket($pocket_id, $data)
{
return DB::table("t_orders_pockets")->where("id", $pocket_id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_pockets")->where("ord_id", $ord_id)->update($data);
}
public static function deletePocket($pocket_id)
{
return DB::table("t_orders_pockets")->where("id", $pocket_id)->delete();
}
}

60
app/Models/OrdersRates.php Executable file
View File

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersRates extends Model
{
const STTS_WAIT = 1;
const STTS_DROPING = 2;
const STTS_DROPED = 3;
const STTS_FAIL = 4;
public static function get()
{
return DB::select("SELECT * FROM t_orders_rates;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_rates WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_rates WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_rates WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_rates")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_rates")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_rates")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_rates")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_rates")->where("ord_id", $ord_id)->delete();
}
}

149
app/Models/OrdersTermins.php Executable file
View File

@ -0,0 +1,149 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersTermins extends Model
{
const FLOW_TYPE_PAYMENT = 1;
const FLOW_TYPE_BILLING = 2;
const FLOW_TYPE_HYBRID = 3;
const TYPE_CASH_OUT = 1;
const TYPE_CASH_IN = 2;
const TYPE_CASH_HYBRID = 3;
const AMT_TYPE_FLAT = 1;
const AMT_TYPE_PERCENT = 2;
// 1=>refer termin_ddln_at, 2=>refer to order finish(pengantaran selesai)
const DDLN_TERMIN_TYPE_TIME = 1;
const DDLN_TERMIN_TYPE_ORD_FINISH = 2;
const IS_PAID_NO = 0;
const IS_PAID_YES = 1;
// 1=>transfer
const PAID_TYPE_TF = 1;
// 1=>admin, 2=>finance
const CRT_TYPE_SYSTEM = 0;
const CRT_TYPE_ADMIN = 1;
const CRT_TYPE_FINANCE = 2;
const IS_ACTIVE_NO = 0;
const IS_ACTIVE_YES = 1;
// 1=>client, 2=>vendor
const TERMIN_FOR_CLIENT = 1;
const TERMIN_FOR_VENDOR = 2;
// merge per trx
const STTS_MERGE_NO = 0;
const STTS_MERGE_TO = 1;
const STTS_MERGE_RESULT = 2;
/**
* termin_at itu deadline pembayaran
* column merge disini untuk merge per trx
*/
public static function listWithFilter($filter = [])
{
$params = [];
$select = '';
$where = '';
if (isset($filter['ord_id'])) {
$where .= ' AND ord_id = ?';
$params[] = $filter['ord_id'];
} else if (isset($filter['ord_code'])) {
$where .= ' AND ord_code = ?';
$params[] = $filter['ord_code'];
}
if (isset($filter['termin_for'])) {
$where .= ' AND termin_for = ?';
$params[] = $filter['termin_for'];
}
if (isset($filter['crt_type'])) {
$where .= ' AND crt_type = ?';
$params[] = $filter['crt_type'];
}
if (isset($filter['termin_is_paid'])) {
$where .= ' AND termin_is_paid = ?';
$params[] = $filter['termin_is_paid'];
}
if (isset($filter['in_stts_merge'])) {
if (is_array($filter['in_stts_merge'])) {
$where .= ' AND stts_merge IN (';
foreach ($filter['in_stts_merge'] as $in) {
$where .= '?,';
$params[] = $in;
}
if (strpos(substr($where, -1), ',') !== false) {
$where = substr($where, 0, -1) . ')';
}
}
}
return DB::select("SELECT
ord_termin.*
$select
FROM t_orders_termins as ord_termin
WHERE dlt is null
$where
;", $params);
}
public static function get()
{
return DB::select("SELECT * FROM t_orders_termins WHERE dlt is null;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_termins WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_termins WHERE dlt is null AND ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_termins WHERE dlt is null AND ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_termins")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_termins")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_termins")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_termins")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_termins")->where("ord_id", $ord_id)->delete();
}
}

60
app/Models/OrdersVehicles.php Executable file
View File

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersVehicles extends Model
{
public static function get()
{
return DB::select("SELECT * FROM t_orders_vehicles;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_orders_vehicles WHERE id = ? LIMIT 1;", [$id]);
}
public static function getByOrdCode($code)
{
return DB::select("SELECT * FROM t_orders_vehicles WHERE ord_code = ? LIMIT 1;", [$code]);
}
public static function getByOrdCodeByStatus($code, $status)
{
return DB::select("SELECT * FROM t_orders_vehicles WHERE ord_code = ? AND status = ? LIMIT 1;", [$code, $status]);
}
public static function getByOrdId($ordid)
{
return DB::select("SELECT * FROM t_orders_vehicles WHERE ord_id = ? LIMIT 1;", [$ordid]);
}
public static function add($data)
{
$id = DB::table("t_orders_vehicles")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_vehicles")->where("id", $id)->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_vehicles")->where("ord_id", $ord_id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_vehicles")->where("id", $id)->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_vehicles")->where("ord_id", $ord_id)->delete();
}
}

193
app/Models/OrdersVendors.php Executable file
View File

@ -0,0 +1,193 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class OrdersVendors extends Model
{
const STTS_WAIT = 1;
const STTS_ACC = 2;
const STTS_REJECT = 3;
const STTS_IGNORE = 4;
const STTS_NOT_READY = 5; // want order but expired, bcs not fill data
const IS_NOT_PAY = 1;
const IS_PAYED = 2;
const LINK_WILL_EXP = 1;
const LINK_NOT_EXP = 2;
const IS_MAILING_BID_NOT = 0;
const IS_MAILING_BID_SEND = 1;
const IS_WANT_IGNORE = 0;
const IS_WANT_NO = 1;
const IS_WANT_YES = 2;
public static function get()
{
return DB::select("SELECT * FROM t_orders_vendors;");
}
public static function getById($id)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE id = ? LIMIT 1;",
[$id]
);
}
public static function getByOrdCode($code)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE ord_code = ? LIMIT 1;",
[$code]
);
}
public static function getByOrdCodeByStatus($code, $status)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE ord_code = ? AND status = ? LIMIT 1;",
[$code, $status]
);
}
public static function getByOrdIdByStatus($id, $status)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE ord_id = ? AND status = ? LIMIT 1;",
[$id, $status]
);
}
public static function getByOrdId($ordid)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE ord_id = ? LIMIT 1;",
[$ordid]
);
}
public static function getByBidToken($tkn)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE bid_token = ? LIMIT 1;",
[$tkn]
);
}
public static function getByOrdIdAndVdrId($ordid, $vdrid)
{
return DB::select(
"SELECT * FROM t_orders_vendors WHERE ord_id = ? AND vdr_id = ? LIMIT 1;",
[$ordid, $vdrid]
);
}
public static function getNextVendors($ordid, $not_vdr_id = 0)
{
// AND is_mailing_bid = " . OrdersVendors::IS_MAILING_BID_NOT . "
return DB::select(
"SELECT * FROM t_orders_vendors
WHERE ord_id = ?
AND is_want = " .
OrdersVendors::IS_WANT_IGNORE .
"
AND respond_at = 0
AND vdr_id != ?
;",
[$ordid, $not_vdr_id]
);
}
public static function getOtherVendorsWantThisOrder($ordid, $not_vdr_id = 0)
{
return DB::select(
"SELECT * FROM t_orders_vendors
WHERE ord_id = ?
AND is_mailing_bid = " .
OrdersVendors::IS_MAILING_BID_SEND .
"
AND is_want = " .
OrdersVendors::IS_WANT_YES .
"
AND status = " .
OrdersVendors::STTS_WAIT .
"
AND respond_at = 0
AND vdr_id != ?
;",
[$ordid, $not_vdr_id]
);
}
public static function searchVendorsByRate($filter = [])
{
$params = [];
$query = "SELECT";
$query .=
" vendor.id as vdr_id,vendor.first_name,vendor.phone,vendor.phone_code,vendor.email,vendor.fulladdress";
$query .=
" ,rate.vdr_id as rate_vdr_id,rate.vhc_type as rate_vhc_type,rate.origin_prov as rate_origin_prov,rate.dest_city as rate_dest_city,rate.dest_district as rate_dest_district";
$query .=
" ,rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm as rate_sell_cbm,rate.sell_ftl as rate_sell_ftl";
$query .= " FROM t_conf_rates AS rate";
$query .= " INNER JOIN t_vehicles as v ON v.type_id = rate.vhc_type";
$query .= " INNER JOIN t_users as vendor ON rate.vdr_id = vendor.id";
$query .= " WHERE rate.vdr_id != 0 AND rate.dest_city != 0";
$query .=
" AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_ftl = ? AND rate.long_time = ?";
array_push(
$params,
$filter["active_rates"]->origin_prov,
$filter["active_rates"]->dest_city,
$filter["active_rates"]->dest_district,
$filter["active_rates"]->sell_ftl,
$filter["active_rates"]->long_time
);
if ($filter["prefer_truck_type"]) {
$query .= " AND v.type_id = ?";
$params[] = $filter["prefer_truck_type"];
}
$query .= " GROUP BY rate.vdr_id";
return DB::select($query, $params);
}
public static function add($data)
{
$id = DB::table("t_orders_vendors")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_orders_vendors")
->where("id", $id)
->update($data);
}
public static function updtByOrdId($ord_id, $data)
{
return DB::table("t_orders_vendors")
->where("ord_id", $ord_id)
->update($data);
}
public static function dlt($id)
{
return DB::table("t_orders_vendors")
->where("id", $id)
->delete();
}
public static function dltByOrdId($ord_id)
{
return DB::table("t_orders_vendors")
->where("ord_id", $ord_id)
->delete();
}
}

149
app/Models/PocketMoney.php Executable file
View File

@ -0,0 +1,149 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class PocketMoney extends Model
{
const IS_INACTIVE = 0;
const IS_ACTIVE = 1;
const TYPE_BUNDLE = 1;
const TYPE_BUNDLE_TEXT = 'Bundle';
const TYPE_CHECKPOINTS = 2;
const TYPE_CHECKPOINTS_TEXT = 'Checkpoints';
const FLOW_DEPARTURE = 1;
const FLOW_DEPARTURE_TEXT = 'Departure';
const FLOW_ARRIVAL = 2;
const FLOW_ARRIVAL_TEXT = 'Arrival';
const FLOW_HYBRID = 3;
const FLOW_HYBRID_TEXT = 'Hybpocket_id';
const defaultSelectedPockets = "
pm.*
,pck.name as pck_name,pck.fulladdress as pck_fulladdress
,drp.name as drop_name,drp.fulladdress as drop_fulladdress
";
public static function listPockets($filter = [])
{
$select = '';
$where = '';
$params = [];
if (isset($filter['pck_id'])) {
$where .= ' AND pm.pck_id = ?';
$params[] = $filter['pck_id'];
}
if (isset($filter['drop_id'])) {
$where .= ' AND pm.drop_id = ?';
$params[] = $filter['drop_id'];
}
if (isset($filter['is_active'])) {
$where .= ' AND pm.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['cptid'])) {
$where .= ' AND pck.client_group_id = ?';
$params[] = $filter['cptid'];
$where .= ' AND drp.client_group_id = ?';
$params[] = $filter['cptid'];
}
return DB::select("SELECT "
. PocketMoney::defaultSelectedPockets . "
$select
FROM t_pocket_money as pm
INNER JOIN t_zones as pck ON pm.pck_id = pck.id
INNER JOIN t_zones as drp ON pm.drop_id = drp.id
WHERE pm.dlt is null
$where
;", $params);
}
public static function showPocketById($pocket_id)
{
return DB::select("SELECT "
. PocketMoney::defaultSelectedPockets . "
FROM t_pocket_money as pm
INNER JOIN t_zones as pck ON pm.pck_id = pck.id
INNER JOIN t_zones as drp ON pm.drop_id = drp.id
WHERE pm.dlt is null AND pm.id = ?
LIMIT 1;", [$pocket_id]);
}
public static function getPockets()
{
return DB::select("SELECT * FROM t_pocket_money WHERE dlt is null;");
}
public static function getPocketById($pocket_id)
{
return DB::select("SELECT * FROM t_pocket_money WHERE dlt is null AND id = ? LIMIT 1;", [$pocket_id]);
}
public static function getPocketByCode($code)
{
return DB::select("SELECT * FROM t_pocket_money WHERE dlt is null AND code = ? LIMIT 1;", [$code]);
}
public static function getPocketByPckDrop($pck_id, $drop_id)
{
return DB::select("SELECT * FROM t_pocket_money WHERE dlt is null AND pck_id = ? AND drop_id = ? LIMIT 1;", [$pck_id, $drop_id]);
}
public static function addPocket($data)
{
$pocket_id = DB::table("t_pocket_money")->insertGetId($data);
return $pocket_id;
}
public static function updatePocket($pocket_id, $data)
{
return DB::table("t_pocket_money")->where("id", $pocket_id)->update($data);
}
public static function deletePocket($pocket_id)
{
return DB::table("t_pocket_money")->where("id", $pocket_id)->delete();
}
public static function getTypes()
{
$datas = [];
for ($i=0; $i<2; $i++) {
$datas[$i] = new \stdClass();
if ($i === 0) {
$datas[$i]->id = PocketMoney::TYPE_BUNDLE;
$datas[$i]->name = PocketMoney::TYPE_BUNDLE_TEXT;
} else if ($i === 1) {
$datas[$i]->id = PocketMoney::TYPE_CHECKPOINTS;
$datas[$i]->name = PocketMoney::TYPE_CHECKPOINTS_TEXT;
}
}
return $datas;
}
public static function getFlows()
{
$datas = [];
for ($i=0; $i<3; $i++) {
$datas[$i] = new \stdClass();
if ($i === 0) {
$datas[$i]->id = PocketMoney::FLOW_DEPARTURE;
$datas[$i]->name = PocketMoney::FLOW_DEPARTURE_TEXT;
} else if ($i === 1) {
$datas[$i]->id = PocketMoney::FLOW_ARRIVAL;
$datas[$i]->name = PocketMoney::FLOW_ARRIVAL_TEXT;
} else if ($i === 2) {
$datas[$i]->id = PocketMoney::FLOW_HYBRID;
$datas[$i]->name = PocketMoney::FLOW_HYBRID_TEXT;
}
}
return $datas;
}
}

Some files were not shown because too many files have changed in this diff Show More