moduleUtil = $moduleUtil;
$this->commonUtil = $commonUtil;
$this->assetUtil = $assetUtil;
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'assetmanagement_module')))) {
abort(403, 'Unauthorized action.');
}
if (request()->ajax()) {
$asset_allocated = AssetTransaction::join('asset_transactions as PT',
'asset_transactions.parent_id', '=', 'PT.id')
->join('assets', 'PT.asset_id', '=', 'assets.id')
->join('users as receiver', 'PT.receiver', '=', 'receiver.id')
->join('users as revoked_by', 'asset_transactions.created_by', '=', 'revoked_by.id')
->leftJoin('categories as CAT', 'assets.category_id',
'=', 'CAT.id')
->where('asset_transactions.business_id', $business_id)
->where('asset_transactions.transaction_type', 'revoke')
->select('asset_transactions.ref_no as ref_no',
'asset_transactions.quantity as quantity',
'asset_transactions.transaction_datetime as revoked_at', 'asset_transactions.id as id',
'assets.name as asset', 'assets.model as model',
'CAT.name as category', DB::raw("CONCAT(COALESCE(receiver.surname, ''),' ',COALESCE(receiver.first_name, ''),' ',COALESCE(receiver.last_name,'')) as revoked_for"),
DB::raw("CONCAT(COALESCE(revoked_by.surname, ''),' ',COALESCE(revoked_by.first_name, ''),' ',COALESCE(revoked_by.last_name,'')) as revoked_by_name"),
'PT.ref_no as allocation_code', 'asset_transactions.reason as reason');
return Datatables::of($asset_allocated)
->addColumn('action', function ($row) {
$html = '
';
$html .= '';
$html .= '
';
return $html;
})
->editColumn('revoked_at', '
@if(!empty($revoked_at))
@format_datetime($revoked_at)
@endif
')
->editColumn('quantity', '
@if(!empty($quantity))
{{@format_quantity($quantity)}}
@endif
')
->removeColumn('id')
->rawColumns(['action', 'revoked_at', 'quantity'])
->make(true);
}
return view('assetmanagement::asset_revocation.index');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create(Request $request)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'assetmanagement_module')))) {
abort(403, 'Unauthorized action.');
}
if ($request->ajax()) {
$allocated_id = $request->get('id');
$allocated_asset = AssetTransaction::where('business_id', $business_id)
->findOrFail($allocated_id);
$total_revoked_asset = $this->_getRevokedQtyOfAllocatedAsset($allocated_asset);
return view('assetmanagement::asset_revocation.create')
->with(compact('allocated_asset', 'total_revoked_asset'));
}
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'assetmanagement_module')))) {
abort(403, 'Unauthorized action.');
}
try {
$input = $request->only('ref_no', 'parent_id', 'asset_id', 'quantity', 'transaction_datetime', 'reason');
$input['transaction_type'] = 'revoke';
$input['business_id'] = $business_id;
$input['created_by'] = request()->session()->get('user.id');
DB::beginTransaction();
if (empty($input['ref_no'])) {
$ref_count = $this->commonUtil->setAndGetReferenceCount('revoke_code', $business_id);
$asset_settings = $this->assetUtil->getAssetSettings($business_id);
$revoke_code_prefix = $asset_settings['revoke_code_prefix'] ?? null;
$input['ref_no'] = $this->commonUtil->generateReferenceNumber('revoke_code', $ref_count, null, $revoke_code_prefix);
}
if (! empty($input['transaction_datetime'])) {
$input['transaction_datetime'] = $this->commonUtil->uf_date($input['transaction_datetime'], true);
}
if (! empty($input['quantity'])) {
$input['quantity'] = $this->commonUtil->num_uf($input['quantity']);
}
AssetTransaction::create($input);
DB::commit();
return redirect()
->action([\Modules\AssetManagement\Http\Controllers\RevokeAllocatedAssetController::class, 'index'])
->with('status', ['success' => true,
'msg' => __('lang_v1.success'), ]);
} catch (Exception $e) {
DB::rollBack();
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
return redirect()->back()
->with('status', ['success' => false,
'msg' => __('messages.something_went_wrong'),
]);
}
}
/**
* Show the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('assetmanagement::show');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
return view('assetmanagement::edit');
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'assetmanagement_module')))) {
abort(403, 'Unauthorized action.');
}
if (request()->ajax()) {
try {
$asset_revoked = AssetTransaction::where('business_id', $business_id)
->findOrfail($id);
$asset_revoked->delete();
$output = [
'success' => true,
'msg' => __('lang_v1.success'),
];
} catch (Exception $e) {
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
$output = [
'success' => false,
'msg' => __('messages.something_went_wrong'),
];
}
return $output;
}
}
/**
* Get total revoked qty
* of an allocated asset
*
* @return int
*/
protected function _getRevokedQtyOfAllocatedAsset($allocated_asset)
{
$asset_transaction = AssetTransaction::where('business_id', $allocated_asset->business_id)
->where('parent_id', $allocated_asset->id)
->select(DB::raw('SUM(COALESCE(quantity, 0)) as quantity'))
->first();
return $asset_transaction->quantity;
}
}