diff --git a/app/Http/Controllers/Fo/TraceaPoultryController.php b/app/Http/Controllers/Fo/TraceaPoultryController.php index 18319fa..461efd9 100644 --- a/app/Http/Controllers/Fo/TraceaPoultryController.php +++ b/app/Http/Controllers/Fo/TraceaPoultryController.php @@ -3,8 +3,10 @@ namespace App\Http\Controllers\Fo; use App\Http\Controllers\Controller; +use App\Http\Requests\Fo\Ajax\GetDistributionRequest; use App\Http\Requests\Fo\SearchPoultryTraceaRequest; use App\Models\TraceaPoultry; +use Illuminate\Http\JsonResponse; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Session; @@ -68,19 +70,34 @@ class TraceaPoultryController extends Controller \redirect()->route('poultry.search')->throwResponse(); } - $distributionPicture = $this->getDistributionPicture($traceaPoultry->sign); - // ! Test that food and mep are available if (!$traceaPoultry->mep or !$traceaPoultry->food) { return \view('front.poultry.unavailable'); } return view('front.poultry.show', compact( - 'traceaPoultry', - 'distributionPicture' + 'traceaPoultry' )); } + /** + * Get Distribution Info + * + * @param \App\Http\Requests\Fo\Ajax\GetDistributionRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function getDistribution(GetDistributionRequest $request): JsonResponse + { + /** @var \App\Models\TraceaPoultry */ + $traceaPoultry = TraceaPoultry::where('order_num', $request->ordernum) + ->where('external_code_lot', $request->codelot)->firstOrFail(); + return \response()->json([ + 'exp_date' => $traceaPoultry->exp_date, + 'sign' => $traceaPoultry->sign, + 'picture' => $this->getDistributionPicture($traceaPoultry->sign) + ]); + } + /** * Get distribution sign picture name if exists. * diff --git a/app/Http/Requests/Fo/Ajax/GetDistributionRequest.php b/app/Http/Requests/Fo/Ajax/GetDistributionRequest.php new file mode 100644 index 0000000..3b02198 --- /dev/null +++ b/app/Http/Requests/Fo/Ajax/GetDistributionRequest.php @@ -0,0 +1,31 @@ + 'required|numeric|digits:10', + 'ordernum' => 'required|numeric|digits:6', + ]; + } +} diff --git a/resources/js/front.js b/resources/js/front.js index 1e70a3a..ee9c896 100644 --- a/resources/js/front.js +++ b/resources/js/front.js @@ -7,8 +7,8 @@ require('./alert'); import IMask from 'imask' document.addEventListener('DOMContentLoaded', () => { - let maskInputs = document.getElementsByClassName('inputMask') - for (let maskInput of maskInputs) { + const maskInputs = document.getElementsByClassName('inputMask') + for (const maskInput of maskInputs) { if (maskInput.dataset.mask) { maskInput.imask = IMask(maskInput, { mask: maskInput.dataset.mask.indexOf('|') !== -1 ? diff --git a/resources/js/pages/poultry-show.js b/resources/js/pages/poultry-show.js index 04d4085..b4c36df 100644 --- a/resources/js/pages/poultry-show.js +++ b/resources/js/pages/poultry-show.js @@ -1,12 +1,16 @@ import Glider from '@lighting-beetle/glider-js' +import axios from 'axios' document.addEventListener('DOMContentLoaded', () => { - let labelSlider = document.querySelector('.container.poultryShow .glider-container.labels > .glider'), + const labelSlider = document.querySelector('.container.poultryShow .glider-container.labels > .glider'), linksSlider = document.querySelector('.container.poultryShow .glider-container.links > .glider'), orderNum = document.getElementById('order_num'), orderVal = document.getElementById('order_val'), orderInvalid = document.getElementById('order_num_invalid'), - orderExp = document.getElementById('order_exp') + orderExp = document.getElementById('order_exp'), + distriSign = document.getElementById('distriSign'), + distriPicture = document.getElementById('distriPicture'), + distriDate = document.getElementById('distriDate'); if (labelSlider) { new Glider(labelSlider, { slidesToShow: 1, @@ -43,7 +47,8 @@ document.addEventListener('DOMContentLoaded', () => { ] }) } - if (orderNum && orderVal && orderExp && orderInvalid) { + // * Distribution + if (orderNum && orderVal && orderExp && orderInvalid && distriPicture && distriDate) { orderVal.addEventListener('click', (e) => { e.preventDefault() @@ -57,17 +62,32 @@ document.addEventListener('DOMContentLoaded', () => { behavior: "smooth" }) } - if (orderNum.imask.value.slice(0, -5) !== orderNum.dataset.orderNumber) { - orderInvalid.classList.add('d-block') - orderExp.classList.add('d-none') - orderNum.imask.masked.reset() - scrollToIdWithOffset('order_num_invalid', 50) - return; - } - orderInvalid.classList.remove('d-block') - orderExp.classList.remove('d-none') - orderNum.imask.masked.reset() - scrollToIdWithOffset(orderExp.id, 50) + + axios.get( + `/tracabilite/volaille/distribution?codelot=${orderNum.dataset.codeLot}&ordernum=${orderNum.imask.value.slice(0, -5)}` + ).then((response) => { + const date = new Date(response.data.exp_date); + distriDate.textContent = date.toDateString(); + distriSign.querySelector('span').textContent = response.data.sign; + if (response.data.picture) { + distriPicture.querySelector('img').classList.remove('d-none'); + distriPicture.querySelector('img').src = `/assets/images/signs/${response.data.picture}`; + } else { + distriPicture.querySelector('img').classList.add('d-none'); + } + + orderInvalid.classList.remove('d-block'); + orderExp.classList.remove('d-none'); + orderNum.imask.masked.reset(); + scrollToIdWithOffset(orderExp.id, 50); + }).catch((e) => { + orderInvalid.classList.add('d-block'); + orderExp.classList.add('d-none'); + orderNum.imask.masked.reset(); + scrollToIdWithOffset('order_num_invalid', 50); + }); }) + } else { + throw new Error('Missing Dom elements'); } }) diff --git a/resources/views/front/poultry/parts/distribution.blade.php b/resources/views/front/poultry/parts/distribution.blade.php index c57857f..fb21f43 100644 --- a/resources/views/front/poultry/parts/distribution.blade.php +++ b/resources/views/front/poultry/parts/distribution.blade.php @@ -21,7 +21,12 @@
- + @include('back.modules.input-error', ['inputName' => 'order_num'])
{{ __('Numéro de commande invalide') }}
@@ -51,16 +56,14 @@ {{ __('Date') }}
- {{ $date }} + {{ $date }}
- @if($distributionPicture) -
- {{ $sign }} +
+
-
- {{ $sign }} +
+
- @endif
diff --git a/resources/views/front/poultry/show.blade.php b/resources/views/front/poultry/show.blade.php index 9a9295f..2202e02 100644 --- a/resources/views/front/poultry/show.blade.php +++ b/resources/views/front/poultry/show.blade.php @@ -153,7 +153,6 @@ nous avions dit que nous fonctionnions comme cela lors d'une réunion en décemb
@include('front.poultry.parts.distribution', [ - 'distributionPicture' => $distributionPicture, 'sign' => $traceaPoultry->sign, 'date' => sprintf('%s %s', $traceaPoultry->exp_date->formatLocalized('%A'), $traceaPoultry->exp_date->format('d/m/Y')) ]) diff --git a/routes/web-fo.php b/routes/web-fo.php index 0b848f5..3e6b718 100644 --- a/routes/web-fo.php +++ b/routes/web-fo.php @@ -22,6 +22,8 @@ Route::name('poultry.')->group(function () { Route::view('/', 'front.poultry.search')->name('search'); Route::post('/', [TraceaPoultryController::class, 'searchSubmit'])->name('searchSubmit'); Route::get('tracabilite/volaille', [TraceaPoultryController::class, 'show'])->name('show'); + Route::get('tracabilite/volaille/distribution', [TraceaPoultryController::class, 'getDistribution']) + ->name('distribution'); Route::get('tracabilite/volaille/info', [InfoController::class, 'poultry'])->name('infos'); Route::get( 'tracabilite/volaille/info/des-poulets-libres-par-nature',