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
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);
|
|
}
|
|
}
|
|
|
|
}
|