File manager - Edit - /var/www/payraty/inventory_main/app/Http/Controllers/Admin/Purchase/PurchaseController.php
Back
<?php namespace App\Http\Controllers\Admin\Purchase; use App\Models\Purchase; use App\Models\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\DataTables\PurchaseDataTable; use Illuminate\Http\RedirectResponse; use App\Http\Requests\PurchaseRequest; use App\Services\Purchase\PurchaseServices; use Illuminate\Support\Facades\Auth; use PDF; use Excel; use App\Exports\PurchasesExport; use Illuminate\Support\Facades\DB; use Postmark\PostmarkClient; class PurchaseController extends Controller { protected $services; /** * __construct * * @param mixed $purchaseServices * @return void */ public function __construct(PurchaseServices $purchaseServices) { $this->services = $purchaseServices; $this->middleware(['permission:List Purchase'])->only(['index']); $this->middleware(['permission:Add Purchase'])->only(['create']); $this->middleware(['permission:Edit Purchase'])->only(['edit']); $this->middleware(['permission:Show Purchase'])->only(['show']); $this->middleware(['permission:Delete Purchase'])->only(['destroy']); $this->middleware(['permission:Cancel Purchase'])->only(['cancelPurchase']); $this->middleware(['permission:Confirm Purchase'])->only(['confirmPurchase']); } /** * index * * @param mixed $dataTable * @return void */ public function index(PurchaseDataTable $dataTable) { set_page_meta(__t('purchases')); $user = Auth::user(); $orgId = $user->organisation_id; $purchases = Purchase::where('organisation_id', $orgId)->orderByDesc('id')->paginate(10); $profile = DB::table('profiles')->where('user_id', $user->id)->first(); return view('admin.purchase.index', compact('purchases', 'profile')); } public function purchaseApprove(Request $request, Purchase $purchase) { // return $purchase; $user_approval_level = auth()->user()->po_approval_level; if (!$user_approval_level) { flash("You don't have the permission to approve purchase orders", 'danger')->danger(); return redirect()->back(); } if ($user_approval_level == 1) { $purchase->update([ 'approval_level1' => 'approved', 'approval_level1_by' => auth()->id(), 'approval_level1_by_date' => now(), ]); // next approval $this->sendApprovalRequest($purchase->purchase_number, 2); } if ($user_approval_level == 2) { $purchase->update([ 'approval_level2' => 'approved', 'approval_level2_by' => auth()->id(), 'approval_level2_date' => now(), ]); $client = new PostmarkClient(env('MAIL_USERNAME')); // Template ID from Postmark dashboard || Approved $templateId = 41259685; $to_email = $purchase->create_user?->email; $templateModel = [ 'po_number' => $purchase->purchase_number, ]; $client->sendEmailWithTemplate( env('MAIL_FROM_ADDRESS'), // From $to_email, // To $templateId, // Template ID $templateModel // Template model data ); } flash("Approved successfully")->success(); return redirect()->back(); } public function purchaseReject(Request $request, Purchase $purchase) { // return auth()->id(); // return $purchase; $user_approval_level = auth()->user()->po_approval_level; if (!$user_approval_level) { flash("You don't have the permission to reject purchase orders", 'danger')->danger(); return redirect()->back(); } if ($user_approval_level == 1) { $purchase->update([ 'approval_level1' => 'rejected', 'approval_level1_by' => auth()->id(), 'rejection_note' => $request->rejection_note, 'approval_level1_by_date' => now(), ]); } if ($user_approval_level == 2) { $purchase->update([ 'approval_level2' => 'rejected', 'approval_level2_by' => auth()->id(), 'rejection_note' => $request->rejection_note, 'approval_level2_date' => now(), ]); } $client = new PostmarkClient(env('MAIL_USERNAME')); // Template ID from Postmark dashboard $templateId = 41265077; $to_email = $purchase->create_user?->email; $templateModel = [ 'po_number' => $purchase->purchase_number, 'rejection_note' => $request->rejection_note ]; $client->sendEmailWithTemplate( env('MAIL_FROM_ADDRESS'), // From $to_email, // To $templateId, // Template ID $templateModel // Template model data ); flash("Purchase Order rejected successfully")->success(); return redirect()->back(); } public function sendApprovalRequest($purchaseOrderId, $status) { // $purchaseOrder = Purchase::where("purchase_number", $purchaseOrderId)->first(); $approvers = User::where("po_approval_level", $status)->get()->pluck('email'); // Create Postmark client $client = new PostmarkClient(env('MAIL_USERNAME')); // Template ID from Postmark dashboard $templateId = 41259422; // Data that matches the template variables in Postmark $templateModel = [ 'po_number' => $purchaseOrderId, ]; foreach ($approvers as $key => $email) { $result = $client->sendEmailWithTemplate( env('MAIL_FROM_ADDRESS'), $email, $templateId, $templateModel ); } return "Approval request email sent successfully using Postmark template"; } public function filter(Request $request) { $user = Auth::user(); $orgId = $user->organisation_id; $period = $request->get('period', 'all'); $query = Purchase::where('organisation_id', $orgId)->with(['supplier', 'warehouse', 'purchaseItems']); switch ($period) { case 'monthly': $query->whereMonth('created_at', now()->month); break; case 'yearly': $query->whereYear('created_at', now()->year); break; // 'all' case doesn't need additional filtering } $purchases = $query->paginate(10); if ($request->ajax()) { return response()->json([ 'purchases' => $purchases ]); } // Fallback for non-AJAX requests return redirect()->route('admin.purchase.index'); } public function search(Request $request) { $user = Auth::user(); $orgId = $user->organisation_id; $searchTerm = $request->get('q'); $purchases = Purchase::where('organisation_id', $orgId) ->with(['supplier', 'warehouse', 'purchaseItems']) ->where(function ($query) use ($searchTerm) { $query->orWhereHas('supplier', function ($q) use ($searchTerm) { $q->where('first_name', 'LIKE', "%{$searchTerm}%"); }) ->orWhereHas('warehouse', function ($q) use ($searchTerm) { $q->where('name', 'LIKE', "%{$searchTerm}%"); }); })->orWhere('purchase_number', $searchTerm) ->paginate(10); if ($request->ajax()) { return response()->json([ 'purchases' => $purchases ]); } // Fallback for non-AJAX requests return view('admin.purchase.index', compact('purchases')); } /** * exportPurchases * * @param mixed $request * @return void */ public function exportPurchases(Request $request) { $sales = []; $type = $request->type; $user = Auth::user(); $orgId = $user->organisation_id; $purchases = Purchase::where('organisation_id', $orgId)->get(); $name = 'Purchase_' . now()->format('YmdHis'); if ($type == 'pdf') { $pdf = PDF::loadView('admin.purchase.pdf.index', ['purchases' => $purchases]); return $pdf->download($name . '.pdf'); } else if ($type == 'csv') { return Excel::download(new PurchasesExport($purchases), $name . '.csv'); } else if ($type == 'excel') { return Excel::download(new PurchasesExport($purchases), $name . '.xlsx'); } } /* * This function is worked for * purchase create page render * */ public function create() { set_page_meta(__t('add') . ' ' . __t('purchases')); return view('admin.purchase.create', $this->services->createCredentials()); } /* * This function is worked for * Product Purchase Request Save * */ public function store(PurchaseRequest $request) { // dd($request->all()); $user = Auth::user(); $orgId = $user->organisation_id; $purchase = $this->services->store($request, $orgId); if ($purchase) { $this->sendApprovalRequest($purchase->purchase_number, 1); flash(__t('Purchase Create Successful'))->success(); } else { flash(__t('Purchase Creation Failed'))->error(); } return redirect()->route('admin.purchases.index'); } /** * show * * @param mixed $purchase * @return void */ public function show(Purchase $purchase) { set_page_meta(__t('view') . ' ' . __t('purchases') . ':' . $purchase->purchase_number); // return $purchase; return view('admin.purchase.show', [ 'purchase' => $purchase->load(['supplier', 'warehouse', 'purchaseItems.product']) ]); } /** * Show the form for editing the specified resource. */ public function edit(Purchase $purchase) { // return $this->services->get($purchase->id,['purchaseItems.product','purchaseItems.productStock.attribute','purchaseItems.productStock.attributeItem']); set_page_meta(__t('edit') . ' ' . __t('purchases')); return view( 'admin.purchase.edit', // [ // 'purchase' => $this->services->get($purchase->id,['purchaseItems.product','purchaseItems.productStock.attribute','purchaseItems.productStock.attributeItem']) // ] $this->services->setModel($purchase)->editCredentials() ); } /** * This function is worker for * Purchase request Update */ public function update(PurchaseRequest $request, Purchase $purchase): RedirectResponse { $update = $this->services->setModel($purchase)->update($request); if ($update) { flash(__t('custom.purchase_update_successful'))->success(); } else { flash(__t('custom.purchase_update_failed'))->error(); } return redirect()->route('admin.purchases.index'); } /** * Remove the specified resource from storage. */ public function destroy(Purchase $purchase): RedirectResponse { try { $purchase->purchaseItems()->delete(); $purchase->delete(); flash(__t('custom.purchase_delete_successful'))->success(); } catch (\Exception $e) { if ($e->getCode() == 23000) { flash(__t('custom.purchase_already_use'))->error(); } else { flash($e->getMessage())->error(); } } return redirect()->route('admin.purchases.index'); } /* * This function is work for purchase cancel page render * * */ public function cancelPurchase(Purchase $purchase) { set_page_meta(__t('cancel') . ' ' . __t('purchases')); return view('admin.purchase.cancel', ['purchase' => $purchase]); } /* * This function work for cancel information store * * */ public function storeCancelPurchase(Request $request, Purchase $purchase): RedirectResponse { $request->validate([ 'date' => 'required|date:Y-m-d', 'note' => 'required|string' ]); $purchase->update([ 'status' => Purchase::STATUS_CANCEL, 'cancel_date' => $request->date, 'cancel_by' => auth()->id(), 'cancel_note' => $request->note, ]); flash(__t('custom.purchase_cancel_successful'))->success(); return redirect()->route('admin.purchases.index'); } /* * This function work for purchase confirm * * */ public function confirmPurchase(Purchase $purchase): RedirectResponse { $purchase->update(['status' => Purchase::STATUS_CONFIRMED]); flash(__t('custom.purchase_confirm_successful'))->success(); return redirect()->route('admin.purchases.index'); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings