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

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;
}
}

49
app/Models/Region.php Executable file
View File

@ -0,0 +1,49 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Region extends Model
{
public static function listProv()
{
return DB::select("SELECT * FROM t_region GROUP BY kodeProv;");
}
public static function getLikeProv($prname)
{
return DB::select("SELECT * FROM t_region WHERE nmProvinsiKel LIKE ? GROUP BY kodeProv;", ['%'.$prname.'%']);
}
public static function listCity($kodeProv)
{
return DB::select("SELECT * FROM t_region WHERE kodeProv = ? GROUP BY kodeKab;", [$kodeProv]);
}
public static function getLikeCity($ktname)
{
return DB::select("SELECT * FROM t_region WHERE nmKotamadyaKel LIKE ? GROUP BY kodeKab;", ['%'.$ktname.'%']);
}
public static function listDistrict($kodeKab)
{
return DB::select("SELECT * FROM t_region WHERE kodeKab = ? GROUP BY kodeKec;", [$kodeKab]);
}
public static function getLikeDistrict($kcname)
{
return DB::select("SELECT * FROM t_region WHERE nmKecamatanKel LIKE ? GROUP BY kodeKec;", ['%'.$kcname.'%']);
}
public static function listVillage($kodeKec)
{
return DB::select("SELECT * FROM t_region WHERE kodeKec = ? GROUP BY kodeKel;", [$kodeKec]);
}
public static function getLikeVillage($klname)
{
return DB::select("SELECT * FROM t_region WHERE nmKelurahan LIKE ? GROUP BY kodeKel;", ['%'.$klname.'%']);
}
}

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

@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class StaticInsurances extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const defaultSelectedStaticInsurances = "
insurances.*
";
public static function listStaticInsurances($filter = [])
{
$params = [];
$select = '';
$join = '';
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND insurances.is_active = ?';
$params[] = $filter['is_active'];
}
return DB::select("SELECT "
. StaticInsurances::defaultSelectedStaticInsurances . "
$select
FROM t_static_insurances as insurances
$join
WHERE insurances.dlt is null
$where
;", $params);
}
public static function getStaticInsurances()
{
return DB::select("SELECT * FROM t_static_insurances WHERE dlt is null;");
}
public static function getInsuranceById($id)
{
return DB::select("SELECT * FROM t_static_insurances WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function addInsurance($data)
{
$id = DB::table("t_static_insurances")->insertGetId($data);
return $id;
}
public static function updateInsurance($id, $data)
{
return DB::table("t_static_insurances")->where("id", $id)->update($data);
}
public static function deleteInsurance($id)
{
return DB::table("t_static_insurances")->where("id", $id)->delete();
}
}

555
app/Models/Tracks.php Executable file
View File

@ -0,0 +1,555 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Helper;
use App\Models\Vehicles;
class Tracks extends Model
{
const T_TRACKS = "t_gps_tracks";
const T_TRACKS_ADDR = "t_gps_tracks_address";
const STTS_REVERSE_GEO_SC = 1;
const STTS_REVERSE_GEO_NOT = 2;
const STTS_REVERSE_GEO_ER = 3;
const STTS_REVERSE_GEO_LOST = 4;
const STTS_EN_IDLING = 1;
const STTS_EN_MOVING = 2;
const STTS_EN_STOPING = 3;
const STTS_IGNITION_DFT = 0;
const STTS_IGNITION_ON = 1;
const STTS_IGNITION_OFF = 2;
const STTS_IGNITION_LOW = 3;
const STTS_IGNITION_HIGH = 4;
const STTS_GPS_DFT = 0; // default
const STTS_GPS_ON = 1;
const STTS_GPS_OFF = 2;
// 1=>no signal, 2=>extremely weak signal 3=>very weak signal, 4=>good signal, 5=>strong signal
const STTS_GSM_DFT = 0; // default
const STTS_GSM_NO_SIGNAL = 1;
const STTS_GSM_BAD_SIGNAL = 2;
const STTS_GSM_WEAK_SIGNAL = 3;
const STTS_GSM_GOOD_SIGNAL = 4;
const STTS_GSM_STRONG_SIGNAL = 5;
// type source
const SOURCE_GPS_TRACKER = 1;
const SOURCE_SMARTPHONE = 2;
/**
* perlu tambahin filter untuk melihat tracking yang sesuai dengan vehiclenya aja
* karena ada case:
* device sudah sampai dilokasi pengantaran dan dimatikan, ketika dipakai lagi data tracking yang lama kelihatan dan loncat
* untuk mengatasi itu di service_tracking juga perlu validasi tambahan, entah seperti apa caranya
*/
public static function listCurrentTracks($filter = [])
{
$now = time();
$params = [];
$query = "SELECT";
$query .=
" v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
$query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
$query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
$query .= " ,client.id as client_group_id,client.c_name as client_group_name";
$query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
$query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
// FRO
// $query .= " ,(SELECT SUM(pre_milleage) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id LIMIT 1) as vhc_sum_milleage";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_IDLING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_STOPING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_idle_at";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_STOPING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_IDLING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_stop_at";
$query .=
" ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
$query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
$query .=
" ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
$query .=
" ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
$query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// FRO
// $query .= " ,(SELECT COUNT(id) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id AND action = 'heartbeat' AND crt BETWEEN ".($now-(10*60))." AND ".$now." LIMIT 1) as lst_heartbeat"; // heartbeat last data on further 10 minutes
if (isset($filter["active_rates"])) {
$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";
}
if (isset($filter["get_order_data"])) {
$query .=
",ord.id as ord_id,ord.code as ord_code,ord.status as ord_stts,ord.crt as ord_crt,ord_pck.pck_name as ord_pck_name,ord_pck.pck_addr as ord_pck_addr,ord_drop.drop_name as ord_drop_name,ord_drop.drop_addr as ord_drop_addr";
$query .=
",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) ord_pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) ord_drop_ktname";
$query .=
",ord_drv.drv_name as ord_drv_name,ord_drv.drv_phone_val as ord_drv_phone_val,ord_drv.drv_phone2_val as ord_drv_phone2_val,ord_drv.drv_addr as ord_drv_addr";
$query .= ",ord_c.c_name as ord_c_name,ord_c.c_pt_name as ord_c_pt_name";
}
$query .= " FROM t_vehicles AS v";
$query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
$query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
$query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
$query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
$query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// get last updated row from many rows
// $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY device_id ORDER BY crt DESC ) AS tr1 ON (v.device_id = tr1.device_id)"; // cara lama berlaku utk gps tracker saja
// // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, vhc_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
// $query .= " LEFT JOIN " . self::T_TRACKS . " AS tr ON (tr.crt = tr1.max_crt)";
// get last updated tracking from updated table realtime
// $query .= " LEFT JOIN db_trucking.t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
$query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.id = tr_addr.master_id";
//FRO
$query .=
" LEFT JOIN " .
self::T_TRACKS_ADDR .
" AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
if (isset($filter["active_rates"])) {
// $query .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
$query .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
}
if (isset($filter["get_order_data"])) {
// the old way => only 1 order 1 vehicle
// $query .= " LEFT JOIN t_orders as ord ON v.ord_id = ord.id";
// $query .= " LEFT JOIN t_orders_pickups as ord_pck ON v.ord_id = ord_pck.ord_id";
// $query .= " LEFT JOIN t_orders_drops as ord_drop ON v.ord_id = ord_drop.ord_id";
// $query .= " LEFT JOIN t_orders_drivers as ord_drv ON v.ord_id = ord_drv.ord_id";
// $query .= " LEFT JOIN t_orders_clients as ord_c ON v.ord_id = ord_c.ord_id";
// the new way => can handle 2 order in 1 vehicle
$query .= " LEFT JOIN t_orders_vehicles as ord_vhc ON v.id = ord_vhc.vhc_id";
$query .= " LEFT JOIN t_orders as ord ON ord_vhc.ord_id = ord.id";
$query .= " LEFT JOIN t_orders_pickups as ord_pck ON ord_vhc.ord_id = ord_pck.ord_id";
$query .= " LEFT JOIN t_orders_drops as ord_drop ON ord_vhc.ord_id = ord_drop.ord_id";
$query .= " LEFT JOIN t_orders_drivers as ord_drv ON ord_vhc.ord_id = ord_drv.ord_id";
$query .= " LEFT JOIN t_orders_clients as ord_c ON ord_vhc.ord_id = ord_c.ord_id";
}
$query .= " WHERE v.dlt is null";
// $query .= " AND tr.action IN ('location','alarm')"; // kalo gamau ngambil data heartbeat(idling)
// $query .= " AND tr.device_id = v.device_id"; // cara lama berlaku utk gps tracker saja
// $query .= " AND tr.vhc_id = v.id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI) // bikin lemot
$query .= " AND tr.latitude != 0 AND tr.latitude is not null";
if (isset($filter["status"])) {
$query .= " AND v.status = ?";
$params[] = $filter["status"];
}
if (isset($filter["is_in_ord"])) {
$query .= " AND v.is_in_ord = ?";
$params[] = $filter["is_in_ord"];
}
if (isset($filter["nopol1"]) && isset($filter["nopol2"]) && isset($filter["nopol3"])) {
$query .= " AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ?";
array_push($params, $filter["nopol1"], $filter["nopol2"], $filter["nopol3"]);
}
if (isset($filter["vid"])) {
$query .= " AND v.id = ?";
$params[] = $filter["vid"];
}
if (isset($filter["vids"])) {
if ($filter["vids"] && count($filter["vids"]) > 0) {
$binds_vids = "";
foreach ($filter["vids"] as $k => $v) {
$binds_vids .= "?,";
$params[] = $v;
}
if (substr($binds_vids, -1) === ",") {
$binds_vids = substr($binds_vids, 0, -1);
}
$query .= " AND v.id IN ($binds_vids)";
} else {
$query .= " AND v.id = ?";
$params[] = 0;
}
}
if (isset($filter["own_by_vdr_id"])) {
$query .= " AND v.vendor_id = ?";
$params[] = $filter["own_by_vdr_id"];
}
if (isset($filter["active_rates"])) {
// v1
// $query .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// $query .= " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_kg = ? AND rate.sell_cbm = ? 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_kg, $filter['active_rates']->sell_cbm, $filter['active_rates']->long_time);
// v2
$query .=
" AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
$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 (isset($filter["prefer_truck_type"])) {
$query .= " AND v.type_id = ?";
$params[] = $filter["prefer_truck_type"];
}
if (isset($filter["get_order_data"])) {
if (isset($filter["client_id"])) {
$query .= " AND ord_c.c_id = ?";
$params[] = $filter["client_id"];
}
}
if (isset($filter["company"])) {
$query .= " AND client.id = ?";
$params[] = $filter["company"];
}
// $query .= " AND v.id = 70";
$query .= " GROUP BY v.id";
$query .= " ORDER BY tr.crt_d DESC";
$query .= " LIMIT 500;";
// dd($query);
$list = DB::select($query, $params);
foreach ($list as $_list) {
$_query =
" SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . self::T_TRACKS . " WHERE vhc_id = ?";
$_query = DB::select($_query, [$_list->vid]);
$_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage;
$_query =
"
SELECT
crt_s as lst_idle_at
FROM
" .
self::T_TRACKS .
"
WHERE
stts_engine = " .
self::STTS_EN_IDLING .
"
AND vhc_id = ?
AND crt_s >= (
SELECT
crt_s
FROM
" .
self::T_TRACKS .
"
WHERE
stts_engine IN (
" .
self::STTS_EN_STOPING .
",
" .
self::STTS_EN_MOVING .
")
AND vhc_id = ?
AND crt_s <= ?
ORDER BY
id DESC
LIMIT 1
)
ORDER BY
id ASC
LIMIT 1";
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
$_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
$_query =
"SELECT crt_s as lst_stop_at FROM " .
self::T_TRACKS .
" WHERE stts_engine = " .
self::STTS_EN_STOPING .
" AND vhc_id = ? AND crt_s >= (
SELECT crt_s FROM " .
self::T_TRACKS .
" WHERE stts_engine IN (" .
self::STTS_EN_IDLING .
"," .
self::STTS_EN_MOVING .
") AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
) ORDER BY id ASC LIMIT 1 ";
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
$_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
$_query =
" SELECT COUNT(id) as lst_heartbeat FROM " .
self::T_TRACKS .
" WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
($now - 10 * 60) .
" AND " .
$now .
" LIMIT 1";
$_query = DB::select($_query, [$_list->vid]);
$_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
}
return $list;
}
public static function lastMoveTracks($vid, $filter = [])
{
$now = time();
$params = [];
/**
* bikin lemot 30s timeout karena ada 2 join di rows yang banyak
* solution: indexing column
* show index from t_gps_tracks_address;
* create index addr_device_id on t_gps_tracks_address (device_id);
* create index addr_master_id on t_gps_tracks_address (master_id);
* show index from t_gps_tracks;
* create index tracks_device_id on t_gps_tracks (device_id);
* show index from t_vehicles;
* create index vhc_device_id on t_vehicles (device_id);
*
* solution not working. Don't reinvent the wheel
* create view. not working
*/
$query = "SELECT";
$query .= " v.id as vid,v.device_id,v.nopol1,v.nopol2,v.nopol3";
$query .= " ,tr.id as master_id,tr.latitude,tr.longitude,tr.speed,tr.orientation";
$query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
$query .= " ,tr.ignition,tr.stts_engine";
$query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
$query .= " ,addr.master_id AS addr_master_id,addr.crt AS addr_loc_crt";
$query .=
" ,addr.country_text,addr.state_text,addr.city_text,addr.district_text,addr.village_text,addr.postcode,addr.streets,addr.postcode,addr.fulladdress";
$query .= " FROM t_vehicles AS v";
// $query .= " INNER JOIN " . self::T_TRACKS . " AS tr ON v.device_id = tr.device_id"; // cara lama berlaku utk gps tracker saja
$query .= " INNER JOIN " . self::T_TRACKS . " AS tr ON v.id = tr.vhc_id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
$query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS addr ON tr.id = addr.master_id";
$query .= " WHERE v.dlt is null";
$query .= " AND v.id = ?";
array_push($params, $vid);
$query .= " AND tr.latitude is not null";
$query .= " AND tr.longitude is not null";
// last move based on date
// $query .= " AND tr.crt BETWEEN ? AND ?";
// array_push($params, strtotime('-24 hours', $now), $now);
if (isset($filter["start_date"]) && isset($filter["end_date"])) {
$query .= " AND tr.crt_d BETWEEN ? AND ?";
array_push($params, $filter["start_date"], $filter["end_date"]);
}
if (isset($filter["start_at"])) {
$query .= " AND tr.crt > ?";
$params[] = $filter["start_at"];
}
// last move based on last count data
$query .= " GROUP BY tr.crt_d";
$query .= " ORDER BY tr.crt_d DESC";
// array_push($params, strtotime('-24 hours', $now), $now);
if (isset($filter["limit"])) {
$query .= " LIMIT ?";
$params[] = $filter["limit"] ?? 500;
}
$query .= " ;";
return DB::select($query, $params);
}
public static function nearestInCircle($lat, $lng, $rad, $filter = [])
{
$earth_rad = Helper::EARTH_RADIUS_M;
$t_gps_tracks = self::T_TRACKS;
$select_select = "";
$join_join = "";
$where_where = "";
$params = [
"lat1" => $lat,
"lat2" => $lat,
"lng" => $lng,
"v_status" => Vehicles::STTS_ACTIVE,
"v_is_in_ord" => Vehicles::IN_ORD_NO,
"rad" => $rad,
];
if (isset($filter["active_rates"])) {
$select_select .=
",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";
$select_select .=
",rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm";
}
if (isset($filter["active_rates"])) {
// $join_join .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
$join_join .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
}
if (isset($filter["active_rates"])) {
// v1
// $where_where .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// $where_where .= " AND rate.origin_prov = :origin_prov AND (rate.dest_city = :dest_city OR rate.dest_district = :dest_district) AND rate.sell_kg = :sell_kg AND rate.sell_cbm = :sell_cbm AND rate.long_time = :long_time";
// v2
$where_where .=
" AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
$where_where .=
" AND rate.origin_prov = :origin_prov AND (rate.dest_city = :dest_city OR rate.dest_district = :dest_district) AND rate.sell_ftl = :sell_ftl AND rate.long_time = :long_time";
$params["origin_prov"] = $filter["active_rates"]->origin_prov;
$params["dest_city"] = $filter["active_rates"]->dest_city;
$params["dest_district"] = $filter["active_rates"]->dest_district;
// v1
// $params['sell_kg'] = $filter['active_rates']->sell_kg;
// $params['sell_cbm'] = $filter['active_rates']->sell_cbm;
// v2
$params["sell_ftl"] = $filter["active_rates"]->sell_ftl;
$params["long_time"] = $filter["active_rates"]->long_time;
}
if (isset($filter["prefer_truck_type"])) {
$where_where .= " AND v.type_id = :prefer_truck_type";
$params["prefer_truck_type"] = $filter["prefer_truck_type"];
}
$query = "SELECT v.*,tr.latitude,tr.longitude,tr.id as master_id
,u.first_name as vendor_name,u.phone as vendor_phone,u.phone_code as vendor_phone_code,u.email as vendor_mail,u.fulladdress as vendor_addr
,( $earth_rad * acos( cos( radians( :lat1 ) ) * cos( radians( tr.latitude ) )
* cos( radians( tr.longitude ) - radians( :lng ) ) + sin( radians( :lat2 ) ) * sin(radians( tr.latitude )) ) ) AS distance
$select_select
FROM $t_gps_tracks as tr
INNER JOIN t_vehicles as v ON tr.vhc_id = v.id
INNER JOIN t_users as u ON v.vendor_id = u.id
-- get last updated row from many rows
LEFT JOIN ( SELECT MAX(crt) max_crt, vhc_id FROM $t_gps_tracks WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)
$join_join
WHERE v.dlt is null
AND v.status = :v_status
AND v.is_in_ord = :v_is_in_ord
AND tr.latitude is not null
AND tr.longitude != 0
-- get last updated row from many rows
AND tr.crt = tr1.max_crt
$where_where
GROUP BY tr.vhc_id
HAVING distance <= :rad
-- ORDER BY distance ASC
ORDER BY tr.crt DESC
;";
return DB::select($query, $params);
}
public static function addTracks($data)
{
$id = DB::table(self::T_TRACKS)->insertGetId($data);
return $id;
}
public static function addTracksAddr($data)
{
$id = DB::table(self::T_TRACKS_ADDR)->insertGetId($data);
return $id;
}
public static function listLogsGps($filter = [])
{
$params = [];
$where_where = "";
$limit = "";
if (isset($filter["crt_greater_than"])) {
$where_where .= " AND crt > ?";
$params[] = $filter["crt_greater_than"];
}
if (isset($filter["limit"])) {
$limit .= " LIMIT ?";
$params[] = $filter["limit"];
}
return DB::select(
"SELECT
*
FROM " .
self::T_TRACKS .
" as tr
WHERE device_id is not null
AND device_id != 0
" .
$where_where .
"
ORDER BY tr.crt DESC
" .
$limit .
"
",
$params
);
}
public static function gpsLocsAddr($filter = [])
{
$params = [];
$select = "";
$join = "";
$where = "";
$order_by = "";
$group_by = "";
$limit = "";
if (isset($filter["source"])) {
$where .= " AND tr.source = ?";
$params[] = $filter["source"];
}
if (isset($filter["vhc_id"])) {
$where .= " AND tr.vhc_id = ?";
$params[] = $filter["vhc_id"];
}
if (isset($filter["drv_id"])) {
$where .= " AND tr.drv_id = ?";
$params[] = $filter["drv_id"];
}
if (isset($filter["group_by"])) {
$group_by .= " GROUP BY " . $filter["group_by"];
}
if (isset($filter["order_by"])) {
$order_by .= " ORDER BY " . $filter["order_by"];
}
if (isset($filter["limit"])) {
$limit .= " LIMIT " . $filter["limit"];
}
return DB::select(
"SELECT
tr.*
,tr_addr.country_id,tr_addr.country_text,tr_addr.state_id,tr_addr.state_text,tr_addr.city_id,tr_addr.city_text
,tr_addr.district_id,tr_addr.district_text,tr_addr.village_id,tr_addr.village_text,tr_addr.postcode,tr_addr.streets,tr_addr.fulladdress
,tr_addr.stts_reverse_geo
$select
FROM t_gps_tracks as tr
LEFT JOIN t_gps_tracks_address as tr_addr ON tr.id = tr_addr.master_id
$join
WHERE tr.latitude is not null AND tr.longitude != 0
$where
$group_by
$order_by
$limit
;",
$params
);
}
}

94
app/Models/UnitTypes.php Executable file
View File

@ -0,0 +1,94 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class UnitTypes extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const IS_PUBLISH = 1;
const IS_UNPUBLISH = 2;
// 1=>paket,2=>orang,3=>unit,4=>pcs
const UNIT_TYPE_PAKET = 1;
const UNIT_TYPE_ORANG = 2;
const UNIT_TYPE_UNIT = 3;
const UNIT_TYPE_PCS = 4;
const UNIT_TYPE_LITER = 5;
const UNIT_TYPE_CBM = 6;
const UNIT_TYPE_KG = 7;
const UNIT_TYPE_KOLI = 8;
const UNIT_TYPE_DAY = 9;
const UNIT_TYPE_HOUR = 10;
const UNIT_TYPE_MINUTE = 11;
const UNIT_TYPE_SECOND = 12;
const UNIT_TYPE_METER = 13;
const UNIT_TYPE_KM = 14;
const UNIT_TYPE_GRAM = 15;
const UNIT_TYPE_METER_PERSEGI = 16;
const UNIT_TYPE_LOT = 17;
const UNIT_TYPE_LS = 18;
public static function listUnitTypes($filter = [])
{
$params = [];
$select = '';
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND ut.is_active = ?';
$params[] = $filter['is_active'];
}
if (isset($filter['is_publish'])) {
$where .= ' AND ut.is_publish = ?';
$params[] = $filter['is_publish'];
}
return DB::select("SELECT
ut.*
$select
FROM
t_unit_types as ut
WHERE dlt is null
$where
ORDER BY ut.name ASC
;",
$params);
}
public static function get()
{
return DB::select("SELECT * FROM t_unit_types as ut WHERE dlt is null ORDER BY ut.name ASC;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_unit_types as ut WHERE dlt is null AND id = ? ORDER BY ut.name ASC LIMIT 1;", [$id]);
}
public static function getByName($name)
{
return DB::select("SELECT * FROM t_unit_types as ut WHERE dlt is null AND name = ? ORDER BY ut.name ASC LIMIT 1;", [$name]);
}
public static function add($data)
{
$id = DB::table("t_unit_types")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_unit_types")->where("id", $id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_unit_types")->where("id", $id)->delete();
}
}

268
app/Models/Users.php Executable file
View File

@ -0,0 +1,268 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Users extends Model
{
const ROLE_SU = 1; // unused
const ROLE_SUPERADMIN = 7;
const ROLE_ADMIN = 2;
const ROLE_VENDOR = 8;
const ROLE_CHECKER = 9;
const ROLE_USER = 3; // unused
const ROLE_CLIENT_ADMIN = 4;
const ROLE_VENDOR_DRIVER = 12;
const ROLE_CLIENT_STAFF = 5; // unused
const ROLE_CLIENT_USER = 6; // unused
const ROLE_SPECIAL_TRACKING = 10;
const ROLE_FINANCE = 11;
const STATUS_ACTIVE = 1;
const STATUS_NOT_ACTIVE = 2;
const STATUS_SUSPEND = 3;
const CHK_TYPE_PICKUP = 1;
const CHK_TYPE_DROP = 2;
const CHK_TYPE_ALL = 3;
const IS_TRACK_VHC_NO = 0;
const IS_TRACK_VHC_YES = 1;
const IS_TRACK_VHC_DEFAULT = 2;
const IS_VDR_BCNG_NO = 0;
const IS_VDR_BCNG_YES = 1;
const DEFAULT_UID = 1; // swanusa account
const DEFAULT_PHONE_CODE = 62;
const defaultSelected = "
u.*
,c.c_name AS client_group_name,c.id AS client_group_id
,r.name AS role_name
";
public static function listUsers($filter = [])
{
$select_select = "";
$join_join = "";
$where_where = "";
$other_other = "";
$params = [];
if (isset($filter["role"])) {
$where_where .= " AND u.role = ?";
$params[] = $filter["role"];
}
if (isset($filter["id"])) {
$where_where .= " AND u.id = ?";
$params[] = $filter["id"];
}
if (isset($filter["status"])) {
$where_where .= " AND u.status = ?";
$params[] = $filter["status"];
}
if (isset($filter["company"])) {
$where_where .= " AND c.id = ?";
$params[] = $filter["company"];
}
if (isset($filter["group_by_client_pt_id"])) {
$other_other .= " GROUP BY c.id";
}
return DB::select(
"SELECT
" .
Users::defaultSelected .
"
$select_select
FROM t_users AS u
LEFT JOIN t_clients AS c ON u.client_group_id = c.id
LEFT JOIN t_users_roles AS r ON u.role = r.id
$join_join
WHERE u.dlt is null
$where_where
$other_other
;",
$params
);
}
public static function listUsersByRole($role)
{
return DB::select(
"SELECT
" .
Users::defaultSelected .
"
FROM t_users AS u
LEFT JOIN t_clients AS c ON u.client_group_id = c.id
LEFT JOIN t_users_roles AS r ON u.role = r.id
WHERE u.dlt is null
AND u.role = ? ;",
[$role]
);
}
public static function getUsers()
{
return DB::select("SELECT * FROM t_users WHERE dlt is null;");
}
public static function getUsersActiveByRole($role)
{
return DB::select(
"SELECT * FROM t_users WHERE dlt is null AND status = " . Users::STATUS_ACTIVE . " AND role = ?;",
[$role]
);
}
public static function getUserById($uid)
{
return DB::select("SELECT * FROM t_users WHERE dlt is null AND id = ? LIMIT 1;", [$uid]);
}
public static function showUserById($uid)
{
return DB::select(
"SELECT
" .
Users::defaultSelected .
"
FROM t_users AS u
LEFT JOIN t_clients AS c ON u.client_group_id = c.id
LEFT JOIN t_users_roles AS r ON u.role = r.id
WHERE u.dlt is null
AND u.id = ?
LIMIT 1;",
[$uid]
);
}
public static function getUserByEmail($email)
{
return DB::select("SELECT * FROM t_users WHERE dlt is null AND email = ? LIMIT 2;", [$email]);
}
public static function getUserByPhone($phone)
{
return DB::select("SELECT * FROM t_users WHERE dlt is null AND phone = ? LIMIT 2;", [$phone]);
}
public static function getUserByClientId($cid)
{
return DB::select("SELECT * FROM t_users WHERE dlt is null AND client_id = ? LIMIT 1;", [$cid]);
}
public static function getUserByGroupClientId($cid)
{
return DB::select("SELECT * FROM t_users WHERE dlt is null AND client_group_id = ? LIMIT 1;", [$cid]);
}
public static function likeName($name, $role = 0)
{
$params = ["%" . $name . "%", "%" . $name . "%"];
$where = "";
if ($role !== 0) {
$where .= " AND role = ?";
$params[] = $role;
}
return DB::select(
"SELECT * FROM t_users WHERE dlt is null AND (first_name LIKE ? OR last_name LIKE ?) $where;",
$params
);
}
public static function addUser($data)
{
$uid = DB::table("t_users")->insertGetId($data);
return $uid;
}
public static function updateUser($uid, $data)
{
return DB::table("t_users")
->where("id", $uid)
->update($data);
}
public static function updateUsersByGroupClientId($cid, $data)
{
return DB::table("t_users")
->where("client_group_id", $cid)
->update($data);
}
public static function deleteUser($uid, $data)
{
return DB::table("t_users")
->where("id", $uid)
->delete();
}
public static function arrStatus()
{
return [Users::STATUS_ACTIVE, Users::STATUS_NOT_ACTIVE];
}
public static function arrRoles()
{
return [
Users::ROLE_SU,
Users::ROLE_SUPERADMIN,
Users::ROLE_ADMIN,
Users::ROLE_FINANCE,
Users::ROLE_VENDOR,
Users::ROLE_CHECKER,
Users::ROLE_USER,
Users::ROLE_CLIENT_ADMIN,
Users::ROLE_CLIENT_STAFF,
Users::ROLE_CLIENT_USER,
Users::ROLE_SPECIAL_TRACKING,
];
}
public static function listRoles($currentRole)
{
if ($currentRole == Users::ROLE_SUPERADMIN) {
return DB::select(
"SELECT * FROM t_users_roles WHERE dlt is null AND status = 1 AND id IN (?,?,?,?,?,?);",
[
// Users::ROLE_SUPERADMIN,
Users::ROLE_ADMIN,
Users::ROLE_FINANCE,
Users::ROLE_VENDOR,
Users::ROLE_CHECKER,
Users::ROLE_CLIENT_ADMIN,
Users::ROLE_SPECIAL_TRACKING,
]
);
} elseif ($currentRole == Users::ROLE_ADMIN) {
return DB::select(
"SELECT * FROM t_users_roles WHERE dlt is null AND status = 1 AND id IN (?,?,?,?,?,?);",
[
Users::ROLE_ADMIN,
Users::ROLE_FINANCE,
Users::ROLE_VENDOR,
Users::ROLE_CHECKER,
Users::ROLE_CLIENT_ADMIN,
Users::ROLE_SPECIAL_TRACKING,
]
);
} elseif ($currentRole == Users::ROLE_CLIENT_ADMIN) {
// return DB::select("SELECT * FROM t_users_roles WHERE dlt is null AND id IN (?,?);", [
// Users::ROLE_CLIENT_STAFF,
// Users::ROLE_CLIENT_USER,
// ]);
}
return [];
}
}

View File

@ -0,0 +1,76 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class UsersMenuPermissions extends Model
{
const IS_ACTIVE = 1;
const IS_INACTIVE = 2;
const IS_NOPERMISSION = 0;
const IS_PERMISSION = 1;
public static function listPermissionsMenus($filter = [])
{
$params = [];
$select = '';
$where = '';
if (isset($filter['is_active'])) {
$where .= ' AND pm.is_active = ?';
$params[] = $filter['is_active'];
}
return DB::select("SELECT
pm.*
$select
FROM
t_permissions_menus as pm
WHERE pm.dlt is null
$where
ORDER BY pm.id ASC
;",
$params);
}
public static function showPermissionsMenusById($id)
{
return DB::select("SELECT * FROM t_permissions_menus as pm WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function get()
{
return DB::select("SELECT * FROM t_permissions_menus as pm WHERE dlt is null ORDER BY pm.name ASC;");
}
public static function getById($id)
{
return DB::select("SELECT * FROM t_permissions_menus as pm WHERE dlt is null AND id = ? LIMIT 1;", [$id]);
}
public static function getByName($name, $filter = [])
{
$params = [$name];
$where = '';
return DB::select("SELECT * FROM t_permissions_menus as pm WHERE dlt is null AND name = ? $where LIMIT 1;", $params);
}
public static function add($data)
{
$id = DB::table("t_permissions_menus")->insertGetId($data);
return $id;
}
public static function updt($id, $data)
{
return DB::table("t_permissions_menus")->where("id", $id)->update($data);
}
public static function dlt($id)
{
return DB::table("t_permissions_menus")->where("id", $id)->delete();
}
}

334
app/Models/Vehicles.php Executable file
View File

@ -0,0 +1,334 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Vehicles extends Model
{
const DEFAULT_CAT_ID = 1; // truck
const DEFAULT_TRACK_HOLIDAY = 1;
const DEFAULT_TRACK_SCH_H = 24;
const DEFAULT_TRACK_SCH_D = 7;
const MAX_DEVICE_ID = 16;
const ENABLED_TRACK_HOLIDAY = 1;
const DISABLED_TRACK_HOLIDAY = 2;
const STTS_ACTIVE = 1;
const STTS_INACTIVE = 2;
const IN_ORD_YES = 1;
const IN_ORD_NO = 2;
private const defaultSelectVehicle =
"" .
"v.*,vd.*," .
"v.id as vid,vd.id as vd_id,v.sum_milleage," .
"c.name as cat_name,t.name as type_name,b.name as brand_name,m.name as model_name," .
"dc.fullname as dc_fullname,dc.phone as dc_phone,dc.phone_code as dc_phone_code," .
"da.fullname as da_fullname,da.phone as da_phone,da.phone_code as da_phone_code," .
"dvc.name as dvc_name,dvc.type as dvc_type";
public static function listVehicles($auth, $filter = [])
{
$params = [];
$select = "";
$where = "";
if ($auth->role == Users::ROLE_VENDOR) {
$where .= " AND v.vendor_id = " . $auth->uid;
}
if (isset($filter["company"])) {
$where .= " AND client.id = ?";
$params[] = $filter["company"];
}
// vd.speed_limit,vd.fuel_capacity,vd.fuel_drop_treshold,vd.max_pressure,vd.fvhc_img,
return DB::select(
"SELECT
" .
self::defaultSelectVehicle .
"
,client.c_name as company_name
" .
$select .
"
FROM t_vehicles as v
INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid
LEFT JOIN t_vehicles_cats AS c ON v.cat_id = c.id
LEFT JOIN t_vehicles_types AS t ON v.type_id = t.id
LEFT JOIN t_vehicles_brands AS b ON v.brand_id = b.id
LEFT JOIN t_vehicles_models AS m ON v.model_id = m.id
LEFT JOIN t_drivers AS dc ON v.c_did = dc.id
LEFT JOIN t_drivers AS da ON v.a_did = da.id
LEFT JOIN t_users AS vdr ON v.vendor_id = vdr.id
LEFT JOIN t_clients AS client ON vdr.client_group_id = client.id
LEFT JOIN t_devices AS dvc ON v.device_id = dvc.device_id
WHERE v.dlt is null
" .
$where .
"
ORDER BY v.id ASC;",
$params
);
}
public static function getVehicles()
{
return DB::select("SELECT * FROM t_vehicles WHERE dlt is null;");
}
public static function showVehicleById($vid)
{
return DB::select(
"SELECT
" .
self::defaultSelectVehicle .
"
FROM t_vehicles as v
INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid
LEFT JOIN t_vehicles_cats AS c ON v.cat_id = c.id
LEFT JOIN t_vehicles_types AS t ON v.type_id = t.id
LEFT JOIN t_vehicles_brands AS b ON v.brand_id = b.id
LEFT JOIN t_vehicles_models AS m ON v.model_id = m.id
LEFT JOIN t_drivers AS dc ON v.c_did = dc.id
LEFT JOIN t_drivers AS da ON v.a_did = da.id
LEFT JOIN t_devices AS dvc ON v.device_id = dvc.device_id
WHERE v.dlt is null
AND v.id = ?
LIMIT 1;",
[$vid]
);
}
public static function getVehicleById($vid)
{
return DB::select(
"SELECT * FROM t_vehicles WHERE dlt is null AND id = ? LIMIT 1;",
[$vid]
);
}
public static function getVehicleByDeviceId($device_id)
{
return DB::select(
"SELECT v.*,vd.tax_exp,vd.kir_exp FROM t_vehicles as v INNER JOIN t_vehicles_detail as vd ON v.id = vd.vid WHERE v.dlt is null AND v.device_id = ? LIMIT 1;",
[$device_id]
);
}
public static function getVehicleBySimcard($simcard)
{
return DB::select(
"SELECT * FROM t_vehicles WHERE dlt is null AND simcard = ? LIMIT 1;",
[$simcard]
);
}
public static function getVehicleByPlatNo($nopol1, $nopol2, $nopol3)
{
return DB::select(
"SELECT v.*,vd.tax_exp,vd.kir_exp FROM t_vehicles as v INNER JOIN t_vehicles_detail as vd ON v.id = vd.vid WHERE v.dlt is null AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ? LIMIT 2;",
[$nopol1, $nopol2, $nopol3]
);
}
public static function searchVehicleByPlatNo($nopol1, $nopol2, $nopol3)
{
return DB::select(
"SELECT v.*,vd.tax_exp,vd.kir_exp FROM t_vehicles as v INNER JOIN t_vehicles_detail as vd ON v.id = vd.vid WHERE v.dlt is null AND v.nopol1 LIKE '%" .
$nopol1 .
"%' AND v.nopol2 LIKE '%" .
$nopol2 .
"%' AND v.nopol3 LIKE '%" .
$nopol3 .
"%';"
);
}
public static function getVehicleByIdAllData($vid)
{
return DB::select(
"SELECT
*,v.id as vhc_id
FROM t_vehicles as v
INNER JOIN t_vehicles_detail as vd ON v.id = vd.vid
WHERE v.dlt is null
AND v.id = ?
LIMIT 1;",
[$vid]
);
}
public static function getVehiclesInIds($vids)
{
$params = [];
$where_in = "";
$vids = explode(",", $vids);
foreach ($vids as $vid) {
$where_in .= "?,";
array_push($params, $vid);
}
if (strpos($where_in, ",") !== false) {
$where_in = substr($where_in, 0, -1);
}
return DB::select(
"SELECT * FROM t_vehicles WHERE dlt is null AND id IN (" .
$where_in .
");",
$params
);
}
public static function getVehiclesInIdsActiveNoInOrder($vids)
{
$params = [];
$where_in = "";
$vids = explode(",", $vids);
foreach ($vids as $vid) {
$where_in .= "?,";
array_push($params, $vid);
}
if (strpos($where_in, ",") !== false) {
$where_in = substr($where_in, 0, -1);
}
return DB::select(
"SELECT
v.*,ord.status as ord_status
FROM t_vehicles as v
LEFT JOIN (SELECT MAX(ord_id) as max_ord_id,vhc_id FROM t_orders_vehicles GROUP BY vhc_id) as ord_vhc1 ON (v.id = ord_vhc1.vhc_id)
LEFT JOIN t_orders as ord ON (ord_vhc1.max_ord_id = ord.id)
WHERE v.dlt is null
AND v.status = " .
Vehicles::STTS_ACTIVE .
"
AND v.is_in_ord = " .
Vehicles::IN_ORD_NO .
"
AND (ord.status is null OR ord.status IN (" .
Orders::STTS_CLIENT_PAY .
"," .
Orders::STTS_VENDOR_PAYED .
"," .
Orders::STTS_CLOSE .
"," .
Orders::STTS_CANCEL .
"))
AND v.id IN (" .
$where_in .
")
;",
$params
);
}
public static function getVehiclesInVendorIdsActiveNoInOrder(
$vendorIds,
$prefer_truck_type = 0
) {
$params = [];
$where_in = "";
$where_where = "";
$vendorIds = explode(",", $vendorIds);
foreach ($vendorIds as $vendorId) {
$where_in .= "?,";
array_push($params, $vendorId);
}
if (strpos($where_in, ",") !== false) {
$where_in = substr($where_in, 0, -1);
}
if ($prefer_truck_type != 0) {
$where_where = " AND v.type_id = ?";
array_push($params, $prefer_truck_type);
}
return DB::select(
"SELECT
v.*,ord.status as ord_status
FROM t_vehicles as v
LEFT JOIN (SELECT MAX(ord_id) as max_ord_id,vhc_id FROM t_orders_vehicles GROUP BY vhc_id) as ord_vhc1 ON (v.id = ord_vhc1.vhc_id)
LEFT JOIN t_orders as ord ON (ord_vhc1.max_ord_id = ord.id)
INNER JOIN t_gps_tracks as tr ON v.device_id = tr.device_id
WHERE v.dlt is null
AND v.status = " .
Vehicles::STTS_ACTIVE .
"
AND v.is_in_ord = " .
Vehicles::IN_ORD_NO .
"
AND (ord.status is null OR ord.status IN (" .
Orders::STTS_CLIENT_PAY .
"," .
Orders::STTS_VENDOR_PAYED .
"," .
Orders::STTS_CLOSE .
"," .
Orders::STTS_CANCEL .
"))
AND v.vendor_id IN (" .
$where_in .
")
$where_where
GROUP BY v.id
;",
$params
);
}
public static function addVehicle($data)
{
$vid = DB::table("t_vehicles")->insertGetId($data);
return $vid;
}
public static function updateVehicle($vid, $data)
{
return DB::table("t_vehicles")
->where("id", $vid)
->update($data);
}
public static function deleteVehicle($vid)
{
return DB::table("t_vehicles")
->where("id", $vid)
->delete();
}
// default 1: truck
public static function listCats()
{
return DB::select(
"SELECT * FROM t_vehicles_cats WHERE dlt is null AND is_active = 1;"
);
}
// default 1: unknown
public static function listBrands()
{
return DB::select(
"SELECT * FROM t_vehicles_brands WHERE dlt is null AND is_active = 1;"
);
}
public static function listTypes()
{
return DB::select(
"SELECT * FROM t_vehicles_types WHERE dlt is null AND is_active = 1;"
);
}
public static function listModels()
{
return DB::select(
"SELECT * FROM t_vehicles_models WHERE dlt is null AND is_active = 1;"
);
}
}

45
app/Models/VehiclesDetail.php Executable file
View File

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

388
app/Models/Zone.php Executable file
View File

@ -0,0 +1,388 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\Users;
class Zone extends Model
{
const ZONE_TYPE_WAREHOUSE = 1;
const ZONE_TYPE_AREA = 2;
const ZONE_WORKFLOW_PICKUP = 1;
const ZONE_WORKFLOW_DEST = 2; // alias drop zone
const ZONE_WORKFLOW_PARKING = 3;
const ZONE_WORKFLOW_SERVICE = 4;
const ZONE_BOUNDARY_CIRCLE = "circle";
const ZONE_BOUNDARY_POLYGON = "polygon";
const ZONE_BOUNDARY_RECTANGLE = "rectangle";
const ZONE_BOUNDARY_NAME_CIRCLE = "Circle";
const ZONE_BOUNDARY_NAME_POLYGON = "Polygon";
const ZONE_BOUNDARY_NAME_RECTANGLE = "Rectangle";
const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 2;
const defaultSelectInsideZone = "
z.id as zid,z.name,z.desc,z.type,zt.name as type_name,z.workflow_type,zw.name as workflow_type_name
,z.shiptocode,z.fulladdress,z.boundary_type,z.boundary_radius,z.boundary_latlngs,ST_AsText(boundary_points) as points
,z.client_group_id,c.c_name,c_mail,c.pic_name,c.pic_mail
";
public static function listZones($auth, $filter = [])
{
$params = [];
$query = "SELECT z.*";
$query .= " ,c.c_name AS client_group_name";
$query .= " ,zt.name AS type_name,zw.name AS workflow_type_name";
$query .= " ,uc.first_name AS crt_name,up.first_name AS updt_name";
$query .= " ,uc.role AS crt_role,up.role AS updt_role";
$query .= " ,uc1.c_name AS crt_client_group_name,up1.c_name AS updt_client_group_name";
$query .= " ,uc2.name AS crt_role_name,up2.name AS updt_role_name";
$query .= " FROM t_zones AS z";
$query .= " LEFT JOIN t_clients AS c ON z.client_group_id = c.id";
$query .= " LEFT JOIN t_zones_types AS zt ON z.type = zt.id";
$query .= " LEFT JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id";
$query .= " LEFT JOIN t_users AS uc ON z.crt_by = uc.id";
$query .= " LEFT JOIN t_clients AS uc1 ON uc.client_group_id = uc1.id";
$query .= " LEFT JOIN t_users AS up ON z.updt_by = up.id";
$query .= " LEFT JOIN t_clients AS up1 ON uc.client_group_id = up1.id";
$query .= " LEFT JOIN t_users_roles AS uc2 ON uc.role = uc2.id";
$query .= " LEFT JOIN t_users_roles AS up2 ON up.role = up2.id";
$query .= " WHERE z.dlt is null";
if ($auth->role == Users::ROLE_CLIENT_ADMIN) {
$query .= " AND z.client_group_id = " . $auth->client_group_id;
}
if ($auth->role == Users::ROLE_VENDOR) {
$query .= " AND z.client_group_id = " . $auth->client_group_id;
}
if (isset($filter["is_active"])) {
if ($filter["is_active"] == self::STATUS_ACTIVE) {
$query .= " AND z.status = " . self::STATUS_ACTIVE;
} elseif ($filter["is_active"] == self::STATUS_INACTIVE) {
$query .= " AND z.status = " . self::STATUS_INACTIVE;
}
}
if (isset($filter["company"])) {
$query .= " AND c.id = ?";
$params[] = $filter["company"];
}
if (isset($filter["workflow_type"])) {
$query .= " AND z.workflow_type = ?";
$params[] = $filter["workflow_type"];
}
if (isset($filter["type"])) {
$query .= " AND z.type = ?";
$params[] = $filter["type"];
}
return DB::select($query, $params);
// return DB::select("SELECT z.*
// ,c.c_name AS client_group_name
// ,zt.name AS type_name,zw.name AS workflow_type_name
// ,uc.role AS crt_role,up.role AS updt_role
// ,uc1.c_name AS crt_client_group_name,up1.c_name AS updt_client_group_name
// ,uc2.name AS crt_role_name,up2.name AS updt_role_name
// FROM t_zones AS z
// LEFT JOIN t_clients AS c ON z.client_group_id = c.id
// LEFT JOIN t_zones_types AS zt ON z.type = zt.id
// LEFT JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
// LEFT JOIN t_users AS uc ON z.crt_by = uc.id
// LEFT JOIN t_clients AS uc1 ON uc.client_group_id = uc1.id
// LEFT JOIN t_users AS up ON z.updt_by = up.id
// LEFT JOIN t_clients AS up1 ON uc.client_group_id = up1.id
// LEFT JOIN t_users_roles AS uc2 ON uc.role = uc2.id
// LEFT JOIN t_users_roles AS up2 ON up.role = up2.id
// WHERE z.dlt is null
// ;");
}
public static function getActiveZones($client_group_id = 0, $type = 0, $workflow_type = 0)
{
$where_client_group_id = "";
if ($client_group_id != 0) {
$where_client_group_id = " AND z.client_group_id = " . $client_group_id;
}
$where_type = "";
if ($type != 0) {
$where_type = " AND z.type = " . $type;
}
$where_workflow_type = "";
if ($workflow_type != 0) {
$where_workflow_type = " AND z.workflow_type = " . $workflow_type;
}
return DB::select(
"SELECT
z.*
FROM t_zones as z WHERE z.dlt is null AND z.status = " .
Zone::STATUS_ACTIVE .
$where_client_group_id .
$where_type .
$where_workflow_type .
" ;"
);
}
public static function showZoneById($zid)
{
return DB::select(
"SELECT z.*
,c.c_name AS client_group_name
,zt.name AS type_name,zw.name AS workflow_type_name
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = z.prid LIMIT 1) as prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = z.ktid LIMIT 1) as ktid_name
,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = z.kcid LIMIT 1) as kcid_name
,(SELECT nmKelurahan FROM t_region WHERE kodeKel = z.klid LIMIT 1) as klid_name
,uc.role AS crt_role,up.role AS updt_role
,uc1.c_name AS crt_client_group_name,up1.c_name AS updt_client_group_name
,uc2.name AS crt_role_name,up2.name AS updt_role_name
FROM t_zones AS z
LEFT JOIN t_clients AS c ON z.client_group_id = c.id
LEFT JOIN t_zones_types AS zt ON z.type = zt.id
LEFT JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
LEFT JOIN t_users AS uc ON z.crt_by = uc.id
LEFT JOIN t_clients AS uc1 ON uc.client_group_id = uc1.id
LEFT JOIN t_users AS up ON z.updt_by = up.id
LEFT JOIN t_clients AS up1 ON uc.client_group_id = up1.id
LEFT JOIN t_users_roles AS uc2 ON uc.role = uc2.id
LEFT JOIN t_users_roles AS up2 ON up.role = up2.id
WHERE z.dlt is null
AND z.id = ?
LIMIT 1;",
[$zid]
);
}
public static function getZoneById($zid, $filter = [])
{
$select = "";
if (isset($filter["region_name"])) {
$select .= DB::raw(
",(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = z.prid LIMIT 1) as prid_name ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = z.ktid LIMIT 1) as ktid_name"
);
}
return DB::select("SELECT z.* $select FROM t_zones as z WHERE z.dlt is null AND z.id = ? LIMIT 1;", [
$zid,
]);
}
public static function getZoneByIds($zids)
{
// dd($zids);
$params = [];
$where_in = "";
foreach ($zids as $zid) {
$where_in .= "?,";
array_push($params, $zid);
}
if (strpos($where_in, ",") !== false) {
$where_in = substr($where_in, 0, -1);
}
return DB::select(
"SELECT z.*
,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = z.prid LIMIT 1) as prid_name
,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = z.ktid LIMIT 1) as ktid_name
-- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = z.kcid LIMIT 1) as kcid_name
-- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = z.klid LIMIT 1) as klid_name
FROM t_zones as z WHERE z.dlt is null AND z.id IN ($where_in);",
$params
);
}
public static function getZoneByName($name)
{
return DB::select("SELECT * FROM t_zones WHERE dlt is null AND name = ? LIMIT 2;", [$name]);
}
public static function insideZoneCircle($lat, $lng)
{
return DB::select(
"SELECT
" .
Zone::defaultSelectInsideZone .
"
,ST_Distance_Sphere( ST_GeomFromText('POINT($lng $lat)'), z.boundary_points) AS distance_meters
,MBRContains( boundary_points, ST_GeomFromText('POINT($lng $lat)') ) as is_contain
,MBRWithin( ST_GeomFromText('POINT($lng $lat)'), boundary_points ) as is_within
FROM t_zones AS z
INNER JOIN t_zones_types AS zt ON z.type = zt.id
INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
LEFT JOIN t_clients AS c ON z.client_group_id = c.id
WHERE z.dlt is null AND z.status = ? AND z.boundary_type IN (?)
HAVING boundary_radius >= distance_meters
;",
[Zone::STATUS_ACTIVE, Zone::ZONE_BOUNDARY_CIRCLE]
);
}
public static function insideZoneShape($lat, $lng)
{
return DB::select(
"SELECT
" .
Zone::defaultSelectInsideZone .
"
,ST_Distance_Sphere( ST_GeomFromText('POINT($lng $lat)'), z.boundary_points) AS distance_meters
,MBRContains( boundary_points, ST_GeomFromText('POINT($lng $lat)') ) as is_contain
,MBRWithin( ST_GeomFromText('POINT($lng $lat)'), boundary_points ) as is_within
FROM t_zones AS z
INNER JOIN t_zones_types AS zt ON z.type = zt.id
INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
LEFT JOIN t_clients AS c ON z.client_group_id = c.id
WHERE z.dlt is null AND z.status = ? AND z.boundary_type IN (?,?)
HAVING is_within = 1 AND is_contain = 1
;",
[Zone::STATUS_ACTIVE, Zone::ZONE_BOUNDARY_POLYGON, Zone::ZONE_BOUNDARY_RECTANGLE]
);
}
public static function insideOrdZoneCircle($lat, $lng, $filter = [])
{
$params = [Zone::STATUS_ACTIVE, Zone::ZONE_BOUNDARY_CIRCLE];
$where = "";
if (isset($filter["zid"])) {
$where .= " AND z.id = ?";
$params[] = $filter["zid"];
}
return DB::select(
"SELECT
" .
Zone::defaultSelectInsideZone .
"
,ST_Distance_Sphere( ST_GeomFromText('POINT($lng $lat)'), z.boundary_points) AS distance_meters
,MBRContains( boundary_points, ST_GeomFromText('POINT($lng $lat)') ) as is_contain
,MBRWithin( ST_GeomFromText('POINT($lng $lat)'), boundary_points ) as is_within
FROM t_zones AS z
INNER JOIN t_zones_types AS zt ON z.type = zt.id
INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
LEFT JOIN t_clients AS c ON z.client_group_id = c.id
WHERE z.dlt is null AND z.status = ? AND z.boundary_type IN (?)
$where
HAVING boundary_radius >= distance_meters
;",
$params
);
}
public static function insideOrdZoneShape($lat, $lng, $filter = [])
{
$params = [Zone::STATUS_ACTIVE, Zone::ZONE_BOUNDARY_POLYGON, Zone::ZONE_BOUNDARY_RECTANGLE];
$where = "";
if (isset($filter["zid"])) {
$where .= " AND z.id = ?";
$params[] = $filter["zid"];
}
return DB::select(
"SELECT
" .
Zone::defaultSelectInsideZone .
"
,ST_Distance_Sphere( ST_GeomFromText('POINT($lng $lat)'), z.boundary_points) AS distance_meters
,MBRContains( boundary_points, ST_GeomFromText('POINT($lng $lat)') ) as is_contain
,MBRWithin( ST_GeomFromText('POINT($lng $lat)'), boundary_points ) as is_within
FROM t_zones AS z
INNER JOIN t_zones_types AS zt ON z.type = zt.id
INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id
LEFT JOIN t_clients AS c ON z.client_group_id = c.id
WHERE z.dlt is null AND z.status = ? AND z.boundary_type IN (?,?)
$where
HAVING is_within = 1 AND is_contain = 1
;",
$params
);
}
public static function addZone($data)
{
$zid = DB::table("t_zones")->insertGetId($data);
return $zid;
}
public static function updateZone($zid, $data)
{
return DB::table("t_zones")
->where("id", $zid)
->update($data);
}
public static function updateZonesByGroupClientId($zid, $data)
{
return DB::table("t_zones")
->where("id", $zid)
->update($data);
}
public static function deleteZone($zid, $data)
{
return DB::table("t_zones")
->where("id", $zid)
->delete();
}
public static function arrStatus()
{
return [Zone::STATUS_ACTIVE, Zone::STATUS_INACTIVE];
}
public static function arrTypes()
{
return [Zone::ZONE_TYPE_WAREHOUSE];
}
public static function listTypes()
{
return DB::select("SELECT * FROM t_zones_types WHERE dlt is null;");
}
public static function arrWorkflows()
{
return [Zone::ZONE_WORKFLOW_PICKUP, Zone::ZONE_WORKFLOW_DEST, Zone::ZONE_WORKFLOW_PARKING];
}
public static function listWorkflows()
{
return DB::select("SELECT * FROM t_zones_workflows WHERE dlt is null;");
}
public static function arrBoundarys()
{
return [Zone::ZONE_BOUNDARY_CIRCLE, Zone::ZONE_BOUNDARY_POLYGON, Zone::ZONE_BOUNDARY_RECTANGLE];
}
public static function listBoundarys()
{
return [
[
"id" => Zone::ZONE_BOUNDARY_CIRCLE,
"name" => Zone::ZONE_BOUNDARY_NAME_CIRCLE,
],
[
"id" => Zone::ZONE_BOUNDARY_POLYGON,
"name" => Zone::ZONE_BOUNDARY_NAME_POLYGON,
],
[
"id" => Zone::ZONE_BOUNDARY_RECTANGLE,
"name" => Zone::ZONE_BOUNDARY_NAME_RECTANGLE,
],
];
}
}