/
proc
/
self
/
cwd
/
tabson
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Session; use DB; use Auth; use Mail; use Facade\FlareClient\View; class ShortClosedPOController extends Controller { public function shortClosedPO() { $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("purchase_order_items.qty"),'>',\DB::raw("(purchase_order_items.rqty + purchase_order_items.stc_qty)")) ->groupBy('purchase_orders.po_number') ->get(); return view('dashboard.shortClosedPO.short-close-po', $data); } public function getPoItemShortClose(Request $request) { $po_number = $request->poNumber; $response['items'] = \DB::table('purchase_order_items as po_item')->join('purchase_orders','purchase_orders.id','po_item.po_id')->join('items','items.code','po_item.item_code')->select('po_item.id','po_item.po_id','po_item.pr_id','po_item.item_code','po_item.rate','po_item.qty as po_qty',\DB::raw('(po_item.qty - po_item.rqty - po_item.stc_qty) as rem_qty'),'items.description','items.uom','items.hsn_code','items.gst','purchase_orders.po_number')->where('po_item.qty','!=','(po_item.rqty + po_item.stc_qty)')->where('purchase_orders.status','Approved')->where(\DB::raw("po_item.qty"),'>',\DB::raw("(po_item.stc_qty + po_item.rqty)"))->where('purchase_orders.po_number',$po_number)->get(); if(count($response['items']) > 0){ $response['success'] = true; }else{ $response['success'] = false; } return response()->json($response); } public function postShortClosePO(Request $request) { $response = array(); $validator = \Validator::make($request->all(), array( 'items' => 'required' ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); }else{ $items = json_decode($request->items); if(count($items) > 0) { DB::beginTransaction(); try{ if(date('m') >= 4){ $session = date('y').(date('y')+1); }else{ $session = (date('y')-1).date('y'); } $dataArr = $this->generateShrotCloseNumber($session); $shortClosedPo = new \App\ShortClosedPo(); $shortClosedPo->series = $dataArr['series']; $shortClosedPo->session = $session; $shortClosedPo->short_close_no = $dataArr['serial_number']; $shortClosedPo->approval_status = 'requested'; $shortClosedPo->created_by = \Auth::user()->id; if($shortClosedPo->save()) { $gst_amount = 0; $stc_basic_amount = 0; $stc_total_amount = 0; foreach($items as $key=>$item) { $shortClosedPoItem = new \App\ShortClosedPoItem(); $shortClosedPoItem->stc_id = $shortClosedPo->id; $shortClosedPoItem->pr_id = $item->pr_id; $shortClosedPoItem->po_id = $item->po_id; $shortClosedPoItem->po_item_id = $item->id; $shortClosedPoItem->po_item_code = $item->item_code; $shortClosedPoItem->po_qty = $item->po_qty; $shortClosedPoItem->stc_qty = $item->short_close_qty; $shortClosedPoItem->rate = $item->rate; $shortClosedPoItem->gst = $item->gst; $shortClosedPoItem->save(); $po_item = \App\PurchaseOrderItem::where('po_id', $item->po_id)->where('item_code', $item->item_code)->where('pr_id', $item->pr_id)->first(); $po_item->stc_qty += $item->short_close_qty; $po_item->save(); $gst_amount += $item->short_close_qty*($item->rate*$item->gst/100); $stc_basic_amount += $item->rate*$item->short_close_qty; $stc_total_amount += ($item->short_close_qty*($item->rate*$item->gst/100)) + ($item->rate*$item->short_close_qty); } $shortClosedPo->gst_amount = $gst_amount; $shortClosedPo->stc_basic_amount = $stc_basic_amount; $shortClosedPo->stc_total_amount = $stc_total_amount; $shortClosedPo->save(); $this->poShortCloseMail($shortClosedPo->id); DB::commit(); $response['success'] = true; $response['msg'] = 'PO Short Closed Successfully.'; } else { $response['success'] = false; $response['msg'] = 'Something Went Wrong.'; } } catch(\Exception $e) { DB::rollback(); $response['success'] = false; $response['msg'] = $e->getMessage(); } } else { $response['success'] = false; $response['msg'] = 'No Item found in Request.'; } } return response()->json($response); } public function generateShrotCloseNumber($session) { $series_scp = \App\ShortClosedPo::where('session', $session)->orderBy('id', 'desc')->first(); if(!is_null($series_scp)) { $series = $series_scp->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; } $serial_number = 'ATS/SCP/'.$session."/".$series; return ['serial_number'=>$serial_number, 'series'=>$series]; } public function getShortClosedPO() { $data['all_po'] = \App\ShortClosedPo::get(); $data['role_id'] =Auth::user()->role_id; return view('dashboard.shortClosedPO.all-short-closed-po', $data); } public function getStatus($id){ $data['short_po_id'] = $id; $data['role_id'] = \Auth::user()->role_id; return view('dashboard.shortClosedPO.set-status',$data); } public function updateShortClosedPo(Request $request) { $response = array(); $validator = \Validator::make($request->all(), array( 'status' =>'required', 'id' => 'required' ) ); if($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); }else{ $stc_details = \App\ShortClosedPo::where('id',$request->id)->first(); if(is_null($stc_details)){ $response['flag'] = false; $response['error'] = "PO Not found"; }else{ DB::beginTransaction(); try{ $stc_details->approval_status = $request->status; $stc_details->remark = $request->remark; if($stc_details->save()){ if($stc_details->approval_status == 'rejected') { $stc_item_details = \App\ShortClosedPoItem::where('stc_id', $stc_details->id)->get(); foreach($stc_item_details as $key=>$value) { $po_item_details = \App\PurchaseOrderItem::where('pr_id', $value->pr_id)->where('po_id', $value->po_id)->where('item_code', $value->po_item_code)->first(); $po_item_details->stc_qty -= $value->stc_qty; $po_item_details->save(); } } $response['flag'] = true; $response['message'] = "Status Updated Successfully"; }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } \DB::commit(); } catch(Exception $e) { \DB::rollback(); $response['flag'] = false; $response['error'] = $e->getMessage(); } } } return response()->json($response); } public function poShortCloseMail($stc_id){ $prepared_by_id = Auth::user()->id; $data['role_id'] = Auth::user()->role_id; $creater = \DB::table('users')->where('id',$prepared_by_id)->first(); $data['po_creater']=$creater->name; $business_head = \DB::table('users')->where('id',$creater->business_head)->first(); if($business_head==null){ $data['bh']=''; }else{ $data['bh']=$business_head->name; } $stc_po = DB::table('short_closed_pos')->where('id', $stc_id)->first(); $data['stc_po'] = $stc_po; $short_close_no = $stc_po->short_close_no; $data['is_mail']=true; $from_mail='vivek.logimetrix@gmail.com'; $from_title='Tabson'; $data['item_data'] = \DB::table('short_closed_po_items as stcp')->join('items','items.code', 'stcp.po_item_code') ->join('category', 'items.category','category.id') ->select('stcp.*', 'items.description','items.code','items.uom','items.gst','category.*','category.name as category_name') ->where('stcp.stc_id', $stc_id)->get(); $total_amount=0; foreach ($data['item_data'] as $key => $value) { $total=$value->rate*$value->stc_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 == 2 || Auth::user()->role_id == 1){ $business_head = \DB::table('users')->where('id',$creater->business_head)->first(); Mail::send('dashboard.shortClosedPO.short-close-po-mail', $data, function ($m) use ($business_head,$short_close_no,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($business_head->email, $business_head->name); $m->subject('Purchase Order Short Clsoe Approval Request ('.$short_close_no.')'); }); } } public function viewShortClosePO($short_close_id) { $all_pos = DB::table('short_closed_pos as stc_po')->join('short_closed_po_items as stc_po_item', 'stc_po_item.stc_id', 'stc_po.id')->join('items', 'items.code', 'stc_po_item.po_item_code')->select('stc_po_item.pr_id', 'stc_po_item.po_id', 'stc_po.session', 'stc_po.series', 'stc_po.short_close_no', 'stc_po_item.po_item_code', 'stc_po_item.po_qty', 'stc_po_item.stc_qty', 'stc_po_item.rate', 'stc_po_item.gst','items.code', 'items.description', 'items.uom')->where('stc_po.id', $short_close_id)->orderBy('stc_po.id', 'ASC')->get(); $short_close = DB::table('short_closed_pos as stc_po')->find($short_close_id); // dd($all_pos); return view('dashboard.shortClosedPO.view-short-close-po', ['all_pos'=>$all_pos, 'short_close'=>$short_close]); } 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; } }