Cambios en la logica + interfaz ampliada

This commit is contained in:
Alejandro Tasistro 2024-07-09 22:15:09 -03:00
parent a8057a2376
commit 32a3015e89
1 changed files with 41 additions and 10 deletions

View File

@ -2,9 +2,12 @@
namespace App\Models;
use App\Utils\TransporteUtils;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use League\Csv\CannotInsertRecord;
use League\Csv\Writer;
@ -35,22 +38,50 @@ public function pedidos(): HasMany
return $this->hasMany(Pedido::class);
}
function crearPedido(string $nombre) : Pedido {
return $this->pedidos()->create(['nombre' => $name]);
public function crearPedido(string $nombre) : Pedido {
return $this->pedidos()->create(['nombre' => $nombre]);
}
function totalARecaudar() : float {
return $this->calcularTotalPagados();
public function productosPedidos() {
return DB::table('productos')
->join('pedido_producto', 'productos.id', '=', 'pedido_producto.producto_id')
->join('pedidos', 'pedidos.id', '=', 'pedido_producto.pedido_id')
->where(['pedidos.barrio_id' => $this->id, 'pedidos.pagado' => true])
->select('productos.*',
DB::raw('SUM(pedido_producto.cantidad) as cantidad'),
DB::raw('SUM(pedido_producto.cantidad * productos.precio) as total'))
->groupBy('productos.id')
->get();
}
private function calcularTotalPagados(Closure $closure = null) : float {
if (!$closure)
$closure = fn($p) => $p->totalChismosa();
return $this->pedidosPagados()->sum($closure);
public function totalARecaudar() : float {
return $this->pedidos()->where(['pagado' => true])->get()->sum(
fn($p) => $p->totalATransferir()
);
}
function totalATransferir() : float {
return $this->calcularTotalPagados($p->totalATransferir());
public function totalATransferir() : float {
return $this->totalNoBarriales() + $this->totalBonosDeTransporte();
}
public function totalNoBarriales() {
return $this->totalProductosIf(fn($p) => !$p->barrial);
}
public function totalBarriales() {
return $this->totalProductosIf(fn($p) => $p->barrial);
}
private function totalProductosIf(callable $predicado) : float {
return $this->productosPedidos()->sum(
function ($producto) use ($predicado) {
return $predicado($producto) ? $producto->total : 0;
}
);
}
public function totalBonosDeTransporte() : int {
return TransporteUtils::calcularTotal($this->totalNoBarriales());
}
/**