diff --git a/app/Classes/General/Interfaces/Transactionable.php b/app/Classes/General/Interfaces/Transactionable.php new file mode 100644 index 00000000..174cb48d --- /dev/null +++ b/app/Classes/General/Interfaces/Transactionable.php @@ -0,0 +1,13 @@ +route('id')); $conversionObject = new CurrencyConversionObject(floatval(str_replace(',', '', $request->input('amount'))), $booking->convertible_currency_id, $booking->service_id, $booking->fix_currency_id === 1 ? 0:1, PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')]); @@ -95,7 +94,7 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic $configurations->getTax(), $configurations->getServiceCharge(), Carbon::now()->addMinutes($paymentAttemptLimit), ApprovalStatus::PENDING_SUBMISSION); $transaction = $this->createsTransaction->execute($booking, $object); - + return $this->resourceResponse(new TransactionResource($transaction)); } diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php index 01e18b40..fde2b235 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php @@ -101,7 +101,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic /** @var Transaction $payment */ $payment = $this->fetchesTransaction->execute(['id' => $payment['id']]); - + if($payment->status !== ApprovalStatus::APPROVED) continue; $this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED); @@ -109,7 +109,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic $object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1, $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, $payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id, - $rate, 0, 0, null, ApprovalStatus::APPROVED); + $rate, 0, 0, null, ApprovalStatus:: APPROVED); $transactions[] = $this->createsTransaction->execute($payment->booking, $object); } diff --git a/app/Classes/Modules/Transactions/Services/CreatesTransaction.php b/app/Classes/Modules/Transactions/Services/CreatesTransaction.php index ddebf0d5..fd5a403b 100644 --- a/app/Classes/Modules/Transactions/Services/CreatesTransaction.php +++ b/app/Classes/Modules/Transactions/Services/CreatesTransaction.php @@ -2,8 +2,8 @@ namespace App\Classes\Modules\Transactions\Services; -use App\Classes\General\Eloquent\AbstractUpdateRecord; use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord; +use App\Classes\General\Interfaces\Transactionable; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Models\Booking; use App\Models\Transaction; @@ -15,7 +15,7 @@ class CreatesTransaction extends AbstractUpdateRelationshipRecord * @return \Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(Booking $booking, TransactionObject $object) { + public function execute(Transactionable $transactionable, TransactionObject $object) { $model = new Transaction(); $model->bill_no = $object->getBillNo(); $model->type = $object->getTransactionType(); @@ -33,8 +33,7 @@ class CreatesTransaction extends AbstractUpdateRelationshipRecord $model->expires_on = $object->getExpiresOn(); $model->status = $object->getStatus(); - - return $this->handler($booking->transactions(), $model); + return $this->handler($transactionable->transactions(), $model); } } \ No newline at end of file diff --git a/app/Http/Resources/BookingResource.php b/app/Http/Resources/BookingResource.php index cc5f0dca..6333d46d 100644 --- a/app/Http/Resources/BookingResource.php +++ b/app/Http/Resources/BookingResource.php @@ -46,7 +46,12 @@ class BookingResource extends JsonResource 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), $this->mergeWhen($this->relationLoaded('transactions'), [ 'purchase_order' => new TransactionResource($this->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first()), - 'payment_attempts' => TransactionResource::collection($this->transactions()->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '>=', Carbon::now())->get()), + 'payment_attempts' => TransactionResource::collection( + $this->transactions() + ->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION) + ->whereDate('expires_on', '>=', Carbon::now()) + ->get() + ), 'expired_payment_attempts' => TransactionResource::collection($this->transactions()->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '<', Carbon::now())->get()), 'payment_history' => TransactionResource::collection($this->transactions()->where(function($query){ $query->where(function($query){ diff --git a/app/Models/Booking.php b/app/Models/Booking.php index 33c33341..c3492241 100644 --- a/app/Models/Booking.php +++ b/app/Models/Booking.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Documentable; +use App\Classes\General\Interfaces\Transactionable; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Scopes\CustomerBookingsScope; use Illuminate\Database\Eloquent\Builder; @@ -24,7 +25,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property \App\Models\Currency convertible_currency_id * @property \App\Models\Currency conversion_currency_id */ -class Booking extends AbstractModel implements Documentable +class Booking extends AbstractModel implements Documentable, Transactionable { use SoftDeletes; @@ -89,11 +90,11 @@ class Booking extends AbstractModel implements Documentable } /** - * @return HasMany + * @return MorphMany */ - public function transactions(): HasMany + public function transactions(): MorphMany { - return $this->HasMany(Transaction::class, 'booking_id'); + return $this->MorphMany(Transaction::class, 'owner'); } protected static function booted() diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index c290ac4b..cad64361 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -25,10 +25,9 @@ class Transaction extends AbstractModel implements Documentable /** * @return MorphMany */ - public function booking(): morphMany + public function booking(): BelongsTo { - //return $this->BelongsTo( Booking::class, 'booking_id', 'id'); - return $this->morphMany(Booking::class, 'owner'); + return $this->BelongsTo(Booking::class, 'owner_id', 'id'); } /** diff --git a/composer.json b/composer.json index 7a3ac9b3..7715f0ca 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "ext-json": "^1.6", "barryvdh/laravel-dompdf": "^0.9.0", "carlos-meneses/laravel-mpdf": "^2.1", + "doctrine/dbal": "2.*", "fideloper/proxy": "^4.2", "fruitcake/laravel-cors": "^1.0", "guzzlehttp/guzzle": "^6.3", diff --git a/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php b/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php index e95c1e58..a37da4e4 100644 --- a/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php +++ b/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php @@ -28,7 +28,7 @@ class AlterTransactionBookingId extends Migration Schema::table('transactions', function (Blueprint $table) { $table->dropForeign('transactions_booking_id_foreign'); - //$table->dropColumn('booking_id'); + $table->dropColumn('booking_id'); }); } }