EXCHANGE-149 - Backend for process merge

This commit is contained in:
Fairuz
2021-05-11 15:24:40 +08:00
parent 095f4052bc
commit 1682fe152a
5 changed files with 124 additions and 27 deletions
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\General\Eloquent;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
abstract class AbstractDeleteMultipleRecord
{
/**
* @param Builder $query
* @param array $ids
* @return mixed
* @throws MalformedRequestException
*/
public function handler(Builder $query, array $ids){
try{
$record_deleted = $query->whereIn('id',$ids)->delete();
DB::commit();
return ($record_deleted == count($ids)) ? true : false;
} catch (QueryException|\Exception $exception){
throw new MalformedRequestException('Unable to update the record due to unexpected error');
}
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Classes\General\Eloquent;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
abstract class AbstractUpdateMultipleRecord
{
/**
* @param Builder $query
* @param array $ids
* @param array $values
* @return mixed
* @throws MalformedRequestException
*/
public function handler(Builder $query, array $ids, array $values){
try{
$record_updated = $query->whereIn('id',$ids)->update($values);
DB::commit();
return ($record_updated == count($ids)) ? true : false;
} catch (QueryException|\Exception $exception){
throw new MalformedRequestException('Unable to update the record due to unexpected error');
}
}
}
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Bookings\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Bookings\DataTransferObjects\BookingMergeObject;
use App\Classes\Modules\Bookings\Services\DeleteMultipleBooking;
use App\Classes\Modules\Bookings\Services\DeletesBooking;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\Modules\Bookings\Services\GetBookings;
@@ -17,6 +18,7 @@ use App\Classes\Modules\Bookings\Services\GeneratesBookingMarking;
use App\Classes\Modules\Bookings\Services\UpdatesBookingTransaction;
use App\Models\Bank;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -54,6 +56,9 @@ class MergeBookingLogic extends AbstractControllerLogic
/** @var DeletesBooking */
private $deletesBooking;
/** @var DeleteMultipleBooking */
private $deletesMultipleBooking;
/**
* CreateBookingLogic constructor.
* @param CanMergeBooking $canMergeBooking
@@ -61,7 +66,7 @@ class MergeBookingLogic extends AbstractControllerLogic
* @param GeneratesBookingMarking $generatesBookingMarking
* @param FetchesCompany $fetchesCompany
*/
public function __construct(CanMergeBooking $canMergeBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, GetBookings $getBookings, UpdatesBookingTransaction $updatesBookingTransaction, DeletesBooking $deletesBooking)
public function __construct(CanMergeBooking $canMergeBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, GetBookings $getBookings, UpdatesBookingTransaction $updatesBookingTransaction, DeleteMultipleBooking $deletesMultipleBooking)
{
$this->canMergeBooking = $canMergeBooking;
$this->createsBooking = $createsBooking;
@@ -69,7 +74,7 @@ class MergeBookingLogic extends AbstractControllerLogic
$this->fetchesCompany = $fetchesCompany;
$this->getBookings = $getBookings;
$this->updatesBookingTransaction = $updatesBookingTransaction;
$this->deletesBooking = $deletesBooking;
$this->deletesMultipleBooking = $deletesMultipleBooking;
}
@@ -92,6 +97,11 @@ class MergeBookingLogic extends AbstractControllerLogic
$booking_amount = $booking_main->fix_amount;
$transaction_amount = 0;
$booking_update_values = [];
$transaction_update_values = [];
$booking_ids_to_merge = [];
$transaction_ids_to_merge = [];
$booking_main_transactions = $booking_main->transactions()->get();
@@ -100,6 +110,9 @@ class MergeBookingLogic extends AbstractControllerLogic
$transaction_amount += $transaction->amount;
}
$booking_update_values['status']=1;
$booking_update_values['fix_amount']=$transaction_amount;
foreach($bookings_to_merge as $booking)
{
$booking_amount += $booking->fix_amount;
@@ -108,16 +121,19 @@ class MergeBookingLogic extends AbstractControllerLogic
foreach($bookings_to_merge_transactions as $transaction)
{
$transaction_amount += $transaction->amount;
$transaction_update_values['status']=0;
$transaction_update_values['booking_id']=$booking_main->id;
$transaction_ids_to_merge[]=$transaction->id;
}
//Soft-delete selected bookings
//$this->deletesBooking->execute($booking);
$booking_ids_to_merge[]=$booking->id;
}
$booking_object->setBookingAmount($booking_amount);
$booking_object->setTransactionAmount($transaction_amount);
$this->updatesBookingTransaction->execute($booking_main->id,$booking_update_values, $transaction_ids_to_merge, $transaction_update_values);
$this->deletesMultipleBooking->execute($booking_ids_to_merge);
$this->updatesBookingTransaction->execute($booking_main,$bookings_to_merge, $booking_object);
dd('??');
return $this->response();
@@ -0,0 +1,18 @@
<?php
namespace App\Classes\Modules\Bookings\Services;
use App\Classes\General\Eloquent\AbstractDeleteMultipleRecord;
use App\Models\Booking;
class DeleteMultipleBooking extends AbstractDeleteMultipleRecord
{
/**
* @param array $ids
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(array $ids) {
return $this->handler(Booking::query(), $ids);
}
}
@@ -2,33 +2,27 @@
namespace App\Classes\Modules\Bookings\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Bookings\DataTransferObjects\BookingMergeObject;
use App\Classes\General\Eloquent\AbstractUpdateMultipleRecord;
use App\Models\Booking;
use App\Models\Transaction;
class UpdatesBookingTransaction extends AbstractUpdateRecord
class UpdatesBookingTransaction extends AbstractUpdateMultipleRecord
{
/**
* @param Booking $booking_main
* @param mixed $bookings_to_merge
* @param BookingMergeObject $object
* @return \Illuminate\Database\Eloquent\Model
* @param int $booking_id
* @param array $booking_values
* @param array $transaction_ids
* @param array $transaction_values
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Booking $booking_main, $bookings_to_merge, BookingMergeObject $object) {
public function execute(int $booking_id, array $booking_values, array $transaction_ids, array $transaction_values) {
foreach($bookings_to_merge as $booking) {
$bookings_to_merge_transactions = $booking->transactions()->get();
foreach ($bookings_to_merge_transactions as $transaction) {
var_dump( $transaction->booking_id);
$transaction->booking_id = $object->getId();
$this->handler($transaction);
}
$booking_update_success = $this->handler(Booking::query(),[$booking_id],$booking_values);
if($booking_update_success) {
$booking_update_success = $this->handler(Transaction::query(), $transaction_ids, $transaction_values);
}
$booking_main->fix_amount=$object->getBookingAmount();
return $this->handler($booking_main);
return $booking_update_success;
}
}