diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 0e22a5d..9147fbb 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -8,6 +8,7 @@ use League\Csv\CannotInsertRecord; use League\Csv\Writer; use App\Producto; use DB; +use League\Csv\Reader; class GrupoDeCompra extends Model { @@ -47,12 +48,37 @@ class GrupoDeCompra extends Model $template[$fila] = [$productosIDNombre[$id], "0"]; $num_fila = $fila+1; } + $template[$this->obtenerFilaDeBonoTransporte()] = ["Bonos de transporte", 0]; return $template; } + private function obtenerFilaDeBonoTransporte() { + $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r'); + $csv->setDelimiter("|"); + $csv->setEnclosure("'"); + $registros = $csv->getRecords(); + + foreach($registros as $key => $registro) + if ($registro[0] == 'T') return $key+1; + + throw new Exception('No hay bono de transporte'); + } + + private function totalPedidoSinBDT() { + $total = 0; + foreach ($this->subpedidos as $subpedido) { + $total += $subpedido->totalSinBDT(); + } + return $total; + } + + private function calcularCantidadBDT() { + return ceil($this->totalPedidoSinBDT() / 500); + } + public function exportarPedidoEnCSV(){ $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id'); - + //si no hay pedidos aprobados, salir if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; } $records = $this->obtenerTemplateDeFilasVacias(); @@ -62,6 +88,8 @@ class GrupoDeCompra extends Model $records[$fila][1] = $producto_pedido->cantidad_pedida; } + $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT(); + try { $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w'); $writer->insertAll($records); diff --git a/app/Http/Controllers/Api/PedidoController.php b/app/Http/Controllers/Api/PedidoController.php index d527065..6a83d46 100644 --- a/app/Http/Controllers/Api/PedidoController.php +++ b/app/Http/Controllers/Api/PedidoController.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\DB; class PedidoController extends Controller { - public function generarTablas() + public static function generarTablas() { //GENERAR TABLA DE PEDIDOS APROBADOS DB::unprepared("DROP VIEW if exists pedidos_aprobados; diff --git a/app/Http/Resources/SubpedidoResource.php b/app/Http/Resources/SubpedidoResource.php index a7fa88b..6567ee0 100644 --- a/app/Http/Resources/SubpedidoResource.php +++ b/app/Http/Resources/SubpedidoResource.php @@ -17,7 +17,7 @@ class SubpedidoResource extends JsonResource return [ 'id' => $this->id, 'nombre' => $this->nombre, - 'subtotal_productos' => number_format($this->getSubtotalProductos(),0), + 'subtotal_productos' => number_format($this->totalSinBDT(),0), 'subtotal_bonos' => number_format($this->getSubtotalBonos(),0), 'bonos_de_transporte' => $this->cantidadBDT(), 'subtotal_bonos_de_transporte' => number_format($this->getSubtotalBDT(),0), diff --git a/app/Subpedido.php b/app/Subpedido.php index 68e5a4f..ea9d779 100644 --- a/app/Subpedido.php +++ b/app/Subpedido.php @@ -41,7 +41,7 @@ class Subpedido extends Model } //Subtotal de dinero de productos del pedido, sin bonos ni transporte - public function getSubtotalProductos() + public function totalSinBDT() { return $this->productosSinBonos()->sum('total'); } @@ -49,7 +49,7 @@ class Subpedido extends Model //Cantidad de bonos de transporte public function cantidadBDT() { - return ceil($this->getSubtotalProductos() / 500); + return ceil($this->totalSinBDT() / 500); } //Subtotal de dinero de bonos de transporte @@ -66,7 +66,7 @@ class Subpedido extends Model public function getTotal() { - return $this->getSubtotalProductos() + $this->getSubtotalBDT() + $this->getSubtotalBonos(); + return $this->totalSinBDT() + $this->getSubtotalBDT() + $this->getSubtotalBonos(); } //Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto.