From aa53a96b5de528780ceafd54b5443cd06c8f7e93 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 27 Jul 2016 15:46:05 +0300 Subject: [PATCH] Verify that invoice number is unique using JS --- app/Http/Controllers/InvoiceController.php | 11 +++++++++++ app/Http/routes.php | 3 ++- resources/views/header.blade.php | 2 +- resources/views/invoices/edit.blade.php | 7 +++++++ resources/views/invoices/knockout.blade.php | 21 +++++++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 0106f6cf8937..b18951594d84 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -611,4 +611,15 @@ class InvoiceController extends BaseController return View::make('invoices.history', $data); } + + public function checkInvoiceNumber($invoiceNumber) + { + $count = Invoice::scope() + ->whereInvoiceNumber($invoiceNumber) + ->withTrashed() + ->count(); + + return $count ? RESULT_FAILURE : RESULT_SUCCESS; + } + } diff --git a/app/Http/routes.php b/app/Http/routes.php index e0062cc1f71a..ae10edc82a3f 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -125,7 +125,8 @@ Route::group(['middleware' => 'auth:user'], function() { Route::get('view_archive/{entity_type}/{visible}', 'AccountController@setTrashVisible'); Route::get('hide_message', 'HomeController@hideMessage'); Route::get('force_inline_pdf', 'UserController@forcePDFJS'); - Route::get('account/getSearchData', ['as' => 'getSearchData', 'uses' => 'AccountController@getSearchData']); + Route::get('account/get_search_data', ['as' => 'get_search_data', 'uses' => 'AccountController@getSearchData']); + Route::get('check_invoice_number/{invoice_number}', 'InvoiceController@checkInvoiceNumber'); Route::get('settings/user_details', 'AccountController@showUserDetails'); Route::post('settings/user_details', 'AccountController@saveUserDetails'); diff --git a/resources/views/header.blade.php b/resources/views/header.blade.php index 4eaa4de24a4e..2ca594363631 100644 --- a/resources/views/header.blade.php +++ b/resources/views/header.blade.php @@ -234,7 +234,7 @@ if (!window.loadedSearchData) { trackEvent('/activity', '/search'); - var request = $.get('{{ URL::route('getSearchData') }}', function(data) { + var request = $.get('{{ URL::route('get_search_data') }}', function(data) { $('#search').typeahead({ hint: true, highlight: true, diff --git a/resources/views/invoices/edit.blade.php b/resources/views/invoices/edit.blade.php index 3ede53d95cbc..0ee90310192c 100644 --- a/resources/views/invoices/edit.blade.php +++ b/resources/views/invoices/edit.blade.php @@ -162,6 +162,8 @@ {!! Former::text('invoice_number') ->label(trans("texts.{$entityType}_number_short")) + ->onchange('checkInvoiceNumber()') + ->addGroupClass('invoice-number') ->data_bind("value: invoice_number, valueUpdate: 'afterkeydown'") !!} @if($account->getTokenGatewayId()) @@ -1296,6 +1298,11 @@ return false; } + // check invoice number is unique + if ($('.invoice-number').hasClass('has-error')) { + return false; + } + if (!isSaveValid()) { model.showClientForm(); return false; diff --git a/resources/views/invoices/knockout.blade.php b/resources/views/invoices/knockout.blade.php index 49a538c5db27..5ff34c6aaf0f 100644 --- a/resources/views/invoices/knockout.blade.php +++ b/resources/views/invoices/knockout.blade.php @@ -895,4 +895,25 @@ ko.bindingHandlers.productTypeahead = { } }; +function checkInvoiceNumber() { + var url = '{{ url('check_invoice_number') }}/' + $('#invoice_number').val(); + $.get(url, function(data) { + var isValid = data == '{{ RESULT_SUCCESS }}' ? true : false; + if (isValid) { + $('.invoice-number') + .removeClass('has-error') + .find('span') + .hide(); + } else { + if ($('.invoice-number').hasClass('has-error')) { + return; + } + $('.invoice-number') + .addClass('has-error') + .find('div') + .append('{{ trans('validation.unique', ['attribute' => trans('texts.invoice_number')]) }}'); + } + }); +} +