You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

380 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\inventarioInicial;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Carbon\Carbon;
use Illuminate\Support\Facades\Validator;
class InventarioInicialController extends Controller
{
//
public function index(Request $request)
{
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 {
$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);
}
}
}