Merge branch 'fixFuckingProjectSign' into 'develop'
Poultries Ajax call to fetch distribution info See merge request service-web-lab/tracabilite-loue!9
This commit is contained in:
commit
96b231f7d9
7 changed files with 101 additions and 29 deletions
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
31
app/Http/Requests/Fo/Ajax/GetDistributionRequest.php
Normal file
31
app/Http/Requests/Fo/Ajax/GetDistributionRequest.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Fo\Ajax;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class GetDistributionRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'codelot' => 'required|numeric|digits:10',
|
||||
'ordernum' => 'required|numeric|digits:6',
|
||||
];
|
||||
}
|
||||
}
|
||||
4
resources/js/front.js
vendored
4
resources/js/front.js
vendored
|
|
@ -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 ?
|
||||
|
|
|
|||
48
resources/js/pages/poultry-show.js
vendored
48
resources/js/pages/poultry-show.js
vendored
|
|
@ -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 = new Intl.DateTimeFormat('fr-FR', { dateStyle: 'full'}).format(date);
|
||||
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');
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -21,7 +21,12 @@
|
|||
<div class="col text-center">
|
||||
<div class="d-flex flex-column">
|
||||
<div class="text-center">
|
||||
<input id="order_num" name="order_num" type="text" class="commandInput inputMask" pattern="^[0-9]{6}\/[0-9]{3}[A-Z]$" data-mask="000000/000a" length="10" placeholder="{{ __('123456/123A') }}" title="{{ __('Saisissez le numéro de commande tel qu\'indiqué sur l\'image ci-dessous') }}" data-order-number="{{ str_pad($traceaPoultry->order_num, 6, '0', STR_PAD_LEFT) }}">
|
||||
<input
|
||||
id="order_num" name="order_num" type="text"
|
||||
class="commandInput inputMask" pattern="^[0-9]{6}\/[0-9]{3}[A-Z]$"
|
||||
data-mask="000000/000a" length="10" placeholder="{{ __('123456/123A') }}"
|
||||
title="{{ __('Saisissez le numéro de commande tel qu\'indiqué sur l\'image ci-dessous') }}"
|
||||
data-code-lot="{{ $traceaPoultry->external_code_lot }}">
|
||||
@include('back.modules.input-error', ['inputName' => 'order_num'])
|
||||
<div id="order_num_invalid" class="invalid-feedback">{{ __('Numéro de commande invalide') }}</div>
|
||||
</div>
|
||||
|
|
@ -51,16 +56,14 @@
|
|||
<span class="h5 fw-bold text-light">{{ __('Date') }}</span>
|
||||
</div>
|
||||
<div class="text-center mt-1">
|
||||
<span class="fw-bold textDistriResult text-uppercase">{{ $date }}</span>
|
||||
<span id="distriDate" class="fw-bold textDistriResult text-uppercase">{{ $date }}</span>
|
||||
</div>
|
||||
@if($distributionPicture)
|
||||
<div class="text-center mt-3">
|
||||
<span class="h5 fw-bold text-light">{{ $sign }}</span>
|
||||
<div id="distriSign" class="text-center mt-3">
|
||||
<span class="h5 fw-bold text-light"></span>
|
||||
</div>
|
||||
<div class="text-center mt-1">
|
||||
<img class="img-fluid signPicture" src="{{ asset("assets/images/signs/$distributionPicture") }}" alt="{{ $sign }}">
|
||||
<div id="distriPicture" class="text-center mt-1">
|
||||
<img class="img-fluid signPicture" src="">
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -153,7 +153,6 @@ nous avions dit que nous fonctionnions comme cela lors d'une réunion en décemb
|
|||
</div>
|
||||
<div class="container-fluid g-2 poultryShow subpart">
|
||||
@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'))
|
||||
])
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue