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 @@ +
+ + +
@@ -76,6 +80,8 @@ }"> +
+
{{ middleText }}
@@ -91,6 +97,8 @@ +
+
{{ endText }}
@@ -106,6 +114,8 @@ @input="change" > + +
@@ -163,6 +173,11 @@ export default { default: 'monthly', description: "Default reccuring type" }, + invertalError: { + type: String, + default: null, + description: "Selectbox input error message" + }, customFrequencies: null, customFrequencyValue: { @@ -170,12 +185,22 @@ export default { default: 'monthly', description: "Default reccuring type" }, + customFrequencyError: { + type: String, + default: null, + description: "Selectbox input error message" + }, startedValue: { type: String, default: 'never', description: "Default reccuring limit" }, + startedError: { + type: String, + default: null, + description: "Selectbox input error message" + }, limits: null, @@ -190,12 +215,22 @@ export default { default: 0, description: "Default reccuring limit" }, + limitCountError: { + type: String, + default: null, + description: "Selectbox input error message" + }, limitDateValue: { type: String, default: '', description: "Default reccuring limit" }, + limitDateError: { + type: String, + default: null, + description: "Selectbox input error message" + }, dateFormat: { type: String, diff --git a/resources/views/components/form/group/recurring.blade.php b/resources/views/components/form/group/recurring.blade.php index 6c2b937b1..8e1ee0a9e 100644 --- a/resources/views/components/form/group/recurring.blade.php +++ b/resources/views/components/form/group/recurring.blade.php @@ -23,12 +23,14 @@ @else @interval="form.recurring_interval = $event" @endif + :invertal-error="form.errors.get('recurring_interval')" @if ($attributes->has('@custom_frequency')) @custom_frequency="form.recurring_custom_frequency = $event;{{ $attributes['@custom_frequency'] }}" @else @custom_frequency="form.recurring_custom_frequency = $event" @endif + :custom-frequency-error="form.errors.get('recurring_custom_frequency')" started-value="{{ $startedValue }}" @if ($attributes->has('@started')) @@ -36,6 +38,7 @@ @else @started="form.recurring_started_at = $event" @endif + :started-error="form.errors.get('recurring_started_at')" :limits="{{ json_encode($limits) }}" limit-value="{{ $limit }}" @@ -52,6 +55,7 @@ @else @limit_count="form.recurring_limit_count = $event" @endif + :limit-count-error="form.errors.get('recurring_limit_count')" limit-date-value="{{ $limitDateValue }}" @if ($attributes->has('@limit_date')) @@ -59,9 +63,10 @@ @else @limit_date="form.recurring_limit_date = $event" @endif + :limit-date-error="form.errors.get('recurring_limit_date')" date-format="{{ company_date_format() }}" {{ $attributes }} > - \ No newline at end of file +