GroupTransformer

This commit is contained in:
Martin Kiragu
2023-04-24 21:26:35 +03:00
parent 4bee415d2d
commit a9910c5a12
5 changed files with 172 additions and 7 deletions
@@ -8,6 +8,7 @@ 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 App\Transformers\GroupTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -66,6 +67,11 @@ class DeleteGroupLogic extends AbstractControllerLogic
}
$group->delete();
//no relationship needed
/* return fractal()
->item($group, new GroupTransformer())
->respond(200, [], JSON_PRETTY_PRINT);*/
return $this->resourceResponse(new GroupResource($group));
}
@@ -5,6 +5,7 @@ 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 App\Transformers\GroupTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -22,7 +23,8 @@ class ListGroupsLogic extends AbstractControllerLogic
/**
* @return array
*/
protected function notification():array {
protected function notification(): array
{
return [
'title' => 'Retrieved Groups',
'message' => 'You have successfully retrieved a list of groups'
@@ -32,10 +34,15 @@ class ListGroupsLogic extends AbstractControllerLogic
/** @var ListsGroups */
private $listsGroups;
public function logic(Request $request) : JsonResponse
public function logic(Request $request): JsonResponse
{
$query = $this->listsGroups->execute($this->listsGroups->deserializeFilters($request->input('filters')));
//no relationship needed
/* return fractal()
->collection($query, new GroupTransformer())
->respond(200, [], JSON_PRETTY_PRINT);*/
return $this->collectionResponse(GroupResource::collection($query));
}
@@ -32,7 +32,8 @@ class UpdateGroupLogic extends AbstractControllerLogic
/**
* @return array
*/
protected function notification():array {
protected function notification(): array
{
return [
'title' => 'Update Group Transaction',
'message' => 'You have successfully updated this Group Transaction'
@@ -86,7 +87,7 @@ class UpdateGroupLogic extends AbstractControllerLogic
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
public function logic(Request $request): JsonResponse
{
$group = $this->fetchesGroup->execute(['id' => $request->route('id')]);
@@ -100,7 +101,7 @@ class UpdateGroupLogic extends AbstractControllerLogic
// $group->transactions()->update(['amount' => DB::raw('(original_amount * (1 / currency_rate)) + service_charge + tax')]);
foreach($transactions as $transaction) {
foreach ($transactions as $transaction) {
$constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first();
$serviceCharge = $this->calculatesTransactionServiceCharge->execute($transaction->original_amount, $rate, $constant);
@@ -169,7 +170,7 @@ class UpdateGroupLogic extends AbstractControllerLogic
$object = new DocumentObject(
DocumentType::CURRENCY_VENDOR_ORDER,
[chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))],
[chunk_split('data:application/pdf;base64,' . base64_encode($pdf->output()))],
'',
ApprovalStatus::COMPLETED,
'currency_vendor_order'
@@ -179,6 +180,11 @@ class UpdateGroupLogic extends AbstractControllerLogic
$document = $this->createsDocument->execute($group, $object);
$this->createsFile->execute($document, $object);
//no relationship needed
/* return fractal()
->item($group, new GroupTransformer())
->respond(200, [], JSON_PRETTY_PRINT);*/
return $this->resourceResponse(new GroupResource($group));
}
+21 -1
View File
@@ -3,6 +3,9 @@
namespace App\Models;
use App\Classes\General\Traits\LogData;
use Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use App\Classes\General\Interfaces\Documentable;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -10,12 +13,29 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
use Staudenmeir\EloquentHasManyDeep\HasManyDeep;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use App\Classes\General\Interfaces\Transactionable;
use Staudenmeir\EloquentHasManyDeep\HasTableAlias;
/**
* App\Models\Group
*
* @property-read Currency|null $currency
* @property-read Collection|Document[] $documents
* @property-read int|null $documents_count
* @property-read CompanyModule|null $issuerCompany
* @property-read Currency|null $original_currency
* @property-read CompanyModule|null $receiverCompany
* @property-read Collection|Transaction[] $transactions
* @property-read int|null $transactions_count
* @method static Builder|Group newModelQuery()
* @method static Builder|Group newQuery()
* @method static Builder|Group query()
* @mixin Eloquent
*/
class Group extends Model implements Documentable, Transactionable
{
use HasRelationships;
use \Staudenmeir\EloquentHasManyDeep\HasTableAlias;
use HasTableAlias;
// /**
+126
View File
@@ -0,0 +1,126 @@
<?php
namespace App\Transformers;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Transaction;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
class GroupTransformer extends TransformerAbstract
{
/**
* List of resources to automatically include
*
* @var array
*/
protected $defaultIncludes = [
'original_currency',
'currency',
'documents'
];
/**
* List of resources possible to include
*
* @var array
*/
protected $availableIncludes = [
//
];
/**
* A Fractal transformer.
*
* @return array
*/
public function transform(Transaction $transaction): array
{
return [
'id' => $transaction->id,
'original_amount' => (float)$transaction->original_amount,
'issuer_name' => $transaction->issuerCompany->name,
'issuer_id' => $transaction->issuerCompany->id,
'amount' => (float)$transaction->amount,
'service_charge' => (float)$transaction->amount,
'created_at' => Carbon::parse($transaction->created_at)->format('d-m-Y h:i:s A'),
'currency_rate' => (float)$transaction->currency_rate,
'transactions' => $this->transactions($transaction),
'complete_transactions' => $this->complete_transactions($transaction),
'documents' => [
'currency_order' => new DocumentResource($this->documents()->where('document_type', DocumentType::CURRENCY_VENDOR_ORDER)->first()),
'purchase_order' => new DocumentResource($this->documents()->where('document_type', DocumentType::BULK_PURCHASE_ORDER)->first())
]
];
}
/**
* Include Original Currency
*
* @param Transaction $transaction
* @return Item
*/
public function includeOriginalCurrency(Transaction $transaction): Item
{
return $this->item($transaction->original_currency, new CurrencyTransformer());
}
/**
* Include Currency
*
* @param Transaction $transaction
* @return Item
*/
public function includeCurrency(Transaction $transaction): Item
{
return $this->item($transaction->currency, new CurrencyTransformer());
}
/**
* Get Transactions
* @param Transaction $transaction
* @return Collection
*/
protected function transactions(Transaction $transaction): Collection
{
return $transaction->transactions()->get()->pluck('owner.owner.marking');
}
/**
* complete Transactions
* @param Transaction $transaction
* @return Collection
*/
protected function complete_transactions(Transaction $transaction): Collection
{
return $transaction->transactions()->whereHasMorph('owner', [Transaction::class], function ($query) {
return $query->whereHas('booking', function ($query) {
return $query->whereHas('transactions', function ($query) {
return $query->where('type', TransactionType::PURCHASE_ORDER)->where('status', '=', ApprovalStatus::APPROVED);
});
});
})->get()->pluck('owner.owner.marking');
}
/**
* Include Documents
*
* @param Transaction $transaction
* @return array
*/
public function includeDocuments(Transaction $transaction): array
{
return [
'currency_order' => $this->item($transaction->documents()->where('document_type', DocumentType::CURRENCY_VENDOR_ORDER)->first(), new DocumentTransformer()),
'purchase_order' => $this->item($transaction->documents()->where('document_type', DocumentType::BULK_PURCHASE_ORDER)->first(), new DocumentTransformer())
];
}
}