/
home
/
sjslayjy
/
public_html
/
assets
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Auth; use App\LocalUserMapping; use App\GoodsReceiptNote; use App\GoodsReceiptItem; use App\SparePartsInStock; use App\StockInCircleStore; use App\IndentItem; use App\User; use DB; class StockController 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 get_stocks_page(){ $this->get_common(); $warehouse = 'SERPNT'; $stocks = DB::table('stock_in_circle_stores')->join('spare_parts_masters','spare_parts_masters.code','stock_in_circle_stores.spare_code')->where('stock_in_circle_stores.warehouse',$warehouse)->select('stock_in_circle_stores.*','spare_parts_masters.description','spare_parts_masters.rate','spare_parts_masters.repaired_rate')->orderBy('stock_in_circle_stores.spare_code','asc')->get(); $fresh_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','fresh')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $repaired_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','repaired')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $faulty_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','faulty')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $this->data = array_merge($this->data,['stocks'=>$stocks,'fresh_stocks'=>$fresh_stocks,'repaired_stocks'=>$repaired_stocks,'faulty_stocks'=>$faulty_stocks]); return view('admin.stock.stocks',$this->data); } public function view_circle_store_stock($warehouse){ $this->get_common(); $stocks = DB::table('stock_in_circle_stores')->join('spare_parts_masters','spare_parts_masters.code','stock_in_circle_stores.spare_code')->where('stock_in_circle_stores.warehouse',$warehouse)->select('stock_in_circle_stores.*','spare_parts_masters.description','spare_parts_masters.rate','spare_parts_masters.repaired_rate')->orderBy('stock_in_circle_stores.spare_code','asc')->get(); $fresh_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','fresh')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $repaired_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','repaired')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $faulty_stocks = DB::table('warehouse_inventory')->join('spare_parts_masters','spare_parts_masters.code','warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse',$warehouse)->where('warehouse_inventory.item_type','faulty')->where('warehouse_inventory.available_qty','>',0)->select('warehouse_inventory.*','spare_parts_masters.description')->get(); $this->data = array_merge($this->data,['stocks'=>$stocks,'fresh_stocks'=>$fresh_stocks,'repaired_stocks'=>$repaired_stocks,'faulty_stocks'=>$faulty_stocks]); return view('admin.stock.circle-store-stocks',$this->data); } public function get_material_receiving_page(){ $this->get_common(); $ware_houses = DB::table('ware_houses')->get(); $gst_slabs = DB::table('gst_slabs')->get(); $this->data = array_merge($this->data,['ware_houses'=>$ware_houses,'gst_slabs'=>$gst_slabs]); return view('admin.stock.materialReceiving',$this->data); } public function get_spare_part(Request $request){ $code = $request->code; $is_spare_part = DB::table('spare_parts_masters')->where('code',$code)->count(); if($is_spare_part > 0){ $spare_part = DB::table('spare_parts_masters')->where('code',$code)->first(); return json_encode(['success'=>true,'spare_part'=>$spare_part]); }else{ return json_encode(['success'=>false]); } } public function add_material(Request $request){ $loginId = Auth::user()->loginId; $user_id = Auth::user()->id; $userInfo = LocalUserMapping::where('LoginID',$loginId)->first(); $warehouse = $request->ware_house; $reference_number = $request->reference_number; $invoice_number = $request->invoice_number; $invoice_date = $request->invoice_date; $item_count = count($request->items); if($reference_number == "" || $invoice_number == "" || $invoice_date == "" || $item_count == 0){ return json_encode(['success'=>false,'msg'=>'Please check reference number, invoice number, invoice date and material.']); }else{ $sub_total = 0; $gst_total = 0; $grand_total = 0; foreach ($request->items as $key => $value) { $gst = $value['gst_slab_rates']; $rate = $value['new_rate']; $qty = $value['qty']; $subtotal = $rate*$qty; $gst_cal = ($subtotal*$gst)/100; $sub_total = $sub_total + $subtotal; $gst_total = $gst_total + $gst_cal; $grand_total = $grand_total + ($subtotal + $gst_cal); } $last_value = \App\GoodsReceiptNote::where('warehouse',$warehouse)->where('session',2022)->orderBy('id','desc')->first(); if($last_value != null){ $no = $last_value->series + 1; }else{ $no = 1; } $session = date('y').date('y')+1; $grn = New GoodsReceiptNote(); $grn->grn_no = 'GRN/'.substr($warehouse,3).'/'.$no.'/'.$session; $grn->series = $no; $grn->reference_number = $request->reference_number; $grn->invoice_number = $request->invoice_number; $grn->invoice_date = $request->invoice_date; $grn->indentNumber = $request->indentNumber; $grn->gateEntryReceiptNumber = $request->gateEntryReceiptNumber; $grn->gateEntryDate = $request->gateEntryDate; $grn->entryName = $request->entryName; $grn->phoneNumber = $request->phoneNumber; $grn->freightCharges = $request->freightCharges; $grn->freight_gst = $request->freight_gst; $grn->sub_total = $sub_total; $grn->gst_total = $gst_total; $grn->grand_total = $grand_total; $grn->warehouse = $warehouse; $grn->received_by = $loginId; if($grn->save()){ foreach ($request->items as $key => $value) { $item = new GoodsReceiptItem(); $item->grn_id = $grn->id; $item->item_name = $value['name']; $code = $value['code']; $item->item_code = $code; $item->item_discription = $value['description']; $item->quantity = $value['qty']; $item->uom = $value['uom']; $item->rate = $value['new_rate']; $item->gst = $value['gst_slab_rates']; $item->amount = $item->rate*$item->quantity; $tax_amount = ($item->amount*$item->gst)/100; $item->tax_amount = $tax_amount; if($item->save()){ $is_stock_added = StockInCircleStore::where('spare_code',$code)->count(); if($is_stock_added > 0){ $stock = StockInCircleStore::where('spare_code',$code)->first(); }else{ $stock = new StockInCircleStore(); } $stock->warehouse = $warehouse; $stock->user_id = $user_id; $stock->spare_id = $value['id']; $stock->spare_code = $value['code']; $stock->fresh_qty = $stock->fresh_qty + $item->quantity; $stock->rate = $value['new_rate']; $stock->save(); \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $warehouse, 'item_type' => 'fresh', 'entry_type' => 'grn', 'spare_code' => $value['code'] , 'in_qty' => $item->quantity, 'available_qty' => $item->quantity, 'rate' => $value['new_rate'], 'lot_no' => $grn->grn_no ]); } } return json_encode(['success'=>true,'msg'=>'Goods has been Recevied Successfully ! ']); }else{ return json_encode(['success'=>true,'msg'=>'Somthing Went Wrong !!']); } } } public function get_all_grn(){ $this->get_common(); $grns = GoodsReceiptNote::orderBy('id','desc')->paginate(15); $this->data = array_merge($this->data,['all_grn'=>$grns]); return view('admin.stock.grn',$this->data); } public function get_all_indent_spare_part(Request $request){ // Updated code on 03-02-2024 to prevent from getting duplicate values from the table spare_parts_masters // $indentItems = DB::table('indent_items')->join('spare_parts_masters','spare_parts_masters.code','indent_items.spare_code')->where('indent_items.indent_id',$request->indent_id)->select('spare_parts_masters.*','indent_items.id as indent_item_id','indent_items.indent_id','indent_items.spare_code','indent_items.qty','indent_items.final_rate','indent_items.final_qty','indent_items.sto_qty')->get(); $indentItems = DB::table('indent_items') ->join('spare_parts_masters', 'spare_parts_masters.code', '=', 'indent_items.spare_code') ->where('indent_items.indent_id', $request->indent_id) ->whereNotNull('spare_parts_masters.name') // New condition added ->select('spare_parts_masters.*', 'indent_items.id as indent_item_id', 'indent_items.indent_id', 'indent_items.spare_code', 'indent_items.qty', 'indent_items.final_rate', 'indent_items.final_qty', 'indent_items.sto_qty') ->get(); return json_encode(['success'=>true,'indentItems'=>$indentItems,'indent_id'=>$request->indent_id]); } public function print_grn($grn_no){ $this->get_common(); $grn = GoodsReceiptNote::find($grn_no); if($grn != null){ $grn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$grn->id)->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom')->get(); $this->data = array_merge($this->data,['grn_id'=> $grn_no,'grn'=>$grn,'grn_items'=>$grn_items]); return view('admin.stock.print-grn',$this->data); }else{ return redirect('/admin/all-grn')->with('error','Invalid GRN id !'); } } public function print_mrn($mrn_no){ $this->get_common(); $mrn = GoodsReceiptNote::find($mrn_no); if($mrn != null){ // Updated code on 02-02-2024 to prevent from getting duplicate values from the table spare_parts_masters // $mrn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$mrn->id)->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom')->get(); $mrn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$mrn->id)->whereNotNull('spare_parts_masters.name')->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom')->get(); $this->data = array_merge($this->data,['grn_id'=> $mrn_no,'grn'=>$mrn,'grn_items'=>$mrn_items]); return view('admin.stock.print-mrn',$this->data); }else{ return redirect('/circle-store/all-mrn')->with('error','Invalid MRN id !'); } } public function view_grn($grn_no){ $this->get_common(); $grn = GoodsReceiptNote::find($grn_no); if($grn != null){ $grn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$grn->id)->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom','spare_parts_masters.gst_slab_rates')->get(); $this->data = array_merge($this->data,['grn_id'=> $grn_no,'grn'=>$grn,'grn_items'=>$grn_items]); return view('admin.stock.view-grn',$this->data); }else{ return redirect('/admin/all-grn')->with('error','Invalid GRN id !'); } } public function view_mrn($mrn_no){ $this->get_common(); $mrn = GoodsReceiptNote::find($mrn_no); if($mrn != null){ // Updated code on 02-02-2024 to prevent from getting duplicate values from the table spare_parts_masters // $mrn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$mrn->id)->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom','spare_parts_masters.gst_slab_rates')->get(); $mrn_items = DB::table('goods_receipt_items')->join('spare_parts_masters','spare_parts_masters.code','goods_receipt_items.item_code')->where('grn_id',$mrn->id)->whereNotNull('spare_parts_masters.name')->select('goods_receipt_items.*','spare_parts_masters.description','spare_parts_masters.uom','spare_parts_masters.gst_slab_rates')->get(); $this->data = array_merge($this->data,['grn_id'=> $mrn_no,'grn'=>$mrn,'grn_items'=>$mrn_items]); return view('admin.stock.view-mrn',$this->data); }else{ return redirect('/circle-store/all-mrn')->with('error','Invalid MRN id !'); } } public function print_sto_note($grn_no){ $this->get_common(); return view('admin.stock.print-sto',$this->data); } public function get_grn_information(Request $request){ $grn_id = $request->grn_id; $grn = GoodsReceiptNote::find($grn_id); $grn_items = GoodsReceiptItem::where('grn_id',$grn_id)->get(); if($grn != null){ return json_encode(['success'=> true , 'grn'=> $grn, 'grn_items'=> $grn_items]); }else{ return json_encode(['success'=> false , 'msg'=> 'Invalid Goods Receipt Note Number.']); } } public function stock_enter_exchange(){ $this->get_common(); $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('local_user_mapping') ->select('local_user_mapping.warehouseCode') ->where('LoginID', $loginId) ->first(); $warehouses = explode(',', $assigned_warehouses->warehouseCode); $circleCodes = $this->data['userInfo']->circleCodes; $current_warehouse = $warehouses[0]; if ($current_warehouse == 'SERPNT') { $customers = DB::table('customer_circle_list')->get(); } else { $customers = DB::table('customer_circle_list')->where('Circle', $circleCodes)->get(); } $this->data = array_merge($this->data, ['assigned_warehouses' => $warehouses, 'customers' => $customers, 'current_warehouse' => $current_warehouse]); return view('circle-store.stock-enter-exchange',$this->data); } public function get_from_warehouse_items(Request $request){ $code = $request->code; $warehouse = $request->fromWarehouse; $is_spare_part = DB::table('stock_in_circle_stores')->where('spare_code',$code)->where('warehouse',$warehouse)->count(); if($is_spare_part > 0){ $circle_spare_info = DB::table('stock_in_circle_stores')->where('spare_code',$code)->where('warehouse',$warehouse)->first(); $spare_part = DB::table('spare_parts_masters')->where('code',$code)->first(); return json_encode(['success'=>true,'spare_part'=>$spare_part,'circle_spare_info'=>$circle_spare_info]); }else{ return json_encode(['success'=>false,'msg'=>'Circle Store has not Spare Code. Try another spare Code.']); } } public function save_stock_enter_exchange(Request $request){ $user_id = Auth::user()->id; $loginId = Auth::user()->loginId; $warehouse = $request->fromWarehouse; $toWarehouse = $request->toWarehouse; $items = $request->items; $is_valid = true; $sp = ""; foreach ($items as $val) { $ms = StockInCircleStore::where('spare_code',$val['code'])->where('warehouse',$warehouse)->first(); if($ms != null){ if($ms->fresh_qty < $val['qty'] && $val['qty'] != 0){ $is_valid = false; $sp = $val['code'].' Fresh'; break; } if($ms->repaired_qty < $val['rqty'] && $val['rqty'] != 0 ){ $is_valid = false; $sp = $val['code'].' Repaired'; break; } }else{ $is_valid = false; $sp = $val['code'].' Fresh'; break; } } if($is_valid == true){ foreach ($items as $value) { $to_stock = StockInCircleStore::where('spare_code',$value['code'])->where('warehouse',$toWarehouse)->first(); if( $to_stock != null){ $to_stock->fresh_qty = $to_stock->fresh_qty + $value['qty']; $to_stock->repaired_qty = $to_stock->repaired_qty + $value['rqty']; }else{ $to_stock = new StockInCircleStore(); $to_stock->spare_code = $value['code']; $to_stock->warehouse = $toWarehouse; $to_stock->fresh_qty = $value['qty']; $to_stock->repaired_qty = $value['rqty']; } $to_stock->save(); $stock_in_store = StockInCircleStore::where('spare_code',$value['code'])->where('warehouse',$warehouse)->first(); if($stock_in_store != null){ $stock_in_store->fresh_qty = $stock_in_store->fresh_qty - $value['qty']; $stock_in_store->repaired_qty = $stock_in_store->repaired_qty - $value['rqty']; $stock_in_store->save(); $history = new \App\HistoryOfStockInCircleStore(); $history->spare_code = $value['code']; $history->fresh_qty = $value['qty']; $history->faulty_qty = 0; $history->repaired_qty = $value['rqty']; $history->receiving_type = 'stock move from'.$warehouse.' to '.$toWarehouse; $history->receiving_date = date('Y-m-d H:i:s'); $history->engineer_id = ''; $history->from_warehouse = $warehouse; $history->added_by = $user_id; $history->save(); } $spare_code = $value['code']; if($value['qty'] != 0){ $warehouse_inventory = DB::table('warehouse_inventory')->where('spare_code',$spare_code)->where('warehouse',$warehouse)->where('available_qty','>',0)->where('item_type','fresh')->get(); $total_adjust = 0; $required = $value['qty']; foreach ($warehouse_inventory as $key => $fvalue) { $total_adjust = $fvalue->available_qty; if($total_adjust < $required && $required != 0){ \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $toWarehouse, 'item_type' => 'fresh', 'entry_type' => 'Exchange from'.$warehouse.' to '.$toWarehouse, 'spare_code' => $fvalue->spare_code , 'in_qty' => $fvalue->available_qty, 'available_qty' => $fvalue->available_qty, 'rate' => $fvalue->rate, 'lot_no' => $fvalue->lot_no ]); $warehouse_inventory_main = \App\WarehouseInventory::where('id',$fvalue->id)->first(); $warehouse_inventory_main->available_qty = $warehouse_inventory_main->available_qty - $fvalue->available_qty; $warehouse_inventory_main->save(); }elseif($total_adjust > $required || $total_adjust == $required ){ \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $toWarehouse, 'item_type' => 'fresh', 'entry_type' => 'Exchange from'.$warehouse.' to '.$toWarehouse, 'spare_code' => $fvalue->spare_code , 'in_qty' => $required, 'available_qty' => $required, 'rate' => $fvalue->rate, 'lot_no' => $fvalue->lot_no ]); $warehouse_inventory_main = \App\WarehouseInventory::where('id',$fvalue->id)->first(); $warehouse_inventory_main->available_qty = $warehouse_inventory_main->available_qty - $required; $warehouse_inventory_main->save(); } $required = $required - $total_adjust; if( $required == 0 || $required < 0){ break 1; } } } if($value['rqty'] != 0){ $warehouse_inventory = DB::table('warehouse_inventory')->where('spare_code',$spare_code)->where('warehouse',$warehouse)->where('available_qty','>',0)->where('item_type','repaired')->get(); $total_adjust = 0; $rp_required = $value['rqty']; foreach ($warehouse_inventory as $key => $rvalue) { $total_adjust = $rvalue->available_qty; if($total_adjust < $rp_required && $rp_required != 0){ \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $toWarehouse, 'item_type' => 'repaired', 'entry_type' => 'Exchange from'.$warehouse.' to '.$toWarehouse, 'spare_code' => $rvalue->spare_code , 'in_qty' => $rvalue->available_qty, 'available_qty' => $rvalue->available_qty, 'rate' => $rvalue->rate, 'lot_no' => $rvalue->lot_no ]); $warehouse_inventory_main = \App\WarehouseInventory::where('id',$rvalue->id)->first(); $warehouse_inventory_main->available_qty = $warehouse_inventory_main->available_qty - $rvalue->available_qty; $warehouse_inventory_main->save(); }elseif($total_adjust > $rp_required || $total_adjust == $rp_required ){ \DB::table('warehouse_inventory')->insertGetId([ 'warehouse' => $toWarehouse, 'item_type' => 'repaired', 'entry_type' => 'Exchange from'.$warehouse.' to '.$toWarehouse, 'spare_code' => $rvalue->spare_code , 'in_qty' => $rp_required, 'available_qty' => $rp_required, 'rate' => $rvalue->rate, 'lot_no' => $rvalue->lot_no ]); $warehouse_inventory_main = \App\WarehouseInventory::where('id',$rvalue->id)->first(); $warehouse_inventory_main->available_qty = $warehouse_inventory_main->available_qty - $rp_required; $warehouse_inventory_main->save(); } $rp_required = $rp_required - $total_adjust; if( $rp_required == 0 || $rp_required < 0){ break 1; } } } } return json_encode(['success'=>true, 'msg'=>'Spare Successfully Exchange from '.$warehouse.' to '.$toWarehouse]); }else{ return json_encode(['success'=>false, 'msg'=> $sp.' Qty Spare not at circle Store. So, Not able to move this spare.!!']); } } }