diff --git a/app/Concerns/CurrencyStripping.php b/app/Concerns/CurrencyStripping.php new file mode 100644 index 0000000..815919e --- /dev/null +++ b/app/Concerns/CurrencyStripping.php @@ -0,0 +1,57 @@ +stripField($data, $field); + } + + return $data; + } + + private function stripField(array $data, string $field): array + { + if (str_contains($field, '*')) { + return $this->stripNestedField($data, $field); + } + + if (isset($data[$field]) && is_string($data[$field])) { + $data[$field] = (int) str_replace('.', '', $data[$field]); + } + + return $data; + } + + private function stripNestedField(array $data, string $pattern): array + { + $parts = explode('.', $pattern); + $this->stripNestedRecursive($data, $parts); + + return $data; + } + + private function stripNestedRecursive(array &$data, array $parts): void + { + $current = array_shift($parts); + + if ($current === '*') { + if (is_array($data)) { + foreach ($data as &$item) { + $this->stripNestedRecursive($item, $parts); + } + } + } elseif (empty($parts)) { + if (isset($data[$current]) && is_string($data[$current])) { + $data[$current] = (int) str_replace('.', '', $data[$current]); + } + } else { + if (isset($data[$current]) && is_array($data[$current])) { + $this->stripNestedRecursive($data[$current], $parts); + } + } + } +} diff --git a/app/Http/Requests/Admin/Finance/CashTransactionRequest.php b/app/Http/Requests/Admin/Finance/CashTransactionRequest.php index 3aeb5d6..7606876 100644 --- a/app/Http/Requests/Admin/Finance/CashTransactionRequest.php +++ b/app/Http/Requests/Admin/Finance/CashTransactionRequest.php @@ -2,24 +2,23 @@ namespace App\Http\Requests\Admin\Finance; +use App\Concerns\CurrencyStripping; use Illuminate\Foundation\Http\FormRequest; use Override; class CashTransactionRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - if ($this->has('amount')) { - $this->merge([ - 'amount' => str_replace('.', '', $this->amount), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'amount')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Finance/EmployeeAdvanceRequest.php b/app/Http/Requests/Admin/Finance/EmployeeAdvanceRequest.php index c939bf2..5a40acc 100644 --- a/app/Http/Requests/Admin/Finance/EmployeeAdvanceRequest.php +++ b/app/Http/Requests/Admin/Finance/EmployeeAdvanceRequest.php @@ -2,24 +2,23 @@ namespace App\Http\Requests\Admin\Finance; +use App\Concerns\CurrencyStripping; use Illuminate\Foundation\Http\FormRequest; use Override; class EmployeeAdvanceRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - if ($this->has('amount')) { - $this->merge([ - 'amount' => str_replace('.', '', $this->amount), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'amount')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Finance/ExpenseRequest.php b/app/Http/Requests/Admin/Finance/ExpenseRequest.php index 47ab65e..00ad3b4 100644 --- a/app/Http/Requests/Admin/Finance/ExpenseRequest.php +++ b/app/Http/Requests/Admin/Finance/ExpenseRequest.php @@ -2,24 +2,23 @@ namespace App\Http\Requests\Admin\Finance; +use App\Concerns\CurrencyStripping; use Illuminate\Foundation\Http\FormRequest; use Override; class ExpenseRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - if ($this->has('amount')) { - $this->merge([ - 'amount' => str_replace('.', '', $this->amount), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'amount')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Finance/PayrollAdjustmentRequest.php b/app/Http/Requests/Admin/Finance/PayrollAdjustmentRequest.php index b11741f..7e58e62 100644 --- a/app/Http/Requests/Admin/Finance/PayrollAdjustmentRequest.php +++ b/app/Http/Requests/Admin/Finance/PayrollAdjustmentRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\Admin\Finance; +use App\Concerns\CurrencyStripping; use App\Enums\PayrollAdjustmentType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -9,19 +10,17 @@ class PayrollAdjustmentRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - if ($this->has('amount')) { - $this->merge([ - 'amount' => str_replace('.', '', $this->amount), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'amount')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Manage/PurchaseRequest.php b/app/Http/Requests/Admin/Manage/PurchaseRequest.php index fdf1546..c20e7cb 100644 --- a/app/Http/Requests/Admin/Manage/PurchaseRequest.php +++ b/app/Http/Requests/Admin/Manage/PurchaseRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\Admin\Manage; +use App\Concerns\CurrencyStripping; use App\Enums\RawMaterialUnit; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class PurchaseRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; @@ -15,22 +18,7 @@ public function authorize(): bool public function prepareForValidation(): void { - $variants = $this->variants; - if (is_array($variants)) { - foreach ($variants as $i => $variant) { - if (isset($variant['price']) && is_string($variant['price'])) { - $this->request->set("variants.$i.price", (int) str_replace('.', '', $variant['price'])); - } - } - } - - if (is_string($this->discount)) { - $this->request->set('discount', (int) str_replace('.', '', $this->discount)); - } - - if (is_string($this->shipping_cost)) { - $this->request->set('shipping_cost', (int) str_replace('.', '', $this->shipping_cost)); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'variants.*.price', 'discount', 'shipping_cost')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Manage/TransactionRequest.php b/app/Http/Requests/Admin/Manage/TransactionRequest.php index 4c001eb..ecb4004 100644 --- a/app/Http/Requests/Admin/Manage/TransactionRequest.php +++ b/app/Http/Requests/Admin/Manage/TransactionRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\Admin\Manage; +use App\Concerns\CurrencyStripping; use App\Enums\OrderChannel; use App\Enums\PaymentType; use App\Enums\PriceType; @@ -11,6 +12,8 @@ class TransactionRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; @@ -18,17 +21,7 @@ public function authorize(): bool public function prepareForValidation(): void { - if ($this->has('discount')) { - $this->merge([ - 'discount' => str_replace('.', '', $this->discount), - ]); - } - - if ($this->has('nego_price')) { - $this->merge([ - 'nego_price' => str_replace('.', '', $this->nego_price), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'discount', 'nego_price')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Master/Product/ProductRequest.php b/app/Http/Requests/Admin/Master/Product/ProductRequest.php index cefcbea..5f0e699 100644 --- a/app/Http/Requests/Admin/Master/Product/ProductRequest.php +++ b/app/Http/Requests/Admin/Master/Product/ProductRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\Admin\Master\Product; +use App\Concerns\CurrencyStripping; use App\Enums\PriceType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -9,35 +10,17 @@ class ProductRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - $sharedPrices = $this->shared_prices; - if (is_array($sharedPrices)) { - foreach ($sharedPrices as $i => $price) { - if (isset($price['price']) && is_string($price['price'])) { - $this->request->set("shared_prices.$i.price", (int) str_replace('.', '', $price['price'])); - } - } - } - - $variants = $this->variants; - if (is_array($variants)) { - foreach ($variants as $i => $variant) { - if (isset($variant['prices']) && is_array($variant['prices'])) { - foreach ($variant['prices'] as $j => $price) { - if (isset($price['price']) && is_string($price['price'])) { - $this->request->set("variants.$i.prices.$j.price", (int) str_replace('.', '', $price['price'])); - } - } - } - } - } + $this->merge($this->stripCurrencyDot($this->validated(), 'shared_prices.*.price', 'variants.*.prices.*.price')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Master/Product/ProductVariantRequest.php b/app/Http/Requests/Admin/Master/Product/ProductVariantRequest.php index 7cc356d..cca5512 100644 --- a/app/Http/Requests/Admin/Master/Product/ProductVariantRequest.php +++ b/app/Http/Requests/Admin/Master/Product/ProductVariantRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\Admin\Master\Product; +use App\Concerns\CurrencyStripping; use App\Enums\PriceType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class ProductVariantRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; @@ -15,14 +18,7 @@ public function authorize(): bool public function prepareForValidation(): void { - $prices = $this->prices; - if (is_array($prices)) { - foreach ($prices as $i => $price) { - if (isset($price['price']) && is_string($price['price'])) { - $this->request->set("prices.$i.price", (int) str_replace('.', '', $price['price'])); - } - } - } + $this->merge($this->stripCurrencyDot($this->validated(), 'prices.*.price')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialRequest.php b/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialRequest.php index bc7a794..9b7d988 100644 --- a/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialRequest.php +++ b/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\Admin\Master\RawMaterial; +use App\Concerns\CurrencyStripping; use App\Enums\RawMaterialUnit; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class RawMaterialRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; @@ -15,14 +18,7 @@ public function authorize(): bool public function prepareForValidation(): void { - $variants = $this->variants; - if (is_array($variants)) { - foreach ($variants as $i => $variant) { - if (isset($variant['price']) && is_string($variant['price'])) { - $this->request->set("variants.$i.price", (int) str_replace('.', '', $variant['price'])); - } - } - } + $this->merge($this->stripCurrencyDot($this->validated(), 'variants.*.price')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialVariantRequest.php b/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialVariantRequest.php index c7dab29..4619494 100644 --- a/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialVariantRequest.php +++ b/app/Http/Requests/Admin/Master/RawMaterial/RawMaterialVariantRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Admin\Master\RawMaterial; +use App\Concerns\CurrencyStripping; use Illuminate\Foundation\Http\FormRequest; class RawMaterialVariantRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; @@ -13,10 +16,7 @@ public function authorize(): bool public function prepareForValidation(): void { - $price = $this->price; - if (is_string($price)) { - $this->request->set('price', (int) str_replace('.', '', $price)); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'price')); } public function rules(): array diff --git a/app/Http/Requests/Admin/Settings/UpdateHRRequest.php b/app/Http/Requests/Admin/Settings/UpdateHRRequest.php index 5daeaa2..9a7b1ff 100644 --- a/app/Http/Requests/Admin/Settings/UpdateHRRequest.php +++ b/app/Http/Requests/Admin/Settings/UpdateHRRequest.php @@ -2,30 +2,23 @@ namespace App\Http\Requests\Admin\Settings; +use App\Concerns\CurrencyStripping; use Illuminate\Foundation\Http\FormRequest; use Override; class UpdateHRRequest extends FormRequest { + use CurrencyStripping; + public function authorize(): bool { return true; } #[Override] - public function prepareForValidation() + public function prepareForValidation(): void { - if ($this->has('late_penalty_amount')) { - $this->merge([ - 'late_penalty_amount' => str_replace('.', '', $this->late_penalty_amount), - ]); - } - - if ($this->has('absent_penalty_amount')) { - $this->merge([ - 'absent_penalty_amount' => str_replace('.', '', $this->absent_penalty_amount), - ]); - } + $this->merge($this->stripCurrencyDot($this->validated(), 'late_penalty_amount', 'absent_penalty_amount')); } public function rules(): array diff --git a/app/Http/Requests/Settings/PasswordUpdateRequest.php b/app/Http/Requests/Settings/PasswordUpdateRequest.php index 0e5ff2f..7aa00f5 100644 --- a/app/Http/Requests/Settings/PasswordUpdateRequest.php +++ b/app/Http/Requests/Settings/PasswordUpdateRequest.php @@ -10,6 +10,11 @@ class PasswordUpdateRequest extends FormRequest { use PasswordValidationRules; + public function authorize(): bool + { + return true; + } + /** * Get the validation rules that apply to the request. * diff --git a/app/Http/Requests/Settings/ProfileDeleteRequest.php b/app/Http/Requests/Settings/ProfileDeleteRequest.php index aec9174..80391f4 100644 --- a/app/Http/Requests/Settings/ProfileDeleteRequest.php +++ b/app/Http/Requests/Settings/ProfileDeleteRequest.php @@ -10,6 +10,11 @@ class ProfileDeleteRequest extends FormRequest { use PasswordValidationRules; + public function authorize(): bool + { + return true; + } + /** * Get the validation rules that apply to the request. * diff --git a/app/Http/Requests/Settings/ProfileUpdateRequest.php b/app/Http/Requests/Settings/ProfileUpdateRequest.php index 3616520..22d6815 100644 --- a/app/Http/Requests/Settings/ProfileUpdateRequest.php +++ b/app/Http/Requests/Settings/ProfileUpdateRequest.php @@ -8,6 +8,11 @@ class ProfileUpdateRequest extends FormRequest { + public function authorize(): bool + { + return true; + } + /** * Get the validation rules that apply to the request. * diff --git a/app/Http/Requests/Settings/TwoFactorAuthenticationRequest.php b/app/Http/Requests/Settings/TwoFactorAuthenticationRequest.php index 8a4c428..2aebed3 100644 --- a/app/Http/Requests/Settings/TwoFactorAuthenticationRequest.php +++ b/app/Http/Requests/Settings/TwoFactorAuthenticationRequest.php @@ -10,6 +10,11 @@ class TwoFactorAuthenticationRequest extends FormRequest { use InteractsWithTwoFactorState; + public function authorize(): bool + { + return true; + } + /** * Get the validation rules that apply to the request. *