delete group transaction

This commit is contained in:
edmondlang
2022-04-10 21:31:20 +08:00
parent 2e8e545ed9
commit 5647957e9f
15 changed files with 399 additions and 7 deletions
@@ -87,7 +87,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$service_charge = 0;
foreach ($this->createSupplierTransactionProcessor->getBills() as $key => $row) {
$group->transaction()->sync($row->id, false);
$group->transactions()->sync($row->id, false);
$issuer = $row->issuer;
$receiver = $row->receiver;
$amount += $row->amount;
@@ -0,0 +1,72 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\FetchesGroup;
use App\Classes\Modules\Transactions\Services\DeletesTransaction;
use App\Classes\Modules\Transactions\Services\updatesTransactionStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\GroupResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteGroupLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Delete Group Transaction',
'message' => 'You have successfully deleted this Group Transaction'
];
}
/** @var UpdatesTransactionStatus */
private $updatesTransactionStatus;
/** @var FetchesGroup */
private $fetchesGroup;
/** @var DeletesTransaction */
private $deletesTransaction;
public function __construct(
UpdatesTransactionStatus $updatesTransactionStatus,
FetchesGroup $fetchesGroup,
DeletesTransaction $deletesTransaction
)
{
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->fetchesGroup = $fetchesGroup;
$this->deletesTransaction = $deletesTransaction;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$group = $this->fetchesGroup->execute(['id' => $request->route('id')]);
$items = $group->transactions()->get();
foreach($items as $item) {
$bill = $item;
$payment = $bill->owner;
$group->transactions()->detach($bill->id);
$this->updatesTransactionStatus->execute($payment, ApprovalStatus::APPROVED);
$this->deletesTransaction->execute($bill);
}
$group->delete();
return $this->resourceResponse(new GroupResource($group));
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\ListsGroups;
use App\Http\Resources\GroupResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListGroupsLogic extends AbstractControllerLogic
{
/**
* ListTransactionsLogic constructor.
* @param ListsGroups $listsGroups
*/
public function __construct(ListsGroups $listsGroups)
{
$this->listsGroups = $listsGroups;
}
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Groups',
'message' => 'You have successfully retrieved a list of groups'
];
}
/** @var ListsGroups */
private $listsGroups;
public function logic(Request $request) : JsonResponse
{
$query = $this->listsGroups->execute($this->listsGroups->deserializeFilters($request->input('filters')));
return $this->collectionResponse(GroupResource::collection($query));
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use App\Models\Group;
use Illuminate\Database\Eloquent\Builder;
use App\Classes\General\Eloquent\AbstractFetchRecord;
class FetchesGroup extends AbstractFetchRecord
{
/** @var Group */
private $repository;
/**
* ListsBookings constructor.
* @param Group $repository
*/
public function __construct(Group $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use App\Models\Group;
use Illuminate\Database\Eloquent\Builder;
use App\Classes\General\Eloquent\AbstractListRecord;
class ListsGroups extends AbstractListRecord
{
/** @var Group */
private $repository;
/**
* ListsBookings constructor.
* @param Group $repository
*/
public function __construct(Group $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Transactions;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Transactions\ControllersLogic\DeleteGroupLogic;
class DeleteGroupController
{
/**
* @param Request $request
* @param DeleteGroupTransactionLogic $logic
* @return JsonResponse
*/
public function delete(Request $request, DeleteGroupLogic $logic) : JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Transactions;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Transactions\ControllersLogic\ListGroupsLogic;
class ListGroupsController
{
/**
* @param Request $request
* @param ListGroupsLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListGroupsLogic $logic) : JsonResponse {
return $logic->execute($request);
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Resources;
use Carbon\Carbon;
use Illuminate\Http\Resources\Json\JsonResource;
class GroupResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'original_amount' => (double) $this->original_amount,
'original_currency' => new CurrencyResource($this->original_currency),
'amount' => (double) $this->amount,
'currency' => new CurrencyResource($this->currency),
'created_at' => Carbon::parse($this->created_at)->format('d-m-Y h:i:s A'),
'currency_rate' => (float) $this->currency_rate,
'transactions' => TransactionResource::collection($this->transactions()->get()),
];
}
}
+19 -2
View File
@@ -3,11 +3,28 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Group extends Model
{
public function transaction()
public function transactions()
{
return $this->belongsToMany('App\Models\Transaction', 'group_transaction');
return $this->belongsToMany(Transaction::class, GroupTransaction::class);
}
/**
* @return BelongsTo
*/
public function currency(): BelongsTo
{
return $this->BelongsTo(Currency::class, 'currency_id', 'id');
}
/**
* @return BelongsTo
*/
public function original_currency(): BelongsTo
{
return $this->BelongsTo(Currency::class, 'original_currency_id', 'id');
}
}
+18 -1
View File
@@ -3,8 +3,25 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class GroupTransaction extends Model
{
//
protected $table = 'group_transactions';
/**
* @return BelongsTo
*/
public function group(): BelongsTo
{
return $this->BelongsTo(Group::class, 'group_id', 'id');
}
/**
* @return BelongsTo
*/
public function transaction(): BelongsTo
{
return $this->BelongsTo(Transaction::class, 'transaction_id', 'id');
}
}
@@ -13,7 +13,8 @@ class CreateGroupTransactionsTable extends Migration
*/
public function up()
{
Schema::create('group_transaction', function (Blueprint $table) {
Schema::create('group_transactions', function (Blueprint $table) {
$table->id();
$table->foreignId('group_id')->unsigned();
$table->foreignId('transaction_id')->unsigned();
});
@@ -26,6 +27,6 @@ class CreateGroupTransactionsTable extends Migration
*/
public function down()
{
Schema::dropIfExists('group_transaction');
Schema::dropIfExists('group_transactions');
}
}
@@ -40,7 +40,7 @@
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Currency Order Placed</h5>
<div class="fs-11">Are you sure you that the currency order has been placed with the supplier?</div>
<div class="fs-11">Are you sure that the currency order has been placed with the supplier?</div>
</div>
</div>
<div class="row">
@@ -0,0 +1,92 @@
<template>
<div class="row m-b-10 parentContainer">
<div class="col">
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="isLoading"></loading-component>
<div class="row p-b-5 b-b b-grey" v-show="!isLoading">
<div class="col">
<div class="row m-b-10">
<div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Date</div>
<div class="font-heading fs-10">
{{item.created_at}}
</div>
</div>
<div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Currency Rate</div>
<div class="font-heading fs-10">
{{item.currency_rate}}
</div>
</div>
<div class="col text-right">
<div class="font-heading fs-10 muted all-caps">Amount</div>
<div class="font-heading fs-14 text-success bold">
{{item.original_currency.short_code}} {{(Math.round((item.original_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="font-heading fs-10 muted all-caps">reference</div>
<span class="font-heading fs-10" v-for="transaction in item.transactions">
<a :href="route('booking.details', transaction.booking.marking)">{{transaction.booking.marking}}&nbsp;</a>
</span>
</div>
<div class="col-auto">
<div class="row parentContainer">
<div class="col p-l-0">
<button class="btn btn-xs btn-default bg-danger b-rad-none no-border requestModal" data-type="approveDocument">
<i class="fa fa-times text-white"></i>
</button>
<modal-component small type="approveDocument">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Delete Transaction Group</h5>
<div class="fs-11">Are you sure that you want to delete this transaction group?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-danger btn-block b-rad-none" @click="deleteGroupTransaction()">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import staticFormHandler from '../../../general/mixins/staticFormHandler'
export default {
props: {
section:{
type: String,
required: true
}
},
methods: {
deleteGroupTransaction() {
this.isLoading = true;
this.submit(this.route('api.transaction.group.delete', this.item.id), 'delete', this.section, true, true);
}
},
mixins: [componentHandler, staticFormHandler]
}
</script>
+16
View File
@@ -40,6 +40,22 @@
</div>
</div>
</div>
<div class="col-12 col-md-4">
<div class="row m-b-15 p-b-10 b-b b-grey">
<div class="col">
<small class="all-caps muted fs-10">Transaction Groups</small>
</div>
</div>
<div class="row">
<div class="col">
<list-component key="2" section="transactionGroupsListSection" :options="{'per_page': 2}" :endpoint="route('api.transaction.group.list')">
<template slot="list" slot-scope="{data}">
<transaction-group-component section="transactionGroupsListSection" :data="data"></transaction-group-component>
</template>
</list-component>
</div>
</div>
</div>
</div>
</div>
</div>
+3
View File
@@ -22,4 +22,7 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' =>
Route::get('/company/{id}/account/balance', 'FetchCompanyAccountBalanceController@fetch')->name('company.account.balance');
Route::get('/bank/{id}/account/balance', 'FetchBankAccountBalanceController@fetch')->name('bank.account.balance');
Route::get('/groups/list', 'ListGroupsController@list')->name('group.list');
Route::delete('/groups/{id}/delete', 'DeleteGroupController@delete')->name('group.delete');
});