/
home
/
sjslayjy
/
public_html
/
tabson_test
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\RoleModuleAssociation; // Update the namespace use DB; use App\LocalUserMapping; use App\Department; use App\JobWorkerWarehouse; use App\StockInCircleStore; use App\EngineerSparePart; use App\User; use App\HistoryOfStockInCircleStore; use App\DeliveryTransaction; use App\DeliveryTransactionItem; use Illuminate\Http\Request; use App\Exports\ItemsExport; use App\Imports\ItemsImport; use Maatwebsite\Excel\Facades\Excel; class StoreStockController extends Controller { public $data; public function get_common() { if (Auth::check()) { $user = Auth::user(); $this->data['userInfo'] = User::where('loginId', $user->loginId)->first(); } } public function spares_in_stock(Request $request) { $this->get_common(); $loginId = Auth::user()->loginId; $user_warehouse = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $user_warehouse->warehouseCode); if ($request->circle != '') { $current_warehouse = $request->circle; } else { $current_warehouse = $warehouses[0]; } $stocks = DB::table('stock_in_circle_stores')->join('items', 'items.code', 'stock_in_circle_stores.spare_code')->whereNotNull('items.make')->where('stock_in_circle_stores.warehouse', $current_warehouse)->select('stock_in_circle_stores.*', 'items.description', 'items.rate', 'items.repaired_rate')->orderBy('stock_in_circle_stores.spare_code', 'asc')->get(); $fresh_stocks = DB::table('warehouse_inventory')->join('items', 'items.code', 'warehouse_inventory.spare_code')->whereNotNull('items.make')->where('warehouse_inventory.warehouse', $current_warehouse)->where('warehouse_inventory.item_type', 'fresh')->where('warehouse_inventory.available_qty', '>', 0)->select('warehouse_inventory.*', 'items.description')->get(); $scrap_stocks = DB::table('warehouse_inventory')->join('items', 'items.code', 'warehouse_inventory.spare_code')->where('warehouse_inventory.warehouse', $current_warehouse)->where('warehouse_inventory.item_type', 'scrap')->where('warehouse_inventory.available_qty', '>', 0)->select('warehouse_inventory.*', 'items.description')->get(); $this->data = array_merge($this->data, ['stocks' => $stocks, 'warehouses' => $warehouses, 'current_warehouse' => $current_warehouse, 'fresh_stocks' => $fresh_stocks,'scrap_stocks' => $scrap_stocks]); return view('dashboard.stock.all-stock', $this->data); } public function material_receiving_from_scm() { $this->get_common(); $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $assigned_warehouses->warehouseCode); $gst_slabs = DB::table('gst_slabs')->get(); $this->data = array_merge($this->data, ['warehouses' => $warehouses, 'gst_slabs' => $gst_slabs]); return view('dashboard.stock.material-receiving-from-scm', $this->data); } public function spare_assigned_to_department() { $this->get_common(); $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $assigned_warehouses->warehouseCode); $current_warehouse = $warehouses[0]; $departments = Department::where('is_active', '1')->get(); $this->data = array_merge($this->data, ['warehouses' => $warehouses, 'departments' => $departments]); return view('dashboard.stock.spare-assigned-to-department', $this->data); } /** * Get spare part from circle stock */ public function get_spare_part_from_circle_stock(Request $request) { $code = $request->code; $warehouse = $request->warehouse; $id_spare_part = DB::table('stock_in_circle_stores')->where('spare_code', $code)->where('warehouse', $warehouse)->count(); if ($id_spare_part > 0) { $spare_part = DB::table('stock_in_circle_stores') ->join('items', 'items.code', 'stock_in_circle_stores.spare_code') ->where('stock_in_circle_stores.spare_code', $code) ->where('stock_in_circle_stores.warehouse', $warehouse) ->first(); return json_encode(['success' => true, 'spare_part' => $spare_part]); } else { return json_encode(['success' => false, 'msg' => 'Spare Not available at circle store.!!']); } } public function get_department_of_warehouse(Request $request) { $warehouse = $request->warehouse; $loginId = Auth::user()->loginId; $user = DB::table('users') ->select('department_id') ->where('loginId', $loginId) ->first(); if (!$user || empty($user->department_id)) { return response()->json(['success' => false, 'message' => 'No department assigned to user.']); } $userDepartmentIds = array_map('trim', explode(',', $user->department_id)); $departments = Department::whereIn('department_id', $userDepartmentIds) ->where('is_active', 1) ->get(); return response()->json(['success' => true, 'departments' => $departments]); } public function assign_spare_to_department(Request $request){ $user_id = Auth::user()->id; $loginId = Auth::user()->loginId; $user_type = Auth::user()->type; $department_id = ($request->type == 2)?$request->site_id:$request->department_id; //$userInfo = LocalUserMapping::where('LoginID',$engineer_id)->first(); $warehouse = $request->warehouse; $purpose = $request->purpose; $items = $request->items; $is_valid = true; $sp = ""; $errorMsg = ""; $sp_code = ''; foreach ($items as $val) { $warehouse_fresh_qty = DB::table('warehouse_inventory')->where('spare_code', $val['code'])->where('warehouse', $warehouse)->where('item_type', 'fresh')->sum(DB::raw('round(available_qty, 2)')); $inventory_fresh_qty = DB::table('engineer_inventory')->where('spare_code', $val['code'])->where('department_id',$department_id)->where('warehouse', $warehouse)->where('item_type', 'fresh')->sum(DB::raw('round(available_qty, 2)')); $ms = StockInCircleStore::where('spare_code', $val['code'])->where('warehouse', $warehouse)->first(); $spare_code = $val['code']; $st = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->where('warehouse', $warehouse)->first(); if ($ms != null) { if ($ms->fresh_qty != $warehouse_fresh_qty) { $is_valid = false; $errorMsg = "Mismatch in Circle Stock!\n\n" . "Spare Type : Fresh\n" . "Engineer Id: " . $department_id . ",\n" . "Spare Code: " . $spare_code . ",\n" . "Table: (stock_in_circle_store to warehouse_inventory).\n\n"; } if ($st) { if ($st->fresh_qty != $inventory_fresh_qty) { $is_valid = false; $errorMsg = "Mismatch in Engineer Stock!\n\n" . "Spare Type : Fresh\n" . "Engineer Id: " . $department_id . ",\n" . "Spare Code: " . $spare_code . ",\n" . "Table: (engineer_spare_parts to engineer_inventory).\n\n"; } } } } if($is_valid == true) { foreach ($items as $val) { $ms = StockInCircleStore::where('spare_code',$val['code'])->where('warehouse',$warehouse)->first(); $st = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->where('warehouse',$warehouse)->first(); if($ms != null){ if($ms->fresh_qty < $val['qty'] && $val['qty'] != 0){ $is_valid = false; $sp = 'Entered Fresh Qty of ' . $val['code'] . ' Spare not at Circle Store.'; break; } // if($st->fresh_qty < $val['qty'] && $val['qty'] != 0){ // $is_valid = false; // $sp = $val['code'].' Fresh Qty Spare not at Engineers Stock.'; // break; // } // if($st->repaired_qty < $val['rqty'] && $val['rqty'] != 0 ){ // $is_valid = false; // $sp = $val['code'].'Repaired Qty Spare not at Engineers Stock.'; // break; // } }else{ $is_valid = false; $sp = $val['code'].' Fresh'; break; } } if($is_valid == true){ DB::beginTransaction(); try{ $f_date = date('Y').'-03-31'; $curr_date = date('Y-m-d'); if (strtotime($curr_date) <= strtotime($f_date)) { $session = (date('y')-1).date('y'); } else { $session = date('y').(date('y')+1); } $last_value = \App\DeliveryTransaction::where('warehouse',$warehouse)->where('session',$session)->orderBy('id','desc')->first(); if($last_value != null){ $no = $last_value->series + 1; }else{ $no = 1; } $dt = new DeliveryTransaction(); $dt->series = $no; $dt->session = $session; $ware_hus = ($user_type == 1)?substr($warehouse,3):substr($warehouse,4); $dt->delivery_challan_no = 'DC/'.$ware_hus.'/'.$no.'/'.$session; $dt->department_id = $department_id; $dt->status = 'assign'; $dt->added_by = $user_id; $dt->warehouse = $warehouse; $dt->purpose = $purpose; $dt->type = ($user_type == 2)?2:1; if($dt->save()){ $n=0; foreach ($items as $value) { $spare_code = $value['code']; $is_espare = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->count(); if($is_espare > 0){ $espare = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->first(); $espare->fresh_qty = $espare->fresh_qty + $value['qty']; $espare->save(); }else{ $spare = new EngineerSparePart(); $spare->department_id = $department_id; $spare->spare_id = $value['id']; $spare->spare_code = $value['code']; $spare->fresh_qty = $value['qty']; $spare->warehouse = $warehouse; $spare->type = ($user_type == 2)?2:1; $spare->save(); } $stock_in_store = StockInCircleStore::where('spare_code',$spare_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->save(); } $dti = new DeliveryTransactionItem(); $dti->department_id = $department_id; $dti->dt_id = $dt->id; $dti->spare_code = $value['code']; $dti->fresh_qty = $value['qty']; $dti->rate = $value['rate']; // $dti->gst = $value['gst_slab_rates']; $dti->save(); 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){ $ei = \App\EngineerInventory::where('spare_code',$fvalue->spare_code)->where('department_id',$department_id)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($ei != null){ $ei->available_qty = $ei->available_qty + $fvalue->available_qty; $ei->rate = $fvalue->rate; $ei->save(); }else{ $ei = new \App\EngineerInventory(); $ei->warehouse = $warehouse; $ei->department_id = $department_id; $ei->item_type = 'fresh'; $ei->entry_type = 'assign'; $ei->spare_code = $fvalue->spare_code; $ei->available_qty = $fvalue->available_qty; $ei->rate = $fvalue->rate; $ei->lot_no = $fvalue->lot_no; $ei->type = ($user_type == 2)?2:1; $ei->save(); } $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 ){ $ei = \App\EngineerInventory::where('spare_code',$fvalue->spare_code)->where('department_id',$department_id)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($ei != null){ $ei->available_qty = $ei->available_qty + $required; $ei->rate = $fvalue->rate; $ei->save(); }else{ $ei = new \App\EngineerInventory(); $ei->warehouse = $warehouse; $ei->department_id = $department_id; $ei->item_type = 'fresh'; $ei->entry_type = 'assign'; $ei->spare_code = $fvalue->spare_code; $ei->available_qty = $required; $ei->rate = $fvalue->rate; $ei->lot_no = $fvalue->lot_no; $ei->type = ($user_type == 2)?2:1; $ei->save(); } $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; } } } } } DB::commit(); return json_encode(['success' => true, 'msg' => 'Spare Assigned to Engineer/Employee Successfully!! DC Number is: ' . $dt->delivery_challan_no]); } catch(\Exception $exceptoin){ DB::rollback(); return json_encode(['success'=>false, 'msg'=> $exceptoin->getMessage()]); } catch(\Error $error) { DB::rollback(); return json_encode(['success'=>false, 'msg'=> $error->getMessage()]); } }else{ return json_encode(['success'=>false, 'msg'=> $sp.' So, Not able to assign more than available qty !!']); } } else { return json_encode(['success' => false, 'msg' => $sp_code . ' Qty ' . $errorMsg . 'Please Contact Admin !!']); } } public function get_material_receiving() { $this->get_common(); $loginId = Auth::user()->loginId; $user = DB::table('users') ->select('warehouseCode', 'department_id') ->where('loginId', $loginId) ->first(); if (!$user) { return redirect()->back()->with('error', 'User not found.'); } $warehouses = explode(',', $user->warehouseCode); $current_warehouse = $warehouses[0]; $userDepartmentIds = array_map('trim', explode(',', $user->department_id)); $departments = Department::whereIn('department_id', $userDepartmentIds) ->where('is_active', 1) ->get(); $this->data = array_merge($this->data, [ 'warehouses' => $warehouses, 'departments' => $departments ]); return view('dashboard.stock.material-receiving', $this->data); } public function get_spare_part_from_department_stock(Request $request) { $code = $request->code; $department_id = $request->department_id; $warehouse_id = $request->warehouse; $is_spare_part = DB::table('engineer_spare_parts')->where('warehouse', $warehouse_id)->where('spare_code', $code)->where('department_id', $department_id)->count(); if ($is_spare_part > 0) { $department_spare_info = DB::table('engineer_spare_parts')->where('warehouse', $warehouse_id)->where('spare_code', $code)->where('department_id', $department_id)->first(); $spare_rate = DB::table('engineer_inventory')->select('rate')->where('warehouse', $warehouse_id)->where('spare_code', $code)->where('department_id', $department_id)->first(); $spare_part = DB::table('items')->where('code', $code)->first(); return json_encode(['success' => true, 'spare_part' => $spare_part, 'department_spare_info' => $department_spare_info, 'spare_rate' => $spare_rate->rate]); } else { return json_encode(['success' => false, 'msg' => 'Spare not at Department Stock. Try another spare Code.']); } } public function received_spare_now(Request $request){ $department_id = $request->department_id; $warehouse = $request->warehouse; $items = $request->items; $user_id = Auth::user()->id; $is_valid = true; $type = $request->type; $department_id = ($type == 2)?$request->site_id:$request->department_id; $eng_text = ($type == 2)?'Site':'Engineer'; $eng_text1 = ($type == 2)?'site':'dpt'; foreach ($items as $val) { $ms = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$val['code'])->first(); if($ms != null){ if($ms->fresh_qty < $val['fqty'] && $val['fqty'] != 0){ $is_valid = false; $sp = $val['code'].' Fresh'; break; } if($ms->scrap_qty < $val['sqty'] && $val['sqty'] != 0 ){ $is_valid = false; $sp = $val['code'].' Scrap'; break; } }else{ $is_valid = false; $sp = $val['code'].' Fresh'; break; } } if($is_valid == true){ $skip_spare_code = []; $added_spare_code = []; $added_count = 0; $n = 0; DB::beginTransaction(); try{ foreach ($items as $value) { $spare_code = $value['code']; $is_espare = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->count(); if($is_espare > 0){ $espare = EngineerSparePart::where('department_id',$department_id)->where('spare_code',$spare_code)->first(); $espare->fresh_qty = $espare->fresh_qty - $value['fqty']; $espare->scrap_qty = $espare->scrap_qty - $value['sqty']; $espare->save(); $is_stock_in_store = StockInCircleStore::where('spare_code',$spare_code)->where('warehouse',$warehouse)->count(); if($is_stock_in_store > 0){ $stock_in_store = StockInCircleStore::where('spare_code',$spare_code)->where('warehouse',$warehouse)->first(); $stock_in_store->fresh_qty = $stock_in_store->fresh_qty + $value['fqty']; $stock_in_store->scrap_qty = $stock_in_store->scrap_qty + $value['sqty']; $stock_in_store->save(); }else{ $stock_in_store = new StockInCircleStore(); $stock_in_store->user_id = $user_id; $stock_in_store->warehouse = $warehouse; $stock_in_store->spare_id = $value['id']; $stock_in_store->spare_code = $value['code']; $stock_in_store->fresh_qty = $value['fqty']; $stock_in_store->scrap_qty = $value['sqty']; $stock_in_store->save(); } if($value['fqty'] != 0){ $engineer_inventory = DB::table('engineer_inventory')->where('spare_code',$spare_code)->where('department_id',$department_id)->where('available_qty','>',0)->where('item_type','fresh')->get(); $total_adjust = 0; $required = $value['fqty']; foreach ($engineer_inventory as $key => $fvalue) { $total_adjust = $fvalue->available_qty; if($total_adjust < $required && $required != 0){ $wi = \App\WarehouseInventory::where('spare_code',$fvalue->spare_code)->where('warehouse',$warehouse)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($wi != null){ $wi->available_qty = $wi->available_qty + $fvalue->available_qty; $wi->rate = $fvalue->rate; $wi->save(); }else{ $wi = new \App\WarehouseInventory(); $wi->warehouse = $warehouse; $wi->item_type = 'fresh'; $wi->entry_type = 'received_from_'.$eng_text1; $wi->spare_code = $fvalue->spare_code; $wi->available_qty = $fvalue->available_qty; $wi->rate = $fvalue->rate; $wi->lot_no = $fvalue->lot_no; $wi->save(); } $engineer_inventory_main = \App\EngineerInventory::where('id',$fvalue->id)->first(); $engineer_inventory_main->available_qty = $engineer_inventory_main->available_qty - $fvalue->available_qty; $engineer_inventory_main->save(); }elseif($total_adjust > $required || $total_adjust == $required ){ $wi = \App\WarehouseInventory::where('spare_code',$fvalue->spare_code)->where('warehouse',$warehouse)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($wi != null){ $wi->available_qty = $wi->available_qty + $required; $wi->rate = $fvalue->rate; $wi->save(); }else{ $wi = new \App\WarehouseInventory(); $wi->warehouse = $warehouse; $wi->item_type = 'fresh'; $wi->entry_type = 'received_from_'.$eng_text1; $wi->spare_code = $fvalue->spare_code; $wi->available_qty = $required; $wi->rate = $fvalue->rate; $wi->lot_no = $fvalue->lot_no; $wi->save(); } $engineer_inventory_main = \App\EngineerInventory::where('id',$fvalue->id)->first(); $engineer_inventory_main->available_qty = $engineer_inventory_main->available_qty - $required; $engineer_inventory_main->save(); } $required = $required - $total_adjust; if( $required == 0 || $required < 0){ break 1; } } } if($value['sqty'] != 0){ $engineer_inventory = DB::table('engineer_inventory')->where('spare_code',$spare_code)->where('department_id',$department_id)->where('available_qty','>',0)->where('item_type','scrap')->get(); $total_adjust = 0; $rp_required = $value['sqty']; foreach ($engineer_inventory as $key => $svalue) { $total_adjust = $svalue->available_qty; if($total_adjust < $rp_required && $rp_required != 0){ $wi = \App\WarehouseInventory::where('spare_code',$svalue->spare_code)->where('warehouse',$warehouse)->where('item_type','scrap')->where('lot_no',$svalue->lot_no)->first(); if($wi != null){ $wi->available_qty = $wi->available_qty + $svalue->available_qty; $wi->rate = $svalue->rate; $wi->save(); }else{ $wi = new \App\WarehouseInventory(); $wi->warehouse = $warehouse; $wi->item_type = 'scrap'; $wi->entry_type = 'received_from_'.$eng_text1; $wi->spare_code = $svalue->spare_code; $wi->available_qty = $svalue->available_qty; $wi->rate = $svalue->rate; $wi->lot_no = $svalue->lot_no; $wi->save(); } $engineer_inventory_main = \App\EngineerInventory::where('id',$svalue->id)->first(); $engineer_inventory_main->available_qty = $engineer_inventory_main->available_qty - $svalue->available_qty; $engineer_inventory_main->save(); }elseif($total_adjust > $rp_required || $total_adjust == $rp_required ){ $wi = \App\WarehouseInventory::where('spare_code',$svalue->spare_code)->where('warehouse',$warehouse)->where('item_type','scrap')->where('lot_no',$svalue->lot_no)->first(); if($wi != null){ $wi->available_qty = $wi->available_qty + $rp_required; $wi->rate = $svalue->rate; $wi->save(); }else{ $wi = new \App\WarehouseInventory(); $wi->warehouse = $warehouse; $wi->item_type = 'scrap'; $wi->entry_type = 'received_from_'.$eng_text1; $wi->spare_code = $svalue->spare_code; $wi->available_qty = $rp_required; $wi->rate = $svalue->rate; $wi->lot_no = $svalue->lot_no; $wi->save(); } $engineer_inventory_main = \App\EngineerInventory::where('id',$svalue->id)->first(); $engineer_inventory_main->available_qty = $engineer_inventory_main->available_qty - $rp_required; $engineer_inventory_main->save(); } $rp_required = $rp_required - $total_adjust; if( $rp_required == 0 || $rp_required < 0){ break 1; } } } $history = new HistoryOfStockInCircleStore(); $history->spare_code = $value['code']; $history->fresh_qty = $value['fqty']; $history->scrap_qty = $value['sqty']; $history->receiving_type = strtolower($eng_text).'_material_received'; $history->receiving_date = date('Y-m-d H:i:s'); $history->type = ($type ==2)?2:1; $history->department_id = $department_id; $history->from_warehouse = $warehouse; $history->added_by = $user_id; $history->save(); $added_count = $added_count + 1; $added_spare_code[$n] = $value['id']; }else{ $skip_spare_code[$n] = $value['id']; } $n++; } DB::commit(); return json_encode(['success'=>true, "skip_spare_code"=>$skip_spare_code, 'msg'=>'Spare Recevied from '.$eng_text.' Successfully !!','added_count'=>$added_count,'added_spare_code'=>$added_spare_code]); } catch(\Exception $exception){ DB::rollback(); return json_encode(['success'=>false, 'msg'=> $exception->getMessage()]); } catch(\Error $error) { DB::rollback(); return json_encode(['success'=>false, 'msg'=> $error->getMessage()]); } }else{ return json_encode(['success'=>false, 'msg'=> $sp.' Qty Spare not at '.$eng_text.'. So, Not able to receive more than available spare.!!']); } } public function get_all_spares_at_departments() { $this->get_common(); $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $assigned_warehouses->warehouseCode); $current_warehouse = $warehouses[0]; $departments = Department::where('is_active', '1')->get(); $this->data = array_merge($this->data, ['warehouses' => $warehouses, 'departments' => $departments]); return view('dashboard.stock.all-department-stocks', $this->data); } public function get_spare_part_at_department(Request $request) { $department_id = $request->department_id; $selected_warehouse = $request->warehouse; $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); if (!$assigned_warehouses) { return response()->json(['success' => false, 'msg' => 'No warehouse assigned to this user.']); } $warehouses = explode(',', $assigned_warehouses->warehouseCode); if (!in_array($selected_warehouse, $warehouses)) { return response()->json(['success' => false, 'msg' => 'Unauthorized warehouse access.']); } $spares = DB::table('engineer_spare_parts') ->join('items', 'items.code', 'engineer_spare_parts.spare_code') ->where('engineer_spare_parts.department_id', $department_id) ->where('engineer_spare_parts.warehouse', $selected_warehouse) ->select('engineer_spare_parts.*', 'items.description', 'items.rate', 'items.repaired_rate') ->get(); $fresh_at_engineer = DB::table('engineer_inventory') ->where('item_type', 'fresh') ->where('department_id', $department_id) ->where('warehouse', $selected_warehouse) ->where('available_qty', '>', 0) ->get(); $scrap_at_engineer = DB::table('engineer_inventory') ->where('item_type', 'scrap') ->where('warehouse', $selected_warehouse) ->where('department_id', $department_id) ->where('available_qty', '>', 0) ->get(); return response()->json([ 'success' => true, 'spares' => $spares, 'fresh_items' => $fresh_at_engineer, 'scrap_items' => $scrap_at_engineer ]); } public function get_all_delivery_challan(Request $request) { $this->get_common(); $loginId = Auth::user()->loginId; $assigned = DB::table('users') ->select('warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $assigned->warehouseCode); $selected_warehouse = $request->get('warehouse') ?? $warehouses[0]; $all_challan = DB::table('delivery_transactions as dt') ->leftJoin('department as d', 'dt.department_id', '=', 'd.department_id') ->where('dt.warehouse', $selected_warehouse) ->orderBy('dt.id', 'desc') ->select('dt.*', 'd.name as department_name') ->get(); $challans = DB::table('delivery_transactions') ->where('warehouse', $selected_warehouse) ->groupBy('type') ->get(); $this->data = [ 'all_challan' => $all_challan, 'warehouses' => $warehouses, 'current_warehouse' => $selected_warehouse, ]; return view('dashboard.stock.all-delivery-challan', $this->data); } public function print_delivery_challan($dt_id, $type = '') { $this->get_common(); $delivery_transaction = DeliveryTransaction::where('id', $dt_id)->first(); $warehouse = DB::table('ware_houses')->where('ware_house', $delivery_transaction->warehouse)->first(); $delivery_transaction_items = DB::table('delivery_transaction_items') ->join('items', 'items.code', 'delivery_transaction_items.spare_code') ->where('delivery_transaction_items.dt_id', $dt_id) ->select('delivery_transaction_items.*', 'items.description', 'items.repaired_rate', 'items.rate') ->get(); $subtotal = 0; foreach ($delivery_transaction_items as $value) { $ftotal = $value->fresh_qty * $value->rate; $subtotal += ($ftotal); } $number_in_word = $this->convert_number_to_words($subtotal); $engineer_details = null; if ($type == 1) { $department = DB::table('department') ->where('department_id', $delivery_transaction->department_id) ->first(); if ($department) { $engineer_details = [ 'name' => $department->name, 'id' => $department->department_id ]; } } $this->data = array_merge($this->data, [ 'delivery_transaction' => $delivery_transaction, 'delivery_transaction_items' => $delivery_transaction_items, 'subtotal' => $subtotal, 'number_in_word' => $number_in_word, 'warehouse' => $warehouse, 'engineer' => $engineer_details ]); return view('dashboard.stock.print-challan', $this->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 getStatus($id){ $data['pr_id'] = $id; $data['pr'] =DB::table('vendors') ->select('vendors.status') ->where('id',$id) ->first(); $data['role_id'] = \Auth::user()->role_id; return view('dashboard.stock.set-status',$data); } public function setVendorStatus(Request $request) { $response = []; $validator = \Validator::make($request->all(), [ 'id' => 'required|integer|exists:vendors,id', 'status' => 'required|string', 'remark' => 'nullable|string', ]); if ($validator->fails()) { return response()->json([ 'flag' => false, 'errors' => $validator->errors() ]); } $vendor = \App\Vendor::find($request->id); if (!$vendor) { return response()->json([ 'flag' => false, 'error' => 'Vendor not found' ]); } $vendor->status = $request->status; $vendor->remark = $request->remark; if (\Auth::user()->role_id == 5 && $request->status === 'Approved') { $vendor->is_active = 1; } if ($vendor->save()) { return response()->json([ 'flag' => true, 'message' => 'Vendor Status Updated Successfully' ]); } return response()->json([ 'flag' => false, 'error' => 'Something went wrong while saving' ]); } public function spare_assigned_to_job_worker() { $this->get_common(); $loginId = Auth::user()->loginId; $assigned_warehouses = DB::table('users') ->select('users.warehouseCode') ->where('loginId', $loginId) ->first(); $warehouses = explode(',', $assigned_warehouses->warehouseCode); $current_warehouse = $warehouses[0]; $job_worker_warehouses = JobWorkerWarehouse::where('is_active', '1')->get(); $this->data = array_merge($this->data, ['warehouses' => $warehouses, 'job_worker_warehouses' => $job_worker_warehouses]); return view('dashboard.stock.spare-assigned-to-job-worker', $this->data); } public function assign_spare_to_job_worker(Request $request){ $user_id = Auth::user()->id; $loginId = Auth::user()->loginId; $user_type = Auth::user()->type; $job_worker_id = ($request->type == 2)?$request->site_id:$request->job_worker_id; //$userInfo = LocalUserMapping::where('LoginID',$engineer_id)->first(); $warehouse = $request->warehouse; $purpose = $request->purpose; $items = $request->items; $is_valid = true; $sp = ""; $errorMsg = ""; $sp_code = ''; foreach ($items as $val) { $warehouse_fresh_qty = DB::table('warehouse_inventory')->where('spare_code', $val['code'])->where('warehouse', $warehouse)->where('item_type', 'fresh')->sum(DB::raw('round(available_qty, 2)')); $inventory_fresh_qty = DB::table('job_worker_inventory')->where('spare_code', $val['code'])->where('job_worker_id',$job_worker_id)->where('warehouse', $warehouse)->where('item_type', 'fresh')->sum(DB::raw('round(available_qty, 2)')); $ms = StockInCircleStore::where('spare_code', $val['code'])->where('warehouse', $warehouse)->first(); $spare_code = $val['code']; $st = JobWorkerSparePart::where('job_worker_id',$job_worker_id)->where('spare_code',$spare_code)->where('warehouse', $warehouse)->first(); if ($ms != null) { if ($ms->fresh_qty != $warehouse_fresh_qty) { $is_valid = false; $errorMsg = "Mismatch in Circle Stock!\n\n" . "Spare Type : Fresh\n" . "Job Worker Id: " . $job_worker_id . ",\n" . "Spare Code: " . $spare_code . ",\n" . "Table: (stock_in_circle_store to warehouse_inventory).\n\n"; } if ($st) { if ($st->fresh_qty != $inventory_fresh_qty) { $is_valid = false; $errorMsg = "Mismatch in Job Worker Stock!\n\n" . "Spare Type : Fresh\n" . "Job Worker Id: " . $job_worker_id . ",\n" . "Spare Code: " . $spare_code . ",\n" . "Table: (job_worker_spare_parts to job_worker_inventory).\n\n"; } } } } if($is_valid == true) { foreach ($items as $val) { $ms = StockInCircleStore::where('spare_code',$val['code'])->where('warehouse',$warehouse)->first(); $st = JobWorkerSparePart::where('job_worker_id',$job_worker_id)->where('spare_code',$spare_code)->where('warehouse',$warehouse)->first(); if($ms != null){ if($ms->fresh_qty < $val['qty'] && $val['qty'] != 0){ $is_valid = false; $sp = 'Entered Fresh Qty of ' . $val['code'] . ' Spare not at Circle Store.'; break; } // if($st->fresh_qty < $val['qty'] && $val['qty'] != 0){ // $is_valid = false; // $sp = $val['code'].' Fresh Qty Spare not at Engineers Stock.'; // break; // } // if($st->repaired_qty < $val['rqty'] && $val['rqty'] != 0 ){ // $is_valid = false; // $sp = $val['code'].'Repaired Qty Spare not at Engineers Stock.'; // break; // } }else{ $is_valid = false; $sp = $val['code'].' Fresh'; break; } } if($is_valid == true){ DB::beginTransaction(); try{ $f_date = date('Y').'-03-31'; $curr_date = date('Y-m-d'); if (strtotime($curr_date) <= strtotime($f_date)) { $session = (date('y')-1).date('y'); } else { $session = date('y').(date('y')+1); } $last_value = \App\DeliveryTransaction::where('warehouse',$warehouse)->where('session',$session)->orderBy('id','desc')->first(); if($last_value != null){ $no = $last_value->series + 1; }else{ $no = 1; } $dt = new DeliveryTransaction(); $dt->series = $no; $dt->session = $session; $ware_hus = ($user_type == 1)?substr($warehouse,3):substr($warehouse,4); $dt->delivery_challan_no = 'DC/'.$ware_hus.'/'.$no.'/'.$session; $dt->job_worker_id = $job_worker_id; $dt->status = 'assign'; $dt->added_by = $user_id; $dt->warehouse = $warehouse; $dt->purpose = $purpose; $dt->type = ($user_type == 2)?2:1; if($dt->save()){ $n=0; foreach ($items as $value) { $spare_code = $value['code']; $is_espare = JobWorkerSparePart::where('job_worker_id',$job_worker_id)->where('spare_code',$spare_code)->count(); if($is_espare > 0){ $espare = JobWorkerSparePart::where('job_worker_id',$job_worker_id)->where('spare_code',$spare_code)->first(); $espare->fresh_qty = $espare->fresh_qty + $value['qty']; $espare->save(); }else{ $spare = new JobWorkerSparePart(); $spare->job_worker_id = $job_worker_id; $spare->spare_id = $value['id']; $spare->spare_code = $value['code']; $spare->fresh_qty = $value['qty']; $spare->warehouse = $warehouse; $spare->type = ($user_type == 2)?2:1; $spare->save(); } $stock_in_store = StockInCircleStore::where('spare_code',$spare_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->save(); } $dti = new DeliveryTransactionItem(); $dti->job_worker_id = $job_worker_id; $dti->dt_id = $dt->id; $dti->spare_code = $value['code']; $dti->fresh_qty = $value['qty']; $dti->rate = $value['rate']; // $dti->gst = $value['gst_slab_rates']; $dti->save(); 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){ $ei = \App\JobWorkerInventory::where('spare_code',$fvalue->spare_code)->where('job_worker_id',$job_worker_id)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($ei != null){ $ei->available_qty = $ei->available_qty + $fvalue->available_qty; $ei->rate = $fvalue->rate; $ei->save(); }else{ $ei = new \App\JobWorkerInventory(); $ei->warehouse = $warehouse; $ei->job_worker_id = $job_worker_id; $ei->item_type = 'fresh'; $ei->entry_type = 'assign'; $ei->spare_code = $fvalue->spare_code; $ei->available_qty = $fvalue->available_qty; $ei->rate = $fvalue->rate; $ei->lot_no = $fvalue->lot_no; $ei->type = ($user_type == 2)?2:1; $ei->save(); } $warehouse_inventory_main = \App\JobWorkerInventory::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 ){ $ei = \App\JobWorkerInventory::where('spare_code',$fvalue->spare_code)->where('job_worker_id',$job_worker_id)->where('item_type','fresh')->where('lot_no',$fvalue->lot_no)->first(); if($ei != null){ $ei->available_qty = $ei->available_qty + $required; $ei->rate = $fvalue->rate; $ei->save(); }else{ $ei = new \App\JobWorkerInventory(); $ei->warehouse = $warehouse; $ei->job_worker_id = $job_worker_id; $ei->item_type = 'fresh'; $ei->entry_type = 'assign'; $ei->spare_code = $fvalue->spare_code; $ei->available_qty = $required; $ei->rate = $fvalue->rate; $ei->lot_no = $fvalue->lot_no; $ei->type = ($user_type == 2)?2:1; $ei->save(); } $warehouse_inventory_main = \App\JobWorkerInventory::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; } } } } } DB::commit(); return json_encode(['success' => true, 'msg' => 'Spare Assigned to Job Worker Successfully!! DC Number is: ' . $dt->delivery_challan_no]); } catch(\Exception $exceptoin){ DB::rollback(); return json_encode(['success'=>false, 'msg'=> $exceptoin->getMessage()]); } catch(\Error $error) { DB::rollback(); return json_encode(['success'=>false, 'msg'=> $error->getMessage()]); } }else{ return json_encode(['success'=>false, 'msg'=> $sp.' So, Not able to assign more than available qty !!']); } } else { return json_encode(['success' => false, 'msg' => $sp_code . ' Qty ' . $errorMsg . 'Please Contact Admin !!']); } } }