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