| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/app/Http/Controllers/ |
Upload File : |
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Http\Requests\BoxDeliveries\BookingRequest as BoxDeliveryBookingRequest;
use App\Http\Requests\BoxDeliveries\UpdateRequest as BoxDeliveryUpdateRequest;
use App\Http\Requests\BoxDeliveries\ListRequest as BoxDeliveryListRequest;
use App\Http\Requests\BoxDeliveries\OverviewListRequest as BoxDeliveryOverviewListRequest;
use App\Http\Requests\BoxDeliveries\ExpiredListRequest as BoxDeliveryExpiredListRequest;
use App\Http\Requests\BoxDeliveries\ExportDeliveryInstructionRequest;
use App\Http\Requests\BoxDeliveries\CheckParcelInfoRequest;
use App\Http\Requests\BoxDeliveries\CheckDeliveryDetailRequest;
use App\Http\Requests\BoxDeliveries\QrCodeRequest;
use App\Http\Requests\BoxBookings\TestLabel;
use App\Http\Requests\IdOnlyRequest;
use App\Http\Requests\ParamIdRequest;
use App\Http\Services\BoxDeliveryService;
use App\Http\Services\GeoZoneService;
use Auth;
use App\Models\User;
use App\Models\UserBoxDelivery;
use Illuminate\Validation\ValidationException;
class BoxDeliveryController extends Controller
{
public function __construct(
BoxDeliveryService $boxDeliveryService,
GeoZoneService $geoZoneService
)
{
$this->boxDeliveryService = $boxDeliveryService;
$this->geoZoneService = $geoZoneService;
}
/**
* @OA\Get(
*
* path="/api/box-delivery/list/{type}",
* operationId="BoxDeliveryList",
* tags={"Box Delivery"},
* summary="BoxDelivery List",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="terminal_id",
* description="terminal_id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Parameter(
* name="delivery_partner_id",
* description="delivery_partner_id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Parameter(
* name="type",
* description="type",
* in="path",
* @OA\Schema(
* type="enum",
* default="history",
* enum={"history", "delivery", "drop-off","on-going-history"}
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryList(BoxDeliveryListRequest $request)
{
$payload = $request->validated();
$user = Auth::user();
if(Auth::user()->isSuperAdmin() && isset($payload['user_id'])){
$user = User::withTrashed()->where('id',$payload['user_id'])->firstOr(function(){
throw ValidationException::withMessages([
"user_id" => "User ID is unavailable.",
]);
});
}
switch ($payload['type']) {
case 'history':
$payload['user_id'] = $user->id;
break;
case 'delivery':
unset($payload['user_id']);
$payload['pending_delivery'] = true;
break;
case 'drop-off':
$payload['user_id'] = $user->id;
$payload['uncollected'] = true;
break;
case 'on-going-history':
unset($payload['user_id']);
$payload['user_uncollected'] = $user->id;
break;
default:
break;
}
$boxDeliverys = $this->boxDeliveryService->boxDeliveryList( $payload );
// manual compute
$boxDeliverys->each(function($item, $key) use ($user, $payload){
$item->getInventoryType($user);
$item->getQrCode();
});
$boxDeliverys->append(['inventory_type','total_usage_time']);
return self::successResponse('Success', $boxDeliverys);
}
/**
* @OA\Get(
*
* path="/api/box-delivery/info/{id}",
* operationId="boxDeliveryInfo",
* tags={"Box Delivery"},
* summary="BoxDeliveryInfo",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="path",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryInfo(ParamIdRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->boxDeliveryInfo( $payload );
// manual compute
$boxDelivery->getInventoryType($boxDelivery->dropper);
$boxDelivery->append(['inventory_type','total_usage_time']);
return self::successResponse('Success', $boxDelivery );
}
/**
* @OA\Get(
*
* path="/api/box-delivery/parcel-type",
* operationId="deliveryParcelType",
* tags={"Box Delivery"},
* summary="DeliveryParcelType",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function getParcelTypes()
{
$types = $this->boxDeliveryService->getParcelTypes();
return self::successResponse('Success', $types);
}
/**
* @OA\Get(
*
* path="/api/box-delivery/check-parcel-info",
* operationId="checkParcelInfo",
* tags={"Box Delivery"},
* summary="Check parcel dimension and weight",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="parcel_type",
* description="parcel_type",
* in="query",
* @OA\Schema(
* type="string",
* default="1"
* )
* ),
* @OA\Parameter(
* name="box_size_id",
* description="box_size_id",
* in="query",
* @OA\Schema(
* type="string",
* default="2"
* )
* ),
* @OA\Parameter(
* name="parcel_length",
* description="parcel_length",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_width",
* description="parcel_width",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_height",
* description="parcel_height",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_weight",
* description="parcel_weight",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="receiver_postcode",
* description="receiver_postcode",
* in="query",
* @OA\Schema(
* type="string",
* default="71800"
* )
* ),
* @OA\Parameter(
* name="receiver_city",
* description="receiver_city",
* in="query",
* @OA\Schema(
* type="string",
* default="Nilai"
* )
* ),
* @OA\Parameter(
* name="receiver_state",
* description="receiver_state",
* in="query",
* @OA\Schema(
* type="string",
* default="Negeri Sembilan"
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function checkParcelInfo(CheckParcelInfoRequest $request)
{
$payload = $request->validated();
if(isset($payload['receiver_postcode']))
{
$to_state = $this->geoZoneService->getState($payload['receiver_postcode']);
if($to_state == "Unknown")
throw ValidationException::withMessages(
[ "receiver_postcode" => "The receiver postcode is invalid." ]
);
}
$validity = $this->boxDeliveryService->checkParcelInfo($payload);
return self::successResponse('Success', $validity);
}
/**
* @OA\Get(
*
* path="/api/box-delivery/check-delivery-detail",
* operationId="checkDeliveryDetails",
* tags={"Box Delivery"},
* summary="Check Delivery Details",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="parcel_info",
* description="parcel_info",
* in="query",
* @OA\Schema(
* type= "string",
* default="Groceries"
* )
* ),
* @OA\Parameter(
* name="dropper_name",
* description="dropper_name",
* in="query",
* @OA\Schema(
* type="string",
* default="customer"
* )
* ),
* @OA\Parameter(
* name="dropper_num",
* description="dropper_num",
* in="query",
* @OA\Schema(
* type="string",
* default="+60136265471"
* )
* ),
* @OA\Parameter(
* name="receiver_name",
* description="receiver_name",
* in="query",
* @OA\Schema(
* type="string",
* default="customer_2"
* )
* ),
* @OA\Parameter(
* name="receiver_email",
* description="receiver_email",
* in="query",
* @OA\Schema(
* type="string",
* default="customer_2@email.com"
* )
* ),
* @OA\Parameter(
* name="receiver_num",
* description="receiver_num",
* in="query",
* @OA\Schema(
* type="string",
* default="+60136265470"
* )
* ),
* @OA\Parameter(
* name="receiver_house_num",
* description="receiver_house_num",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="receiver_address",
* description="receiver_address",
* in="query",
* @OA\Schema(
* type="string",
* default="12, Jalan Desa Kasia, Taman Desa Kasia"
* )
* ),
* @OA\Parameter(
* name="receiver_postcode",
* description="receiver_postcode",
* in="query",
* @OA\Schema(
* type="string",
* default="71800"
* )
* ),
* @OA\Parameter(
* name="receiver_city",
* description="receiver_city",
* in="query",
* @OA\Schema(
* type="string",
* default="Nilai"
* )
* ),
* @OA\Parameter(
* name="receiver_state",
* description="receiver_state",
* in="query",
* @OA\Schema(
* type="string",
* default="Negeri Sembilan"
* )
* ),
* @OA\Parameter(
* name="remarks",
* description="remarks",
* in="query",
* @OA\Schema(
* type="string",
* default="No Remarks"
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function checkDeliveryDetail(CheckDeliveryDetailRequest $request)
{
$payload = $request->validated();
$to_state = $this->geoZoneService->getState($payload['receiver_postcode']);
if($to_state == "Unknown")
throw ValidationException::withMessages(
[ "receiver_postcode" => "The receiver postcode is invalid." ]
);
return self::successResponse('Success', true);
}
public function generateQrCode(QrCodeRequest $request)
{
$payload = $request->validated();
$payload['user_id'] = Auth::id();
$qrCode = $this->boxDeliveryService->generateQrCode( $payload );
return self::successResponse('Success',$qrCode);
}
public function boxDeliveryOverviewList(BoxDeliveryOverviewListRequest $request)
{
$payload = $request->validated();
if(Auth::user()->isPartner()){
$payload['partner_id'] = Auth::id();
}
$boxDeliverys = $this->boxDeliveryService->boxDeliveryList( $payload );
$boxDeliverys->append(['total_booking_fee', 'total_booking_fee_partner', 'delivery_booking_fee']);
return self::successResponse('Success', $boxDeliverys);
}
public function exportBoxDeliveryOverviewList(BoxDeliveryOverviewListRequest $request)
{
$payload = $request->validated();
if(Auth::user()->isPartner()){
$payload['partner_id'] = Auth::id();
}
$boxDeliverys = $this->boxDeliveryService->exportBoxDeliveryList( $payload );
return self::successResponse('Success', $boxDeliverys);
}
public function exportBoxDeliveryInstruction(ExportDeliveryInstructionRequest $request)
{
$payload = $request->validated();
$payload['pending_delivery'] = true;
$boxDeliverys = $this->boxDeliveryService->exportBoxDeliveryInstruction( $payload );
return self::successResponse('Success', $boxDeliverys);
}
/**
* @OA\Post(
*
* path="/api/box-delivery/booking",
* operationId="boxDeliveryBooking",
* tags={"Box Delivery"},
* summary="boxDeliveryBooking",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="locker_id",
* description="locker_id",
* in="query",
* @OA\Schema(
* type="string",
* default="4"
* )
* ),
* @OA\Parameter(
* name="box_size_id",
* description="box_size_id",
* in="query",
* @OA\Schema(
* type="string",
* default="2"
* )
* ),
* @OA\Parameter(
* name="delivery_partner_id",
* description="delivery_partner_id",
* in="query",
* @OA\Schema(
* type="string",
* default="1"
* )
* ),
* @OA\Parameter(
* name="parcel_info",
* description="parcel_info",
* in="query",
* @OA\Schema(
* type= "string",
* default="Groceries"
* )
* ),
* @OA\Parameter(
* name="parcel_type",
* description="parcel_type",
* in="query",
* @OA\Schema(
* type= "string",
* default="1"
* )
* ),
* @OA\Parameter(
* name="parcel_length",
* description="parcel_length",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_width",
* description="parcel_width",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_height",
* description="parcel_height",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="parcel_weight",
* description="parcel_weight",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="dropper_name",
* description="dropper_name",
* in="query",
* @OA\Schema(
* type="string",
* default="customer"
* )
* ),
* @OA\Parameter(
* name="dropper_num",
* description="dropper_num",
* in="query",
* @OA\Schema(
* type="string",
* default="+60136265471"
* )
* ),
* @OA\Parameter(
* name="receiver_name",
* description="receiver_name",
* in="query",
* @OA\Schema(
* type="string",
* default="customer_2"
* )
* ),
* @OA\Parameter(
* name="receiver_email",
* description="receiver_email",
* in="query",
* @OA\Schema(
* type="string",
* default="customer_2@email.com"
* )
* ),
* @OA\Parameter(
* name="receiver_num",
* description="receiver_num",
* in="query",
* @OA\Schema(
* type="string",
* default="+60136265470"
* )
* ),
* @OA\Parameter(
* name="receiver_house_num",
* description="receiver_house_num",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Parameter(
* name="receiver_address",
* description="receiver_address",
* in="query",
* @OA\Schema(
* type="string",
* default="12, Jalan Desa Kasia, Taman Desa Kasia"
* )
* ),
* @OA\Parameter(
* name="receiver_postcode",
* description="receiver_postcode",
* in="query",
* @OA\Schema(
* type="string",
* default="71800"
* )
* ),
* @OA\Parameter(
* name="receiver_city",
* description="receiver_city",
* in="query",
* @OA\Schema(
* type="string",
* default="Nilai"
* )
* ),
* @OA\Parameter(
* name="receiver_state",
* description="receiver_state",
* in="query",
* @OA\Schema(
* type="string",
* default="Negeri Sembilan"
* )
* ),
* @OA\Parameter(
* name="remarks",
* description="remarks",
* in="query",
* @OA\Schema(
* type="string",
* default="No Remarks"
* )
* ),
* @OA\Parameter(
* name="credit_amount",
* description="credit_amount",
* in="query",
* @OA\Schema(
* type="string",
* default="12"
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryBooking(BoxDeliveryBookingRequest $request)
{
$payload = $request->validated();
$payload['user_id'] = Auth::id();
$payload['reserved_minute'] = UserBoxDelivery::MAX_RESERVED_MINUTES;
$payload['type'] = 'delivery_booking';
$boxDelivery = $this->boxDeliveryService->boxDeliveryBooking( $payload );
return self::successResponse('Success',$boxDelivery);
}
public function boxDeliveryUpdate(BoxDeliveryUpdateRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->boxDeliveryUpdate( $payload );
return self::successResponse('Success',$boxDelivery);
}
/**
* @OA\Post(
*
* path="/api/box-delivery/open-box",
* operationId="boxDeliveryOpenBox",
* tags={"Box Delivery"},
* summary="boxDeliveryOpenBox",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryOpenBox(IdOnlyRequest $request)
{
$payload = $request->validated();
$payload['user_id'] = Auth::id();
$boxDelivery = $this->boxDeliveryService->boxDeliveryOpenBox( $payload );
return self::successResponse('Success',$boxDelivery);
}
/**
* @OA\Post(
*
* path="/api/box-delivery/collect",
* operationId="boxDeliveryCollect",
* tags={"Box Delivery"},
* summary="boxDeliveryCollect",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryCollect(IdOnlyRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->boxDeliveryCollect( $payload );
return self::successResponse('Success',$boxDelivery);
}
/**
* @OA\Delete(
*
* path="/api/box-delivery/cancel",
* operationId="boxDeliveryCancel",
* tags={"Box Delivery"},
* summary="boxDeliveryCancel",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryCancel(IdOnlyRequest $request)
{
$payload = $request->validated();
$payload['user_id'] = Auth::id();
$boxDelivery = $this->boxDeliveryService->boxDeliveryCollect( $payload , $is_canceling = true);
return self::successResponse('Success',$boxDelivery);
}
public function boxDeliveryForceCancel(IdOnlyRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->boxDeliveryForceCancel( $payload );
return self::successResponse('Success',$boxDelivery);
}
public function boxDeliveryExpiredList(BoxDeliveryExpiredListRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->boxDeliveryExpiredList( $payload );
return self::successResponse('Success',$boxDelivery);
}
public function penalizeVault(BoxDeliveryExpiredListRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->penalizeVault( $payload );
return self::successResponse('Success',$boxDelivery);
}
public function claimPenalizeVault(IdOnlyRequest $request)
{
$payload = $request->validated();
$boxDelivery = $this->boxDeliveryService->claimPenalizeVault( $payload );
return self::successResponse('Success',$boxDelivery);
}
/**
* @OA\Post(
*
* path="/api/box-delivery/print-label",
* operationId="boxDeliveryTestPrint",
* tags={"Box Delivery"},
* summary="boxDeliveryTestPrint",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function BoxDeliveryPrintLabel(TestLabel $request)
{
$payload = $request->validated();
$printingLabel = $this->boxDeliveryService->testPrintLabel( $payload );
return self::successResponse('Success',$printingLabel);
}
/**
* @OA\Post(
*
* path="/api/box-delivery/test-alert",
* operationId="boxDeliveryTestAlert",
* tags={"Box Delivery"},
* summary="boxDeliveryTestAlert",
* security={
* {
* "open_key": {}
* },
* {
* "api_key": {}
* }
* },
* @OA\Parameter(
* name="id",
* description="id",
* in="query",
* @OA\Schema(
* type="string",
* default=""
* )
* ),
* @OA\Response(
* response=200,
* description="Success",
* @OA\JsonContent()
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* @OA\Response(response=422, description="Unprocessable Entity"),
* @OA\Response(response=500, description="Internal Server Error"),
* )
*/
public function boxDeliveryTestAlert(TestLabel $request)
{
$payload = $request->validated();
$alert = $this->boxDeliveryService->testAlert( $payload );
return self::successResponse($alert);
}
}