user()->hasPermissionTo('inventario vista')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } try { $query = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'unidad_medidas.nombre as unidad_medida' ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida'); if ($request->has('search')) { $search = $request->input('search'); $query->where(function ($q) use ($search) { $q->where('inventario_inicials.descripcion', 'like', "%$search%") ->orWhere('bienes.descripcion', 'like', "%$search%") ->orWhere('bienes.marca', 'like', "%$search%") ->orWhere('unidad_medidas.nombre', 'like', "%$search%") ->orWhere('inventario_inicials.id', 'like', "%$search%"); }); } return response()->json([ 'data' => $query->get(), ], 201); } catch (\Exception $e) { return response()->json(['valid' => $e], 401); } } public function generarReporteInventario(Request $request) { if (!auth()->user()->hasPermissionTo('inventario reporte')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => 'Usted no está autorizado'], 403); } ini_set('memory_limit', '512M'); // $request->validate([ // 'fecha_desde' => 'required|date', // 'fecha_hasta' => 'required|date|after_or_equal:fecha_desde', // ]); try { // $añoDesde = Carbon::parse($request->input('fecha_desde'))->year; // $añoHasta = Carbon::parse($request->input('fecha_hasta'))->year; // Filtrar registros por rango de fechas $registros = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.codigo as bien_codigo', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'inventario_inicials.cuenta', 'unidad_medidas.nombre as unidad_medida', DB::raw('ROUND(inventario_inicials.cantidad, 4) as cantidad'), DB::raw('ROUND(inventario_inicials.precio, 4) as precio'), DB::raw('ROUND(inventario_inicials.cantidad * inventario_inicials.precio, 4) as valor_total') ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida') ->orderBy('bienes.descripcion', 'asc') ->get(); // Generar PDF con MPDF $mpdf = new \Mpdf\Mpdf([ 'mode' => 'utf-8', 'format' => 'A4-P', 'margin_left' => 8, 'margin_right' => 8, 'margin_top' => 45, 'margin_bottom' => 35, ]); $imgLogo = public_path('assets/images/UNAP.png'); $htmlHeader = view('reporteInventario._header', compact('imgLogo'))->render(); $mpdf->SetHTMLHeader($htmlHeader, '0'); $htmlFooter = view('reporteInventario._footer')->render(); $mpdf->SetHTMLFooter($htmlFooter, '0'); // Renderizar la vista de PDF // Renderizar la vista en partes más pequeñas $html = view('reporteInventario.index', compact('registros'))->render(); // Dividir en partes y escribir por fragmentos $chunks = str_split($html, 25000); // Dividir cada 50,000 caracteres foreach ($chunks as $chunk) { $mpdf->WriteHTML($chunk); } return response()->streamDownload(function () use ($mpdf) { $mpdf->Output('reporte_inventario_inicial.pdf', 'D'); // 'D' fuerza la descarga }, 'reporte_inventario_inicial.pdf'); } catch (\Exception $e) { // Especifica el tipo de excepción si es necesario return response()->json([ 'success' => false, 'message' => $e->getMessage() ]); } } public function listEnable() { try { $data = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'unidad_medidas.nombre as unidad_medida' ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida') ->where('inventario_inicials.status', 1)->get(); // $data = DB::table('inventario_inicials')->where('status', 1)->get(); return response()->json(['data' => $data], 201); } catch (\Exception $e) { return response()->json(['valid' => $e], 500); } } public function listEnableData() { if (!auth()->user()->hasPermissionTo('inventario vista')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } try { $data = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'unidad_medidas.nombre as unidad_medida' ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida') ->where('inventario_inicials.status', 1)->get(); // $data = DB::table('inventario_inicials')->where('status', 1)->get(); return response()->json(['data' => $data], 201); } catch (\Exception $e) { return response()->json(['valid' => $e], 500); } } public function listDisableData() { if (!auth()->user()->hasPermissionTo('inventario vista')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } try { $data = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'unidad_medidas.nombre as unidad_medida' ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida') ->where('inventario_inicials.status', 0)->get(); return response()->json(['data' => $data], 201); } catch (\Exception $e) { return response()->json(['valid' => false], 500); } } public function listInventarioBienes() { try { $query = DB::table('inventario_inicials') ->join('bienes as b', 'b.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas as m', 'm.id', '=', 'b.id_unidad_medida') ->select('inventario_inicials.*', 'b.descripcion','m.nombre as nombre_medida') ->get(); // Usa first() si solo esperas un resultado return response()->json(['data' => $query], 201); } catch (\Exception $e) { return response()->json(['error' => $e], 500); } } public function listInventarioBienesConStock() { try { $query = DB::table('inventario_inicials') ->join('bienes as b', 'b.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas as m', 'm.id', '=', 'b.id_unidad_medida') ->select('inventario_inicials.*', 'b.descripcion','m.nombre as nombre_medida') ->where('inventario_inicials.status', 1) ->where('inventario_inicials.cantidad','>', 0) ->get(); // Usa first() si solo esperas un resultado return response()->json(['data' => $query], 201); } catch (\Exception $e) { return response()->json(['error' => $e], 500); } } public function store(Request $request) { if (!auth()->user()->hasPermissionTo('inventario crear')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => 'Lo sentimos, pero no tiene autorización para realizar esta acción.'], 403); } try { $validator = Validator::make($request->all(), [ 'descripcion' => 'nullable|string', 'bienes_id' => 'required|string', 'cuenta' => 'required|string|regex:/^\d{10}$/', 'cantidad' => 'required|numeric', 'cantidad_inicial' => 'required|numeric', 'precio' => 'required|numeric', 'fecha_registro' => 'required|string', ]); if ($validator->fails()) { return response()->json($validator->errors(), 422); } DB::table('inventario_inicials')->insert([ 'id' => Str::uuid(), 'descripcion' => $request->descripcion, 'bienes_id' => $request->bienes_id, 'cuenta' => $request->cuenta, 'cantidad' => $request->cantidad, 'cantidad_inicial' => $request->cantidad_inicial, 'precio' => $request->precio, 'fecha_registro' => $request->fecha_registro, 'status' => 1, 'created_at' => now(), 'updated_at' => now(), ]); return response()->json(['mensaje' => 'Inventario inicial creado'], 201); } catch (\Exception $e) { return response()->json(['error' => 'Error Server'], 500); } } public function show($id) { if (!auth()->user()->hasPermissionTo('inventario vista')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } try { $data = DB::table('inventario_inicials') ->select( 'inventario_inicials.*', 'bienes.descripcion as bien_descripcion', 'bienes.marca', 'unidad_medidas.nombre as unidad_medida' ) ->join('bienes', 'bienes.id', '=', 'inventario_inicials.bienes_id') ->join('unidad_medidas', 'unidad_medidas.id', '=', 'bienes.id_unidad_medida') ->where('inventario_inicials.id', $id) ->first(); return response()->json(['data' => $data], 201); } catch (\Exception $e) { return response()->json(['error' => 'Error Server'], 500); } } public function update(Request $request, $id) { if (!auth()->user()->hasPermissionTo('inventario editar')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } try { $validator = Validator::make($request->all(), [ 'descripcion' => 'nullable|string', // 'bienes_id' => 'nullable|string', // no lo requerimos por que no queremos actualizarlo 'cuenta' => 'required|string|regex:/^\d{10}$/', 'cantidad' => 'required|numeric', 'cantidad_inicial' => 'required|numeric', 'precio' => 'required|numeric', 'fecha_registro' => 'required|string', ]); if ($validator->fails()) { return response()->json($validator->errors(), 422); } $updated = DB::table('inventario_inicials') ->where('id', $id) ->update([ 'descripcion' => $request->descripcion, // 'bienes_id' => $request->bienes_id, //para no cambiar el item ya seleccionado 'cuenta' => $request->cuenta, 'cantidad' => $request->cantidad, 'cantidad_inicial' => $request->cantidad_inicial, 'precio' => $request->precio, 'fecha_registro' => $request->fecha_registro, 'updated_at' => now(), ]); if ($updated) { return response()->json(['mensaje' => 'Inventario inicial actualizado'], 201); } else { return response()->json(['mensaje' => 'Inventario inicial no encontrado'], 404); } } catch (\Exception $e) { return response()->json(['error' => 'Error Server'], 500); } } public function disable(Request $request) { if (!auth()->user()->hasPermissionTo('inventario deshabilitar')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } $id = $request->input('id'); // Obtener el ID del body if (!$id) { return response()->json(['error' => 'ID requerido'], 400); } try { $updated = DB::table('inventario_inicials') ->where('id', $id) ->update(['status' => 0]); if ($updated) { return response()->json(['mensaje' => 'Inventario inicial deshabilitado'], 201); } else { return response()->json(['mensaje' => 'Inventario inicial no encontrado'], 404); } } catch (\Exception $e) { return response()->json(['error' => 'Error Server'], 500); } } public function enable(Request $request) { if (!auth()->user()->hasPermissionTo('inventario habilitar')) { // Corregido nombre del permiso return response()->json(['valid' => false, 'error' => '"Lo sentimos, pero no tiene autorización para realizar esta acción."'], 403); } $id = $request->input('id'); // Obtener el ID del body if (!$id) { return response()->json(['error' => 'ID requerido'], 400); } try { $updated = DB::table('inventario_inicials') ->where('id', $id) ->update(['status' => 1]); if ($updated) { return response()->json(['mensaje' => 'Inventario inicial habilitado'], 201); } else { return response()->json(['mensaje' => 'Inventario inicial no encontrado'], 404); } } catch (\Exception $e) { return response()->json(['error' => 'Error Server'], 500); } } }