|null $gateway_payload * @property array|null $metadata * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $deleted_at * @property string|null $gateway_code * @property-read \App\Models\Client $client * @property-read \App\Models\ClientPaymentMethod|null $clientPaymentMethod * @property-read \App\Models\Provider|null $provider * @property-read \App\Models\Schedule $schedule * @property-read \Illuminate\Database\Eloquent\Collection $splits * @property-read int|null $splits_count * @property-read \Illuminate\Database\Eloquent\Collection $webhooks * @property-read int|null $webhooks_count * @method static \Illuminate\Database\Eloquent\Builder|Payment newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Payment newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Payment onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Payment query() * @method static \Illuminate\Database\Eloquent\Builder|Payment whereAuthorizedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereCancelledAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereClientId($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereClientPaymentMethodId($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereCurrency($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereExpiresAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereFailedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereFailureCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereFailureMessage($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayEntityLabel($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayEntityReference($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayFeeAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayOperationLabel($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayOperationReference($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayPayload($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGatewayProvider($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereGrossAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereInstallments($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereMetadata($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereNetAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment wherePaidAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment wherePaymentMethod($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment wherePlatformFeeAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereProviderId($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereScheduleId($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment withTrashed(bool $withTrashed = true) * @method static \Illuminate\Database\Eloquent\Builder|Payment withoutTrashed() * @mixin \Eloquent */ class Payment extends Model { use HasFactory, SoftDeletes; protected $table = 'payments'; protected $fillable = [ 'schedule_id', 'client_id', 'provider_id', 'client_payment_method_id', 'gateway_provider', 'gateway_code', 'gateway_entity_reference', 'gateway_entity_label', 'gateway_operation_reference', 'gateway_operation_label', 'payment_method', 'status', 'gross_amount', 'gateway_fee_amount', 'platform_fee_amount', 'net_amount', 'currency', 'installments', 'authorized_at', 'paid_at', 'failed_at', 'cancelled_at', 'expires_at', 'failure_code', 'failure_message', 'gateway_payload', 'metadata', ]; protected $casts = [ 'gross_amount' => 'decimal:2', 'gateway_fee_amount' => 'decimal:2', 'platform_fee_amount' => 'decimal:2', 'net_amount' => 'decimal:2', 'installments' => 'integer', 'status' => \App\Enums\PaymentStatusEnum::class, 'authorized_at' => 'datetime', 'paid_at' => 'datetime', 'failed_at' => 'datetime', 'cancelled_at' => 'datetime', 'expires_at' => 'datetime', 'gateway_payload' => 'array', 'metadata' => 'array', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function schedule() { return $this->belongsTo(Schedule::class); } public function client() { return $this->belongsTo(Client::class); } public function provider() { return $this->belongsTo(Provider::class); } public function clientPaymentMethod() { return $this->belongsTo(ClientPaymentMethod::class); } public function splits() { return $this->hasMany(PaymentSplit::class); } public function webhooks() { return $this->hasMany(Webhook::class); } // public function ensureGatewayCode(): string { if (! empty($this->gateway_code)) { return $this->gateway_code; } $code = 'payment-'.(string) \Illuminate\Support\Str::uuid(); $this->forceFill(['gateway_code' => $code])->save(); return $code; } }