ldc-bogt/app/Models/TraceaPoultry.php

157 lines
4.7 KiB
PHP
Raw Permalink Normal View History

<?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));
}
}