devoluciones_habilitadas = !$this->devoluciones_habilitadas; $this->save(); return $this->devoluciones_habilitadas; } public function subpedidos() { return $this->hasMany('App\Subpedido'); } public function pedidosAprobados() { return $this->subpedidos->where('aprobado',1); } public function exportarPlanillasAPdf() { $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"); } static function filaVacia(string $product, int $columns): array { $fila = [$product]; for ($i = 1; $i <= $columns; $i++) { $fila[$i] = "0"; } return $fila; } //Asume que los productos están gruadados en orden de fila public static function obtenerTemplateDeFilasVacias(int $columns){ $productosFilaID = Producto::productosFilaID(); $productosIDNombre = Producto::productosIDNombre(); $num_fila = 1; $template = []; foreach ($productosFilaID as $fila => $id) { for ($i = $num_fila; $i < $fila; $i++) { $template[$i] = GrupoDeCompra::filaVacia("", $columns); } $template[$fila] = GrupoDeCompra::filaVacia($productosIDNombre[$id], $columns); $num_fila = $fila+1; } $template[GrupoDeCompra::obtenerFilaDeBonoTransporte()] = GrupoDeCompra::filaVacia("Bonos de transporte", $columns); return $template; } private static 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; throw new Exception('No hay bono de transporte'); } private function totalPedidosSinBonos() { $total = 0; foreach ($this->pedidosAprobados() as $pedido) { $total += ceil($pedido->totalSinBonos()); } return $total; } public function calcularCantidadBDT() { return ceil($this->totalPedidosSinBonos() / 500); } public function totalBonosBarriales() { $total = 0; $bonoBarrial = Producto::where('nombre','LIKE','%barrial%')->first(); if ($bonoBarrial) { $pedidos = $this->pedidosAprobados(); foreach ($pedidos as $pedido) { $bonoPedido = $pedido->productos()->find($bonoBarrial["id"]); if ($bonoPedido) { $total += $bonoPedido["pivot"]["total"]; } } } return $total; } public function exportarPedidoEnCSV(){ $records = $this->generarColumnaCantidades(); try { $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w'); $writer->insertAll($records); } catch (CannotInsertRecord $e) { var_export($e->getRecords()); } } public function generarColumnaCantidades() { $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(1); $productos_id_fila = Producto::productosIdFila(); foreach ($productos_en_pedido as $id => $producto_pedido){ $fila = $productos_id_fila[$id]; $records[$fila][1] = $producto_pedido->cantidad_pedida; } $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT(); return $records; } public function exportarPedidoConNucleosEnCSV() { $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; } $pedidos = $this->pedidosAprobados(); // Generar tabla vacía con una columna por núcleo $records = $this->obtenerTemplateDeFilasVacias($pedidos->count()); $productos_id_fila = Producto::productosIdFila(); foreach ($productos_en_pedido as $id => $producto_pedido) { $fila = $productos_id_fila[$id]; $i = 1; // Poner cantidad de cada producto para cada núcleo foreach ($pedidos as $pedido) { $producto = $pedido->productos()->find($id); $records[$fila][$i] = $producto == NULL ? 0 : $producto["pivot"]["cantidad"]; $i++; } } // Insertar lista de núcleos en la primera fila $nucleos = [""]; $i = 1; foreach ($pedidos as $pedido) { $nucleos[$i] = $pedido->nombre; $i++; } array_splice($records, 0, 0, array($nucleos)); // Guardar en un archivo .csv try { $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'-completo.csv'), 'w'); $writer->insertAll($records); } catch (CannotInsertRecord $e) { var_export($e->getRecords()); } } public static function exportarTodosLosPedidosEnCSV(){ $gdcs = GrupoDeCompra::all(); $planilla = GrupoDeCompra::obtenerTemplateDeFilasVacias($gdcs->count()); $barrios = [""]; foreach ($gdcs as $gdc) { $barrios[] = $gdc->nombre; } array_splice($planilla, 0, 0, array($barrios)); // Guardar en un archivo .csv try { $writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w'); $writer->insertAll($planilla); } catch (CannotInsertRecord $e) { var_export($e->getRecords()); } } }