Cambios en la logica + interfaz ampliada
This commit is contained in:
parent
a8057a2376
commit
32a3015e89
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue