Compare commits

...

4 commits

8 changed files with 83 additions and 17 deletions

View file

@ -17,7 +17,34 @@ class GrupoDeCompra extends Model
protected $table = 'grupos_de_compra';
protected $hidden = ['password'];
public function toggleDevoluciones()
/**
* @param $gdcs
* @param array $planilla
* @return array
*/
public static function getPlanilla($gdcs, array $planilla): array
{
$barrios = [""];
foreach ($gdcs as $i => $gdc) {
$barrios[] = $gdc->nombre;
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id', $gdc->id)->get()->keyBy('producto_id');
$pedidos = $gdc->pedidosAprobados();
foreach ($productos_en_pedido as $id => $producto_pedido) {
$total = 0;
// Poner cantidad de cada producto para cada núcleo
foreach ($pedidos as $pedido) {
list($_, $_, $cantidad) = $gdc->agregarCantidad($pedido, $id, [], 0, 0);
$total = $total + $cantidad;
}
$fila = Producto::productosIdFila()[$id];
$planilla[$fila][$i+1] = $total;
}
}
array_splice($planilla, 0, 0, array($barrios));
return $planilla;
}
public function toggleDevoluciones()
{
$this->devoluciones_habilitadas = !$this->devoluciones_habilitadas;
$this->save();
@ -85,7 +112,7 @@ class GrupoDeCompra extends Model
throw new Exception('No hay bono de transporte');
}
private function totalPedidosSinBonos() {
private function totalPedidosSinBonos() {
$total = 0;
foreach ($this->pedidosAprobados() as $pedido) {
$total += ceil($pedido->totalSinBonos());
@ -166,9 +193,7 @@ class GrupoDeCompra extends Model
$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++;
list($records, $i, $_) = $this->agregarCantidad($pedido, $id, $records, $fila, $i);
}
}
// Insertar lista de núcleos en la primera fila
@ -189,16 +214,21 @@ class GrupoDeCompra extends Model
}
}
public function agregarCantidad($pedido, $id, array $records, $fila, int $i): array
{
$producto = $pedido->productos()->find($id);
$cantidad = $producto == NULL ? 0 : $producto->pivot->cantidad;
$records[$fila][$i] = $cantidad;
$i++;
return array($records, $i, $cantidad);
}
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));
$planilla = self::getPlanilla($gdcs, $planilla);
// Guardar en un archivo .csv
// Guardar en un archivo .csv
try {
$writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w');
$writer->insertAll($planilla);

View file

@ -6,7 +6,11 @@ use App\GrupoDeCompra;
class ComprasController
{
public function pedidos() {
public function indexPedidos() {
return view('compras_pedidos');
}
public function descargarPedidos() {
GrupoDeCompra::exportarTodosLosPedidosEnCSV();
$file = resource_path('csv/exports/total-pedidos.csv');
return response()->download($file);

View file

@ -42,6 +42,10 @@ class Producto extends Model
return Producto::pluck('id', 'fila',)->all();
}
public static function productosIDFila() {
return Producto::pluck('fila', 'id',)->all();
}
public static function productosIDNombre() {
return Producto::pluck('nombre', 'id',)->all();
}

View file

@ -5,9 +5,9 @@
<td v-if="$root.devoluciones" class="has-text-right" ><abbr :title="pedido.devoluciones_notas">-{{ pedido.devoluciones_total }}</abbr></td>
<td class="has-text-right" >{{ $root.devoluciones ? pedido.total_menos_devoluciones : pedido.total }}</td>
<td>
<pedidos-admin-switch-aprobacion
<admin-switch-aprobacion
:pedido="pedido">
</pedidos-admin-switch-aprobacion>
</admin-switch-aprobacion>
</td>
</tr>
</template>

View file

@ -11,10 +11,10 @@
</tr>
</thead>
<tbody>
<pedidos-admin-fila-pedido
<admin-fila-pedido
v-for="pedido in this.pedidos"
:pedido="pedido" :key="pedido.id">
</pedidos-admin-fila-pedido>
</admin-fila-pedido>
</tbody>
</table>
<table class="table is-striped is-bordered">

View file

@ -0,0 +1,22 @@
<template>
<div class="container is-fluid has-text-centered">
<div class="block">
<div class="field">
<p class="control">
<a href="/compras/pedidos/descargar" class="button">
<span class="icon is-small">
<i class="fas fa-download"></i>
</span>
<span>Descargar planilla de totales</span>
</a>
</p>
</div>
</div>
</div>
</template>
<script>
export default {
}
</script>

View file

@ -0,0 +1,5 @@
@extends('layouts.app')
@section('content')
<compras-body></compras-body>
@endsection

View file

@ -79,5 +79,6 @@ Route::middleware('auth')->group( function() {
Route::get('/compras', 'ComprasController@show')->name('compras_login.show');
Route::middleware(['compras'])->group( function() {
Route::get('/compras/pedidos', 'ComprasController@pedidos')->name('compras.pedidos');
Route::get('/compras/pedidos', 'ComprasController@indexPedidos')->name('compras.pedidos');
Route::get('/compras/pedidos/descargar', 'ComprasController@descargarPedidos')->name('compras.pedidos.descargar');
});