157 lines
4.7 KiB
PHP
157 lines
4.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Models;
|
||
|
|
|
||
|
|
use App\Enums\FoodType;
|
||
|
|
use App\Enums\PoultryLabelType;
|
||
|
|
use App\Traits\HasCompositePrimaryKey;
|
||
|
|
use Illuminate\Database\Eloquent\Model;
|
||
|
|
use Illuminate\Support\Facades\Cache;
|
||
|
|
use Illuminate\Support\Str;
|
||
|
|
|
||
|
|
class TraceaPoultry extends Model
|
||
|
|
{
|
||
|
|
use HasCompositePrimaryKey;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The primary key for the model.
|
||
|
|
*
|
||
|
|
* @var string
|
||
|
|
*/
|
||
|
|
protected $primaryKey = [
|
||
|
|
'item_code', 'order_num',
|
||
|
|
'external_code_lot'
|
||
|
|
];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Indicates if the IDs are auto-incrementing.
|
||
|
|
*
|
||
|
|
* @var boolean
|
||
|
|
*/
|
||
|
|
public $incrementing = false;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Indicates if the model should be timestamped.
|
||
|
|
*
|
||
|
|
* @var boolean
|
||
|
|
*/
|
||
|
|
public $timestamps = false;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The attributes that are mass assignable.
|
||
|
|
*
|
||
|
|
* @var array
|
||
|
|
*/
|
||
|
|
protected $fillable = [
|
||
|
|
'item_code',
|
||
|
|
'article',
|
||
|
|
'external_code_lot',
|
||
|
|
'breeder_code',
|
||
|
|
'order_num',
|
||
|
|
'opa_lot',
|
||
|
|
'barcode_price',
|
||
|
|
'barcode_weight',
|
||
|
|
'abattoir_lot',
|
||
|
|
'customer_order',
|
||
|
|
'sign',
|
||
|
|
'brand',
|
||
|
|
'family',
|
||
|
|
'exp_date',
|
||
|
|
'prep_date'
|
||
|
|
];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The attributes that should be cast.
|
||
|
|
*
|
||
|
|
* @var array
|
||
|
|
*/
|
||
|
|
protected $casts = [
|
||
|
|
'exp_date' => 'date',
|
||
|
|
'prep_date' => 'date'
|
||
|
|
];
|
||
|
|
|
||
|
|
// * METHODS
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Getter Label
|
||
|
|
*
|
||
|
|
* @return \App\Enums\PoultryLabelType
|
||
|
|
*/
|
||
|
|
public function getLabelAttribute(): PoultryLabelType
|
||
|
|
{
|
||
|
|
$family = Str::upper($this->getAttributeFromArray('family'));
|
||
|
|
switch (true) {
|
||
|
|
case \strpos($family, 'LABEL') !== false:
|
||
|
|
return PoultryLabelType::labelRouge();
|
||
|
|
case \strpos($family, 'BIO') !== false:
|
||
|
|
return PoultryLabelType::labelRouge();
|
||
|
|
default:
|
||
|
|
return PoultryLabelType::unkown();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get associatedBreeder
|
||
|
|
*
|
||
|
|
* @return \App\Models\CafelPoultryBreeder|null
|
||
|
|
*/
|
||
|
|
public function getBreederAttribute(): ?CafelPoultryBreeder
|
||
|
|
{
|
||
|
|
$matches = [];
|
||
|
|
preg_match('/(?P<inuav>V\d{3}[A-Z]{3})/', \strval($this->breeder_code), $matches);
|
||
|
|
if (!\array_key_exists('inuav', $matches)) {
|
||
|
|
return collect();
|
||
|
|
}
|
||
|
|
return Cache::remember("traceaPoultryBreeder$this->id", 5, function () use ($matches) {
|
||
|
|
return CafelPoultryBreeder::where(
|
||
|
|
'inuavs',
|
||
|
|
'LIKE',
|
||
|
|
'%' . \filter_var($matches['inuav'], \FILTER_SANITIZE_STRING) . '%'
|
||
|
|
)->first();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* * Get Bea
|
||
|
|
*
|
||
|
|
* L'explication du batch code est un non sens.... putin de merde
|
||
|
|
*
|
||
|
|
* Comment faisons-nous pour lier notre lot à une note BEA ?
|
||
|
|
* (code lot sous ce format : XXXXX/0 pour les données BEA) -> Code lot CAFEL / Code OPA
|
||
|
|
* Comment faisons-nous pour lier notre lot à son alimentation ?
|
||
|
|
* (code lot sous ce format : XXXXX/0 pour les données alimentation) -> Code lot CAFEL / Code OPA
|
||
|
|
* Pour ces questions, peux-tu nous dire avec les informations que nous recevons du flux Sablé
|
||
|
|
* les règles que nous devons utiliser stp ? * -> @Mathilde Hervier peux-tu répondre à cette question ?
|
||
|
|
* Le 6e champ reçu dans le fichier xml est le code lot OPA qui sert donc à faire le lien avec la CAFEL
|
||
|
|
*
|
||
|
|
* @return \App\Models\CafelBeaPoultry|null
|
||
|
|
*/
|
||
|
|
public function getBeaAttribute(): ?CafelBeaPoultry
|
||
|
|
{
|
||
|
|
// * On utilise code lot_opa vue que son explication de merde est inversée ... Uu
|
||
|
|
return CafelBeaPoultry::whereCodeLotCafel(\intval($this->opa_lot));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* * Get Food
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* L'explication du batch code est un non sens.... putin de merde
|
||
|
|
*
|
||
|
|
* Comment faisons-nous pour lier notre lot à une note BEA ?
|
||
|
|
* (code lot sous ce format : XXXXX/0 pour les données BEA) -> Code lot CAFEL / Code OPA
|
||
|
|
* Comment faisons-nous pour lier notre lot à son alimentation ?
|
||
|
|
* (code lot sous ce format : XXXXX/0 pour les données alimentation) -> Code lot CAFEL / Code OPA
|
||
|
|
* Pour ces questions, peux-tu nous dire avec les informations que nous recevons du flux Sablé
|
||
|
|
* les règles que nous devons utiliser stp ? * -> @Mathilde Hervier peux-tu répondre à cette question ?
|
||
|
|
* Le 6e champ reçu dans le fichier xml est le code lot OPA qui sert donc à faire le lien avec la CAFEL
|
||
|
|
*
|
||
|
|
* @return \App\Models\CafelFood|null
|
||
|
|
*/
|
||
|
|
public function getFoodAttribute(): ?CafelFood
|
||
|
|
{
|
||
|
|
// * On utilise code lot_opa vue que son explication de merde est inversée ... Uu
|
||
|
|
return CafelFood::whereCodeLotCafel(FoodType::chicken(), \intval($this->opa_lot));
|
||
|
|
}
|
||
|
|
}
|