'integer', 'user_id' => 'integer', ]; } /** * @return BelongsTo */ public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class, 'tenant_codigo', 'codigo'); } /** * @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * @return BelongsTo */ public function cart(): BelongsTo { return $this->belongsTo(Cart::class, 'cart_id')->withTrashed(); } /** * @return HasMany */ public function items(): HasMany { return $this->hasMany(PurchaseItem::class, 'compra_id'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function telepagosQr() { return $this->hasOne(TelepagosQr::class, 'compra_id'); } /** * @return HasMany */ public function telepagosPayments(): HasMany { return $this->hasMany(TelepagosPayment::class, 'compra_id'); } public function getTotalAmount(): float { if ($this->items()->exists()) { return (float) $this->items()->sum('total'); } $cart = $this->relationLoaded('cart') ? $this->getRelation('cart') : $this->cart; if ($cart === null) { return 0.0; } /** @var Collection $items */ $items = $cart->relationLoaded('items') ? $cart->getRelation('items') : $cart->items()->with('variant.product')->get(); return $items->reduce( static fn (float $carry, $item): float => $carry + ((float) ($item->variant?->product?->precio ?? 0) * (int) $item->cantidad), 0.0, ); } public function finalize(): void { $this->update([ 'status' => 'pagado', // Or the equivalent final status in your system 'payment_status' => 'paid', ]); } }