/
var
/
www
/
html
/
back
/
app
/
BaseClasses
/
Upload File
HOME
<?php declare(strict_types=1); namespace App\BaseClasses; use App\Domain\Payment\Enums\PaymentStatusEnum; use App\Domain\Payment\Enums\PaymentTypeEnum; use App\Domain\Payment\StatusModels\EmptyStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceAgreeOneTwoStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceAgreeTwoTwoStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceApproveStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceDraftStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceFinalizeStatusModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceIssuedModel; use App\Domain\Payment\StatusModels\Issueance\IssueanceIssueModel; use App\Domain\Payment\StatusModels\Moving\MovingApproveOneTwoStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingApproveStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingApproveTwoTwoStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingDraftStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingFinalizeOneTwoStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingFinalizeStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingFinalizeTwoTwoStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingMovingStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingPayStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingReceivedStatusModel; use App\Domain\Payment\StatusModels\Moving\MovingSentStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentApproveOneTwoStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentApproveStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentApproveTwoTwoStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentDraftStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentFinalizeOneTwoStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentFinalizeStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentFinalizeTwoTwoStatusModel; use App\Domain\Payment\StatusModels\Payment\PaymentPaidStatusModel; use App\Domain\Payment\StatusModels\Payment\PayStatusModel; use App\Domain\Payment\StatusModels\Payment\SentStatusModel; use App\Domain\Payment\StatusModels\Reception\ReceptionDraftStatusModel; use App\Domain\Payment\StatusModels\Reception\ReceptionReceivedStatusModel; abstract class BasePaymentStatusModel { public function __construct(public PaymentStatusEnum $status, PaymentTypeEnum $type) { /*_*/ } abstract public function getNextStatus(): ?PaymentStatusEnum; abstract public function getPreviousStatus(): ?PaymentStatusEnum; abstract public function getRollBackStatus(): ?PaymentStatusEnum; public function canChangeStatus(PaymentStatusEnum $newStatus): bool { return in_array($newStatus, $this->getAvailableStatuses(), true); } /** * @return string[] */ abstract public function getAvailableStatuses(): array; /** * @throws \Exception */ public static function getModelFromStatus(?PaymentStatusEnum $status, ?PaymentTypeEnum $type): BasePaymentStatusModel { $models = [ PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value => [ PaymentStatusEnum::STATUS_DRAFT->value => PaymentDraftStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE->value => PaymentFinalizeStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_ONE_TWO->value => PaymentFinalizeOneTwoStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_TWO_TWO->value => PaymentFinalizeTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_APPROVE->value => PaymentApproveStatusModel::class, PaymentStatusEnum::STATUS_AGREE_ONE_TWO->value => PaymentApproveOneTwoStatusModel::class, PaymentStatusEnum::STATUS_AGREE_TWO_TWO->value => PaymentApproveTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_SENT->value => SentStatusModel::class, PaymentStatusEnum::STATUS_PAY->value => PayStatusModel::class, PaymentStatusEnum::STATUS_PAID->value => PaymentPaidStatusModel::class, ], PaymentTypeEnum::PAYMENT_TYPE_RECEPTION->value => [ PaymentStatusEnum::STATUS_DRAFT->value => ReceptionDraftStatusModel::class, PaymentStatusEnum::STATUS_RECEIVED->value => ReceptionReceivedStatusModel::class ], PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value => [ PaymentStatusEnum::STATUS_DRAFT->value => IssueanceDraftStatusModel::class, PaymentStatusEnum::STATUS_APPROVE->value => IssueanceApproveStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE->value => IssueanceFinalizeStatusModel::class, PaymentStatusEnum::STATUS_AGREE_ONE_TWO->value => IssueanceAgreeOneTwoStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_ONE_TWO->value => IssueanceAgreeOneTwoStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_TWO_TWO->value => IssueanceAgreeTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_AGREE_TWO_TWO->value => IssueanceAgreeTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_ISSUE->value => IssueanceIssueModel::class, PaymentStatusEnum::STATUS_ISSUED->value => IssueanceIssuedModel::class, ], PaymentTypeEnum::PAYMENT_TYPE_MOVING->value => [ PaymentStatusEnum::STATUS_DRAFT->value => MovingDraftStatusModel::class, PaymentStatusEnum::STATUS_APPROVE->value => MovingApproveStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE->value => MovingFinalizeStatusModel::class, PaymentStatusEnum::STATUS_AGREE_ONE_TWO->value => MovingApproveOneTwoStatusModel::class, PaymentStatusEnum::STATUS_AGREE_TWO_TWO->value => MovingApproveTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_ONE_TWO->value => MovingFinalizeOneTwoStatusModel::class, PaymentStatusEnum::STATUS_FINALIZE_TWO_TWO->value => MovingFinalizeTwoTwoStatusModel::class, PaymentStatusEnum::STATUS_PAY->value => MovingPayStatusModel::class, PaymentStatusEnum::STATUS_SENT->value => MovingSentStatusModel::class, PaymentStatusEnum::STATUS_MOVING->value => MovingMovingStatusModel::class, PaymentStatusEnum::STATUS_RECEIVED->value => MovingReceivedStatusModel::class, ], ]; if ($type && $status) { $class = $models[$type->value][$status->value] ?? null; if ($class) { return new $class($status, $type); } } return new EmptyStatusModel(PaymentStatusEnum::STATUS_PAID, PaymentTypeEnum::PAYMENT_TYPE_PAYMENT); } }