/
home
/
sjslayjy
/
public_html
/
tabson_test
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\Item; use App\PurchaseOrder; use App\LocalUserMapping; use App\StockInCircleStore; use App\HistoryOfStockInCircleStore; use App\SparePartsMaster; use DB; use Facade\FlareClient\View; use Illuminate\Http\Request; use Mail; class ProductionOrderController extends Controller { public $data; public function get_common() { if (Auth::check()) { $user = Auth::user(); $this->data['userInfo'] = LocalUserMapping::where('LoginID', $user->loginId)->first(); } } public function index(Request $request) { $data=[]; $data['vendors'] = \App\Vendor::where('is_active', 1)->where('status', 'Approved')->get(); $data['circles']=\App\Circle::where('is_active',1)->get(); $data['business_units']= DB::table('business_units')->where('is_active',1)->get(); $data['payment_terms']= DB::table('payment_terms')->get(); $data['delivery_periods']= DB::table('delivery_periods')->get(); $data['production_types']= DB::table('po_category')->get(); $data['bill_of_materials']= DB::table('bill_of_materials')->where('bill_of_materials.current_status','!=','completed')->where('bill_of_materials.status','Approved')->get(); //dd($data); return view('dashboard.production-order.make-production-order',$data); } public function getBomNumberItem(Request $request) { $bomNumber = $request->bomNumber; $response['items'] = \DB::table('bill_of_material_items')->join('bill_of_materials','bill_of_materials.id','bill_of_material_items.bom_id')->join('items','items.code','bill_of_material_items.item_code')->select('bill_of_material_items.*','bill_of_materials.bom_number as BomN','items.description','items.uom','items.hsn_code','items.gst')->where(function($query){ $query->where('bill_of_material_items.status','Requested'); $query->orWhere('bill_of_material_items.status','partially_completed'); })->where('bill_of_materials.status','Approved')->where('bill_of_materials.current_status','!=','completed')->where('bill_of_materials.bom_number',$bomNumber)->get(); //dd($response); if(count($response['items']) > 0){ $response['success'] = true; }else{ $response['success'] = false; } return response()->json($response); } public function addPurchaseOrder(Request $request){ //dd($request->all()); $response = array(); $validator = \Validator::make($request->all(), array( 'document1' => 'mimes:pdf', 'document2' => 'mimes:pdf', 'document3' => 'mimes:pdf' ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); //$validator->getMessageBag(); }else{ $items = json_decode($request->items, true); $flag = true; foreach($items as $key=>$item){ if( strpos($item['pr_id'], ',') !== false ) { $pr_ids = explode(',', $item['pr_id']); $pr_item = \App\PurchaseRequestItem::whereIn('pr_id', $pr_ids)->where('item_code',$item['item_code'])->sum('rqty'); $balance = $pr_item - $item['qty']; if($balance < 0) { $flag = false; break; } } else { $pr_item = \App\PurchaseRequestItem::where('pr_id', $item['pr_id'])->where('item_code',$item['item_code'])->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty - $item['qty']; if($balance < 0) { $flag = false; break; } } } } if($flag) { try { DB::beginTransaction(); $purchaseOrder = new \App\PurchaseOrder(); $purchaseOrder->business_unit = $request->business_unit; $purchaseOrder->circle = $request->circle; $purchaseOrder->contact = $request->contact; $purchaseOrder->bill_to_address = $request->bill_to_address; $purchaseOrder->delivery_address = $request->delivery_address; $purchaseOrder->po_created_by = \Auth::user()->id; $purchaseOrder->delivery_periods_id = $request->delivery_periods; if($request->delivery_periods != "other"){ $delivery_periods = \DB::table('delivery_periods')->where('id',$request->delivery_periods)->first(); $purchaseOrder->delivery_periods = $delivery_periods->name; }else{ $purchaseOrder->delivery_periods = $request->delivery_period_textarea; } $purchaseOrder->delivery_terms = $request->delivery_terms; $purchaseOrder->document_type = $request->document_type; $purchaseOrder->payment_terms_id = $request->payment_terms; if($request->payment_terms != "other"){ $payment_terms = \DB::table('payment_terms')->where('id',$request->payment_terms)->first(); $purchaseOrder->payment_terms = $payment_terms->name; }else{ $purchaseOrder->payment_terms = $request->payment_term_textarea; } $purchaseOrder->reference_no = $request->reference_no; $purchaseOrder->stc = $request->stc; $purchaseOrder->vendor_id = $request->vendor; $purchaseOrder->warranty_terms = $request->warranty_terms; $purchaseOrder->po_amount = $request->po_amount; $purchaseOrder->po_gst_amount = $request->po_gst_amount; $purchaseOrder->status = 'requested'; $purchaseOrder->current_status = 'processing'; $purchaseOrder->amendment_number = 0; $purchaseOrder->po_type = $request->po_type; // file upload if($request->hasFile('document1')) { $filenameWithExt = $request->file('document1')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document1')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document1')->move($destinationPath, $fileNameToStore); $purchaseOrder->document1 = str_replace(public_path(), '', $path); } if($request->hasFile('document2')) { $filenameWithExt = $request->file('document2')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document2')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document2')->move($destinationPath, $fileNameToStore); $purchaseOrder->document2 = str_replace(public_path(), '', $path); } if($request->hasFile('document3')) { $filenameWithExt = $request->file('document3')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document3')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document3')->move($destinationPath, $fileNameToStore); $purchaseOrder->document3 = str_replace(public_path(), '', $path); } if($purchaseOrder->save()){ if(date('m')>=4){ $session=date('y').(date('y')+1); }else{ $session=(date('y')-1).date('y'); } $series_po = \App\PurchaseOrder::where('session', $session)->orderBy('id', 'desc')->first(); if(!is_null($series_po)) { $series = $series_po->series + 1; } else { $series = 1; } switch (strlen((string)$series)) { case 1: $series = '000'.$series; break; case 2: $series = '00'.$series; break; case 3: $series = '0'.$series; break; default: $series = $series; } if($purchaseOrder->po_type==1){ $purchaseOrder->po_number = 'TABSON/PO/'.$session."/".$series; } if($purchaseOrder->po_type==2){ $purchaseOrder->po_number = 'TABSON/WO/'.$session."/".$series; } if($purchaseOrder->po_type==''){ $purchaseOrder->po_number = 'TABSON/PO/'.$session."/".$series; } $purchaseOrder->session = $session; $purchaseOrder->series = ($series*1); $purchaseOrder->save(); }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } $items = json_decode($request->items, true); foreach ($items as $key => $item){ $purchase_order_items = new \App\PurchaseOrderItem(); $purchase_order_items->po_id = $purchaseOrder->id; $purchase_order_items->pr_id = $item['pr_id']; $purchase_order_items->rate = $item['rate']; $purchase_order_items->qty = $item['qty']; $purchase_order_items->uom = $item['uom']; $purchase_order_items->specification = $item['specification']; $purchase_order_items->make = $item['make']; $purchase_order_items->item_code = $item['item_code']; $purchase_order_items->save(); if(strpos($item['pr_id'], ',')) { $pr_ids = explode(',', $item['pr_id']); $this->handleMultiplePrItem($pr_ids, $item['qty'], $item['item_code']); } else { $pr_item = \App\PurchaseRequestItem::where('pr_id', $item['pr_id'])->where('item_code',$item['item_code'])->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty - $item['qty']; $pr_item->rqty = $balance; $pr_item->status = ($balance > 0)?'partially_completed':'completed'; $pr_item->save(); } } } $check_pr = \App\PurchaseRequestItem::where('pr_id',$item['pr_id'])->where('status','Requested')->orWhere('status', 'partially_completed')->first(); if($check_pr==null){ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='completed'; $pr->save(); }else{ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='partially_completed'; $pr->save(); } $purchaseOrderLog = new \App\PurchaseOrderLog(); $purchaseOrderLog->po_id = $purchaseOrder->id; $purchaseOrderLog->user_id = \Auth::user()->id; $purchaseOrderLog->message = 'create'; $purchaseOrderLog->save(); // $this->poMail($purchaseOrder->id); $response['success'] = true; $response['msg'] = "Purchase Order Added Successfully !!"; $response['po_number'] = $purchaseOrder->po_number; DB::commit(); } catch(\Exception $e) { DB::rollback(); $response['error'] = $e->getMessage(); } } else { $response['success'] = false; $response['msg'] = 'Purchase Order quantity is greater than PR remaining Quantity.'; } } return response()->json($response); } public function handleMultiplePrItem($pr_ids, $item_qty, $item_code) { foreach ($pr_ids as $key=>$value) { $pr_item = \App\PurchaseRequestItem::where('pr_id', $value)->where('item_code',$item_code)->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty - $item_qty; if($balance < 0) { $balance = 0; $item_qty = $item_qty - $pr_item->rqty; } else { $item_qty = 0; } $pr_item->rqty = $balance; $pr_item->status = ($balance > 0)?'partially_completed':'completed'; $pr_item->save(); } } } public function allPo() { $data['role_id'] =Auth::user()->role_id; $data['email'] =Auth::user()->email; $data['id'] =Auth::user()->id; $data['purchase_orders'] = \DB::table('purchase_orders') ->select('purchase_orders.*') ->orderBy('id', 'DESC') ->get(); return view('dashboard.po.all-po', $data); } public function viewPo($po_id){ $data['po_data'] = DB::table('purchase_orders') ->join('vendors','vendors.id','purchase_orders.vendor_id') ->join('circles','circles.id','purchase_orders.circle') ->join('business_units','business_units.id','purchase_orders.business_unit') ->join('po_category','po_category.id','purchase_orders.po_type') ->select('vendors.vendor_code','vendors.vendor_name','vendors.address','vendors.gst as s_gst','purchase_orders.*','circles.name as c_name','circles.gst_number as c_gst','business_units.name as b_name','po_category.name as po_category') ->where('purchase_orders.id',$po_id) ->first(); $data['item_data'] = \DB::table('purchase_order_items')->join('items','items.code', 'purchase_order_items.item_code') ->join('category', 'items.category','category.id') ->select('purchase_order_items.*', 'items.description','items.code','items.uom','items.gst','category.*','category.name as category_name') ->where('purchase_order_items.po_id', $po_id) ->orderBy('purchase_order_items.id', 'ASC') // Added to view the items in the exact serial-wise in which they were added while creating the PO. ->get(); //dd($data); $total_amount=0; foreach ($data['item_data'] as $key => $value) { $total=$value->rate*$value->qty; $tax_amount = ($total*$value->gst)/100; $total_amount= $total_amount+$total+$tax_amount; } $data['total_amount']=$total_amount; $data['total_in_word'] = $this->convert_number_to_words($total_amount); return view('dashboard.po.po-view',$data); } public function setPoStatus(Request $request){ $response = array(); $validator = \Validator::make($request->all(), array( 'status' =>'required', ) ); if($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); }else{ $po_details = \App\PurchaseOrder::where('id',$request->id)->first(); if(is_null($po_details)){ $response['flag'] = false; $response['error'] = "Item Not found"; }else{ $po_details->status = $request->status; $po_details->remark = $request->remark; if($po_details->save()){ //Create Log $purchaseOrderLog = new \App\PurchaseOrderLog(); $purchaseOrderLog->po_id = $po_details->id; $purchaseOrderLog->user_id = \Auth::user()->id; $purchaseOrderLog->message = $po_details->status; $purchaseOrderLog->remark = $po_details->remark; $purchaseOrderLog->save(); if($po_details->status == 'rejected') { $po_item = \App\PurchaseOrderItem::where('po_id', $request->id)->get(); if(count($po_item) > 0) { foreach($po_item as $key=>$value) { $pr_item = \App\PurchaseRequestItem::where('pr_id', $value->pr_id)->where('item_code', $value->item_code)->first(); if($pr_item != null) { $pr_item->rqty = $pr_item->rqty + $value->qty; $pr_item->status = ($pr_item->rqty > 0)?(($pr_item->rqty == $pr_item->qty)?'Requested':'partially_completed'):'completed'; $pr_item->save(); } $pr_id = $value->pr_id; } $prItemQty = \App\PurchaseRequestItem::where('pr_id', $pr_id)->selectRaw('sum(qty) as qty, sum(rqty) as rqty')->first(); $pr_status = ($prItemQty->qty == $prItemQty->rqty)?'processing':(($prItemQty->rqty > 0)?'partially_completed':'completed'); $pr_request = \App\PurchaseRequest::where('id', $pr_id)->first(); $pr_request->current_status = $pr_status; $pr_request->save(); } } if($request->status != 'ReOpened') { //send mails // $this->poMail($po_details->id); } $response['flag'] = true; $response['message'] = "Status Updated Successfully"; }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } } } return response()->json($response); } public function getStatus($id){ $data['po_id'] = $id; $data['po'] =DB::table('purchase_orders') ->select('purchase_orders.status') ->where('id',$id) ->first(); $data['role_id'] = \Auth::user()->role_id; return view('dashboard.po.set-status',$data); } public function getEditPurchageOrder($id){ $data=[]; $data['purchase_orders'] =\App\PurchaseOrder::where('id',$id)->first(); $data['vendors']= \App\Vendor::where('is_active',1)->get(); $data['circles']=\App\Circle::where('is_active',1)->get(); $data['business_units']= DB::table('business_units')->get(); $data['payment_terms']= DB::table('payment_terms')->get(); $data['delivery_periods']= DB::table('delivery_periods')->get(); $data['po_types']= DB::table('po_category')->get(); $data['purchase_requests']= DB::table('purchase_requests')->where('purchase_requests.current_status','!=','completed')->where('purchase_requests.status','Approved')->get(); return view('dashboard.po.edit-purchase-order',$data); } public function getpoItems(Request $request) { $po_id = $request->po_id; // echo $po_id; // exit(); $response['items'] = DB::table('purchase_orders') ->join('purchase_order_items','purchase_order_items.po_id','purchase_orders.id') ->join('purchase_requests','purchase_order_items.pr_id','purchase_requests.id') ->join('purchase_request_items','purchase_request_items.pr_id','purchase_order_items.pr_id') ->join('items','purchase_order_items.item_code','items.code') ->select('purchase_order_items.*','purchase_requests.pr_number as PrN', 'items.description','items.uom','items.hsn_code','items.gst') ->where('purchase_order_items.po_id',$po_id) ->groupBy('id') ->get(); return response()->json($response); } public function updatePurchaseOrder(Request $request){ $response = array(); $validator = \Validator::make($request->all(), array( 'document1' => 'mimes:pdf', 'document2' => 'mimes:pdf', 'document3' => 'mimes:pdf' ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); //$validator->getMessageBag(); }else{ $purchaseOrder = \App\PurchaseOrder::where('id',$request->po_id)->first(); $status = $purchaseOrder->status; if(trim($status) == 'Amendment' || trim($status) == 'ReOpened') { $purchaseOrder->status = 'requested'; } $purchaseOrder->business_unit = $request->business_unit; $purchaseOrder->circle = $request->circle; $purchaseOrder->contact = $request->contact; $purchaseOrder->bill_to_address = $request->bill_to_address; $purchaseOrder->delivery_address = $request->delivery_address; //$purchaseOrder->delivery_periods = $request->delivery_periods; $purchaseOrder->delivery_periods_id = $request->delivery_periods; if($request->delivery_periods != "other"){ $delivery_periods = \DB::table('delivery_periods')->where('id',$request->delivery_periods)->first(); $purchaseOrder->delivery_periods = $delivery_periods->name; }else{ $purchaseOrder->delivery_periods = $request->delivery_period_textarea; } $purchaseOrder->document_type = $request->document_type; $purchaseOrder->payment_terms_id = $request->payment_terms; if($request->payment_terms != "other"){ $payment_terms = \DB::table('payment_terms')->where('id',$request->payment_terms)->first(); $purchaseOrder->payment_terms = $payment_terms->name; }else{ $purchaseOrder->payment_terms = $request->payment_term_textarea; } $purchaseOrder->document_type = $request->document_type; //$purchaseOrder->payment_terms = $request->payment_terms; $purchaseOrder->reference_no = $request->reference_no; $purchaseOrder->stc = $request->stc; $purchaseOrder->vendor_id = $request->vendor; $purchaseOrder->warranty_terms = $request->warranty_terms; $purchaseOrder->po_amount = $request->po_amount; $purchaseOrder->po_gst_amount = $request->po_gst_amount; $purchaseOrder->amendment_number += 1; //$purchaseOrder->po_type = $request->po_type; $purchaseOrder->delivery_terms = $request->delivery_terms; // file upload if($request->hasFile('document1')) { $filenameWithExt = $request->file('document1')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document1')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document1')->move($destinationPath, $fileNameToStore); $purchaseOrder->document1 = str_replace(public_path(), '', $path); } if($request->hasFile('document2')) { $filenameWithExt = $request->file('document2')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document2')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document2')->move($destinationPath, $fileNameToStore); $purchaseOrder->document2 = str_replace(public_path(), '', $path); } if($request->hasFile('document3')) { $filenameWithExt = $request->file('document3')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document3')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document3')->move($destinationPath, $fileNameToStore); $purchaseOrder->document3 = str_replace(public_path(), '', $path); } $purchaseOrder->save(); $items = json_decode($request->items, true); foreach ($items as $key => $item){ $po_item = \App\PurchaseOrderItem::where('id', $item['id'])->first(); $qty_diff = $po_item->qty - $item['qty']; $items[$key]['qty_diff'] = $qty_diff; $po_item->delete(); } foreach ($items as $key => $item){ if($item['is_deleted'] == 0) { $purchase_order_items = new \App\PurchaseOrderItem(); $purchase_order_items->po_id = $purchaseOrder->id; $purchase_order_items->pr_id = $item['pr_id']; $purchase_order_items->rate = $item['rate']; $purchase_order_items->qty = $item['qty']; $purchase_order_items->uom = $item['uom']; $purchase_order_items->specification = $item['specification']; $purchase_order_items->make = $item['make']; $purchase_order_items->item_code = $item['item_code']; $purchase_order_items->save(); $pr_item = \App\PurchaseRequestItem::where('pr_id', $item['pr_id'])->where('item_code',$item['item_code'])->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty + $item['qty_diff']; $pr_item->rqty = $balance; $pr_item->status = ($balance > 0)?'partially_completed':'completed'; $pr_item->save(); } } elseif($item['is_deleted'] == 1) { $pr_item = \App\PurchaseRequestItem::where('pr_id', $item['pr_id'])->where('item_code',$item['item_code'])->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty + $item['qty_diff']; $pr_item->rqty = $balance; $pr_item->status = ($balance > 0)?'partially_completed':'completed'; $pr_item->save(); } } } $check_pr = \App\PurchaseRequestItem::where('pr_id',$item['pr_id'])->where('status','Requested')->orWhere('status', 'partially_completed')->first(); if($check_pr==null){ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='completed'; $pr->save(); }else{ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='partially_completed'; $pr->save(); } $purchaseOrderLog = new \App\PurchaseOrderLog(); $purchaseOrderLog->po_id = $purchaseOrder->id; $purchaseOrderLog->user_id = \Auth::user()->id; $purchaseOrderLog->message = 'update'; $purchaseOrderLog->save(); // $this->poMail($purchaseOrder->id); $response['success'] = true; $response['msg'] = "Purchase Order Updated Successfully !!"; $response['po_number'] = $purchaseOrder->po_number; } return response()->json($response); } public function poMail($po_id){ $data['po'] = DB::table('purchase_orders') ->join('vendors', 'vendors.id', '=', 'purchase_orders.vendor_id') ->join('circles', 'circles.id', '=', 'purchase_orders.circle') ->join('business_units', 'business_units.id', '=', 'purchase_orders.business_unit') ->select('vendors.vendor_code', 'vendors.vendor_name', 'vendors.address', 'vendors.gst as s_gst', 'vendors.contact_no', 'vendors.contact_no', 'purchase_orders.*', 'circles.gst_number as c_gst', 'circles.name as c_name', 'business_units.name as b_name') ->where('purchase_orders.id', $po_id) ->first(); if (!$data['po']) { // Handle the case where the purchase order is not found return response()->json(['error' => 'Purchase order not found'], 404); } $prepared_by_id = $data['po']->po_created_by; $data['role_id'] = Auth::user()->role_id; $creater = DB::table('users')->where('id', $prepared_by_id)->first(); if ($creater) { $data['po_creater'] = $creater->name; $business_head = DB::table('users')->where('id', $creater->business_head)->first(); $data['bh'] = $business_head ? $business_head->name : ''; $director = DB::table('users')->where('id', $creater->director)->first(); $data['d'] = $director ? $director->name : ''; } else { // Handle the case where the user (creator) is not found return response()->json(['error' => 'User not found'], 404); } $po_number = $data['po']->po_number; $data['is_mail'] = true; $from_mail = 'vivek.logimetrix@gmail.com'; $from_title = 'Tabson'; $data['item_data'] = DB::table('purchase_order_items') ->join('items', 'items.code', '=', 'purchase_order_items.item_code') ->join('category', 'items.category', '=', 'category.id') ->select('purchase_order_items.*', 'items.description', 'items.code', 'items.uom', 'items.gst', 'category.*', 'category.name as category_name') ->where('purchase_order_items.po_id', $po_id) ->get(); $total_amount = 0; foreach ($data['item_data'] as $key => $value) { $total = $value->rate * $value->qty; $tax_amount = ($total * $value->gst) / 100; $total_amount = $total_amount + $total + $tax_amount; } $data['total_amount'] = $total_amount; $data['total_in_word'] = $this->convert_number_to_words($total_amount); if (Auth::user()->role_id == 7 || Auth::user()->role_id == 1) { $business_head = DB::table('users')->where('id', $creater->business_head)->first(); $director = DB::table('users')->where('id', $creater->director)->first(); if ($director) { Mail::send('dashboard.po.po-mail', $data, function ($m) use ($director, $po_number, $from_mail, $from_title) { $m->from($from_mail, $from_title); $m->to($director->email, $director->name); $m->subject('Purchase Order Approval Request(' . $po_number . ')'); }); } if ($business_head) { Mail::send('dashboard.po.po-mail', $data, function ($m) use ($business_head, $po_number, $from_mail, $from_title) { $m->from($from_mail, $from_title); $m->to($business_head->email, $business_head->name); $m->subject('Purchase Order Request for Approval(' . $po_number . ')'); }); } } if (Auth::user()->role_id == 4 || Auth::user()->role_id == 1) { $director = DB::table('users')->where('id', $creater->director)->first(); if ($director) { Mail::send('dashboard.po.po-mail', $data, function ($m) use ($director, $po_number, $from_mail, $from_title) { $m->from($from_mail, $from_title); $m->to($director->email, $director->name); $m->subject('Purchase Order Approval Request (' . $po_number . ')'); }); } } if (Auth::user()->role_id == 5 || Auth::user()->role_id == 1) { $bs_head = $creater->business_head == null ? $creater : DB::table('users')->where('id', $creater->business_head)->first(); Mail::send('dashboard.po.po-mail', $data, function ($m) use ($creater, $bs_head, $from_mail, $from_title) { $m->from($from_mail, $from_title); $m->to($creater->email, $creater->name); if ($bs_head) { $m->to($bs_head->email, $bs_head->name); } $m->subject('PO Approved'); }); } } public function PoPrint($po_id){ $data['po'] = DB::table('purchase_orders') ->join('vendors','vendors.id','purchase_orders.vendor_id') ->join('circles','circles.id','purchase_orders.circle') ->join('business_units','business_units.id','purchase_orders.business_unit') ->select('vendors.vendor_code','vendors.vendor_name','vendors.address','vendors.gst as s_gst','vendors.contact_no','purchase_orders.*','circles.gst_number as c_gst','circles.name as c_name','business_units.name as b_name') ->where('purchase_orders.id',$po_id) ->first(); //dd($data); $data['is_mail']=false; $data['item_data'] = \DB::table('purchase_order_items')->join('items','items.code', 'purchase_order_items.item_code') ->join('category', 'items.category','category.id') ->select('purchase_order_items.*', 'items.description','items.code','items.uom','items.gst','category.*','category.name as category_name') ->where('purchase_order_items.po_id', $po_id) ->orderBy('purchase_order_items.id', 'ASC') // Added to print the items in the exact serial-wise in which they were added while creating the PO. ->get(); $total_amount=0; foreach ($data['item_data'] as $key => $value) { $total=$value->rate*$value->qty; $tax_amount = ($total*$value->gst)/100; $total_amount= $total_amount+$total+$tax_amount; } $data['total_amount']=$total_amount; $data['total_in_word'] = $this->convert_number_to_words($total_amount); return view('dashboard.po.po-mail',$data); } public function genrateHistory($id){ $data['po_history_data'] = \DB::table('purchase_order_logs') ->join('users','users.id','purchase_order_logs.user_id') ->join('purchase_orders','purchase_orders.id','purchase_order_logs.po_id') ->select('purchase_order_logs.*','users.name','purchase_orders.po_number') ->where('purchase_order_logs.po_id',$id) ->get(); return view('dashboard.po.po-view-history',$data); } public function getAddress($id){ //dd($id); $data = \DB::table('circles') //->where('id',$id) ->get(); //dd($data); return response()->json($data); } public function convert_number_to_words(float $number){ $decimal = round($number - ($no = floor($number)), 2) * 100; $hundred = null; $digits_length = strlen($no); $i = 0; $str = array(); $words = array(0 => '', 1 => 'One', 2 => 'Two', 3 => 'Three', 4 => 'Four', 5 => 'Five', 6 => 'Six', 7 => 'Seven', 8 => 'Eight', 9 => 'Nine', 10 => 'Ten', 11 => 'Eleven', 12 => 'Twelve', 13 => 'Thirteen', 14 => 'Fourteen', 15 => 'Fifteen', 16 => 'Sixteen', 17 => 'Seventeen', 18 => 'Eighteen', 19 => 'Nineteen', 20 => 'Twenty', 30 => 'Thirty', 40 => 'Forty', 50 => 'Fifty', 60 => 'Sixty', 70 => 'Seventy', 80 => 'Eighty', 90 => 'Ninety'); $digits = array('', 'Hundred','Thousand','Lakh', 'Crore'); while( $i < $digits_length ) { $divider = ($i == 2) ? 10 : 100; $number = floor($no % $divider); $no = floor($no / $divider); $i += $divider == 10 ? 1 : 2; if ($number) { $plural = (($counter = count($str)) && $number > 9) ? 's' : null; $hundred = ($counter == 1 && $str[0]) ? ' and ' : null; $str [] = ($number < 21) ? $words[$number].' '. $digits[$counter]. $plural.' '.$hundred:$words[floor($number / 10) * 10].' '.$words[$number % 10]. ' '.$digits[$counter].$plural.' '.$hundred; } else $str[] = null; } $Rupees = implode('', array_reverse($str)); $paise = ($decimal) ? "." . ($words[$decimal / 10] . " " . $words[$decimal % 10]) . ' Paise' : ''; return ($Rupees ? $Rupees . 'Rupees ' : '') . $paise; } public function convert_to_po($pr_id){ $data=[]; $data['purchase_requests'] =DB::table('purchase_requests')->where('id',$pr_id)->first(); $data['vendors']= \App\Vendor::where('is_active',1)->get(); $data['circles']=\App\Circle::where('is_active',1)->get(); $data['business_units']= DB::table('business_units')->get(); $data['payment_terms']= DB::table('payment_terms')->get(); $data['delivery_periods']= DB::table('delivery_periods')->get(); $data['po_types']= DB::table('po_category')->get(); $data['pr_id']= $pr_id; return view('dashboard.pr.convert-to-po',$data); } // public function addConvertPrToPo(Request $request){ // $response = array(); // $purchaseOrder = new \App\PurchaseOrder(); // $purchaseOrder->business_unit = $request->business_unit; // $purchaseOrder->circle = $request->circle; // $purchaseOrder->contact = $request->contact; // $purchaseOrder->po_created_by = \Auth::user()->id; // //$purchaseOrder->delivery_periods = $request->delivery_periods; // $purchaseOrder->delivery_periods_id = $request->delivery_periods; // if($request->delivery_periods != "other"){ // $delivery_periods = \DB::table('delivery_periods')->where('id',$request->delivery_periods)->first(); // $purchaseOrder->delivery_periods = $delivery_periods->textarea; // }else{ // $purchaseOrder->delivery_periods = $request->delivery_period_textarea; // } // $purchaseOrder->document_type = $request->document_type; // $purchaseOrder->payment_terms_id = $request->payment_terms; // if($request->payment_terms != "other"){ // $payment_terms = \DB::table('payment_terms')->where('id',$request->payment_terms)->first(); // $purchaseOrder->payment_terms = $payment_terms->textarea; // }else{ // $purchaseOrder->payment_terms = $request->payment_term_textarea; // } // $purchaseOrder->reference_no = $request->reference_no; // $purchaseOrder->stc = $request->stc; // $purchaseOrder->vendor_id = $request->vendor; // $purchaseOrder->warranty_terms = $request->warranty_terms; // $purchaseOrder->po_amount = $request->po_amount; // $purchaseOrder->po_gst_amount = $request->po_gst_amount; // $purchaseOrder->status = 'requested'; // $purchaseOrder->current_status = 'processing'; // $purchaseOrder->save(); // if($purchaseOrder->save()){ // $present_month=date('m'); // // $present_month=03; // if($present_month>4){ // // $series_po=\App\PurchaseOrder::where('id',$purchaseOrder->id)->first(); // // $purchaseOrder->series=$series_po+1; // $session=date('y').(date('y')+1); // }else{ // $session=(date('y')-1).date('y'); // } // // dd($session.'=>'.$financial_end); // // $purchaseOrder->po_number = 'PO/2122/00'.$purchaseOrder->id; // $purchaseOrder->po_number = 'ATS/PO/'.$session."/".$purchaseOrder->id; // $purchaseOrder->save(); // }else{ // $response['flag'] = false; // $response['error'] = "Something Went Wrong"; // } // foreach ($request->items as $key => $item){ // $purchase_order_items = new \App\PurchaseOrderItem(); // $purchase_order_items->po_id = $purchaseOrder->id; // $purchase_order_items->pr_id = $item['pr_id']; // $purchase_order_items->rate = $item['rate']; // $purchase_order_items->qty = $item['qty']; // $purchase_order_items->uom = $item['uom']; // $purchase_order_items->item_code = $item['item_code']; // $purchase_order_items->save(); // $pr_item = \App\PurchaseRequestItem::where('id',$item['id'])->first(); // $pr_item->status = 'completed'; // $pr_item->save(); // } // $is_completed_pr = \App\PurchaseRequestItem::where('status','completed')->where('pr_id',$request->pr_id)->first(); // $pr = \App\PurchaseRequest::find($request->pr_id); // if($is_completed_pr != null){ // $pr->current_status = 'partially_completed'; // }else{ // $pr->current_status = 'completed'; // } // $pr->save(); // $purchaseOrderLog = new \App\PurchaseOrderLog(); // $purchaseOrderLog->po_id = $purchaseOrder->id; // $purchaseOrderLog->user_id = \Auth::user()->id; // $purchaseOrderLog->message = 'create'; // $purchaseOrderLog->save(); // $this->poMail($purchaseOrder->id); // $response['success'] = true; // $response['msg'] = "Convert Purchase Order Added Successfully !!"; // return response()->json($response); // } public function addConvertPrToPo(Request $request){ //dd($request->all()); $response = array(); $validator = \Validator::make($request->all(), array( 'document' => 'mimes:pdf' ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); //$validator->getMessageBag(); }else{ $purchaseOrder = new \App\PurchaseOrder(); $purchaseOrder->business_unit = $request->business_unit; $purchaseOrder->circle = $request->circle; $purchaseOrder->contact = $request->contact; $purchaseOrder->bill_to_address = $request->bill_to_address; $purchaseOrder->delivery_address = $request->delivery_address; $purchaseOrder->po_created_by = \Auth::user()->id; $purchaseOrder->delivery_periods_id = $request->delivery_periods; if($request->delivery_periods != "other"){ $delivery_periods = \DB::table('delivery_periods')->where('id',$request->delivery_periods)->first(); $purchaseOrder->delivery_periods = $delivery_periods->name; }else{ $purchaseOrder->delivery_periods = $request->delivery_period_textarea; } $purchaseOrder->document_type = $request->document_type; $purchaseOrder->payment_terms_id = $request->payment_terms; if($request->payment_terms != "other"){ $payment_terms = \DB::table('payment_terms')->where('id',$request->payment_terms)->first(); $purchaseOrder->payment_terms = $payment_terms->name; }else{ $purchaseOrder->payment_terms = $request->payment_term_textarea; } $purchaseOrder->delivery_terms = $request->delivery_terms; $purchaseOrder->reference_no = $request->reference_no; $purchaseOrder->stc = $request->stc; $purchaseOrder->vendor_id = $request->vendor; $purchaseOrder->warranty_terms = $request->warranty_terms; $purchaseOrder->po_amount = $request->po_amount; $purchaseOrder->po_gst_amount = $request->po_gst_amount; $purchaseOrder->status = 'requested'; $purchaseOrder->current_status = 'processing'; $purchaseOrder->amendment_number = 0; $purchaseOrder->po_type = $request->po_type; // file upload if($request->hasFile('document')) { $filenameWithExt = $request->file('document')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/po_document'; $path = $request->file('document')->move($destinationPath, $fileNameToStore); $purchaseOrder->document1 = str_replace(public_path(), '', $path); } if($purchaseOrder->save()){ if(date('m')>=4){ $session=date('y').(date('y')+1); }else{ $session=(date('y')-1).date('y'); } $series_po = \App\PurchaseOrder::where('session', $session)->orderBy('id', 'desc')->first(); if(!is_null($series_po)) { $series = $series_po->series + 1; } else { $series = 1; } switch (strlen((string)$series)) { case 1: $series = '000'.$series; break; case 2: $series = '00'.$series; break; case 3: $series = '0'.$series; break; default: $series = $series; } $purchaseOrder->po_number = 'TABSON/PO/'.$session."/".$series; $purchaseOrder->session = $session; $purchaseOrder->series = ($series*1); $purchaseOrder->save(); }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } $items = json_decode($request->items, true); // dd($request->items); foreach ($items as $key => $item){ $purchase_order_items = new \App\PurchaseOrderItem(); $purchase_order_items->po_id = $purchaseOrder->id; $purchase_order_items->pr_id = $item['pr_id']; $purchase_order_items->rate = $item['rate']; $purchase_order_items->qty = $item['qty']; $purchase_order_items->uom = $item['uom']; $purchase_order_items->make = $item['make']; $purchase_order_items->specification = $item['specification']; $purchase_order_items->item_code = $item['item_code']; $purchase_order_items->save(); $pr_item = \App\PurchaseRequestItem::where('pr_id', $item['pr_id'])->where('item_code',$item['item_code'])->first(); if(!is_null($pr_item)) { $balance = $pr_item->rqty - $item['qty']; $pr_item->rqty = $balance; $pr_item->status = ($balance > 0)?'partially_completed':'completed'; $pr_item->save(); } } $check_pr = \App\PurchaseRequestItem::where('pr_id',$item['pr_id'])->where('status','Requested')->orWhere('status', 'partially_completed')->first(); if($check_pr==null){ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='completed'; $pr->save(); }else{ $pr= \App\PurchaseRequest::where('id',$item['pr_id'])->first(); $pr->current_status='partially_completed'; $pr->save(); } $purchaseOrderLog = new \App\PurchaseOrderLog(); $purchaseOrderLog->po_id = $purchaseOrder->id; $purchaseOrderLog->user_id = \Auth::user()->id; $purchaseOrderLog->message = 'create'; $purchaseOrderLog->save(); // $this->poMail($purchaseOrder->id); $response['success'] = true; $response['msg'] = "Purchase Order Added Successfully !!"; $response['po_number'] = $purchaseOrder->po_number; } return response()->json($response); } public function items_received_notes(Request $request){ $this->get_common(); $loginId = Auth::user()->loginId; $user_warehouse = DB::table('local_user_mapping') ->select('local_user_mapping.warehouseCode') ->where('LoginID', $loginId) ->first(); $data['warehouses'] = explode(',', $user_warehouse->warehouseCode); $data['purchase_orders']= DB::table('purchase_orders') ->join('purchase_order_items','purchase_orders.id','purchase_order_items.po_id') ->where('purchase_orders.status','Approved') ->where(\DB::raw("CONVERT(purchase_order_items.qty, CHAR)"),'!=',\DB::raw("CONVERT(purchase_order_items.rqty, CHAR)")) ->groupBy('purchase_orders.po_number') ->get(); $data['gst_slabs'] = DB::table('gst_slabs')->get(); return view('dashboard.po.items-received-notes',$data); } public function getPoNumberItem(Request $request) { $poNumber = $request->poNumber; $response['items'] = \DB::table('purchase_order_items')->join('purchase_orders','purchase_orders.id','purchase_order_items.po_id')->join('items','items.code','purchase_order_items.item_code')->select('purchase_order_items.*','items.description','items.uom','items.hsn_code','items.gst','purchase_orders.po_number')->where('purchase_order_items.qty','!=','purchase_order_items.rqty')->where('purchase_orders.status','Approved')->where('purchase_orders.po_number',$poNumber)->get(); //dd($response); if(count($response['items']) > 0){ $response['success'] = true; }else{ $response['success'] = false; } return response()->json($response); } public function addItemReceivedNotes(Request $request){ //dd($request->all()); $this->get_common(); $fieldUserCodes = $this->data['userInfo']->fieldUserCodes; $warehouse = $request->warehouse; $loginId = Auth::user()->loginId; $user_id = Auth::user()->id; $userInfo = LocalUserMapping::where('LoginID', $loginId)->first(); $response = array(); $validator = \Validator::make($request->all(), array( 'document' => 'mimes:pdf', 'invoice_number' => 'required', 'invoice_date' => 'required', 'receive_date' => 'required', 'receiver_name' => 'required', 'receiver_phone' => 'required', 'e_way_bill_number' => 'required|numeric', 'transporter_details' => 'required', 'builty_number' => 'required', 'delivery_location' => 'required', 'freight_charges' => 'required', 'freight_gst' => 'required', 'payment_date' => 'required', 'status' => 'required', 'poNumber' => 'required', ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); }else{ $itemReceivedNotes = new \App\Irn(); $itemReceivedNotes->reference_number = $request->reference_number; $itemReceivedNotes->invoice_no = $request->invoice_number; $itemReceivedNotes->invoice_date = $request->invoice_date; $itemReceivedNotes->receive_date = date('Y-m-d', strtotime($request->receive_date)); $itemReceivedNotes->payment_date = date('Y-m-d', strtotime($request->payment_date)); //$itemReceivedNotes->status = 'requested'; $itemReceivedNotes->status = $request->status; $itemReceivedNotes->session = \Auth::user()->id; //................................... $itemReceivedNotes->receiver_name = $request->receiver_name; $itemReceivedNotes->gate_entry_number = $request->gate_entry_number; $itemReceivedNotes->gate_entry_date = $request->gate_entry_date; $itemReceivedNotes->receiver_phone = $request->receiver_phone; $itemReceivedNotes->e_way_bill_number = $request->e_way_bill_number; $itemReceivedNotes->transporter_details = $request->transporter_details; $itemReceivedNotes->builty_number = $request->builty_number; $itemReceivedNotes->delivery_location = $request->delivery_location; $itemReceivedNotes->freight_charge = $request->freight_charges; $itemReceivedNotes->freight_gst = $request->freight_gst; $itemReceivedNotes->grand_total = $request->grand_total; $itemReceivedNotes->grand_totalAmount = $request->grand_totalAmount; $itemReceivedNotes->freight_gst_total = $request->fgstTotal; $itemReceivedNotes->final_grand_total = $request->final_grand_total; $itemReceivedNotes->warehouse = $request->warehouse; $itemReceivedNotes->business_type = $request->business_type; //dd($itemReceivedNotes); // $itemReceivedNotes->save(); if($itemReceivedNotes->save()){ $present_month=date('m'); if($present_month>=4){ $session=date('y').(date('y')+1); }else{ $session=(date('y')-1).date('y'); } $irn_series = \App\Irn::where('current_session', $session)->orderBy('id', 'desc')->first(); if(!is_null($irn_series)) { $series = $irn_series->series + 1; } else { $series = 1; } switch(strlen((string)$series)) { case 1: $series = '000'.$series; break; case 2: $series = '00'.$series; break; case 3: $series = '0'.$series; break; default: $series = $series; } $itemReceivedNotes->irn_no = 'MRN/'.$session."/".$series; $itemReceivedNotes->series = ($series*1); $itemReceivedNotes->current_session = $session; $itemReceivedNotes->save(); // file upload if($request->hasFile('document')) { $filenameWithExt = $request->file('document')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/item_notes_document'; $path = $request->file('document')->move($destinationPath, $fileNameToStore); $itemReceivedNotes->document = str_replace(public_path(), '', $path); $itemReceivedNotes->save(); } }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } $items = json_decode($request->items, true); foreach ($items as $key => $item){ $poi = \App\PurchaseOrderItem::where('id',$item['id'])->first(); $poi->rqty = $poi->rqty + $item['dispach_qty']; $poi->save(); $irn_items = new \App\IrnItem(); $irn_items->irn_id = $itemReceivedNotes->id; $irn_items->po_id = $item['po_id']; $irn_items->rate = $item['rate']; $irn_items->qty = $item['dispach_qty']; $irn_items->item_code = $item['item_code']; if ($irn_items->save()) { $is_stock_added = StockInCircleStore::where('spare_code', $item['item_code'])->where('warehouse', $warehouse)->count(); if ($is_stock_added > 0) { $stock = StockInCircleStore::where('spare_code', $item['item_code'])->where('warehouse', $warehouse)->first(); } else { $stock = new StockInCircleStore(); } $stock->warehouse = $warehouse; $stock->user_id = $user_id; $stock->spare_code = $item['item_code']; $stock->fresh_qty = $stock->fresh_qty + $irn_items->qty; $stock->rate = $item['rate']; $stock->save(); $history = new HistoryOfStockInCircleStore(); $history->warehouse = $warehouse; $history->spare_code = $item['item_code']; $history->fresh_qty = $irn_items->qty; $history->rate = $item['rate']; $history->receiving_type = 'PO'; $history->stn_no = $request->reference_number; $history->receiving_date = date('Y-m-d H:i:s'); $history->in_out = 1; $history->added_by = $user_id; $history->save(); \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $warehouse, 'item_type' => 'fresh', 'entry_type' => 'PO', 'spare_code' => $item['item_code'], 'in_qty' => $irn_items->qty, 'available_qty' => $irn_items->qty, 'rate' => $item['rate'], 'lot_no' => $item['po_number'] ]); } } $response['success'] = true; $response['msg'] = "Item Received Notes Added Successfully !!"; $response['irn_number'] = $itemReceivedNotes->irn_no; } return response()->json($response); } public function allIrn() { $data['role_id'] =Auth::user()->role_id; // $data['irns'] = \DB::table('irns') // ->select('irns.*') // ->orderBy('id', 'DESC') // ->get(); $data['irns'] = \DB::table('irn_items') ->join('irns','irn_items.irn_id','irns.id') ->join('purchase_orders','purchase_orders.id','irn_items.po_id') ->select('irns.id','irns.payment_status','irns.irn_no','irns.invoice_no','irns.invoice_date','irns.receive_date','irns.document','irns.payment_date','irns.status','irns.generated_by','irns.remark','irn_items.irn_id','irn_items.po_id','irn_items.item_code','purchase_orders.po_number', \DB::raw('DATEDIFF(irns.payment_date, NOW()) as diffday'), 'purchase_orders.vendor_id') ->orderBy('irns.created_at', 'DESC') ->groupBy(['purchase_orders.po_number','irns.irn_no']) ->get(); return view('dashboard.po.all-irn', $data); } public function viewIrn($irn_id){ $data['irn_data'] = DB::table('irns') ->where('irns.id',$irn_id) ->first(); $data['irn_item_data'] = \DB::table('irn_items') //->join('items','items.code', 'irn_items.item_code') // ->select('irn_items.*', 'items.description','items.code','items.uom','items.gst','items.make','items.specification') ->where('irn_items.irn_id', $irn_id) ->get(); return view('dashboard.po.irn-view',$data); } public function getMrnStatus($id){ $data['mrn_id'] = $id; $data['role_id'] = \Auth::user()->role_id; return view('dashboard.po.set-mrn-status',$data); } public function setMrnStatus(Request $request){ $response = array(); $validator = \Validator::make($request->all(), array( 'status' =>'required', ) ); if($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); }else{ $mrn_details = \App\Irn::where('id',$request->id)->first(); if(is_null($mrn_details)){ $response['flag'] = false; $response['error'] = "Item Not found"; }else{ $mrn_details->status = $request->status; $mrn_details->remark = $request->remark; if($mrn_details->save()){ //Create Log $IrnLog = new \App\MrnLog(); $IrnLog->mrn_id = $mrn_details->id; $IrnLog->user_id = \Auth::user()->id; $IrnLog->message = $mrn_details->status; $IrnLog->save(); $response['flag'] = true; $response['message'] = "Status Updated Successfully"; }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } } } return response()->json($response); } public function getPoAmendment(){ $data['roles'] = \App\Role::get(); $data['businessheades'] = \DB::table('users')->where('role_id',4)->get(); $data['functionalheads'] = \DB::table('users')->where('role_id',3)->get(); $data['directors'] = \DB::table('users')->where('role_id',5)->get(); return view('dashboard.po.edit-po',$data); } public function postPoAmendment(Request $request) { $response = array(); $validator = \Validator::make($request->all(), [ 'po_number' => 'required|exists:purchase_orders,po_number', 'status' => 'required|in:requested,approval_pending', 'remark' => 'nullable|string|max:255', ]); if ($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); } else { $poNumber = $request->po_number; $status = $request->status; $remark = $request->remark; // Find the purchase request by PR number $purchaseOrder = \App\PurchaseOrder::where('po_number', $poNumber)->first(); if (!$purchaseOrder) { $response['flag'] = false; $response['message'] = "Purchase order with Po number '$poNumber' not found."; } else { // Update the purchase request status and remark $purchaseOrder->update(['status' => $status, 'remark' => $remark]); $response['flag'] = true; $response['message'] = "Status updated successfully"; } } return response()->json($response); } }