Compare commits

...

4 commits

5 changed files with 139 additions and 28 deletions

View file

@ -0,0 +1,72 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class AgregarEsBonoAPedidosAprobados extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:AgregarEsBonoAPedidosAprobados';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Agrega "producto_bono" a la view PedidosAprobados';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
DB::statement("
ALTER VIEW pedidos_aprobados(
grupo_de_compra_id,
grupo_de_compra_nombre,
grupo_de_compra_region,
producto_id,
producto_nombre,
producto_precio,
cantidad_pedida,
total_por_producto,
producto_es_bono
) AS
SELECT
g.id as grupo_de_compra_id,
g.nombre as grupo_de_compra_nombre,
g.region as grupo_de_compra_region,
pr.id AS producto_id,
pr.nombre as producto_nombre,
pr.precio as producto_precio,
SUM(ps.cantidad) as cantidad_pedida,
pr.precio*SUM(ps.cantidad) as total_por_producto,
pr.bono
FROM grupos_de_compra g
JOIN subpedidos s ON (s.grupo_de_compra_id = g.id AND s.aprobado=1)
JOIN producto_subpedido ps ON (ps.subpedido_id = s.id)
JOIN productos pr ON (pr.id = ps.producto_id)
GROUP BY
g.id, g.nombre, pr.id, pr.nombre
;");
return 0;
}
}

View file

@ -3,6 +3,7 @@
namespace App;
use App\Helpers\CsvHelper;
use App\Helpers\PdfHelper;
use App\Helpers\TransporteHelper;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
@ -105,22 +106,12 @@ class GrupoDeCompra extends Model
public function exportarPedidosAPdf()
{
$subpedidos = $this->pedidosAprobados();
//generar pdf
$mpdf = new Mpdf();
foreach ($subpedidos as $subpedido) {
$tabla = $subpedido->generarHTML();
// agregar la tabla al pdf en una nueva página
$mpdf->WriteHTML($tabla);
$mpdf->AddPage();
}
$filename = $this->nombre . '.pdf';
// imprimir el pdf
$mpdf->Output($filename, "D");
PdfHelper::exportarPedidos($this->nombre . '.pdf', $subpedidos);
}
function pedidoParaPdf(): array
{
$productos = $this->productosPedidos(true);
$productos = $this->productosPedidos(true, true);
$pedido = [];
$pedido['productos'] = [];
@ -131,7 +122,7 @@ class GrupoDeCompra extends Model
$productoParaPdf['nombre'] = $producto->producto_nombre;
$productoParaPdf['pivot']['cantidad'] = $producto->cantidad_pedida;
$productoParaPdf['pivot']['notas'] = false;
$productoParaPdf['bono'] = false; // para que no lo saltee
$productoParaPdf['bono'] = $producto->producto_es_bono;
$pedido['productos'][] = $productoParaPdf;
}
@ -147,19 +138,8 @@ class GrupoDeCompra extends Model
public static function exportarPedidosBarrialesAPdf()
{
$barrios = GrupoDeCompra::barriosMenosPrueba()
->get();
$mpdf = new Mpdf();
foreach ($barrios as $barrio) {
$tabla = $barrio->generarHTML();
$mpdf->WriteHTML($tabla);
$mpdf->AddPage();
}
$filename = 'pedidos_por_barrio.pdf';
// imprimir el pdf
$mpdf->Output($filename, "D");
$barrios = GrupoDeCompra::barriosMenosPrueba()->get();
PdfHelper::exportarPedidos('pedidos_por_barrio.pdf', $barrios);
}
static function filaVacia(string $product, int $columns): array
@ -284,13 +264,15 @@ class GrupoDeCompra extends Model
/**
* @return Collection
*/
public function productosPedidos($excluirBarriales = false): Collection
public function productosPedidos($excluirBarriales = false, $excluirBonos = false): Collection
{
$query = DB::table('pedidos_aprobados')
->where('grupo_de_compra_id', $this->id);
if ($excluirBarriales)
$query = $query->where('producto_nombre','NOT LIKE','%barrial%');
if ($excluirBonos)
$query = $query->where('producto_es_bono',false);
return $query
->get()

View file

@ -17,6 +17,7 @@ class CanastaHelper
const TOTAL = "TOTAL";
const ARCHIVO_SUBIDO = 'Archivo subido';
const CANASTA_CARGADA = 'Canasta cargada';
const TIPOS_BONO = ["B", "F", "BE"];
public static function guardarCanasta($data, $path): string {
$nombre = $data->getClientOriginalName();
@ -66,7 +67,7 @@ class CanastaHelper
'nombre' => trim(str_replace('*', '',$registro['Producto'])),
'precio' => $registro['Precio'],
'proveedor_id' => self::obtenerProveedor($registro['Producto']),
'bono' => $registro[self::TIPO] == "B",
'bono' => in_array($registro[self::TIPO], self::TIPOS_BONO),
'requiere_notas'=> $registro[self::TIPO] =="PTC",
];
}

29
app/Helpers/PdfHelper.php Normal file
View file

@ -0,0 +1,29 @@
<?php
namespace App\Helpers;
use Mpdf\Mpdf;
use Mpdf\MpdfException;
class PdfHelper
{
/**
* Requiere que el segundo argumento tenga definida la función generarHTML()
* para crear la tabla con los datos del pedido que se inserta en el pdf.
*
* @return void
* @throws MpdfException
*/
public static function exportarPedidos($filepath, $pedidos)
{
$mpdf = new Mpdf();
foreach ($pedidos as $pedido) {
$html = $pedido->generarHTML();
$mpdf->WriteHTML($html);
$mpdf->AddPage();
}
$mpdf->Output($filepath, 'D');
}
}

View file

@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Artisan;
class CallAgregarEsBonoAPedidosAprobados extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Artisan::call("command:AgregarEsBonoAPedidosAprobados");
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}