diff --git a/app/Classes/Modules/CompanyBanks/ControllerLogic/CreateCompanyBankLogic.php b/app/Classes/Modules/CompanyBanks/ControllerLogic/CreateCompanyBankLogic.php new file mode 100644 index 00000000..1bdc43f7 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/ControllerLogic/CreateCompanyBankLogic.php @@ -0,0 +1,80 @@ + 'Created Company Bank', + 'message' => 'You have successfully created a new Company Bank' + ]; + } + + /** @var CanCreateCompanyBank */ + private $canCreateCompanyBank; + + /** @var CreatesCompanyBank */ + private $createsCompanyBank; + + /** + * CreateSegmentLogic constructor. + * @param CanCreateCompanyBank $canCreateCompanyBank + * @param CreatesCompanyBank $createsCompanyBank + */ + public function __construct( + CanCreateCompanyBank $canCreateCompanyBank, + CreatesCompanyBank $createsCompanyBank + ) + { + $this->canCreateCompanyBank = $canCreateCompanyBank; + $this->createsCompanyBank = $createsCompanyBank; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $company_bank_object = new CompanyBankObject( + $request->input('country_id'), + $request->input('company_id'), + $request->input('bank_name'), + $request->input('holder_name'), + $request->input('account_no'), + $request->input('type'), + $request->input('default') + ); + $this->canCreateCompanyBank->passes($company_bank_object); + $company_bank_query = $this->createsCompanyBank->execute($company_bank_object); + + DB::commit(); + + return $this->resourceResponse(new CompanyBankResource($company_bank_query)); + + } catch (\Exception $exception) { + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/ControllerLogic/DeleteCompanyBankLogic.php b/app/Classes/Modules/CompanyBanks/ControllerLogic/DeleteCompanyBankLogic.php new file mode 100644 index 00000000..c8066cec --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/ControllerLogic/DeleteCompanyBankLogic.php @@ -0,0 +1,82 @@ + 'Delete Company Bank', + 'message' => 'You have successfully deleted the Company Bank' + ]; + } + + /** @var CanDeleteCompanyBank */ + private $canDeleteCompanyBank; + + /** @var DeletesCompanyBank */ + private $deletesCompanyBank; + + /** @var FetchesCompanyBank */ + private $fetchesCompanyBank; + + /** + * UpdateStandardSegmentConstantLogic constructor. + * @param CanUpdateSegment $canDeleteCompanyBank + * @param UpdatesSegment $deletesSegment + * @param FetchesCompanyBank $fetchesCompanyBank + */ + public function __construct( + CanDeleteCompanyBank $canDeleteCompanyBank, + DeletesCompanyBank $deletesCompanyBank, + FetchesCompanyBank $fetchesCompanyBank + ) + { + $this->canDeleteCompanyBank = $canDeleteCompanyBank; + $this->deletesCompanyBank = $deletesCompanyBank; + $this->fetchesCompanyBank = $fetchesCompanyBank; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $segment_query = $this->fetchesCompanyBank->execute(['id' => $request->route('id')]); + $this->canDeleteCompanyBank->passes(); + $this->deletesCompanyBank->execute($segment_query); + + DB::commit(); + + return $this->resourceResponse(new CompanyBankResource($segment_query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/ControllerLogic/UpdateCompanyBankLogic.php b/app/Classes/Modules/CompanyBanks/ControllerLogic/UpdateCompanyBankLogic.php new file mode 100644 index 00000000..dabedaa8 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/ControllerLogic/UpdateCompanyBankLogic.php @@ -0,0 +1,92 @@ + 'Updated Company Bank', + 'message' => 'You have successfully updated the Company Bank' + ]; + } + + /** @var CanUpdateCompanyBank */ + private $canUpdateCompanyBank; + + /** @var UpdatesCompanyBank */ + private $updatesCompanyBank; + + /** @var FetchesCompanyBank */ + private $fetchesSegment; + + /** + * UpdateStandardSegmentConstantLogic constructor. + * @param CanUpdateCompanyBank $canUpdateCompanyBank + * @param UpdatesCompanyBank $updatesCompanyBank + * @param FetchesCompanyBank $fetchesSegment + */ + public function __construct( + CanUpdateCompanyBank $canUpdateCompanyBank, + UpdatesCompanyBank $updatesCompanyBank, + FetchesCompanyBank $fetchesSegment + ) + { + $this->canUpdateCompanyBank = $canUpdateCompanyBank; + $this->updatesCompanyBank = $updatesCompanyBank; + $this->fetchesSegment = $fetchesSegment; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $company_bank_query = $this->fetchesSegment->execute(['id' => $request->route('id')]); + + $company_bank_object = new CompanyBankObject( + $company_bank_query->country_id, + $company_bank_query->company_id, + $request->input('bank_name'), + $request->input('holder_name'), + $request->input('account_no'), + $company_bank_query->type, + $company_bank_query->default + ); + $this->canUpdateCompanyBank->passes($company_bank_object); + $company_bank_query = $this->updatesCompanyBank->execute($company_bank_query, $company_bank_object); + + DB::commit(); + + return $this->resourceResponse(new CompanyBankResource($company_bank_query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/DataTransferObjects/CompanyBankObject.php b/app/Classes/Modules/CompanyBanks/DataTransferObjects/CompanyBankObject.php new file mode 100644 index 00000000..38e441bd --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/DataTransferObjects/CompanyBankObject.php @@ -0,0 +1,102 @@ +country_id = $country_id; + $this->company_id = $company_id; + $this->bank_name = $bank_name; + $this->holder_name = $holder_name; + $this->account_no = $account_no; + $this->type = $type; + $this->default = $default; + } + + /** + * @return int + */ + public function getCountryId(): ?int + { + return $this->country_id; + } + + /** + * @return int + */ + public function getCompanyId(): ?int + { + return $this->company_id; + } + + /** + * @return string + */ + public function getBankName(): ?string + { + return $this->bank_name; + } + + /** + * @return string + */ + public function getHolderName(): ?string + { + return $this->holder_name; + } + + /** + * @return string + */ + public function getAccountNo(): ?string + { + return $this->account_no; + } + + /** + * @return int + */ + public function getType(): ?int + { + return $this->type; + } + + /** + * @return int + */ + public function getDefault(): ?int + { + return $this->default; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Services/CreatesCompanyBank.php b/app/Classes/Modules/CompanyBanks/Services/CreatesCompanyBank.php new file mode 100644 index 00000000..06223f49 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Services/CreatesCompanyBank.php @@ -0,0 +1,28 @@ +country_id = $object->getCountryId(); + $model->company_id = $object->getCompanyId(); + $model->bank_name = $object->getBankName(); + $model->holder_name = $object->getHolderName(); + $model->account_no = $object->getAccountNo(); + $model->type = $object->getType(); + $model->default = $object->getDefault(); + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Services/DeletesCompanyBank.php b/app/Classes/Modules/CompanyBanks/Services/DeletesCompanyBank.php new file mode 100644 index 00000000..906ba1ae --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Services/DeletesCompanyBank.php @@ -0,0 +1,14 @@ +handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Services/FetchesCompanyBank.php b/app/Classes/Modules/CompanyBanks/Services/FetchesCompanyBank.php new file mode 100644 index 00000000..09e7fbee --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Services/FetchesCompanyBank.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Services/UpdatesCompanyBank.php b/app/Classes/Modules/CompanyBanks/Services/UpdatesCompanyBank.php new file mode 100644 index 00000000..3116b3c3 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Services/UpdatesCompanyBank.php @@ -0,0 +1,26 @@ +bank_name = $object->getBankName(); + $model->holder_name = $object->getHolderName(); + $model->account_no = $object->getAccountNo(); + $model->default = $object->getDefault(); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Standards/Rules/CanCreateCompanyBank.php b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanCreateCompanyBank.php new file mode 100644 index 00000000..751c3a63 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanCreateCompanyBank.php @@ -0,0 +1,55 @@ +companyBankValidation = $companyBankValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + if (!\Auth::user()->can('add company_bank')) { + return false; + } + + return true; + } + + /** + * @param SegmentObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->companyBankValidation->validate($object); + } + + /** + * @param SegmentObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Standards/Rules/CanDeleteCompanyBank.php b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanDeleteCompanyBank.php new file mode 100644 index 00000000..64db417c --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanDeleteCompanyBank.php @@ -0,0 +1,45 @@ +can('delete company_bank')) { + return false; + } + + return true; + + } + + /** + * @param CompanyBankObject $object + * @return bool + */ + protected function validators($object): bool + { + return true; + + } + + + /** + * @param CompanyBankObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Standards/Rules/CanUpdateCompanyBank.php b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanUpdateCompanyBank.php new file mode 100644 index 00000000..210cf480 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Standards/Rules/CanUpdateCompanyBank.php @@ -0,0 +1,58 @@ +CompanyBankValidation = $CompanyBankValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + + if (!\Auth::user()->can('edit company_bank')) { + return false; + } + + return true; + } + + /** + * @param CompanyBankValidation $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->CompanyBankValidation->validate($object); + } + + /** + * @param CompanyBankValidation $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CompanyBanks/Standards/Validators/CompanyBankValidation.php b/app/Classes/Modules/CompanyBanks/Standards/Validators/CompanyBankValidation.php new file mode 100644 index 00000000..e8614e78 --- /dev/null +++ b/app/Classes/Modules/CompanyBanks/Standards/Validators/CompanyBankValidation.php @@ -0,0 +1,50 @@ + $object->getCountryId(), + 'company_id' => $object->getCompanyId(), + 'bank_name' => $object->getBankName(), + 'holder_name' => $object->getHolderName(), + 'account_no' => $object->getAccountNo(), + 'type' => $object->getType(), + 'default' => $object->getDefault(), + ]; + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'country_id' => 'required', + 'company_id' => 'required', + 'bank_name' => 'required', + 'holder_name' => 'required', + 'account_no' => 'required', + 'type' => 'required', + 'default' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/CompanyBankType.php b/app/Classes/ValueObjects/Constants/CompanyBankType.php new file mode 100644 index 00000000..34019c40 --- /dev/null +++ b/app/Classes/ValueObjects/Constants/CompanyBankType.php @@ -0,0 +1,8 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/CompanyBanks/DeleteCompanyBankController.php b/app/Http/Controllers/CompanyBanks/DeleteCompanyBankController.php new file mode 100644 index 00000000..8a86eb1e --- /dev/null +++ b/app/Http/Controllers/CompanyBanks/DeleteCompanyBankController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/CompanyBanks/UpdateCompanyBankController.php b/app/Http/Controllers/CompanyBanks/UpdateCompanyBankController.php new file mode 100644 index 00000000..a69bad4d --- /dev/null +++ b/app/Http/Controllers/CompanyBanks/UpdateCompanyBankController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Resources/CompanyBankResource.php b/app/Http/Resources/CompanyBankResource.php new file mode 100644 index 00000000..5bb9e2d2 --- /dev/null +++ b/app/Http/Resources/CompanyBankResource.php @@ -0,0 +1,29 @@ + $this->id, + 'country_id' => $this->country_id, + 'company_id' => $this->company_id, + 'bank_name' => $this->bank_name, + 'holder_name' => $this->holder_name, + 'account_no' => $this->account_no, + 'type' => $this->type, + 'default' => $this->default, + 'status' => $this->status, + ]; + } +} diff --git a/app/Models/CompanyBank.php b/app/Models/CompanyBank.php index 1a4585b2..308d809d 100644 --- a/app/Models/CompanyBank.php +++ b/app/Models/CompanyBank.php @@ -2,6 +2,8 @@ namespace App\Models; +use Illuminate\Database\Eloquent\SoftDeletes; + use Illuminate\Database\Eloquent\Relations\HasOne; /** @@ -20,6 +22,8 @@ use Illuminate\Database\Eloquent\Relations\HasOne; */ class CompanyBank extends AbstractModel { + use SoftDeletes; + protected $table = 'company_banks'; /** diff --git a/database/migrations/2020_11_24_062534_create_company_banks_table.php b/database/migrations/2020_11_24_062534_create_company_banks_table.php index 34150130..5ab6788a 100644 --- a/database/migrations/2020_11_24_062534_create_company_banks_table.php +++ b/database/migrations/2020_11_24_062534_create_company_banks_table.php @@ -24,8 +24,9 @@ class CreateCompanyBanksTable extends Migration $table->string('account_no'); $table->integer('type'); $table->integer('default'); - $table->integer('status'); + $table->integer('status')->default(1); $table->timestamps(); + $table->softDeletes(); }); } diff --git a/database/seeds/AdminUserPermissionsTableSeeder.php b/database/seeds/AdminUserPermissionsTableSeeder.php index 21acdf8e..69634742 100644 --- a/database/seeds/AdminUserPermissionsTableSeeder.php +++ b/database/seeds/AdminUserPermissionsTableSeeder.php @@ -45,6 +45,11 @@ class AdminUserPermissionsTableSeeder extends Seeder Permission::create(['name' => 'edit segment_constant', 'guard_name' => 'web']); Permission::create(['name' => 'delete segment_constant', 'guard_name' => 'web']); + Permission::create(['name' => 'view company_bank', 'guard_name' => 'web']); + Permission::create(['name' => 'add company_bank', 'guard_name' => 'web']); + Permission::create(['name' => 'edit company_bank', 'guard_name' => 'web']); + Permission::create(['name' => 'delete company_bank', 'guard_name' => 'web']); + /////////////////////////////////////////////////////////////////////// $shadow_admin_role = Role::create([ diff --git a/routes/api.php b/routes/api.php index 81dc15d3..0d064b14 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,6 +22,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/segment.php'; + require __DIR__ . '/company_bank.php'; + Route::group(['middleware' => 'valid.token'], function () { require __DIR__ . '/crud.php'; });