*/ protected $fillable = [ 'name', ]; /** * La regiĆ³n a la que pertenece el barrio. */ public function region(): BelongsTo { return $this->belongsTo(Region::class); } /** * Los pedidos que pertenecen al barrio. */ public function pedidos(): HasMany { return $this->hasMany(Pedido::class); } function crearPedido(string $nombre) : Pedido { return $this->pedidos()->create(['name' => $name]); } function pedidosConfirmados() { return $this->pedidos()->where('confirmed',true); } private function calcularTotalConfirmados(Closure $closure = null) : float { if (!$closure) $closure = fn($p) => $p->totalChismosa(); return $this->pedidosConfirmados()->sum($closure); } function totalARecaudar() : float { return $this->calcularTotalConfirmados(); } function totalNoBarriales() : float { return $this->calcularTotalConfirmados( fn($p) => $p->total($p->productosNoBarriales()) ); } function totalTransporte() : float { $totalSinTransporte = $this->calcularTotalConfirmados( fn($p) => $p->total($p->productosSinTransporte()) ); return ($totalSinTransporte / Constants::DIVISOR_TRANSPORTE) * Constants::COSTO_TRANSPORTE; } function totalATransferir() : float { return $this->totalNoBarriales() + $this->totalTransporte(); } /** * Los productos que pertenecen al barrio. */ public function productos(): HasMany { return $this->hasMany(Producto::class); } }