mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-19 04:23:59 +00:00
Copied transaction, receipt & currecny module from Exchange
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic;
|
||||
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\Exceptions\ResourceConflictException;
|
||||
use App\Classes\Exceptions\ResourceNotFoundException;
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Countries\DataTransferObjects\CountryObject;
|
||||
use App\Classes\Modules\Countries\Services\CreatesCountry;
|
||||
use App\Classes\Modules\Countries\Services\FetchesCountry;
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\CanCreateCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\CreatesCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\CreatesCurrencyLog;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
use App\Http\Resources\CurrencyResource;
|
||||
|
||||
use App\Models\Country;
|
||||
use App\Models\Currency;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateCurrencyLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Create Currency',
|
||||
'message' => 'You have successfully created a new Currency'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesCountry */
|
||||
private $fetchesCountry;
|
||||
|
||||
/** @var FetchesCurrency */
|
||||
private $fetchesCurrency;
|
||||
|
||||
/** @var CreatesCountry */
|
||||
private $createsCountry;
|
||||
|
||||
/** @var CanCreateCurrency */
|
||||
private $canCreateCurrency;
|
||||
|
||||
/** @var CreatesCurrency */
|
||||
private $createsCurrency;
|
||||
|
||||
/** @var CreatesCurrencyLog */
|
||||
private $createsCurrencyLog;
|
||||
|
||||
/**
|
||||
* CreateCurrencyLogic constructor.
|
||||
* @param FetchesCountry $fetchesCountry
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
* @param CreatesCountry $createsCountry
|
||||
* @param CanCreateCurrency $canCreateCurrency
|
||||
* @param CreatesCurrency $createsCurrency
|
||||
* @param CreatesCurrencyLog $createsCurrencyLog
|
||||
*/
|
||||
public function __construct(FetchesCountry $fetchesCountry, FetchesCurrency $fetchesCurrency, CreatesCountry $createsCountry, CanCreateCurrency $canCreateCurrency, CreatesCurrency $createsCurrency, CreatesCurrencyLog $createsCurrencyLog)
|
||||
{
|
||||
$this->fetchesCountry = $fetchesCountry;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
$this->createsCountry = $createsCountry;
|
||||
$this->canCreateCurrency = $canCreateCurrency;
|
||||
$this->createsCurrency = $createsCurrency;
|
||||
$this->createsCurrencyLog = $createsCurrencyLog;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws MalformedRequestException
|
||||
* @throws ResourceConflictException
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$countryObject = Country($request->input('country_short_code'));
|
||||
|
||||
/** @var Country $country */
|
||||
$country = $this->createsCountry->execute(new CountryObject($countryObject));
|
||||
|
||||
$currencyInfo = $countryObject->getCurrency();
|
||||
$currencyObject = new CurrencyObject($currencyInfo['iso_4217_name'], $currencyInfo['iso_4217_code']);
|
||||
|
||||
$this->canCreateCurrency->passes($currencyObject);
|
||||
|
||||
try {
|
||||
$this->fetchesCurrency->execute(['country_id' => $country->id, 'short_code' => $currencyObject->getShortCode()]);
|
||||
throw new ResourceConflictException('Duplicated Currency. This currency already exists in the system');
|
||||
} catch (ResourceNotFoundException $exception){
|
||||
/** @var Currency $currency */
|
||||
$currency = $this->createsCurrency->execute($country, $currencyObject);
|
||||
$this->createsCurrencyLog->execute($currency);
|
||||
}
|
||||
|
||||
return $this->resourceResponse(new CurrencyResource($currency));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic;
|
||||
|
||||
use App\Http\Resources\CurrencyResource;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\CanDeleteCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\DeletesCurrency;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DeleteCurrencyLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Delete Currency',
|
||||
'message' => 'You have successfully deleted the Currency'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanDeleteCurrency */
|
||||
private $canDeleteCurrency;
|
||||
|
||||
/** @var DeletesCurrency */
|
||||
private $deletesCurrency;
|
||||
|
||||
/** @var FetchesCurrency */
|
||||
private $fetchesCurrency;
|
||||
|
||||
|
||||
/**
|
||||
* DeleteCurrencyLogic constructor.
|
||||
* @param CanDeleteCurrency $canDeleteCurrency
|
||||
* @param DeletesCurrency $deletesCurrency
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
*/
|
||||
public function __construct(
|
||||
CanDeleteCurrency $canDeleteCurrency,
|
||||
DeletesCurrency $deletesCurrency,
|
||||
FetchesCurrency $fetchesCurrency
|
||||
)
|
||||
{
|
||||
$this->canDeleteCurrency = $canDeleteCurrency;
|
||||
$this->deletesCurrency = $deletesCurrency;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$this->canDeleteCurrency->passes();
|
||||
|
||||
$currency_query = $this->fetchesCurrency->execute(['id' => $request->route('id')]);
|
||||
|
||||
$this->deletesCurrency->execute($currency_query);
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\CanFetchCurrency;
|
||||
use App\Classes\Modules\Segments\Services\FetchesConstant;
|
||||
use App\Classes\ValueObjects\Constants\SegmentConstants;
|
||||
use App\Http\Resources\CurrencyResource;
|
||||
use App\Models\Currency;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchSystemPrimaryCurrencyLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Fetch System\'s primary currency',
|
||||
'message' => 'You have successfully retrieved a Currency'
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/** @var CanFetchCurrency */
|
||||
private $canFetchCurrency;
|
||||
|
||||
/** @var FetchesConstant*/
|
||||
private $fetchesConstant;
|
||||
|
||||
/** @var FetchesCurrency */
|
||||
private $fetchesCurrency;
|
||||
|
||||
/**
|
||||
* FetchSystemPrimaryCurrencyLogic constructor.
|
||||
* @param CanFetchCurrency $canFetchCurrency
|
||||
* @param FetchesConstant $fetchesConstant
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
*/
|
||||
public function __construct(CanFetchCurrency $canFetchCurrency, FetchesConstant $fetchesConstant, FetchesCurrency $fetchesCurrency)
|
||||
{
|
||||
$this->canFetchCurrency = $canFetchCurrency;
|
||||
$this->fetchesConstant = $fetchesConstant;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$this->canFetchCurrency->passes();
|
||||
|
||||
$constant = $this->fetchesConstant->execute(['reference' => SegmentConstants::SYSTEM_PRIMARY_CURRENCY]);
|
||||
|
||||
/** @var Currency $currency */
|
||||
$currency = $this->fetchesCurrency->execute(['id' => $constant->detail->id]);
|
||||
|
||||
return $this->resourceResponse(new CurrencyResource($currency));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Currencies\Services\ListsCurrency;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\CanListCurrency;
|
||||
use App\Http\Resources\CurrencyResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListCurrencyLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Retrieved Currency',
|
||||
'message' => 'You have successfully retrieved a list of Currency'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanListCurrency */
|
||||
private $canListCurrency;
|
||||
|
||||
/** @var ListsCurrency */
|
||||
private $listsCurrency;
|
||||
|
||||
/**
|
||||
* ListCurrencyLogic constructor.
|
||||
* @param CanListCurrency $canListCurrency
|
||||
* @param ListsCurrency $listsCurrency
|
||||
*/
|
||||
public function __construct(CanListCurrency $canListCurrency, ListsCurrency $listsCurrency)
|
||||
{
|
||||
$this->canListCurrency = $canListCurrency;
|
||||
$this->listsCurrency = $listsCurrency;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$this->canListCurrency->passes();
|
||||
|
||||
$query = $this->listsCurrency->execute($this->listsCurrency->deserializeFilters($request->input('filters')));
|
||||
|
||||
return $this->collectionResponse(CurrencyResource::collection($query));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\RateCalculatesCurrency;
|
||||
|
||||
use App\Http\Resources\RateCalculateCurrencyResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class RateCalculateCurrencyLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Rate Calculated Currency',
|
||||
'message' => 'You have successfully rate calculated a Currency'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesCurrency */
|
||||
private $fetchesCurrency;
|
||||
|
||||
/** @var RateCalculatesCurrency */
|
||||
private $rateCalculatesCurrency;
|
||||
|
||||
/**
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
* @param RateCalculatesCurrency $rateCalculatesCurrency
|
||||
*/
|
||||
public function __construct(FetchesCurrency $fetchesCurrency, RateCalculatesCurrency $rateCalculatesCurrency)
|
||||
{
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
$this->rateCalculatesCurrency = $rateCalculatesCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$amount = $request->input('amount');
|
||||
$conversion_currency = $this->fetchesCurrency->execute(['id' => $request->input('conversion_currency_id')]);
|
||||
$convertable_currency = $this->fetchesCurrency->execute(['id' => $request->input('convertable_currency_id')]);
|
||||
$this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $amount);
|
||||
|
||||
return $this->resourceResponse(new RateCalculateCurrencyResource($conversion_currency, $convertable_currency, $amount));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\FetchesRate;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\CalculatesRate;
|
||||
|
||||
use App\Http\Resources\CalculateCurrencyRateResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CalculateRateLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Calculated Currency Rate',
|
||||
'message' => 'You have successfully rate calculated a Currency'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesRate */
|
||||
private $fetchesRate;
|
||||
|
||||
/** @var CalculatesRate */
|
||||
private $calculatesRate;
|
||||
|
||||
/**
|
||||
* @param FetchesRate $fetchesRate
|
||||
* @param CalculatesRate $calculatesRate
|
||||
*/
|
||||
public function __construct(FetchesRate $fetchesRate, CalculatesRate $calculatesRate)
|
||||
{
|
||||
$this->fetchesRate = $fetchesRate;
|
||||
$this->calculatesRate = $calculatesRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
$amount = $request->input('amount');
|
||||
$conversion_currency_rate = $this->fetchesRate->execute(
|
||||
[
|
||||
'id' => $request->input('conversion_currency_rate_id'),
|
||||
]
|
||||
);
|
||||
$convertable_currency_rate = $this->fetchesRate->execute(
|
||||
[
|
||||
'id' => $request->input('convertable_currency_rate_id')
|
||||
]
|
||||
);
|
||||
|
||||
$convert_amount = $this->calculatesRate->execute($conversion_currency_rate, $convertable_currency_rate, $amount);
|
||||
|
||||
return $this->resourceResponse(new CalculateCurrencyRateResource($conversion_currency_rate, $convertable_currency_rate, $convert_amount));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\Rates\CreatesRateLog;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\Rates\CanCreateRate;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\CreatesRate;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
use App\Http\Resources\CurrencyRateResource;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateRateLogic extends AbstractControllerLogic
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Currency Rate',
|
||||
'message' => 'You have successfully created a new Currency Rate'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanCreateRate */
|
||||
private $canCreateRate;
|
||||
|
||||
/** @var CreatesRate */
|
||||
private $createsRate;
|
||||
|
||||
/** @var CreatesRateLog */
|
||||
private $createsRateLog;
|
||||
|
||||
/** @var FetchesCurrency */
|
||||
private $fetchesCurrency;
|
||||
|
||||
/**
|
||||
* CreateRateLogic constructor.
|
||||
* @param CanCreateRate $canCreateRate
|
||||
* @param CreatesRate $createsRate
|
||||
* @param CreatesRateLog $createsRateLog
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
*/
|
||||
public function __construct(
|
||||
CanCreateRate $canCreateRate,
|
||||
CreatesRate $createsRate,
|
||||
CreatesRateLog $createsRateLog,
|
||||
FetchesCurrency $fetchesCurrency
|
||||
)
|
||||
{
|
||||
$this->canCreateRate = $canCreateRate;
|
||||
$this->createsRate = $createsRate;
|
||||
$this->createsRateLog = $createsRateLog;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$currency_rate_object = new RateObject(
|
||||
$request->input('currency_id'),
|
||||
number_format( (float) $request->input('selling'), 5, '.', ''),
|
||||
$request->input('payment_method_type')
|
||||
);
|
||||
|
||||
$this->canCreateRate->passes($currency_rate_object);
|
||||
|
||||
$currency_rate_query = $this->createsRate->execute($currency_rate_object);
|
||||
|
||||
$this->createsRateLog->execute($currency_rate_query);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse(new CurrencyRateResource($currency_rate_query));
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\Rates\DeletesRate;
|
||||
use App\Http\Resources\CurrencyRateResource;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\Rates\FetchesRate;
|
||||
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\Rates\CanDeleteRate;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DeleteRateLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Delete Currency Rate',
|
||||
'message' => 'You have successfully deleted the Currency Rate'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanDeleteRate */
|
||||
private $canDeleteRate;
|
||||
|
||||
/** @var DeletesRate */
|
||||
private $deletesRate;
|
||||
|
||||
/** @var FetchesRate */
|
||||
private $fetchesRate;
|
||||
|
||||
|
||||
/**
|
||||
* DeleteRateRateLogic constructor.
|
||||
* @param CanDeleteRate $canDeleteRate
|
||||
* @param DeletesRate $deletesRate
|
||||
* @param FetchesRate $fetchesRate
|
||||
*/
|
||||
public function __construct(
|
||||
CanDeleteRate $canDeleteRate,
|
||||
DeletesRate $deletesRate,
|
||||
FetchesRate $fetchesRate
|
||||
)
|
||||
{
|
||||
$this->canDeleteRate = $canDeleteRate;
|
||||
$this->deletesRate = $deletesRate;
|
||||
$this->fetchesRate = $fetchesRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$currency_rate = $this->fetchesRate->execute(['id' => $request->route('id')]);
|
||||
$this->canDeleteRate->passes();
|
||||
$this->deletesRate->execute($currency_rate);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse(new CurrencyRateResource($currency_rate));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\FetchesRate;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\Rates\CanFetchRate;
|
||||
use App\Http\Resources\CurrencyRateResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchRateLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Retrieved Currency Rate',
|
||||
'message' => 'You have successfully retrieved a Currency Rate'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanFetchRate */
|
||||
private $canFetchRate;
|
||||
|
||||
/** @var FetchesRate */
|
||||
private $fetchesRate;
|
||||
|
||||
/**
|
||||
* FetchRateControllersLogic constructor.
|
||||
* @param CanFetchRate $canFetchRate
|
||||
* @param FetchesRate $fetchesRate
|
||||
*/
|
||||
public function __construct(CanFetchRate $canFetchRate, FetchesRate $fetchesRate)
|
||||
{
|
||||
$this->canFetchRate = $canFetchRate;
|
||||
$this->fetchesRate = $fetchesRate;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
$this->canFetchRate->passes();
|
||||
|
||||
$query = $this->fetchesRate->execute(['id' => $request->route('id')]);
|
||||
|
||||
return $this->resourceResponse(new CurrencyRateResource($query));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\ListsRates;
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\Rates\CanListRates;
|
||||
use App\Http\Resources\CurrencyRateResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListRatesLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Retrieved Currency Rate',
|
||||
'message' => 'You have successfully retrieved a list of Currency Rate'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanListRates */
|
||||
private $canListRates;
|
||||
|
||||
/** @var ListsRates */
|
||||
private $listsRates;
|
||||
|
||||
/**
|
||||
* ListRatesLogic constructor.
|
||||
* @param CanListRates $canListRates
|
||||
* @param ListsRates $listsRates
|
||||
*/
|
||||
public function __construct(CanListRates $canListRates, ListsRates $listsRates)
|
||||
{
|
||||
$this->canListRates = $canListRates;
|
||||
$this->listsRates = $listsRates;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
$this->canListRates->passes();
|
||||
|
||||
$query = $this->listsRates->execute(
|
||||
[
|
||||
'currency_id' => $request->input('currency_id'),
|
||||
'payment_method_type' => $request->input('payment_method_type')
|
||||
]
|
||||
);
|
||||
|
||||
return $this->collectionResponse(CurrencyRateResource::collection($query));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\ControllersLogic\Rates;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\Rates\CreatesRateLog;
|
||||
use App\Classes\Modules\Currencies\Services\Rates\FetchesRate;
|
||||
|
||||
use App\Classes\Modules\Currencies\Standards\Rules\Rates\CanUpdateRate;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\Rates\UpdatesRate;
|
||||
|
||||
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
use App\Http\Resources\CurrencyRateResource;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class UpdateRateLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/** @var CanUpdateRate */
|
||||
private $canUpdateRate;
|
||||
/** @var UpdatesRate */
|
||||
private $updatesRate;
|
||||
/** @var CreatesRateLog */
|
||||
private $createsRateLog;
|
||||
/** @var FetchesRate */
|
||||
private $fetchesRate;
|
||||
|
||||
/**
|
||||
* UpdateStandardRateLogic constructor.
|
||||
* @param CanUpdateRate $canUpdateRate
|
||||
* @param UpdatesRate $updatesRate
|
||||
* @param CreatesRateLog $createsRateLog
|
||||
* @param FetchesRate $fetchesRate
|
||||
*/
|
||||
public function __construct(
|
||||
CanUpdateRate $canUpdateRate,
|
||||
UpdatesRate $updatesRate,
|
||||
CreatesRateLog $createsRateLog,
|
||||
FetchesRate $fetchesRate
|
||||
)
|
||||
{
|
||||
$this->canUpdateRate = $canUpdateRate;
|
||||
$this->updatesRate = $updatesRate;
|
||||
$this->createsRateLog = $createsRateLog;
|
||||
$this->fetchesRate = $fetchesRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$currency_rate_query = $this->fetchesRate->execute(['id' => $request->route('id')]);
|
||||
|
||||
$currency_object_object = new RateObject(
|
||||
$currency_rate_query->currency_id,
|
||||
$request->input('selling', $currency_rate_query->selling),
|
||||
$currency_rate_query->payment_method_type
|
||||
);
|
||||
|
||||
$this->canUpdateRate->passes($currency_object_object);
|
||||
$currency_rate_query = $this->updatesRate->execute($currency_rate_query, $currency_object_object);
|
||||
|
||||
$this->createsRateLog->execute($currency_rate_query);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse(new CurrencyRateResource($currency_rate_query));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Updated Currency Rate',
|
||||
'message' => 'You have successfully updated the Currency Rate'
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
|
||||
class CurrencyConversionObject implements DataTransferObject
|
||||
{
|
||||
|
||||
/** @var float */
|
||||
private $amount;
|
||||
|
||||
/** @var int */
|
||||
private $currencyId;
|
||||
|
||||
/** @var int */
|
||||
private $serviceId;
|
||||
|
||||
/** @var int */
|
||||
private $type;
|
||||
|
||||
/** @var int|null */
|
||||
private $paymentMethod;
|
||||
|
||||
/**
|
||||
* CurrencyConversionObject constructor.
|
||||
* @param float $amount
|
||||
* @param int $currencyId
|
||||
* @param int $serviceId
|
||||
* @param int $type
|
||||
* @param int|null $paymentMethod
|
||||
*/
|
||||
public function __construct(float $amount, int $currencyId, int $serviceId, int $type, ?int $paymentMethod = PaymentMethodType::CASH)
|
||||
{
|
||||
$this->amount = $amount;
|
||||
$this->currencyId = $currencyId;
|
||||
$this->serviceId = $serviceId;
|
||||
$this->type = $type;
|
||||
$this->paymentMethod = $paymentMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getAmount(): float
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCurrencyId(): int
|
||||
{
|
||||
return $this->currencyId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getServiceId(): int
|
||||
{
|
||||
return $this->serviceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getType(): int
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPaymentMethod(): ?int
|
||||
{
|
||||
return $this->paymentMethod;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
|
||||
class RateObject implements DataTransferObject
|
||||
{
|
||||
|
||||
/** @var array */
|
||||
private $selling;
|
||||
|
||||
/** @var array */
|
||||
private $payment_method_type;
|
||||
|
||||
/**
|
||||
* RateObject constructor.
|
||||
* @param array $selling
|
||||
* @param string $payment_method_type
|
||||
*/
|
||||
public function __construct(array $selling, string $payment_method_type)
|
||||
{
|
||||
$this->selling = $selling;
|
||||
$this->payment_method_type = $payment_method_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getSelling(): array
|
||||
{
|
||||
return $this->selling;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getPaymentMethodType(): int
|
||||
{
|
||||
return PaymentMethodType::PAYMENT_METHODS[$this->payment_method_type];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\Currency;
|
||||
use App\Models\CurrencyLog;
|
||||
|
||||
class CreatesCurrencyLog extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param Currency $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Currency $object) {
|
||||
$model = new CurrencyLog();
|
||||
$model->currency_id = $object->id;
|
||||
$model->created_by = Auth()->user()->id;
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractDeleteRecord;
|
||||
use App\Models\Currency;
|
||||
|
||||
class DeletesCurrency extends AbstractDeleteRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Currency $model
|
||||
* @return mixed
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Currency $model) {
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractListRecord;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\Currency;
|
||||
|
||||
class ListsCurrency extends AbstractListRecord
|
||||
{
|
||||
|
||||
/** @var Currency */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* ListsCurrency constructor.
|
||||
* @param Currency $repository
|
||||
*/
|
||||
public function __construct(Currency $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\Currency;
|
||||
|
||||
class RateCalculatesCurrency extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(Currency $conversion_currency, Currency $convertable_currency, $amount)
|
||||
{
|
||||
return $convert_amount = ($conversion_currency->selling / $convertable_currency->selling) * $amount;
|
||||
}
|
||||
|
||||
public function execute_rate(Currency $conversion_currency, Currency $convertable_currency)
|
||||
{
|
||||
return $convert_rate = ($conversion_currency->selling / $convertable_currency->selling);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class CalculatesRate extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(CurrencyRate $conversion_currency_rate, CurrencyRate $convertable_currency_rate, $amount)
|
||||
{
|
||||
return $convert_amount = ($conversion_currency_rate->selling / $convertable_currency_rate->selling) * $amount;
|
||||
}
|
||||
|
||||
public function execute_rate(CurrencyRate $conversion_currency_rate, CurrencyRate $convertable_currency_rate)
|
||||
{
|
||||
return $convert_rate = ($conversion_currency_rate->selling / $convertable_currency_rate->selling);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
use App\Models\Currency;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class CreatesRate extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Currency $currency
|
||||
* @param RateObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Currency $currency, RateObject $object)
|
||||
{
|
||||
$model = new CurrencyRate();
|
||||
$model->selling = $object->getSelling();
|
||||
$model->payment_method_type = $object->getPaymentMethodType();
|
||||
$model->service_id = $object->getServiceId();
|
||||
|
||||
return $this->handler($currency->rates(), $model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\CurrencyRate;
|
||||
use App\Models\CurrencyRateLog;
|
||||
|
||||
class CreatesRateLog extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param CurrencyRate $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(CurrencyRate $object) {
|
||||
$model = new CurrencyRateLog();
|
||||
$model->currency_rate_id = $object->id;
|
||||
$model->selling = $object->selling;
|
||||
$model->created_by = \Auth::user()->id;
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
use App\Models\Currency;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class CreatesRates extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param Currency $currency
|
||||
* @param array $rates
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(Currency $currency, array $rates)
|
||||
{
|
||||
return $currency->update($rates)->save();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractDeleteRecord;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class DeletesRate extends AbstractDeleteRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param CurrencyRate $model
|
||||
* @return mixed
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(CurrencyRate $model) {
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class FetchesRate extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var CurrencyRate */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* FetchesRate constructor.
|
||||
* @param CurrencyRate $repository
|
||||
*/
|
||||
public function __construct(CurrencyRate $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractListRecord;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class ListsRates extends AbstractListRecord
|
||||
{
|
||||
|
||||
/** @var CurrencyRate */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* ListsRates constructor.
|
||||
* @param CurrencyRate $repository
|
||||
*/
|
||||
public function __construct(CurrencyRate $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Services\Rates;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
use App\Models\CurrencyRate;
|
||||
|
||||
class UpdatesRate extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param CurrencyRate $model
|
||||
* @param RateObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(CurrencyRate $model, RateObject $object)
|
||||
{
|
||||
$model->selling = $object->getSelling();
|
||||
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
use App\Classes\Modules\Currencies\Standards\Validators\CurrencyValidation;
|
||||
|
||||
class CanCreateCurrency extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var currencyValidation */
|
||||
private $currencyValidation;
|
||||
|
||||
/**
|
||||
* CanCreateCurrency constructor.
|
||||
* @param CurrencyValidation $currencyValidation
|
||||
*/
|
||||
public function __construct(CurrencyValidation $currencyValidation)
|
||||
{
|
||||
$this->currencyValidation = $currencyValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->currencyValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
|
||||
class CanDeleteCurrency extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
|
||||
class CanFetchCurrency extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
|
||||
class CanListCurrency extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
use App\Classes\Modules\Currencies\Standards\Validators\CurrencyValidation;
|
||||
|
||||
class CanUpdateCurrency extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var CurrencyValidation */
|
||||
private $currencyValidation;
|
||||
|
||||
|
||||
/**
|
||||
* CanUpdateCurrency constructor.
|
||||
* @param CurrencyValidation $currencyValidation
|
||||
*/
|
||||
public function __construct(CurrencyValidation $currencyValidation)
|
||||
{
|
||||
$this->currencyValidation = $currencyValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->currencyValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules\Rates;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\Standards\Validators\Rates\RateValidation;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
class CanCreateRate extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var RateValidation */
|
||||
private $rateValidation;
|
||||
|
||||
/**
|
||||
* CanCreateRate constructor.
|
||||
* @param RateValidation $rateValidation
|
||||
*/
|
||||
public function __construct(RateValidation $rateValidation)
|
||||
{
|
||||
$this->rateValidation = $rateValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
if (!\Auth::user()->can('add currency_rate')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->rateValidation->validate($object, 'POST');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules\Rates;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
class CanDeleteRate extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
|
||||
if (!\Auth::user()->can('delete currency_rate')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
class CanFetchRate extends AbstractRule
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules\Rates;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
|
||||
class CanListRates extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
|
||||
if (!\Auth::user()->can('view currency_rate')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Rules\Rates;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Currencies\Standards\Validators\Rates\RateValidation;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
class CanUpdateRate extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var RateValidation */
|
||||
private $rateValidation;
|
||||
|
||||
/**
|
||||
* CanUpdateRate constructor.
|
||||
* @param RateValidation $rateValidation
|
||||
*/
|
||||
public function __construct(RateValidation $rateValidation)
|
||||
{
|
||||
$this->rateValidation = $rateValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
|
||||
if (!\Auth::user()->can('view currency_rate')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->rateValidation->validate($object, 'PUT');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
|
||||
|
||||
class CurrencyValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param CurrencyObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'name' => $object->getName(),
|
||||
'short_code' => $object->getShortCode()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'required',
|
||||
'short_code' => 'required'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Currencies\Standards\Validators;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Currencies\DataTransferObjects\RateObject;
|
||||
|
||||
class RateValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param RateObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array {
|
||||
|
||||
$data = [
|
||||
'currency_id'=> $object->getCurrencyId(),
|
||||
'selling' => $object->getSelling(),
|
||||
'payment_method_type' => $object->getPaymentMethodType(),
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array {
|
||||
return [
|
||||
'currency_id' => $type == 'POST' ? 'required' : '',
|
||||
'selling' => 'required',
|
||||
'payment_method_type' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array {
|
||||
return [];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Receipts\Standards\Rules\CanCreateReceipt;
|
||||
use App\Classes\Modules\Receipts\Standards\Rules\CanCreateReceiptDetail;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptObject;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptDetailObject;
|
||||
use App\Classes\Modules\Receipts\Services\CreatesReceipt;
|
||||
use App\Classes\Modules\Receipts\Services\CreatesReceiptDetail;
|
||||
use App\Classes\Modules\Receipts\Services\GeneratesReceiptBillNo;
|
||||
use App\Http\Resources\ReceiptResource;
|
||||
use App\Http\Resources\ReceiptDetailResource;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\RateCalculatesCurrency;
|
||||
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateReceiptLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Receipt',
|
||||
'message' => 'You have successfully created a receipt'
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/** @var GeneratesReceiptBillNo */
|
||||
private $generatesReceiptBillNo;
|
||||
|
||||
/** @var CanCreateReceipt */
|
||||
private $canCreateReceipt;
|
||||
|
||||
private $fetchesCurrency;
|
||||
|
||||
private $rateCalculatesCurrency;
|
||||
|
||||
private $fetchesCompany;
|
||||
|
||||
private $createsReceipt;
|
||||
|
||||
private $canCreateReceiptDetail;
|
||||
|
||||
private $createsReceiptDetail;
|
||||
|
||||
private $fetchesTransaction;
|
||||
|
||||
/**
|
||||
* CreateWalletLogic constructor.
|
||||
* @param GeneratesReceiptBillNo $generatesReceiptBillNo
|
||||
* @param CanCreateReceipt $canCreateReceipt
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
* @param RateCalculatesCurrency $rateCalculatesCurrency
|
||||
* @param FetchesCompany $fetchesCompany
|
||||
* @param CreatesReceipt $createsReceipt
|
||||
* @param CanCreateReceiptDetail $canCreateReceiptDetail
|
||||
* @param CreatesReceiptDetail $createsReceiptDetail
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
*/
|
||||
public function __construct(
|
||||
GeneratesReceiptBillNo $generatesReceiptBillNo, CanCreateReceipt $canCreateReceipt,
|
||||
FetchesCurrency $fetchesCurrency,RateCalculatesCurrency $rateCalculatesCurrency, FetchesCompany $fetchesCompany,
|
||||
CreatesReceipt $createsReceipt,
|
||||
CanCreateReceiptDetail $canCreateReceiptDetail, CreatesReceiptDetail $createsReceiptDetail,
|
||||
FetchesTransaction $fetchesTransaction
|
||||
){
|
||||
$this->generatesReceiptBillNo = $generatesReceiptBillNo;
|
||||
$this->canCreateReceipt = $canCreateReceipt;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
$this->rateCalculatesCurrency = $rateCalculatesCurrency;
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
$this->createsReceipt =$createsReceipt;
|
||||
$this->canCreateReceiptDetail =$canCreateReceiptDetail;
|
||||
$this->createsReceiptDetail = $createsReceiptDetail;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
DB::beginTransaction();
|
||||
$json_array = json_decode($request->getContent(), true);
|
||||
$company = $this->fetchesCompany->execute(['id' => $json_array['company_id']]);
|
||||
|
||||
$conversion_currency = $this->fetchesCurrency->execute(['id' => $json_array['currency_id']]);
|
||||
$convertable_currency = $this->fetchesCurrency->execute(['id' => 1]);//MYR
|
||||
$convert_amount = $this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $json_array['amount']);
|
||||
$convert_rate = $this->rateCalculatesCurrency->execute_rate($conversion_currency, $convertable_currency);
|
||||
|
||||
$object = new ReceiptObject(
|
||||
$this->generatesReceiptBillNo->execute(),$json_array['trans_type1'],$json_array['trans_type2'],
|
||||
number_format( (float) $convert_amount, 5, '.', ''), 1 , number_format( (float) $json_array['amount'], 5, '.', ''),
|
||||
$json_array['currency_id'],number_format( (float) $convert_rate, 5, '.', ''),
|
||||
$json_array['dt_transaction'],1,$request->route('id'),
|
||||
$company->id
|
||||
);
|
||||
|
||||
|
||||
$this->canCreateReceipt->passes($object);
|
||||
|
||||
$receipt = $this->createsReceipt->execute($object);
|
||||
|
||||
$receipt_array = new ReceiptResource($receipt);
|
||||
$receipt_detail_array = array();
|
||||
|
||||
foreach ($json_array['receipt_detail'] as $key => $value) {
|
||||
|
||||
$transaction_inv = $this->fetchesTransaction->execute(['id' => $value['transaction_id']]);
|
||||
|
||||
$object_detail = new ReceiptDetailObject(
|
||||
$json_array['trans_type1'],$json_array['trans_type2'],
|
||||
$transaction_inv->id,$receipt->id,
|
||||
number_format( (float) $convert_amount, 5, '.', ''), number_format( (float) $json_array['amount'], 5, '.', '')
|
||||
);
|
||||
$this->canCreateReceiptDetail->passes($object_detail);
|
||||
$transaction_detail = $this->createsReceiptDetail->execute($object_detail);
|
||||
//array_push($stack, "apple", "raspberry");
|
||||
$receipt_detail_resource= new ReceiptDetailResource($transaction_detail);
|
||||
$receipt_detail_array[]= $receipt_detail_resource->toArray($request);
|
||||
|
||||
}
|
||||
|
||||
//$transaction_array['transaction_detail']= $transaction_detail_array;
|
||||
//print_r($transaction_detail_array);
|
||||
//dd($transaction_detail_array);
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse($receipt_array);
|
||||
//return $this->resourceResponse($json_array);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
|
||||
class ReceiptDetailObject implements DataTransferObject
|
||||
{
|
||||
|
||||
|
||||
private $trans_type1;
|
||||
|
||||
private $trans_type2;
|
||||
|
||||
private $transaction_id;
|
||||
|
||||
private $receipt_id;
|
||||
|
||||
private $price;
|
||||
|
||||
private $amount;
|
||||
|
||||
|
||||
public function __construct(
|
||||
string $trans_type1,string $trans_type2,
|
||||
int $transaction_id, int $receipt_id,
|
||||
float $price,float $amount
|
||||
){
|
||||
$this->trans_type1= $trans_type1;
|
||||
$this->trans_type2 = $trans_type2;
|
||||
$this->transaction_id = $transaction_id;
|
||||
$this->receipt_id = $receipt_id;
|
||||
$this->price = $price;
|
||||
$this->amount = $amount;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTransType1(): string
|
||||
{
|
||||
return $this->trans_type1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTransType2(): string
|
||||
{
|
||||
return $this->trans_type2;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getTransactionId(): int
|
||||
{
|
||||
return $this->transaction_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getReceiptId(): int
|
||||
{
|
||||
return $this->receipt_id;
|
||||
}
|
||||
|
||||
public function getPrice(): float
|
||||
{
|
||||
return $this->price;
|
||||
}
|
||||
|
||||
public function getAmount(): float
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
|
||||
class ReceiptObject implements DataTransferObject
|
||||
{
|
||||
|
||||
/*
|
||||
*
|
||||
* return [
|
||||
'id' => $this->id,
|
||||
'trans_type1' => $this->trans_type1,
|
||||
'trans_type2' => $this->trans_type2,
|
||||
'bill_no' => (int) $this->bill_no,
|
||||
'amount' => (double) $this->amount,
|
||||
'currency_id' => (int) $this->currency_id,
|
||||
'original_amount' => (double) $this->original_amount,
|
||||
'original_currency_id' => (int) $this->original_currency_id,
|
||||
'currency_rate' => (double) $this->currency_rate,
|
||||
'dt_transaction' => $this->dt_transaction,
|
||||
'status' => (int) $this->status,
|
||||
'booking_id' => (int) $this->booking_id,
|
||||
'company_id' => (int) $this->company_id
|
||||
];
|
||||
*/
|
||||
private $trans_type1;
|
||||
|
||||
private $trans_type2;
|
||||
|
||||
private $bill_no;
|
||||
|
||||
private $amount;
|
||||
|
||||
private $currency_id;
|
||||
|
||||
private $original_amount;
|
||||
|
||||
private $original_currency_id;
|
||||
|
||||
private $currency_rate;
|
||||
|
||||
private $dt_transaction;
|
||||
|
||||
private $status;
|
||||
|
||||
private $booking_id;
|
||||
|
||||
private $company_id;
|
||||
|
||||
public function __construct(
|
||||
int $bill_no,string $trans_type1,string $trans_type2,
|
||||
float $amount, int $currency_id, int $original_amount,
|
||||
int $original_currency_id, float $currency_rate,
|
||||
string $dt_transaction,int $status,int $booking_id,
|
||||
int $company_id
|
||||
){
|
||||
$this->bill_no = $bill_no;
|
||||
$this->trans_type1= $trans_type1;
|
||||
$this->trans_type2 = $trans_type2;
|
||||
$this->amount= $amount;
|
||||
$this->currency_id = $currency_id;
|
||||
$this->original_amount = $original_amount;
|
||||
$this->original_currency_id = $original_currency_id;
|
||||
$this->currency_rate = $currency_rate;
|
||||
$this->dt_transaction = $dt_transaction;
|
||||
$this->status = $status;
|
||||
$this->booking_id = $booking_id;
|
||||
$this->company_id = $company_id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getBillNo(): int
|
||||
{
|
||||
return $this->bill_no;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTransType1(): string
|
||||
{
|
||||
return $this->trans_type1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTransType2(): string
|
||||
{
|
||||
return $this->trans_type2;
|
||||
}
|
||||
|
||||
|
||||
public function getAmount(): float
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCurrency(): int
|
||||
{
|
||||
return $this->currency_id;
|
||||
}
|
||||
|
||||
|
||||
public function getOriginalAmount(): float
|
||||
{
|
||||
return $this->original_amount;
|
||||
}
|
||||
|
||||
public function getOriginalCurrency(): int
|
||||
{
|
||||
return $this->original_currency_id;
|
||||
}
|
||||
|
||||
public function getCurrencyRate(): float
|
||||
{
|
||||
return $this->currency_rate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDtTransaction(): string
|
||||
{
|
||||
return $this->dt_transaction;
|
||||
}
|
||||
|
||||
public function getStatus(): int
|
||||
{
|
||||
return $this->original_currency_id;
|
||||
}
|
||||
|
||||
public function getBookingId(): int
|
||||
{
|
||||
return $this->booking_id;
|
||||
}
|
||||
|
||||
public function getCompanyId(): int
|
||||
{
|
||||
return $this->company_id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Services;
|
||||
|
||||
|
||||
use App\Models\Receipt;
|
||||
|
||||
class ChecksIfReceiptBillNoExists
|
||||
{
|
||||
|
||||
private $repository;
|
||||
|
||||
public function __construct(Receipt $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function execute(int $bill_no): bool {
|
||||
return $this->repository->where('bill_no', $bill_no)->exists();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptObject;
|
||||
use App\Models\Receipt;
|
||||
|
||||
class CreatesReceipt extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param ReceiptObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(ReceiptObject $object) {
|
||||
$model = new Receipt();
|
||||
$model->bill_no = $object->getBillNo();
|
||||
$model->trans_type1 = $object->getTransType1();
|
||||
$model->trans_type2 = $object->getTransType2();
|
||||
$model->amount = $object->getAmount();
|
||||
$model->currency_id = $object->getCurrency();
|
||||
$model->original_amount = $object->getOriginalAmount();
|
||||
$model->original_currency_id = $object->getOriginalCurrency();
|
||||
$model->currency_rate = $object->getCurrencyRate();
|
||||
$model->dt_transaction = $object->getDtTransaction();
|
||||
$model->status = $object->getStatus();
|
||||
$model->booking_id = $object->getBookingId();
|
||||
$model->company_id = $object->getCompanyId();
|
||||
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptDetailObject;
|
||||
use App\Models\ReceiptDetail;
|
||||
|
||||
class CreatesReceiptDetail extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param ReceiptDetailObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(ReceiptDetailObject $object) {
|
||||
$model = new ReceiptDetail();
|
||||
$model->trans_type1 = $object->getTransType1();
|
||||
$model->trans_type2 = $object->getTransType2();
|
||||
$model->transaction_id = $object->getTransactionId();
|
||||
$model->receipt_id = $object->getReceiptId();
|
||||
$model->price = $object->getPrice();
|
||||
$model->amount = $object->getAmount();
|
||||
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Services;
|
||||
|
||||
|
||||
class GeneratesReceiptBillNo
|
||||
{
|
||||
|
||||
|
||||
private $receiptBillNoExists;
|
||||
|
||||
|
||||
public function __construct(ChecksIfReceiptBillNoExists $receiptBillNoExists)
|
||||
{
|
||||
$this->receiptBillNoExists = $receiptBillNoExists;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function execute(): int {
|
||||
|
||||
$code = mt_rand(100000001, 999999999);
|
||||
return !$this->receiptBillNoExists->execute($code) ? $code : self::execute();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Standards\Rules;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptObject;
|
||||
use App\Classes\Modules\Receipts\Standards\Validators\ReceiptValidation;
|
||||
|
||||
class CanCreateReceipt extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var ReceiptValidation */
|
||||
private $receiptValidation;
|
||||
|
||||
|
||||
public function __construct(ReceiptValidation $receiptValidation)
|
||||
{
|
||||
$this->receiptValidation = $receiptValidation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReceiptObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->receiptValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReceiptObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Standards\Rules;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptDetailObject;
|
||||
use App\Classes\Modules\Receipts\Standards\Validators\ReceiptDetailValidation;
|
||||
|
||||
class CanCreateReceiptDetail extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var ReceiptDetailValidation */
|
||||
private $receiptDetailValidation;
|
||||
|
||||
|
||||
public function __construct(ReceiptDetailValidation $receiptDetailValidation)
|
||||
{
|
||||
$this->receiptDetailValidation = $receiptDetailValidation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReceiptDetailObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->receiptDetailValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReceiptDetailObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
|
||||
class ReceiptDetailValidation extends AbstractValidation
|
||||
{
|
||||
/*
|
||||
*
|
||||
* $this->bill_no = $bill_no;
|
||||
$this->trans_type1= $trans_type1;
|
||||
$this->trans_type2 = $trans_type2;
|
||||
$this->amount= $amount;
|
||||
$this->currency_id = $currency_id;
|
||||
$this->original_amount = $original_amount;
|
||||
$this->original_currency_id = $original_currency_id;
|
||||
$this->currency_rate = $currency_rate;
|
||||
$this->dt_transaction = $dt_transaction;
|
||||
$this->status = $status;
|
||||
$this->booking_id = $booking_id;
|
||||
$this->company_id = $company_id;
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'trans_type1' => $object->getTransType1(),
|
||||
'trans_type2' => $object->getTransType2(),
|
||||
'transaction_id' => $object->getTransactionId(),
|
||||
'receipt_id' => $object->getReceiptId(),
|
||||
'price'=>$object->getPrice(),
|
||||
'amount' => $object->getAmount()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(): array
|
||||
{
|
||||
return [
|
||||
'trans_type1' => 'required',
|
||||
'trans_type2' => 'required',
|
||||
'transaction_id' => 'required',
|
||||
'receipt_id' => 'required',
|
||||
'price'=>'required',
|
||||
'amount' => 'required'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Receipts\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
|
||||
class ReceiptValidation extends AbstractValidation
|
||||
{
|
||||
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'bill_no' => $object->getBillNo(),
|
||||
'trans_type1' => $object->getBillNo(),
|
||||
'trans_type2' => $object->getTransType2(),
|
||||
'amount' => $object->getAmount(),
|
||||
'currency_id' => $object->getCurrency(),
|
||||
'original_amount' => $object->getOriginalAmount(),
|
||||
'original_currency_id'=>$object->getOriginalCurrency(),
|
||||
'dt_transaction'=>$object->getDtTransaction(),
|
||||
'status'=>$object->getStatus(),
|
||||
'booking_id'=>$object->getBookingId(),
|
||||
'company_id'=>$object->getCompanyId()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(): array
|
||||
{
|
||||
return [
|
||||
'bill_no' => 'required',
|
||||
'trans_type1' => 'required',
|
||||
'trans_type2' => 'required',
|
||||
'amount' => 'required',
|
||||
'currency_id' => 'required',
|
||||
'original_amount' => 'required',
|
||||
'original_currency_id'=>'required',
|
||||
'dt_transaction'=>'required',
|
||||
'status'=>'required',
|
||||
'booking_id'=>'required',
|
||||
'company_id'=>'required'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
+208
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Transactions\Standards\Rules\CanCreateTransaction;
|
||||
use App\Classes\Modules\Transactions\Standards\Rules\CanCreateTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use App\Http\Resources\TransactionDetailResource;
|
||||
|
||||
use App\Classes\Modules\Receipts\Standards\Rules\CanCreateReceipt;
|
||||
use App\Classes\Modules\Receipts\Standards\Rules\CanCreateReceiptDetail;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptObject;
|
||||
use App\Classes\Modules\Receipts\DataTransferObjects\ReceiptDetailObject;
|
||||
use App\Classes\Modules\Receipts\Services\CreatesReceipt;
|
||||
use App\Classes\Modules\Receipts\Services\CreatesReceiptDetail;
|
||||
use App\Classes\Modules\Receipts\Services\GeneratesReceiptBillNo;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\RateCalculatesCurrency;
|
||||
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransactionDetail;
|
||||
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateMakePaymentPOTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Transaction',
|
||||
'message' => 'You have successfully created a transaction'
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/** @var GeneratesTransactionBillNumber */
|
||||
private $generatesTransactionBillNo;
|
||||
|
||||
/** @var CanCreateTransaction */
|
||||
private $canCreateTransaction;
|
||||
|
||||
private $fetchesCurrency;
|
||||
|
||||
private $rateCalculatesCurrency;
|
||||
|
||||
private $fetchesCompany;
|
||||
|
||||
private $createsTransaction;
|
||||
|
||||
private $canCreateTransactionDetail;
|
||||
|
||||
private $createsTransactionDetail;
|
||||
|
||||
private $fetchesTransaction;
|
||||
|
||||
private $fetchesTransactionDetail;
|
||||
|
||||
private $generatesReceiptBillNo;
|
||||
|
||||
/** @var CanCreateReceipt */
|
||||
private $canCreateReceipt;
|
||||
|
||||
private $createsReceipt;
|
||||
|
||||
private $canCreateReceiptDetail;
|
||||
|
||||
private $createsReceiptDetail;
|
||||
|
||||
/**
|
||||
* CreateWalletLogic constructor.
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNo
|
||||
* @param CanCreateTransaction $canCreateTransaction
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
* @param RateCalculatesCurrency $rateCalculatesCurrency
|
||||
* @param FetchesCompany $fetchesCompany
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param CanCreateTransactionDetail $canCreateTransactionDetail
|
||||
* @param CreatesTransactionDetail $createsTransactionDetail
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
* @param FetchesTransactionDetail $fetchesTransactionDetail
|
||||
* @param GeneratesReceiptBillNo $generatesReceiptBillNo
|
||||
* @param CanCreateReceipt $canCreateReceipt
|
||||
* @param CreatesReceipt $createsReceipt
|
||||
* @param CanCreateReceiptDetail $canCreateReceiptDetail
|
||||
* @param CreatesReceiptDetail $createsReceiptDetail
|
||||
*/
|
||||
public function __construct(
|
||||
GeneratesTransactionBillNumber $generatesTransactionBillNo, CanCreateTransaction $canCreateTransaction,
|
||||
FetchesCurrency $fetchesCurrency, RateCalculatesCurrency $rateCalculatesCurrency, FetchesCompany $fetchesCompany,
|
||||
CreatesTransaction $createsTransaction,
|
||||
CanCreateTransactionDetail $canCreateTransactionDetail, CreatesTransactionDetail $createsTransactionDetail,
|
||||
FetchesTransaction $fetchesTransaction , FetchesTransactionDetail $fetchesTransactionDetail,
|
||||
GeneratesReceiptBillNo $generatesReceiptBillNo, CanCreateReceipt $canCreateReceipt,
|
||||
CreatesReceipt $createsReceipt,
|
||||
CanCreateReceiptDetail $canCreateReceiptDetail, CreatesReceiptDetail $createsReceiptDetail
|
||||
){
|
||||
$this->generatesTransactionBillNo = $generatesTransactionBillNo;
|
||||
$this->canCreateTransaction = $canCreateTransaction;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
$this->rateCalculatesCurrency = $rateCalculatesCurrency;
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
$this->createsTransaction =$createsTransaction;
|
||||
$this->canCreateTransactionDetail =$canCreateTransactionDetail;
|
||||
$this->createsTransactionDetail = $createsTransactionDetail;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->fetchesTransactionDetail = $fetchesTransactionDetail;
|
||||
|
||||
$this->generatesReceiptBillNo = $generatesReceiptBillNo;
|
||||
$this->canCreateReceipt = $canCreateReceipt;
|
||||
$this->createsReceipt =$createsReceipt;
|
||||
$this->canCreateReceiptDetail =$canCreateReceiptDetail;
|
||||
$this->createsReceiptDetail = $createsReceiptDetail;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
DB::beginTransaction();
|
||||
$json_array = json_decode($request->getContent(), true);
|
||||
|
||||
$po_transaction = $this->fetchesTransaction->execute(['id' => $json_array['ref_po']]);
|
||||
|
||||
$object = new TransactionObject(
|
||||
$this->generatesTransactionBillNo->execute(),$po_transaction->trans_type1,'INV',
|
||||
$po_transaction->amount, $po_transaction->currency_id , $po_transaction->original_amount,
|
||||
$po_transaction->original_currency_id, $po_transaction->currency_rate ,
|
||||
$po_transaction->dt_transaction,1,$po_transaction->booking_id,
|
||||
$po_transaction->company_id
|
||||
);
|
||||
|
||||
$this->canCreateTransaction->passes($object);
|
||||
$transaction = $this->createsTransaction->execute($object);
|
||||
$transaction_array = new TransactionResource($transaction);
|
||||
|
||||
$transaction_detail = $this->fetchesTransactionDetail->getRepository()->where('transaction_id', $json_array['ref_po'])->get();
|
||||
foreach ($transaction_detail as $key => $value) {
|
||||
|
||||
$object_detail = new TransactionDetailObject(
|
||||
$transaction->trans_type1,$transaction->trans_type2,
|
||||
$transaction->id,$value->product_code,$value->product_name,
|
||||
$value->qty,$value->price, $value->amount
|
||||
);
|
||||
$this->canCreateTransactionDetail->passes($object_detail);
|
||||
$transaction_detail = $this->createsTransactionDetail->execute($object_detail);
|
||||
//array_push($stack, "apple", "raspberry");
|
||||
$transaction_detail_resource= new TransactionDetailResource($transaction_detail);
|
||||
$transaction_detail_array[]= $transaction_detail_resource->toArray($request);
|
||||
}
|
||||
|
||||
|
||||
$object = new ReceiptObject(
|
||||
$this->generatesReceiptBillNo->execute(),$transaction->trans_type1,"RECPT",
|
||||
$po_transaction->amount, $po_transaction->currency_id , $po_transaction->original_amount,
|
||||
$po_transaction->original_currency_id, $po_transaction->currency_rate ,
|
||||
$po_transaction->dt_transaction,1,$po_transaction->booking_id,
|
||||
$po_transaction->company_id
|
||||
);
|
||||
|
||||
|
||||
$this->canCreateReceipt->passes($object);
|
||||
|
||||
$receipt = $this->createsReceipt->execute($object);
|
||||
|
||||
|
||||
$object_detail = new ReceiptDetailObject(
|
||||
$transaction->trans_type1,"RECPT",
|
||||
$transaction->id,$receipt->id,
|
||||
$transaction->amount, $transaction->amount
|
||||
);
|
||||
$this->canCreateReceiptDetail->passes($object_detail);
|
||||
$this->createsReceiptDetail->execute($object_detail);
|
||||
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse($transaction_array);
|
||||
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Models\Company;
|
||||
use App\Models\Document;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
|
||||
|
||||
|
||||
class CreatePaymentProofDocumentLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Payment Proof Document',
|
||||
'message' => 'You have successfully submitted your payment proof document'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
/** @var CreateInvoiceTransactionProcessor */
|
||||
private $createInvoiceTransactionProcessor;
|
||||
|
||||
/**
|
||||
* CreatePaymentVerificationDocumentLogic constructor.
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
*/
|
||||
public function __construct(FetchesTransaction $fetchesTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor)
|
||||
{
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
$this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$transaction = $this->fetchesTransaction->execute(['id' => $request->route('id')]);
|
||||
|
||||
$object = new DocumentObject(DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF, $request->input('files'), '', ApprovalStatus::APPROVED, 'china_bank_slip');
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($transaction, $object);
|
||||
|
||||
$this->createsFile->execute($document, $object);
|
||||
|
||||
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::COMPLETED);
|
||||
|
||||
$this->createInvoiceTransactionProcessor->execute($transaction->booking);
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
}
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Bookings\Services\FetchesBooking;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\Services\DeletesTransactionDetails;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Transaction;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreatePurchaseOrderTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
/**
|
||||
* CreatePurchaseOrderTransactionLogic constructor.
|
||||
* @param FetchesBooking $fetchesBooking
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param CreatesTransactionDetail $createsTransactionDetail
|
||||
* @param UpdatesTransaction $updatesTransaction
|
||||
* @param DeletesTransactionDetails $deletesTransactionDetails
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
|
||||
*/
|
||||
public function __construct(FetchesBooking $fetchesBooking, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesTransactionDetail $createsTransactionDetail, UpdatesTransaction $updatesTransaction, DeletesTransactionDetails $deletesTransactionDetails, GeneratesTransactionBillNumber $generatesTransactionBillNumber)
|
||||
{
|
||||
$this->fetchesBooking = $fetchesBooking;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
$this->createsTransaction = $createsTransaction;
|
||||
$this->createsTransactionDetail = $createsTransactionDetail;
|
||||
$this->updatesTransaction = $updatesTransaction;
|
||||
$this->deletesTransactionDetails = $deletesTransactionDetails;
|
||||
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Update Purchase Order',
|
||||
'message' => 'You have successfully updated you booking\'s purchase order'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesBooking */
|
||||
private $fetchesBooking;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
/** @var CreatesTransaction */
|
||||
private $createsTransaction;
|
||||
|
||||
/** @var CreatesTransactionDetail */
|
||||
private $createsTransactionDetail;
|
||||
|
||||
/** @var UpdatesTransaction */
|
||||
private $updatesTransaction;
|
||||
|
||||
/** @var DeletesTransactionDetails */
|
||||
private $deletesTransactionDetails;
|
||||
|
||||
/** @var GeneratesTransactionBillNumber */
|
||||
private $generatesTransactionBillNumber;
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
/** @var Booking $booking */
|
||||
$booking = $this->fetchesBooking->execute(['id' => $request->route('id')]);
|
||||
|
||||
/** @var Transaction $transaction */
|
||||
$transaction = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first();
|
||||
|
||||
$billNumber = $this->generatesTransactionBillNumber->execute('PO-');
|
||||
|
||||
$total = collect($request->input('products'))->sum(function($product){
|
||||
return $product['quantity'] * floatval(str_replace(',', '', $product['unit_price']));
|
||||
});
|
||||
|
||||
$object = new TransactionObject($billNumber, TransactionType::PURCHASE_ORDER, $booking->company->id, 1,
|
||||
1, PaymentMethodType::CASH,
|
||||
$total, $total, $booking->fix_currency_id, $booking->fix_currency_id,
|
||||
1, 0, 0, null, ApprovalStatus::PENDING_SUBMISSION, $request->input('products'));
|
||||
|
||||
!$transaction ? $transaction = $this->createsTransaction->execute($booking, $object) : $transaction = $this->updatesTransaction->execute($transaction, $object);
|
||||
|
||||
$this->updatesTransactionStatus->execute($transaction, (float)number_format((float)$total , 2, '.', '') === (float)number_format((float)$booking->fix_amount, 2, '.', '') ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::PENDING_SUBMISSION);
|
||||
|
||||
$this->deletesTransactionDetails->execute($transaction);
|
||||
|
||||
foreach ($object->getDetails() as $product){
|
||||
$this->createsTransactionDetail->execute($transaction, $product);
|
||||
}
|
||||
|
||||
return $this->resourceResponse(new TransactionResource($transaction));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Models\Document;
|
||||
use App\Models\Transaction;
|
||||
use Barryvdh\DomPDF\PDF;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
|
||||
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
|
||||
|
||||
class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Create Supplier Transactions',
|
||||
'message' => 'You have successfully created currency supplier transactions'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesCompany */
|
||||
private $fetchesCompany;
|
||||
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
/** @var CreatesTransaction */
|
||||
private $createsTransaction;
|
||||
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var GeneratesTransactionBillNumber */
|
||||
private $generatesTransactionBillNumber;
|
||||
|
||||
/** @var PDF */
|
||||
private $pdf;
|
||||
|
||||
/**
|
||||
* CreateSupplierTransactionLogic constructor.
|
||||
* @param FetchesCompany $fetchesCompany
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
|
||||
* @param PDF $pdf
|
||||
*/
|
||||
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, PDF $pdf)
|
||||
{
|
||||
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
$this->createsTransaction = $createsTransaction;
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
|
||||
$this->pdf = $pdf;
|
||||
}
|
||||
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$supplier = $this->fetchesCompany->execute(['id' => $request->route('id')]);
|
||||
|
||||
$rate = $request->input('rate');
|
||||
|
||||
$transactions = collect();
|
||||
|
||||
foreach($request->input('payments') as $payment){
|
||||
|
||||
/** @var Transaction $payment */
|
||||
$payment = $this->fetchesTransaction->execute(['id' => $payment['id']]);
|
||||
$this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED);
|
||||
$billNumber = $this->generatesTransactionBillNumber->execute('SPLR-');
|
||||
$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);
|
||||
|
||||
$transactions[] = $this->createsTransaction->execute($payment->booking, $object);
|
||||
}
|
||||
|
||||
$pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'supplier' => $supplier]);
|
||||
|
||||
$path = Str::studly($supplier->name).'_'.Carbon::now()->format('Y_m_d_h_s_i').'.pdf';
|
||||
|
||||
$object = new DocumentObject(
|
||||
DocumentType::CURRENCY_VENDOR_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))],
|
||||
'',
|
||||
ApprovalStatus::COMPLETED,
|
||||
'currency_vendor_order'
|
||||
);
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($supplier, $object);
|
||||
$this->createsFile->execute($document, $object);
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
|
||||
use App\Classes\Modules\Transactions\Standards\Rules\CanCreateTransaction;
|
||||
use App\Classes\Modules\Transactions\Standards\Rules\CanCreateTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use App\Http\Resources\TransactionDetailResource;
|
||||
|
||||
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
|
||||
use App\Classes\Modules\Currencies\Services\RateCalculatesCurrency;
|
||||
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Transaction',
|
||||
'message' => 'You have successfully created a transaction'
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/** @var GeneratesTransactionBillNumber */
|
||||
private $generatesTransactionBillNo;
|
||||
|
||||
/** @var CanCreateTransaction */
|
||||
private $canCreateTransaction;
|
||||
|
||||
private $fetchesCurrency;
|
||||
|
||||
private $rateCalculatesCurrency;
|
||||
|
||||
private $fetchesCompany;
|
||||
|
||||
private $createsTransaction;
|
||||
|
||||
private $canCreateTransactionDetail;
|
||||
|
||||
private $createsTransactionDetail;
|
||||
|
||||
/**
|
||||
* CreateWalletLogic constructor.
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNo
|
||||
* @param CanCreateTransaction $canCreateTransaction
|
||||
* @param FetchesCurrency $fetchesCurrency
|
||||
* @param RateCalculatesCurrency $rateCalculatesCurrency
|
||||
* @param FetchesCompany $fetchesCompany
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param CanCreateTransactionDetail $canCreateTransactionDetail
|
||||
* @param CreatesTransactionDetail $createsTransactionDetail
|
||||
*/
|
||||
public function __construct(
|
||||
GeneratesTransactionBillNumber $generatesTransactionBillNo, CanCreateTransaction $canCreateTransaction,
|
||||
FetchesCurrency $fetchesCurrency, RateCalculatesCurrency $rateCalculatesCurrency, FetchesCompany $fetchesCompany,
|
||||
CreatesTransaction $createsTransaction,
|
||||
CanCreateTransactionDetail $canCreateTransactionDetail, CreatesTransactionDetail $createsTransactionDetail
|
||||
){
|
||||
$this->generatesTransactionBillNo = $generatesTransactionBillNo;
|
||||
$this->canCreateTransaction = $canCreateTransaction;
|
||||
$this->fetchesCurrency = $fetchesCurrency;
|
||||
$this->rateCalculatesCurrency = $rateCalculatesCurrency;
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
$this->createsTransaction =$createsTransaction;
|
||||
$this->canCreateTransactionDetail =$canCreateTransactionDetail;
|
||||
$this->createsTransactionDetail = $createsTransactionDetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
DB::beginTransaction();
|
||||
$json_array = json_decode($request->getContent(), true);
|
||||
$company = $this->fetchesCompany->execute(['id' => $json_array['company_id']]);
|
||||
|
||||
$conversion_currency = $this->fetchesCurrency->execute(['id' => $json_array['currency_id']]);
|
||||
$convertable_currency = $this->fetchesCurrency->execute(['id' => 1]);//MYR
|
||||
$convert_amount = $this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $json_array['amount']);
|
||||
$convert_rate = $this->rateCalculatesCurrency->execute_rate($conversion_currency, $convertable_currency);
|
||||
/*
|
||||
int $bill_no,string $trans_type1,string $trans_type2,
|
||||
float $amount, int $currency_id, int $original_amount,
|
||||
int $original_currency_id, float $currency_rate,
|
||||
string $dt_transaction,int $status,int $booking_id,
|
||||
int $company_id
|
||||
*/
|
||||
$object = new TransactionObject(
|
||||
$this->generatesTransactionBillNo->execute(),$json_array['trans_type1'],$json_array['trans_type2'],
|
||||
number_format( (float) $convert_amount, 5, '.', ''), 1 , number_format( (float) $json_array['amount'], 5, '.', ''),
|
||||
$json_array['currency_id'],number_format( (float) $convert_rate, 5, '.', ''),
|
||||
$json_array['dt_transaction'],1,$request->route('id'),
|
||||
$company->id
|
||||
);
|
||||
|
||||
$this->canCreateTransaction->passes($object);
|
||||
|
||||
$transaction = $this->createsTransaction->execute($object);
|
||||
|
||||
$transaction_array = new TransactionResource($transaction);
|
||||
$transaction_detail_array = array();
|
||||
foreach ($json_array['transaction_detail'] as $key => $value) {
|
||||
|
||||
$object_detail = new TransactionDetailObject(
|
||||
$json_array['trans_type1'],$json_array['trans_type2'],
|
||||
$transaction->id,$value['product_code'],$value['product_name'],
|
||||
(int)$value['qty'],number_format( (float) $convert_amount, 5, '.', ''), number_format( (float) $json_array['amount'], 5, '.', '')
|
||||
);
|
||||
$this->canCreateTransactionDetail->passes($object_detail);
|
||||
$transaction_detail = $this->createsTransactionDetail->execute($object_detail);
|
||||
//array_push($stack, "apple", "raspberry");
|
||||
$transaction_detail_resource= new TransactionDetailResource($transaction_detail);
|
||||
$transaction_detail_array[]= $transaction_detail_resource->toArray($request);
|
||||
|
||||
}
|
||||
|
||||
//$transaction_array['transaction_detail']= $transaction_detail_array;
|
||||
//print_r($transaction_detail_array);
|
||||
//dd($transaction_detail_array);
|
||||
DB::commit();
|
||||
|
||||
return $this->resourceResponse($transaction_array);
|
||||
//return $this->resourceResponse($json_array);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Transactions\Services\ListsTransactions;
|
||||
use App\Http\Resources\BookingResource;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListTransactionsLogic extends AbstractControllerLogic
|
||||
{
|
||||
/**
|
||||
* ListTransactionsLogic constructor.
|
||||
* @param ListsTransactions $listsTransactions
|
||||
*/
|
||||
public function __construct(ListsTransactions $listsTransactions)
|
||||
{
|
||||
$this->listsTransactions = $listsTransactions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Retrieved Transactions',
|
||||
'message' => 'You have successfully retrieved a list of transactions'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var ListsTransactions */
|
||||
private $listsTransactions;
|
||||
|
||||
|
||||
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$query = $this->listsTransactions->execute($this->listsTransactions->deserializeFilters($request->input('filters')));
|
||||
|
||||
return $this->collectionResponse(TransactionResource::collection($query));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\ListsTransactions;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Http\Resources\BookingResource;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SuspendTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Suspend Transaction',
|
||||
'message' => 'You have successfully suspended the payment booking'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
|
||||
/**
|
||||
* SuspendTransactionLogic constructor.
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
*/
|
||||
public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus)
|
||||
{
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
}
|
||||
|
||||
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$transaction = $this->fetchesTransaction->execute(['id' => $request->route('id')]);
|
||||
|
||||
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::SUSPENDED);
|
||||
|
||||
return $this->response([]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
|
||||
class TransactionDetailObject implements DataTransferObject
|
||||
{
|
||||
/** @var string|null */
|
||||
private $code;
|
||||
|
||||
/** @var string|null */
|
||||
private $name;
|
||||
|
||||
/** @var int|null */
|
||||
private $quantity;
|
||||
|
||||
/** @var float|null */
|
||||
private $price;
|
||||
|
||||
/**
|
||||
* TransactionDetailObject constructor.
|
||||
* @param string $code
|
||||
* @param string $name
|
||||
* @param int $quantity
|
||||
* @param float $price
|
||||
*/
|
||||
public function __construct(?string $code, ?string $name , ?int $quantity, ?float $price)
|
||||
{
|
||||
$this->code = $code;
|
||||
$this->name = $name;
|
||||
$this->quantity = $quantity;
|
||||
$this->price = $price;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCode(): ?string
|
||||
{
|
||||
return $this->code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getQuantity(): ?int
|
||||
{
|
||||
return $this->quantity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getPrice(): ?float
|
||||
{
|
||||
return $this->price;
|
||||
}
|
||||
|
||||
public function getAmount(): float
|
||||
{
|
||||
return $this->getQuantity() * $this->getPrice();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class TransactionObject implements DataTransferObject
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
private $billNo;
|
||||
|
||||
/** @var string */
|
||||
private $transactionType;
|
||||
|
||||
/** @var int */
|
||||
private $issuer;
|
||||
|
||||
/** @var int */
|
||||
private $receiver;
|
||||
|
||||
/** @var int */
|
||||
private $recipientBankAccountId;
|
||||
|
||||
/** @var int */
|
||||
private $paymentMethod;
|
||||
|
||||
/** @var float */
|
||||
private $amount;
|
||||
|
||||
/** @var float */
|
||||
private $originalAmount;
|
||||
|
||||
/** @var int */
|
||||
private $currencyId;
|
||||
|
||||
/** @var int */
|
||||
private $originalCurrencyId;
|
||||
|
||||
/** @var float */
|
||||
private $currencyRate;
|
||||
|
||||
/** @var float */
|
||||
private $tax;
|
||||
|
||||
/** @var float */
|
||||
private $serviceCharge;
|
||||
|
||||
/** @var Carbon|null */
|
||||
private $expiresOn;
|
||||
|
||||
/** @var int|null */
|
||||
private $status;
|
||||
|
||||
/** @var array|null */
|
||||
private $details;
|
||||
|
||||
/**
|
||||
* TransactionObject constructor.
|
||||
* @param string $billNo
|
||||
* @param string $transactionType
|
||||
* @param int $issuer
|
||||
* @param int $receiver
|
||||
* @param int $recipientBankAccountId
|
||||
* @param int $paymentMethod
|
||||
* @param float $amount
|
||||
* @param float $originalAmount
|
||||
* @param int $currencyId
|
||||
* @param int $originalCurrencyId
|
||||
* @param float $currencyRate
|
||||
* @param float $tax
|
||||
* @param float $serviceCharge
|
||||
* @param Carbon|null $expiresOn
|
||||
* @param int|null $status
|
||||
* @param array|null $details
|
||||
*/
|
||||
public function __construct(string $billNo, string $transactionType, int $issuer, int $receiver, int $recipientBankAccountId, int $paymentMethod, float $amount, float $originalAmount, int $currencyId, int $originalCurrencyId, float $currencyRate, float $tax, float $serviceCharge, ?Carbon $expiresOn, ?int $status = ApprovalStatus::PENDING_SUBMISSION, ?array $details = [])
|
||||
{
|
||||
$this->billNo = $billNo;
|
||||
$this->transactionType = $transactionType;
|
||||
$this->issuer = $issuer;
|
||||
$this->receiver = $receiver;
|
||||
$this->recipientBankAccountId = $recipientBankAccountId;
|
||||
$this->paymentMethod = $paymentMethod;
|
||||
$this->amount = $amount;
|
||||
$this->originalAmount = $originalAmount;
|
||||
$this->currencyId = $currencyId;
|
||||
$this->originalCurrencyId = $originalCurrencyId;
|
||||
$this->currencyRate = $currencyRate;
|
||||
$this->tax = $tax;
|
||||
$this->serviceCharge = $serviceCharge;
|
||||
$this->expiresOn = $expiresOn;
|
||||
$this->status = $status;
|
||||
$this->details = $details;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBillNo(): string
|
||||
{
|
||||
return $this->billNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTransactionType(): string
|
||||
{
|
||||
return $this->transactionType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getIssuer(): int
|
||||
{
|
||||
return $this->issuer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getReceiver(): int
|
||||
{
|
||||
return $this->receiver;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getRecipientBankAccountId(): int
|
||||
{
|
||||
return $this->recipientBankAccountId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getPaymentMethod(): int
|
||||
{
|
||||
return $this->paymentMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getAmount(): float
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getOriginalAmount(): float
|
||||
{
|
||||
return $this->originalAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCurrencyId(): int
|
||||
{
|
||||
return $this->currencyId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getOriginalCurrencyId(): int
|
||||
{
|
||||
return $this->originalCurrencyId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getCurrencyRate(): float
|
||||
{
|
||||
return $this->currencyRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getTax(): float
|
||||
{
|
||||
return $this->tax;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getServiceCharge(): float
|
||||
{
|
||||
return $this->serviceCharge;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Carbon|null
|
||||
*/
|
||||
public function getExpiresOn(): ?Carbon
|
||||
{
|
||||
return $this->expiresOn;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getStatus(): int
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getDetails(): array
|
||||
{
|
||||
return array_map(function($product){
|
||||
return new TransactionDetailObject($product['stockCode'] ?? '', $product['description'] ?? '', $product['quantity'] ?? '', floatval(str_replace(',', '', $product['unit_price'])));
|
||||
}, $this->details);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Processors;
|
||||
|
||||
use App\Classes\Modules\Bookings\Services\CalculatesBookingTransferredAmount;
|
||||
use App\Classes\Modules\ServiceTypes\Services\FetchesServiceConfigurations;
|
||||
use App\Classes\Modules\Transactions\Services\ListsTransactions;
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Classes\Modules\Bookings\Services\CalculatesBookingPaidAmount;
|
||||
use App\Classes\Modules\Bookings\Services\CalculatesBookingCurrencyAverageRate;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\Modules\Bookings\Services\UpdatesBookingStatus;
|
||||
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\SegmentConstants;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Document;
|
||||
use App\Models\SegmentConstant;
|
||||
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
|
||||
|
||||
class CreateInvoiceTransactionProcessor
|
||||
{
|
||||
/** @var ListsTransactions */
|
||||
private $listsTransactions;
|
||||
|
||||
/** @var CreatesTransaction */
|
||||
private $createsTransaction;
|
||||
|
||||
/** @var GeneratesTransactionBillNumber */
|
||||
private $generatesTransactionBillNumber;
|
||||
|
||||
/** @var CalculatesBookingPaidAmount */
|
||||
private $calculatesBookingPaidAmount;
|
||||
|
||||
/** @var CalculatesBookingTransferredAmount */
|
||||
private $calculatesBookingTransferredAmount;
|
||||
|
||||
/** @var FetchesServiceConfigurations */
|
||||
private $fetchesServiceConfigurations;
|
||||
|
||||
/** @var CalculatesBookingCurrencyAverageRate */
|
||||
private $calculatesBookingCurrencyAverageRate;
|
||||
|
||||
/** @var FetchesCompany */
|
||||
private $fetchesCompany;
|
||||
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var UpdatesBookingStatus */
|
||||
private $updatesBookingStatus;
|
||||
|
||||
/**
|
||||
* CreateInvoiceTransactionProcessor constructor.
|
||||
* @param ListsTransactions $listsTransactions
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
|
||||
* @param CalculatesBookingPaidAmount $calculatesBookingPaidAmount
|
||||
* @param CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount
|
||||
* @param FetchesServiceConfigurations $fetchesServiceConfigurations
|
||||
* @param CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate
|
||||
* @param FetchesCompany $fetchesCompany
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param UpdatesBookingStatus $updatesBookingStatus
|
||||
*/
|
||||
public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus)
|
||||
{
|
||||
$this->listsTransactions = $listsTransactions;
|
||||
$this->createsTransaction = $createsTransaction;
|
||||
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
|
||||
$this->calculatesBookingPaidAmount = $calculatesBookingPaidAmount;
|
||||
$this->calculatesBookingTransferredAmount = $calculatesBookingTransferredAmount;
|
||||
$this->fetchesServiceConfigurations = $fetchesServiceConfigurations;
|
||||
$this->calculatesBookingCurrencyAverageRate = $calculatesBookingCurrencyAverageRate;
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->updatesBookingStatus = $updatesBookingStatus;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Booking $booking
|
||||
* @return void
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Booking $booking)
|
||||
{
|
||||
$payment_amount = $this->calculatesBookingTransferredAmount->execute($booking, $booking->fix_currency_id);
|
||||
$booking_amount = $booking->fix_amount;
|
||||
|
||||
if ((float) $booking_amount !== (float) $payment_amount) {
|
||||
return;
|
||||
}
|
||||
|
||||
$po_order_transaction = $booking->transactions()
|
||||
->where('type', TransactionType::PURCHASE_ORDER)
|
||||
->complete()
|
||||
->first();
|
||||
|
||||
$constants = SegmentConstant::where('reference', SegmentConstants::SERVICE_TYPE)->where('detail->id', $booking->service->id)->first();
|
||||
|
||||
if($constants->detail->is_billable && !$po_order_transaction) {
|
||||
return;
|
||||
}
|
||||
|
||||
$transaction = $booking->transactions()
|
||||
->where('type', TransactionType::PAYMENT)
|
||||
->first();
|
||||
|
||||
$billNumber = $this->generatesTransactionBillNumber->execute('INV-');
|
||||
|
||||
$booking_currency_average_rate = $this->calculatesBookingCurrencyAverageRate->execute($booking, TransactionType::PAYMENT);
|
||||
|
||||
$total_service_charge = $booking->transactions()
|
||||
->where('type', TransactionType::PAYMENT)
|
||||
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])
|
||||
->sum('service_charge');
|
||||
|
||||
$total_tax = $booking->transactions()
|
||||
->where('type', TransactionType::PAYMENT)
|
||||
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])
|
||||
->sum('tax');
|
||||
|
||||
$transaction_object = new TransactionObject(
|
||||
$billNumber,
|
||||
TransactionType::INVOICE,
|
||||
$transaction->issuer,
|
||||
$transaction->receiver,
|
||||
$transaction->recipient_bank_account_id,
|
||||
$transaction->payment_method,
|
||||
$payment_amount,
|
||||
$booking_amount,
|
||||
$transaction->currency_id,
|
||||
$transaction->original_currency_id,
|
||||
$booking_currency_average_rate,
|
||||
$total_tax,
|
||||
$total_service_charge,
|
||||
null,
|
||||
ApprovalStatus::APPROVED
|
||||
);
|
||||
$invoice_transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object);
|
||||
|
||||
$supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]);
|
||||
|
||||
$purchase_order_pdf = LaravelMpdf::loadView('pages.pdfs.purchase_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::PURCHASE_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($purchase_order_pdf->output()))],
|
||||
'',
|
||||
ApprovalStatus::COMPLETED,
|
||||
'purchase_orders'
|
||||
);
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$deliver_order_pdf = LaravelMpdf::loadView('pages.pdfs.deliver_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::DELIVER_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($deliver_order_pdf->output()))],
|
||||
'',
|
||||
ApprovalStatus::COMPLETED,
|
||||
'delivery_orders'
|
||||
);
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
|
||||
$invoice_pdf = LaravelMpdf::loadView('pages.pdfs.invoice', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::INVOICE,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($invoice_pdf->output()))],
|
||||
'',
|
||||
ApprovalStatus::COMPLETED,
|
||||
'invoices'
|
||||
);
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$billNumber = $this->generatesTransactionBillNumber->execute('SPDO-');
|
||||
|
||||
$booking_currency_average_rate = $this->calculatesBookingCurrencyAverageRate->execute($booking, TransactionType::BILL);
|
||||
|
||||
$transaction_object = new TransactionObject(
|
||||
$billNumber,
|
||||
TransactionType::SUPPLIER_DELIVER,
|
||||
$transaction->issuer,
|
||||
$transaction->receiver,
|
||||
$transaction->recipient_bank_account_id,
|
||||
$transaction->payment_method,
|
||||
$payment_amount,
|
||||
$booking_amount,
|
||||
$transaction->currency_id,
|
||||
$transaction->original_currency_id,
|
||||
$booking_currency_average_rate,
|
||||
$total_tax,
|
||||
$total_service_charge,
|
||||
null,
|
||||
ApprovalStatus::APPROVED
|
||||
);
|
||||
$supplier_deliver_order_transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object);
|
||||
|
||||
$supplier_order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['supplier_deliver_order_transaction' => $supplier_deliver_order_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::SUPPLIER_DELIVER_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))],
|
||||
'',
|
||||
ApprovalStatus::COMPLETED,
|
||||
'supplier_delivery_orders'
|
||||
);
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$this->updatesBookingStatus->execute($booking, ApprovalStatus::COMPLETED);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
|
||||
use App\Models\Transaction;
|
||||
|
||||
class ChecksIfTransactionBillNumberExists
|
||||
{
|
||||
|
||||
private $repository;
|
||||
|
||||
public function __construct(Transaction $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function execute(string $bill_no): bool {
|
||||
return $this->repository->where('bill_no', $bill_no)->exists();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Transaction;
|
||||
|
||||
class CreatesTransaction extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
/**
|
||||
* @param TransactionObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Booking $booking, TransactionObject $object) {
|
||||
$model = new Transaction();
|
||||
$model->bill_no = $object->getBillNo();
|
||||
$model->type = $object->getTransactionType();
|
||||
$model->issuer = $object->getIssuer();
|
||||
$model->receiver = $object->getReceiver();
|
||||
$model->recipient_bank_account_id = $object->getRecipientBankAccountId();
|
||||
$model->payment_method = $object->getPaymentMethod();
|
||||
$model->amount = $object->getAmount();
|
||||
$model->original_amount = $object->getOriginalAmount();
|
||||
$model->currency_id = $object->getCurrencyId();
|
||||
$model->original_currency_id = $object->getOriginalCurrencyId();
|
||||
$model->currency_rate = $object->getCurrencyRate();
|
||||
$model->tax = $object->getTax();
|
||||
$model->service_charge = $object->getServiceCharge();
|
||||
$model->expires_on = $object->getExpiresOn();
|
||||
$model->status = $object->getStatus();
|
||||
|
||||
|
||||
return $this->handler($booking->transactions(), $model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
|
||||
use App\Models\Transaction;
|
||||
use App\Models\TransactionDetail;
|
||||
|
||||
class CreatesTransactionDetail extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
/**
|
||||
* @param Transaction $transaction
|
||||
* @param TransactionDetailObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Transaction $transaction, TransactionDetailObject $object) {
|
||||
$model = new TransactionDetail();
|
||||
$model->product_code = $object->getCode();
|
||||
$model->product_name = $object->getName();
|
||||
$model->quantity = $object->getQuantity();
|
||||
$model->price = $object->getPrice();
|
||||
$model->amount = $object->getAmount();
|
||||
|
||||
return $this->handler($transaction->transactionDetails(), $model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractDeleteRecord;
|
||||
use App\Models\Transaction;
|
||||
|
||||
class DeletesTransactionDetails extends AbstractDeleteRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Transaction $model
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(Transaction $model) {
|
||||
return $model->transactionDetails()->delete();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\Transaction;
|
||||
|
||||
class FetchesTransaction extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var Transaction */
|
||||
private $repository;
|
||||
|
||||
|
||||
/**
|
||||
* FetchesTransaction constructor.
|
||||
* @param Transaction $repository
|
||||
*/
|
||||
public function __construct(Transaction $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\TransactionDetail;
|
||||
|
||||
class FetchesTransactionDetail extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var TransactionDetail */
|
||||
private $repository;
|
||||
|
||||
|
||||
/**
|
||||
* FetchesTransaction constructor.
|
||||
* @param TransactionDetail $repository
|
||||
*/
|
||||
public function __construct(TransactionDetail $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
class GeneratesTransactionBillNumber
|
||||
{
|
||||
|
||||
/** @var ChecksIfTransactionBillNumberExists */
|
||||
private $checksIfTransactionBillNumberExists;
|
||||
|
||||
/**
|
||||
* GeneratesTransactionBillNo constructor.
|
||||
* @param ChecksIfTransactionBillNumberExists $checksIfTransactionBillNumberExists
|
||||
*/
|
||||
public function __construct(ChecksIfTransactionBillNumberExists $checksIfTransactionBillNumberExists)
|
||||
{
|
||||
$this->checksIfTransactionBillNumberExists = $checksIfTransactionBillNumberExists;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $prefix
|
||||
* @return string
|
||||
*/
|
||||
public function execute(string $prefix): string {
|
||||
$date = carbon::now();
|
||||
|
||||
$billNumber = $prefix.$date->format('Y').$date->format('m').'-'.mt_rand(10000, 99999);
|
||||
|
||||
return !$this->checksIfTransactionBillNumberExists->execute($billNumber) ? $billNumber : self::execute($prefix);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Models\Transaction;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Classes\General\Eloquent\AbstractListRecord;
|
||||
|
||||
class ListsTransactions extends AbstractListRecord
|
||||
{
|
||||
/** @var Transaction */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* ListsBookings constructor.
|
||||
* @param Transaction $repository
|
||||
*/
|
||||
public function __construct(Transaction $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Transaction;
|
||||
|
||||
class UpdatesTransaction extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param Transaction $transaction
|
||||
* @param TransactionObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Transaction $transaction, TransactionObject $object) {
|
||||
$transaction->recipient_bank_account_id = $object->getRecipientBankAccountId();
|
||||
$transaction->payment_method = $object->getPaymentMethod();
|
||||
$transaction->amount = $object->getAmount();
|
||||
$transaction->original_amount = $object->getOriginalAmount();
|
||||
$transaction->currency_id = $object->getCurrencyId();
|
||||
$transaction->original_currency_id = $object->getOriginalCurrencyId();
|
||||
$transaction->currency_rate = $object->getCurrencyRate();
|
||||
$transaction->tax = $object->getTax();
|
||||
$transaction->service_charge = $object->getServiceCharge();
|
||||
|
||||
return $this->handler($transaction);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\Transaction;
|
||||
|
||||
class UpdatesTransactionStatus extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Transaction $model
|
||||
* @param int $status
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Transaction $model, int $status)
|
||||
{
|
||||
$model->status = $status;
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Standards\Rules;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\Standards\Validators\TransactionValidation;
|
||||
|
||||
class CanCreateTransaction extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var TransactionValidation */
|
||||
private $transactionValidation;
|
||||
|
||||
|
||||
public function __construct(TransactionValidation $transactionValidation)
|
||||
{
|
||||
$this->transactionValidation = $transactionValidation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->transactionValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Standards\Rules;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
|
||||
use App\Classes\Modules\Transactions\Standards\Validators\TransactionDetailValidation;
|
||||
|
||||
class CanCreateTransactionDetail extends AbstractRule
|
||||
{
|
||||
|
||||
/** @var TransactionDetailValidation */
|
||||
private $transactionDetailValidation;
|
||||
|
||||
|
||||
public function __construct(TransactionDetailValidation $transactionDetailValidation)
|
||||
{
|
||||
$this->transactionDetailValidation = $transactionDetailValidation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionDetailObject $object
|
||||
* @return bool
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->transactionDetailValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionDetailObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
|
||||
class TransactionDetailValidation extends AbstractValidation
|
||||
{
|
||||
/*
|
||||
*
|
||||
* $this->bill_no = $bill_no;
|
||||
$this->trans_type1= $trans_type1;
|
||||
$this->trans_type2 = $trans_type2;
|
||||
$this->amount= $amount;
|
||||
$this->currency_id = $currency_id;
|
||||
$this->original_amount = $original_amount;
|
||||
$this->original_currency_id = $original_currency_id;
|
||||
$this->currency_rate = $currency_rate;
|
||||
$this->dt_transaction = $dt_transaction;
|
||||
$this->status = $status;
|
||||
$this->booking_id = $booking_id;
|
||||
$this->company_id = $company_id;
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'trans_type1' => $object->getTransType1(),
|
||||
'trans_type2' => $object->getTransType2(),
|
||||
'transaction_id' => $object->getTransactionId(),
|
||||
'product_code' => $object->getProductCode(),
|
||||
'product_name'=>$object->getProductName(),
|
||||
'qty'=>$object->getQty(),
|
||||
'price'=>$object->getPrice(),
|
||||
'amount' => $object->getAmount()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(): array
|
||||
{
|
||||
return [
|
||||
'trans_type1' => 'required',
|
||||
'trans_type2' => 'required',
|
||||
'transaction_id' => 'required',
|
||||
'product_code' => 'required',
|
||||
'product_name'=>'required',
|
||||
'qty'=>'required',
|
||||
'price'=>'required',
|
||||
'amount' => 'required'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
|
||||
class TransactionValidation extends AbstractValidation
|
||||
{
|
||||
/*
|
||||
*
|
||||
* $this->bill_no = $bill_no;
|
||||
$this->trans_type1= $trans_type1;
|
||||
$this->trans_type2 = $trans_type2;
|
||||
$this->amount= $amount;
|
||||
$this->currency_id = $currency_id;
|
||||
$this->original_amount = $original_amount;
|
||||
$this->original_currency_id = $original_currency_id;
|
||||
$this->currency_rate = $currency_rate;
|
||||
$this->dt_transaction = $dt_transaction;
|
||||
$this->status = $status;
|
||||
$this->booking_id = $booking_id;
|
||||
$this->company_id = $company_id;
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'bill_no' => $object->getBillNo(),
|
||||
'trans_type1' => $object->getBillNo(),
|
||||
'trans_type2' => $object->getTransType2(),
|
||||
'amount' => $object->getAmount(),
|
||||
'currency_id' => $object->getCurrency(),
|
||||
'original_amount' => $object->getOriginalAmount(),
|
||||
'original_currency_id'=>$object->getOriginalCurrency(),
|
||||
'dt_transaction'=>$object->getDtTransaction(),
|
||||
'status'=>$object->getStatus(),
|
||||
'booking_id'=>$object->getBookingId(),
|
||||
'company_id'=>$object->getCompanyId()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(): array
|
||||
{
|
||||
return [
|
||||
'bill_no' => 'required',
|
||||
'trans_type1' => 'required',
|
||||
'trans_type2' => 'required',
|
||||
'amount' => 'required',
|
||||
'currency_id' => 'required',
|
||||
'original_amount' => 'required',
|
||||
'original_currency_id'=>'required',
|
||||
'dt_transaction'=>'required',
|
||||
'status'=>'required',
|
||||
'booking_id'=>'required',
|
||||
'company_id'=>'required'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class PaymentMethodType {
|
||||
|
||||
public const CASH = 1;
|
||||
|
||||
public const CHEQUE = 2;
|
||||
|
||||
public const BA = 3;
|
||||
|
||||
public const WALLET = 4;
|
||||
|
||||
public const PAYMENT_GATEWAY = 5;
|
||||
|
||||
public const PAYMENT_METHODS = [
|
||||
'cash' => self::CASH,
|
||||
'cheque' => self::CHEQUE,
|
||||
'ba' => self::BA,
|
||||
'wallet' => self::WALLET,
|
||||
'payment gateway' => self::PAYMENT_GATEWAY,
|
||||
];
|
||||
|
||||
public const PAYMENT_METHODS_ID = [
|
||||
self::CASH => 'cash',
|
||||
self::CHEQUE => 'cheque',
|
||||
self::BA => 'ba',
|
||||
self::WALLET => 'wallet',
|
||||
self::PAYMENT_GATEWAY => 'payment gateway'
|
||||
];
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class TransactionStatus {
|
||||
|
||||
public const PENDING_PAYMENT = 0;
|
||||
|
||||
public const PENDING_APPROVAL = 1;
|
||||
|
||||
public const APPROVED = 2;
|
||||
|
||||
public const COMPLETED = 3;
|
||||
|
||||
public const REJECTED = 4;
|
||||
|
||||
public const EXPIRED = 5;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class TransactionType {
|
||||
|
||||
public const PAYMENT_ATTEMPT = 0;
|
||||
|
||||
public const PAYMENT = 1;
|
||||
|
||||
public const INVOICE = 2;
|
||||
|
||||
public const BILL = 3;
|
||||
|
||||
public const PERFORMA = 4;
|
||||
|
||||
public const TOP_UP = 5;
|
||||
|
||||
public const REFUND = 6;
|
||||
|
||||
public const PURCHASE_ORDER = 7;
|
||||
|
||||
public const SUPPLIER_DELIVER = 8;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\CreateCurrencyLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateCurrencyController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreateCurrencyLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreateCurrencyLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\DeleteCurrencyLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class DeleteCurrencyController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param DeleteCurrencyLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function delete(Request $request, DeleteCurrencyLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\FetchSystemPrimaryCurrencyLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchSystemPrimaryCurrencyController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchSystemPrimaryCurrencyLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetch(Request $request, FetchSystemPrimaryCurrencyLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\ListCurrencyLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListCurrencyController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param ListCurrencyLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function list(Request $request, ListCurrencyLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\RateCalculateCurrencyLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class RateCalculateCurrencyController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param RateCalculateCurrencyLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function convert(Request $request, RateCalculateCurrencyLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\CalculateRateLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CalculateRateController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CalculateRateLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function calculate(Request $request, CalculateRateLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\CreateRateLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateRateController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreateRateLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreateRateLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\DeleteRateLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class DeleteRateController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param DeleteRateLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function delete(Request $request, DeleteRateLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\FetchRateLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchRateController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchRateLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetch(Request $request, FetchRateLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\ListRatesLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListRatesController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param ListRatesLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function list(Request $request, ListRatesLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Currencies\Rates;
|
||||
|
||||
use App\Classes\Modules\Currencies\ControllersLogic\Rates\UpdateRateLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdateRateController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param UpdateRateLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function update(Request $request, UpdateRateLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Receipts;
|
||||
|
||||
use App\Classes\Modules\Receipts\ControllersLogic\CreateReceiptLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateReceiptController
|
||||
{
|
||||
|
||||
public function create(Request $request, CreateReceiptLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Transactions;
|
||||
|
||||
use App\Classes\Modules\Transactions\ControllersLogic\CreateMakePaymentPOTransactionLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateMakePaymentPOTransactionController
|
||||
{
|
||||
|
||||
public function create(Request $request, CreateMakePaymentPOTransactionLogic $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\CreatePaymentProofDocumentLogic;
|
||||
|
||||
|
||||
class CreatePaymentProofDocumentController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreatePaymentProofDocumentLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function verify(Request $request, CreatePaymentProofDocumentLogic $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\CreatePurchaseOrderTransactionLogic;
|
||||
|
||||
|
||||
class CreatePurchaseOrderTransactionController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreatePurchaseOrderTransactionLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreatePurchaseOrderTransactionLogic $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\CreateSupplierTransactionLogic;
|
||||
|
||||
|
||||
class CreateSupplierTransactionController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreateSupplierTransactionLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreateSupplierTransactionLogic $logic) : JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Transactions;
|
||||
|
||||
use App\Classes\Modules\Transactions\ControllersLogic\CreateTransactionLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateTransactionController
|
||||
{
|
||||
|
||||
public function create(Request $request, CreateTransactionLogic $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\ListTransactionsLogic;
|
||||
|
||||
|
||||
class ListTransactionsController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param ListTransactionsLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function list(Request $request, ListTransactionsLogic $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\SuspendTransactionLogic;
|
||||
|
||||
|
||||
class SuspendTransactionController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param SuspendTransactionLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function suspend(Request $request, SuspendTransactionLogic $logic) : JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Models\CurrencyRate;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CurrencyConversionResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'country' => new CountryResource($this->country),
|
||||
'name' => $this->name,
|
||||
'short_code' => $this->short_code,
|
||||
'symbol' => $this->symbol,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CurrencyRateResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'payment_method' => PaymentMethodType::PAYMENT_METHODS_ID[$this->payment_method_type],
|
||||
'selling' => [
|
||||
'type' => property_exists($this->selling, 'type') ? $this->selling->type : 'rate',
|
||||
'value' => property_exists($this->selling, 'value') ? $this->selling->value : $this->selling
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Models\CurrencyRate;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CurrencyResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'country' => new CountryResource($this->country),
|
||||
'name' => $this->name,
|
||||
'short_code' => $this->short_code,
|
||||
'symbol' => $this->symbol,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\Currency;
|
||||
|
||||
class RateCalculateCurrencyResource extends JsonResource
|
||||
{
|
||||
|
||||
public function __construct(Currency $conversion_currency, Currency $convertable_currency, $convert_amount)
|
||||
{
|
||||
$this->conversion_currency = $conversion_currency;
|
||||
$this->convertable_currency = $convertable_currency;
|
||||
$this->convert_amount = $convert_amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'conversion_currency' => $this->conversion_currency->id,
|
||||
'convertable_currency' => $this->conversion_currency->id,
|
||||
'convert_amount' => $this->convert_amount,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ReceiptDetailResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'trans_type1' => $this->trans_type1,
|
||||
'trans_type2' => $this->trans_type2,
|
||||
'transaction_id' => (int) $this->transaction_id,
|
||||
'receipt_id' => (int)$this->receipt_id,
|
||||
'price' => (double) $this->price,
|
||||
'amount' => (double) $this->amount
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ReceiptResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'trans_type1' => $this->trans_type1,
|
||||
'trans_type2' => $this->trans_type2,
|
||||
'bill_no' => (int) $this->bill_no,
|
||||
'amount' => (double) $this->amount,
|
||||
'currency_id' => (int) $this->currency_id,
|
||||
'original_amount' => (double) $this->original_amount,
|
||||
'original_currency_id' => (int) $this->original_currency_id,
|
||||
'currency_rate' => (double) $this->currency_rate,
|
||||
'dt_transaction' => $this->dt_transaction,
|
||||
'status' => (int) $this->status,
|
||||
'booking_id' => (int) $this->booking_id,
|
||||
'company_id' => (int) $this->company_id
|
||||
];
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user