|
|
|
|
@ -46,79 +46,154 @@ class InventarioInicialController extends Controller
|
|
|
|
|
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');
|
|
|
|
|
ini_set('memory_limit', '1024M');
|
|
|
|
|
ini_set('pcre.backtrack_limit', '10000000');
|
|
|
|
|
set_time_limit(0);
|
|
|
|
|
|
|
|
|
|
// $request->validate([
|
|
|
|
|
// 'fecha_desde' => 'required|date',
|
|
|
|
|
// 'fecha_hasta' => 'required|date|after_or_equal:fecha_desde',
|
|
|
|
|
// ]);
|
|
|
|
|
try {
|
|
|
|
|
$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();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// $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,
|
|
|
|
|
'margin_bottom' => 45,
|
|
|
|
|
'default_font' => 'dejavusans',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// Márgenes y comportamiento del salto de página
|
|
|
|
|
$mpdf->SetAutoPageBreak(true, 45);
|
|
|
|
|
$mpdf->setAutoBottomMargin = 'stretch';
|
|
|
|
|
|
|
|
|
|
// Configuraciones de tabla
|
|
|
|
|
$mpdf->simpleTables = true;
|
|
|
|
|
$mpdf->packTableData = true;
|
|
|
|
|
$mpdf->keep_table_proportions = true;
|
|
|
|
|
$mpdf->use_kwt = true;
|
|
|
|
|
$mpdf->shrink_tables_to_fit = 0;
|
|
|
|
|
$mpdf->SetCompression(true);
|
|
|
|
|
|
|
|
|
|
// Header y Footer
|
|
|
|
|
$imgLogo = public_path('assets/images/UNAP.png');
|
|
|
|
|
$htmlHeader = view('reporteInventario._header', compact('imgLogo'))->render();
|
|
|
|
|
$mpdf->SetHTMLHeader($htmlHeader, '0');
|
|
|
|
|
$mpdf->SetHTMLHeader($htmlHeader);
|
|
|
|
|
$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();
|
|
|
|
|
$mpdf->SetHTMLFooter($htmlFooter);
|
|
|
|
|
|
|
|
|
|
// Dividir en partes y escribir por fragmentos
|
|
|
|
|
$chunks = str_split($html, 25000); // Dividir cada 50,000 caracteres
|
|
|
|
|
|
|
|
|
|
foreach ($chunks as $chunk) {
|
|
|
|
|
$mpdf->WriteHTML($chunk);
|
|
|
|
|
}
|
|
|
|
|
// Render vista principal completa (sin dividir)
|
|
|
|
|
$html = view('reporteInventario.index', compact('registros'))->render();
|
|
|
|
|
$mpdf->WriteHTML($html);
|
|
|
|
|
|
|
|
|
|
// Descargar PDF
|
|
|
|
|
return response()->streamDownload(function () use ($mpdf) {
|
|
|
|
|
$mpdf->Output('reporte_inventario_inicial.pdf', 'D'); // 'D' fuerza la descarga
|
|
|
|
|
$mpdf->Output('reporte_inventario_inicial.pdf', 'D');
|
|
|
|
|
}, 'reporte_inventario_inicial.pdf');
|
|
|
|
|
} catch (\Exception $e) { // Especifica el tipo de excepción si es necesario
|
|
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
return response()->json([
|
|
|
|
|
'success' => false,
|
|
|
|
|
'message' => $e->getMessage()
|
|
|
|
|
'message' => $e->getMessage(),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// public function generarReporteInventario(Request $request)
|
|
|
|
|
// {
|
|
|
|
|
// ini_set('memory_limit', '1024M');
|
|
|
|
|
// ini_set('pcre.backtrack_limit', '10000000');
|
|
|
|
|
|
|
|
|
|
// set_time_limit(seconds: 0);
|
|
|
|
|
|
|
|
|
|
// try {
|
|
|
|
|
// $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();
|
|
|
|
|
|
|
|
|
|
// $mpdf = new \Mpdf\Mpdf([
|
|
|
|
|
// 'mode' => 'utf-8',
|
|
|
|
|
// 'format' => 'A4-P',
|
|
|
|
|
// 'margin_left' => 8,
|
|
|
|
|
// 'margin_right' => 8,
|
|
|
|
|
// 'margin_top' => 45,
|
|
|
|
|
// 'margin_bottom' => 45, // margen inferior ampliado
|
|
|
|
|
// 'default_font' => 'dejavusans',
|
|
|
|
|
// ]);
|
|
|
|
|
|
|
|
|
|
// // Mantener márgenes inferiores visibles
|
|
|
|
|
// $mpdf->SetAutoPageBreak(true, 45); // mismo valor que margin_bottom
|
|
|
|
|
// $mpdf->autoPageBreak = true;
|
|
|
|
|
// $mpdf->setAutoBottomMargin = 'stretch'; // fuerza margen dinámico
|
|
|
|
|
|
|
|
|
|
// // Configuración adicional (ya probada)
|
|
|
|
|
// $mpdf->simpleTables = true;
|
|
|
|
|
// $mpdf->packTableData = true;
|
|
|
|
|
// $mpdf->keep_table_proportions = true;
|
|
|
|
|
// $mpdf->use_kwt = true;
|
|
|
|
|
// $mpdf->shrink_tables_to_fit = 0;
|
|
|
|
|
// $mpdf->SetImportUse();
|
|
|
|
|
// $mpdf->SetCompression(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Header y Footer
|
|
|
|
|
// $imgLogo = public_path('assets/images/UNAP.png');
|
|
|
|
|
// $htmlHeader = view('reporteInventario._header', compact('imgLogo'))->render();
|
|
|
|
|
// $mpdf->SetHTMLHeader($htmlHeader);
|
|
|
|
|
// $htmlFooter = view('reporteInventario._footer')->render();
|
|
|
|
|
// $mpdf->SetHTMLFooter($htmlFooter);
|
|
|
|
|
|
|
|
|
|
// // Render vista principal
|
|
|
|
|
// $html = view('reporteInventario.index', compact('registros'))->render();
|
|
|
|
|
|
|
|
|
|
// // Dividir HTML en fragmentos grandes (evita pérdida de estilos)
|
|
|
|
|
// // $chunks = str_split($html, 50000);
|
|
|
|
|
// // foreach ($chunks as $chunk) {
|
|
|
|
|
// // $mpdf->WriteHTML($chunk);
|
|
|
|
|
// // }
|
|
|
|
|
// $mpdf->WriteHTML($html);
|
|
|
|
|
|
|
|
|
|
// // Descargar
|
|
|
|
|
// return response()->streamDownload(function () use ($mpdf) {
|
|
|
|
|
// $mpdf->Output('reporte_inventario_inicial.pdf', 'D');
|
|
|
|
|
// }, 'reporte_inventario_inicial.pdf');
|
|
|
|
|
// } catch (\Exception $e) {
|
|
|
|
|
// return response()->json([
|
|
|
|
|
// 'success' => false,
|
|
|
|
|
// 'message' => $e->getMessage(),
|
|
|
|
|
// ]);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
public function listEnable()
|
|
|
|
|
{
|
|
|
|
|
@ -191,7 +266,7 @@ class InventarioInicialController extends Controller
|
|
|
|
|
$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')
|
|
|
|
|
->select('inventario_inicials.*', 'b.descripcion', 'm.nombre as nombre_medida')
|
|
|
|
|
->get(); // Usa first() si solo esperas un resultado
|
|
|
|
|
|
|
|
|
|
return response()->json(['data' => $query], 201);
|
|
|
|
|
@ -206,9 +281,9 @@ class InventarioInicialController extends Controller
|
|
|
|
|
$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')
|
|
|
|
|
->select('inventario_inicials.*', 'b.descripcion', 'm.nombre as nombre_medida')
|
|
|
|
|
->where('inventario_inicials.status', 1)
|
|
|
|
|
->where('inventario_inicials.cantidad','>', 0)
|
|
|
|
|
->where('inventario_inicials.cantidad', '>', 0)
|
|
|
|
|
->get(); // Usa first() si solo esperas un resultado
|
|
|
|
|
|
|
|
|
|
return response()->json(['data' => $query], 201);
|
|
|
|
|
|