diff --git a/app/Factory/BankTransactionRuleFactory.php b/app/Factory/BankTransactionRuleFactory.php new file mode 100644 index 000000000000..69aeb3ddb3bb --- /dev/null +++ b/app/Factory/BankTransactionRuleFactory.php @@ -0,0 +1,30 @@ +user_id = $user_id; + $bank_transaction_rule->company_id = $company_id; + + $bank_transaction_rule->name = ''; + $bank_transaction_rule->rules = []; + + return $bank_transaction_rule; + } +} diff --git a/app/Filters/BankTransactionRuleFilters.php b/app/Filters/BankTransactionRuleFilters.php new file mode 100644 index 000000000000..bda5158e2a16 --- /dev/null +++ b/app/Filters/BankTransactionRuleFilters.php @@ -0,0 +1,133 @@ +=1) + return $this->builder->where('name', 'like', '%'.$name.'%'); + + return $this->builder; + } + + /** + * Filter based on search text. + * + * @param string query filter + * @return Builder + * @deprecated + */ + public function filter(string $filter = '') : Builder + { + if (strlen($filter) == 0) { + return $this->builder; + } + + return $this->builder->where(function ($query) use ($filter) { + $query->where('bank_transaction_rules.name', 'like', '%'.$filter.'%'); + }); + + } + + /** + * Filters the list based on the status + * archived, active, deleted. + * + * @param string filter + * @return Builder + */ + public function status(string $filter = '') : Builder + { + if (strlen($filter) == 0) { + return $this->builder; + } + + $table = 'bank_transaction_rules'; + $filters = explode(',', $filter); + + return $this->builder->where(function ($query) use ($filters, $table) { + $query->whereNull($table.'.id'); + + if (in_array(parent::STATUS_ACTIVE, $filters)) { + $query->orWhereNull($table.'.deleted_at'); + } + + if (in_array(parent::STATUS_ARCHIVED, $filters)) { + $query->orWhere(function ($query) use ($table) { + $query->whereNotNull($table.'.deleted_at'); + + if (! in_array($table, ['users'])) { + $query->where($table.'.is_deleted', '=', 0); + } + }); + } + + if (in_array(parent::STATUS_DELETED, $filters)) { + $query->orWhere($table.'.is_deleted', '=', 1); + } + }); + } + + /** + * Sorts the list based on $sort. + * + * @param string sort formatted as column|asc + * @return Builder + */ + public function sort(string $sort) : Builder + { + $sort_col = explode('|', $sort); + + return $this->builder->orderBy($sort_col[0], $sort_col[1]); + } + + /** + * Returns the base query. + * + * @param int company_id + * @param User $user + * @return Builder + * @deprecated + */ + public function baseQuery(int $company_id, User $user) : Builder + { + + } + + /** + * Filters the query by the users company ID. + * + * @return Illuminate\Database\Query\Builder + */ + public function entityFilter() + { + //return $this->builder->whereCompanyId(auth()->user()->company()->id); + return $this->builder->company(); + } +} diff --git a/app/Http/Controllers/BankTransactionRuleController.php b/app/Http/Controllers/BankTransactionRuleController.php new file mode 100644 index 000000000000..c9c8b04f0d9e --- /dev/null +++ b/app/Http/Controllers/BankTransactionRuleController.php @@ -0,0 +1,504 @@ +bank_transaction_repo = $bank_transaction_repo; + } + + /** + * @OA\Get( + * path="/api/v1/bank_transaction_rules", + * operationId="getBankTransactionRules", + * tags={"bank_transaction_rules"}, + * summary="Gets a list of bank_transaction_rules", + * description="Lists all bank transaction rules", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter(ref="#/components/parameters/index"), + * @OA\Parameter( + * name="rows", + * in="query", + * description="The number of bank integrations to return", + * example="50", + * required=false, + * @OA\Schema( + * type="number", + * format="integer", + * ), + * ), + * @OA\Response( + * response=200, + * description="A list of bank integrations", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + * @param BankTransactionFilters $filter + * @return Response|mixed + */ + public function index(BankTransactionRuleFilters $filters) + { + + $bank_transaction_rules = BankTransactionRule::filter($filters); + + return $this->listResponse($bank_transaction_rules); + + } + + /** + * Display the specified resource. + * + * @param ShowBankTransactionRuleRequest $request + * @param BankTransactionRule $bank_transaction_rule + * @return Response + * + * + * @OA\Get( + * path="/api/v1/bank_transaction_rules/{id}", + * operationId="showBankTransactionRule", + * tags={"bank_transaction_rules"}, + * summary="Shows a bank_transaction", + * description="Displays a bank_transaction by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The Bank Transaction RuleHashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the bank_transaction rule object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function show(ShowBankTransactionRuleRequest $request, BankTransactionRule $bank_transaction_rule) + { + return $this->itemResponse($bank_transaction_rule); + } + + + /** + * Show the form for editing the specified resource. + * + * @param EditBankTransactionRuleRequest $request + * @param BankTransactionRule $bank_transaction_rule + * @return Response + * + * + * @OA\Get( + * path="/api/v1/bank_transaction_rules/{id}/edit", + * operationId="editBankTransactionRule", + * tags={"bank_transaction_rules"}, + * summary="Shows a bank_transaction for editing", + * description="Displays a bank_transaction by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The Bank Transaction Rule Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the bank_transaction rule object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function edit(EditBankTransactionRuleRequest $request, BankTransactionRule $bank_transaction_rule) + { + return $this->itemResponse($bank_transaction_rule); + } + + /** + * Update the specified resource in storage. + * + * @param UpdateBankTransactionRuleRequest $request + * @param BankTransactionRule $bank_transaction_rule + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/bank_transaction_rules/{id}", + * operationId="updateBankTransactionRule", + * tags={"bank_transaction_rules"}, + * summary="Updates a bank_transaction Rule", + * description="Handles the updating of a bank_transaction rule by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The Bank Transaction Rule Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the bank_transaction rule object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function update(UpdateBankTransactionRuleRequest $request, BankTransactionRule $bank_transaction_rule) + { + + //stubs for updating the model + $bank_transaction = $this->bank_transaction_repo->save($request->all(), $bank_transaction_rule); + + return $this->itemResponse($bank_transaction_rule->fresh()); + } + + /** + * Show the form for creating a new resource. + * + * @param CreateBankTransactionRuleRequest $request + * @return Response + * + * + * + * @OA\Get( + * path="/api/v1/bank_transaction_rules/create", + * operationId="getBankTransactionRulesCreate", + * tags={"bank_transaction_rules"}, + * summary="Gets a new blank bank_transaction rule object", + * description="Returns a blank object with default values", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Response( + * response=200, + * description="A blank bank_transaction rule object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function create(CreateBankTransactionRuleRequest $request) + { + $bank_transaction_rule = BankTransactionRuleFactory::create(auth()->user()->company()->id, auth()->user()->id, auth()->user()->account_id); + + return $this->itemResponse($bank_transaction_rule); + } + + /** + * Store a newly created resource in storage. + * + * @param StoreBankTransactionRuleRequest $request + * @return Response + * + * + * + * @OA\Post( + * path="/api/v1/bank_transaction_rules", + * operationId="storeBankTransaction", + * tags={"bank_transaction_rules"}, + * summary="Adds a bank_transaction rule", + * description="Adds an bank_transaction to a company", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Response( + * response=200, + * description="Returns the saved bank_transaction rule object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/BankTransaction"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function store(StoreBankTransactionRuleRequest $request) + { + //stub to store the model + $bank_transaction_rule = $this->bank_transaction_repo->save($request->all(), BankTransactionRuleFactory::create(auth()->user()->company()->id, auth()->user()->id, auth()->user()->account_id)); + + return $this->itemResponse($bank_transaction_rule); + } + + /** + * Remove the specified resource from storage. + * + * @param DestroyBankTransactionRuleRequest $request + * @param BankTransactionRule $bank_transaction_rule + * @return Response + * + * + * @throws \Exception + * @OA\Delete( + * path="/api/v1/bank_transaction_rules/{id}", + * operationId="deleteBankTransactionRule", + * tags={"bank_transaction_rules"}, + * summary="Deletes a bank_transaction rule", + * description="Handles the deletion of a bank_transaction rule by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The Bank Transaction Rule Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns a HTTP status", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function destroy(DestroyBankTransactionRuleRequest $request, BankTransactionRule $bank_transaction_rule) + { + $this->bank_transaction_repo->delete($bank_transaction_rule); + + return $this->itemResponse($bank_transaction_rule->fresh()); + } + + + /** + * Perform bulk actions on the list view. + * + * @return Collection + * + * @OA\Post( + * path="/api/v1/bank_transation_rules/bulk", + * operationId="bulkBankTransactionRules", + * tags={"bank_transaction_rules"}, + * summary="Performs bulk actions on an array of bank_transation rules", + * description="", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/index"), + * @OA\RequestBody( + * description="Action paramters", + * required=true, + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * type="array", + * @OA\Items( + * type="integer", + * description="Array of hashed IDs to be bulk 'actioned", + * example="[0,1,2,3]", + * ), + * ) + * ) + * ), + * @OA\Response( + * response=200, + * description="The Bulk Action response", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function bulk() + { + $action = request()->input('action'); + + if(!in_array($action, ['archive', 'restore', 'delete'])) + return response()->json(['message' => 'Unsupported action.'], 400); + + $ids = request()->input('ids'); + + $bank_transaction_rules = BankTransactionRule::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get(); + + $bank_transaction_rules->each(function ($bank_transaction_rule, $key) use ($action) { + if (auth()->user()->can('edit', $bank_transaction_rule)) { + $this->bank_transaction_repo->{$action}($bank_transaction_rule); + } + }); + + /* Need to understand which permission are required for the given bulk action ie. view / edit */ + + return $this->listResponse(BankTransactionRule::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()); + } + +} \ No newline at end of file diff --git a/app/Http/Requests/BankTransactionRule/CreateBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/CreateBankTransactionRuleRequest.php new file mode 100644 index 000000000000..24fa6e8e15c6 --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/CreateBankTransactionRuleRequest.php @@ -0,0 +1,28 @@ +user()->can('create', BankTransactionRule::class); + } +} diff --git a/app/Http/Requests/BankTransactionRule/DestroyBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/DestroyBankTransactionRuleRequest.php new file mode 100644 index 000000000000..b19f87fb009e --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/DestroyBankTransactionRuleRequest.php @@ -0,0 +1,27 @@ +user()->can('edit', $this->bank_transaction_rule); + } +} diff --git a/app/Http/Requests/BankTransactionRule/EditBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/EditBankTransactionRuleRequest.php new file mode 100644 index 000000000000..9edf1aaa164b --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/EditBankTransactionRuleRequest.php @@ -0,0 +1,27 @@ +user()->can('edit', $this->bank_transaction_rule); + } +} diff --git a/app/Http/Requests/BankTransactionRule/ShowBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/ShowBankTransactionRuleRequest.php new file mode 100644 index 000000000000..9a9eb6fc5d54 --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/ShowBankTransactionRuleRequest.php @@ -0,0 +1,27 @@ +user()->can('view', $this->bank_transaction_rule); + } +} diff --git a/app/Http/Requests/BankTransactionRule/StoreBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/StoreBankTransactionRuleRequest.php new file mode 100644 index 000000000000..158a59bf462e --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/StoreBankTransactionRuleRequest.php @@ -0,0 +1,63 @@ +user()->can('create', BankTransactionRule::class); + } + + public function rules() + { + /* Ensure we have a client name, and that all emails are unique*/ + $rules = [ + 'name' => 'bail|required|string' + ]; + + if (isset($this->currency_id)) + $rules['category_Id'] = 'bail|sometimes|exists:expense_categories,id,'.auth()->user()->company()->id.',is_deleted,0'; + + if(isset($this->vendor_id)) + $rules['vendor_id'] = 'bail|sometimes|exists:vendors,id,company_id,'.auth()->user()->company()->id.',is_deleted,0'; + + if(isset($this->client_id)) + $rules['client_id'] = 'bail|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0'; + + + return $rules; + } + + public function prepareForValidation() + { + $input = $this->all(); + + $input = $this->decodePrimaryKeys($input); + + $this->replace($input); + } + + + +} diff --git a/app/Http/Requests/BankTransactionRule/UpdateBankTransactionRuleRequest.php b/app/Http/Requests/BankTransactionRule/UpdateBankTransactionRuleRequest.php new file mode 100644 index 000000000000..3ccbc9565364 --- /dev/null +++ b/app/Http/Requests/BankTransactionRule/UpdateBankTransactionRuleRequest.php @@ -0,0 +1,60 @@ +user()->can('edit', $this->bank_transaction); + } + + public function rules() + { + /* Ensure we have a client name, and that all emails are unique*/ + $rules = [ + 'name' => 'bail|required|string' + ]; + + if (isset($this->currency_id)) + $rules['category_Id'] = 'bail|sometimes|exists:expense_categories,id,'.auth()->user()->company()->id.',is_deleted,0'; + + if(isset($this->vendor_id)) + $rules['vendor_id'] = 'bail|sometimes|exists:vendors,id,company_id,'.auth()->user()->company()->id.',is_deleted,0'; + + if(isset($this->client_id)) + $rules['client_id'] = 'bail|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0'; + + + return $rules; + } + + public function prepareForValidation() + { + $input = $this->all(); + + $input = $this->decodePrimaryKeys($input); + + $this->replace($input); + } + +} diff --git a/app/Models/BankTransactionRule.php b/app/Models/BankTransactionRule.php new file mode 100644 index 000000000000..fa6cccd4cadc --- /dev/null +++ b/app/Models/BankTransactionRule.php @@ -0,0 +1,69 @@ +belongsTo(Company::class); + } + + public function vendor() + { + return $this->belongsTo(Vendor::class); + } + + public function client() + { + return $this->belongsTo(Client::class); + } + + public function user() + { + return $this->belongsTo(User::class)->withTrashed(); + } + + public function expense_cateogry() + { + return $this->belongsTo(ExpenseCategory::class)->withTrashed(); + } + +} \ No newline at end of file diff --git a/app/Repositories/BankTransactionRuleRepository.php b/app/Repositories/BankTransactionRuleRepository.php new file mode 100644 index 000000000000..cfc5d7579168 --- /dev/null +++ b/app/Repositories/BankTransactionRuleRepository.php @@ -0,0 +1,34 @@ +fill($data); + + $bank_transaction_rule->save(); + + return $bank_transaction_rule + } + +} diff --git a/app/Transformers/BankTransactionRuleTransformer.php b/app/Transformers/BankTransactionRuleTransformer.php new file mode 100644 index 000000000000..e2b709121e3c --- /dev/null +++ b/app/Transformers/BankTransactionRuleTransformer.php @@ -0,0 +1,91 @@ + (string) $this->encodePrimaryKey($bank_transaction_rule->id), + 'name' => (string) $bank_transaction_rule->name, + 'rules' => $bank_transaction_rule->rules ?: (array) [], + 'auto_convert' => (bool) $bank_transaction_rule->auto_convert, + 'matches_on_all' => (bool) $bank_transaction_rule->matches_on_all, + 'applies_to' => (string) $bank_transaction_rule->applies_to, + 'record_as' => (string) $bank_transaction_rule->record_as, + 'client_id' => $this->encodePrimaryKey($bank_transaction_rule->client_id) ?: '', + 'vendor_id' => $this->encodePrimaryKey($bank_transaction_rule->vendor_id) ?: '', + 'category_id' => $this->encodePrimaryKey($bank_transaction_rule->category_id) ?: '', + 'is_deleted' => (bool) $bank_transaction_rule->is_deleted, + 'created_at' => (int) $bank_transaction_rule->created_at, + 'updated_at' => (int) $bank_transaction_rule->updated_at, + 'archived_at' => (int) $bank_transaction_rule->deleted_at, + ]; + } + + public function includeCompany(BankTransactionRule $bank_transaction_rule) + { + $transformer = new CompanyTransformer($this->serializer); + + return $this->includeItem($bank_transaction_rule->company, $transformer, Company::class); + } + + public function includeClient(BankTransactionRule $bank_transaction_rule) + { + $transformer = new ClientTransformer($this->serializer); + + return $this->includeItem($bank_transaction_rule->expense, $transformer, Client::class); + } + + public function includeVendor(BankTransactionRule $bank_transaction_rule) + { + $transformer = new VendorTransformer($this->serializer); + + return $this->includeItem($bank_transaction_rule->vendor, $transformer, Vendor::class); + } + +} diff --git a/database/migrations/2022_11_13_034143_bank_transaction_rules_table.php b/database/migrations/2022_11_13_034143_bank_transaction_rules_table.php new file mode 100644 index 000000000000..6201e4e78e6c --- /dev/null +++ b/database/migrations/2022_11_13_034143_bank_transaction_rules_table.php @@ -0,0 +1,53 @@ +id(); + $table->unsignedInteger('company_id'); + $table->unsignedInteger('user_id'); + + $table->string('name'); //name of rule + $table->mediumText('rules')->nullable(); //array of rule objects + $table->boolean('auto_convert')->default(false); //auto convert to match + $table->boolean('matches_on_all')->default(false); //match on all rules or just one + $table->string('applies_to')->default('CREDIT'); //CREDIT/DEBIT + $table->string('record_as')->default('CREDIT'); //CREDIT/DEBIT + + $table->unsignedInteger('client_id')->nullable(); + $table->unsignedInteger('vendor_id')->nullable(); + $table->unsignedInteger('category_id')->nullable(); + + $table->boolean('is_deleted')->default(0); + $table->timestamps(6); + $table->softDeletes('deleted_at', 6); + + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade'); + $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade'); + }); + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +};