diff --git a/app/Http/Middleware/DateFormat.php b/app/Http/Middleware/DateFormat.php index 75ab75f89..409cf3e18 100644 --- a/app/Http/Middleware/DateFormat.php +++ b/app/Http/Middleware/DateFormat.php @@ -17,7 +17,8 @@ class DateFormat public function handle($request, Closure $next) { if (($request->method() == 'POST') || ($request->method() == 'PATCH')) { - $fields = ['paid_at', 'due_at', 'issued_at', 'started_at', 'ended_at', 'expire_at']; + // todo fire event + $fields = ['paid_at', 'due_at', 'issued_at', 'started_at', 'ended_at', 'expire_at', 'recurring_started_at', 'recurring_limit_date']; foreach ($fields as $field) { $date = $request->get($field); diff --git a/app/Http/Requests/Banking/Transaction.php b/app/Http/Requests/Banking/Transaction.php index 10d9c4848..6473e0740 100644 --- a/app/Http/Requests/Banking/Transaction.php +++ b/app/Http/Requests/Banking/Transaction.php @@ -37,7 +37,7 @@ class Transaction extends FormRequest $attachment = 'mimes:' . config('filesystems.mimes') . '|between:0,' . config('filesystems.max_size') * 1024; } - return [ + $rules = [ 'type' => 'required|string', 'number' => 'required|string|unique:transactions,NULL,' . $id . ',id,company_id,' . $company_id . ',deleted_at,NULL', 'account_id' => 'required|integer', @@ -53,6 +53,29 @@ class Transaction extends FormRequest 'recurring_count' => 'gte:0', 'recurring_interval' => 'exclude_unless:recurring_frequency,custom|gt:0', ]; + + // Is Recurring + if ($this->request->has('recurring_frequency')) { + // first line of the recurring rule + if ($this->request->get('recurring_frequency') == 'custom') { + $rules['recurring_interval'] = 'required|gte:1'; + $rules['recurring_custom_frequency'] = 'required|string|in:daily,weekly,monthly,yearly'; + } + + // second line of the recurring rule + $rules['recurring_started_at'] = 'required|date_format:Y-m-d H:i:s'; + + switch($this->request->get('recurring_limit')) { + case 'date': + $rules['recurring_limit_date'] = 'required|date_format:Y-m-d H:i:s|after_or_equal:recurring_started_at'; + break; + case 'count': + $rules['recurring_limit_count'] = 'required|gte:0'; + break; + } + } + + return $rules; } public function withValidator($validator) @@ -61,6 +84,18 @@ class Transaction extends FormRequest $paid_at = Date::parse($this->request->get('paid_at'))->format('Y-m-d'); $this->request->set('paid_at', $paid_at); + + if ($this->request->get('recurring_started_at')) { + $recurring_started_at = Date::parse($this->request->get('recurring_started_at'))->format('Y-m-d'); + + $this->request->set('recurring_started_at', $recurring_started_at); + } + + if ($this->request->get('recurring_limit_date')) { + $recurring_limit_date = Date::parse($this->request->get('recurring_limit_date'))->format('Y-m-d'); + + $this->request->set('recurring_limit_date', $recurring_limit_date); + } } } } diff --git a/app/Http/Requests/Document/Document.php b/app/Http/Requests/Document/Document.php index 33bc2666a..effeca3bf 100644 --- a/app/Http/Requests/Document/Document.php +++ b/app/Http/Requests/Document/Document.php @@ -65,6 +65,27 @@ class Document extends FormRequest 'recurring_interval' => 'exclude_unless:recurring_frequency,custom|gt:0', ]; + // Is Recurring + if ($this->request->has('recurring_frequency')) { + // first line of the recurring rule + if ($this->request->get('recurring_frequency') == 'custom') { + $rules['recurring_interval'] = 'required|gte:1'; + $rules['recurring_custom_frequency'] = 'required|string|in:daily,weekly,monthly,yearly'; + } + + // second line of the recurring rule + $rules['recurring_started_at'] = 'required|date_format:Y-m-d H:i:s'; + + switch($this->request->get('recurring_limit')) { + case 'date': + $rules['recurring_limit_date'] = 'required|date_format:Y-m-d H:i:s|after_or_equal:recurring_started_at'; + break; + case 'count': + $rules['recurring_limit_count'] = 'required|gte:0'; + break; + } + } + $items = $this->request->all('items'); if ($items) { @@ -93,6 +114,18 @@ class Document extends FormRequest $this->request->set('issued_at', $issued_at); $this->request->set('due_at', $due_at); + + if ($this->request->get('recurring_started_at')) { + $recurring_started_at = Date::parse($this->request->get('recurring_started_at'))->format('Y-m-d'); + + $this->request->set('recurring_started_at', $recurring_started_at); + } + + if ($this->request->get('recurring_limit_date')) { + $recurring_limit_date = Date::parse($this->request->get('recurring_limit_date'))->format('Y-m-d'); + + $this->request->set('recurring_limit_date', $recurring_limit_date); + } } } @@ -118,6 +151,8 @@ class Document extends FormRequest 'height' => config('filesystems.max_height'), ]); + $messages['recurring_limit_date.after_or_equal'] = trans(''); + return $messages; } } diff --git a/resources/assets/js/components/AkauntingRecurring.vue b/resources/assets/js/components/AkauntingRecurring.vue index 56b64e582..e8734dc44 100644 --- a/resources/assets/js/components/AkauntingRecurring.vue +++ b/resources/assets/js/components/AkauntingRecurring.vue @@ -20,6 +20,8 @@ +
+