Compare commits

...

5 commits

5 changed files with 64 additions and 21 deletions

View file

@ -35,6 +35,7 @@ class PedidosExportHelper
) )
); );
} }
/** /**
* @throws InvalidArgument * @throws InvalidArgument
* @throws CannotInsertRecord * @throws CannotInsertRecord
@ -43,16 +44,16 @@ class PedidosExportHelper
static public function pedidosDeOllas() static public function pedidosDeOllas()
{ {
$filePath = "csv/exports/pedidos-de-ollas-" . now()->format('Y-m-d') . ".csv"; $filePath = "csv/exports/pedidos-de-ollas-" . now()->format('Y-m-d') . ".csv";
$tipo_olla = self::getTipoId('olla');
$barrios = GrupoDeCompra::barriosMenosPrueba() $barrios = GrupoDeCompra::barriosMenosPrueba()
->whereHas('subpedidos', function ($query) { ->whereHas('subpedidos', function ($query) use ($tipo_olla) {
$tipo_olla = self::getTipoId('olla');
$query->where('tipo_pedido_id', $tipo_olla); $query->where('tipo_pedido_id', $tipo_olla);
}) })
->get(); ->get();
$contenido = self::generarContenidoCSV($barrios, $contenido = self::generarContenidoCSV($barrios,
fn($grupoId) => "subpedidos.grupo_de_compra_id = $grupoId fn($grupoId) => "subpedidos.grupo_de_compra_id = $grupoId
AND subpedidos.tipo_pedido_id = 2"); AND subpedidos.tipo_pedido_id = $tipo_olla");
$ollas = self::cantidadDeOllasParaCSV($barrios, $contenido); $ollas = self::cantidadDeOllasParaCSV($barrios, $contenido);
self::exportarCSV( self::exportarCSV(
@ -128,6 +129,32 @@ class PedidosExportHelper
); );
} }
/**
* @throws InvalidArgument
* @throws CannotInsertRecord
* @throws Exception
*/
static public function faltantesYSobrantes()
{
$filePath = "csv/exports/faltantes-y-sobrantes-" . now()->format('Y-m-d') . ".csv";
$tipoPedidoId = self::getTipoId('faltantes_y_sobrantes');
$barrios = GrupoDeCompra::barriosMenosPrueba()
->whereHas('subpedidos', function ($query) use ($tipoPedidoId) {
$query->where('tipo_pedido_id', $tipoPedidoId);
})
->get();
$contenido = self::generarContenidoCSV($barrios,
fn($grupoId) => "subpedidos.grupo_de_compra_id = $grupoId
AND subpedidos.tipo_pedido_id = $tipoPedidoId");
self::exportarCSV(
$filePath,
$barrios,
$contenido
);
}
/** /**
* @throws InvalidArgument * @throws InvalidArgument
* @throws CannotInsertRecord * @throws CannotInsertRecord
@ -252,7 +279,7 @@ class PedidosExportHelper
*/ */
public static function getTipoId(string $tipo) public static function getTipoId(string $tipo)
{ {
$tipo_olla = TipoPedido::where('nombre', $tipo)->first()->id; $tipoPedido = TipoPedido::where('nombre', $tipo)->first()->id;
return $tipo_olla; return $tipoPedido;
} }
} }

View file

@ -137,7 +137,7 @@ class SubpedidoController extends Controller
$producto = Producto::find($valid['producto_id']); $producto = Producto::find($valid['producto_id']);
if ($producto->bono) if ($producto->bono)
abort(400, "No te puede haber faltado un bono"); abort(400, "No puede haber faltado un bono");
$cantidad = $valid['cantidad']; $cantidad = $valid['cantidad'];
if ($cantidad < 0) { // caso faltantes if ($cantidad < 0) { // caso faltantes
@ -145,11 +145,11 @@ class SubpedidoController extends Controller
$productoPedido = $barrio->productosPedidos()->where('producto_id', $producto->id)->first(); $productoPedido = $barrio->productosPedidos()->where('producto_id', $producto->id)->first();
if (!$productoPedido) if (!$productoPedido)
abort(400, "No te puede faltar algo que no pediste"); abort(400, "No pueden faltar productos no pedidos");
$cantidadPedida = intval($productoPedido->cantidad_pedida); $cantidadPedida = intval($productoPedido->cantidad_pedida);
if ($cantidadPedida + $cantidad < 0) if ($cantidadPedida + $cantidad < 0)
abort(400, 'No te puede faltar más de lo que pediste'); abort(400, 'No puede faltar más de lo pedido');
} }
$subpedido->syncProducto($producto, $cantidad); $subpedido->syncProducto($producto, $cantidad);

View file

@ -65,6 +65,23 @@ class ComisionesController
return response()->download($files[0]); return response()->download($files[0]);
} }
public function descargarFaltantesYSobrantes()
{
try {
PedidosExportHelper::faltantesYSobrantes();
} catch (CannotInsertRecord|InvalidArgument|Exception $e) {
return response()->json(['message' => $e->getMessage()], 500);
}
$pattern = storage_path('csv/exports/faltantes-y-sobrantes-*.csv');
$files = glob($pattern);
usort($files, function ($a, $b) {
return filemtime($b) <=> filemtime($a);
});
return response()->download($files[0]);
}
public function descargarNotas() public function descargarNotas()
{ {
try { try {

View file

@ -14,17 +14,8 @@
</div> </div>
<div class="dropdown-menu" id="dropdown-menu" role="menu"> <div class="dropdown-menu" id="dropdown-menu" role="menu">
<div class="dropdown-content"> <div class="dropdown-content">
<a href="/comisiones/pedidos/descargar" class="dropdown-item"> <a v-for="(opcion,i) in opciones" :key="i" :href="opcion.href" class="dropdown-item">
Pedidos por barrio en csv {{ opcion.nombre }}
</a>
<a href="/comisiones/pedidos/notas" class="dropdown-item">
Notas por barrio en csv
</a>
<a href="/comisiones/pedidos/pdf" class="dropdown-item">
Pedidos por barrio en pdf
</a>
<a href="/comisiones/pedidos/ollas" class="dropdown-item">
Pedidos de ollas en csv
</a> </a>
</div> </div>
</div> </div>
@ -36,7 +27,14 @@
export default { export default {
data() { data() {
return { return {
dropdownActivo: false dropdownActivo: false,
opciones: [
{ nombre: 'Pedidos por barrio en csv', href: '/comisiones/pedidos/descargar' },
{ nombre: 'Notas por barrio en csv', href: '/comisiones/pedidos/notas' },
{ nombre: 'Pedidos por barrio en pdf', href: '/comisiones/pedidos/pdf' },
{ nombre: 'Pedidos de ollas en csv', href: '/comisiones/pedidos/ollas' },
{ nombre: 'Faltantes y sobrantes en csv', href: '/comisiones/faltantes-y-sobrantes' },
],
} }
}, },
} }

View file

@ -58,7 +58,8 @@ Route::middleware(['auth', 'role:comision'])->prefix('comisiones')->group( funct
Route::post('/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta'); Route::post('/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
Route::get('/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo'); Route::get('/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo');
Route::post('/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos'); Route::post('/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
Route::put('/parametros/{parametro_id}', 'ComisionesController@modificarParametros'); Route::put('/parametros/{parametro_id}', 'ComisionesController@modificarParametros')->name('comisiones.parametros.modificar');
Route::get('/faltantes-y-sobrantes', 'ComisionesController@descargarFaltantesYSobrantes')->name('comisiones.faltantesYsobrantes');
}); });
Route::get('/ollas/login', 'OllasController@show')->name('ollas.login'); Route::get('/ollas/login', 'OllasController@show')->name('ollas.login');