82 lines
1.8 KiB
PHP
82 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Models\OpBrCharcut;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Kwaadpepper\Serial\SerialCaster;
|
|
use App\Models\Customers;
|
|
|
|
class Code extends Model
|
|
{
|
|
protected $table = 'opbrcharcut_codes';
|
|
/**
|
|
* The attributes that are mass assignable.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $fillable = [
|
|
'code_used', 'code_exported',
|
|
'date_creation'
|
|
];
|
|
|
|
/**
|
|
* Indicates if the model should be timestamped.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
public $timestamps = false;
|
|
|
|
// * RELATIONS
|
|
|
|
public function customer()
|
|
{
|
|
return $this->belongsTo(Customers::class);
|
|
}
|
|
|
|
// * FUNCTIONS
|
|
/**
|
|
* Generate code_unique attribute
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getCodeUniqueAttribute()
|
|
{
|
|
if (!$this->id or !\is_integer($this->id) or $this->id < 1) {
|
|
return null;
|
|
}
|
|
return self::intToSerial($this->id);
|
|
}
|
|
|
|
/**
|
|
* Generate a serial from an int.
|
|
*
|
|
* @param integer $int
|
|
* @return string The serial
|
|
* @throws SerialCasterException If an error happens du to config.
|
|
*/
|
|
public static function intToSerial(int $int): string
|
|
{
|
|
return SerialCaster::encode(
|
|
$int,
|
|
\abs(\crc32(config('app.key'))),
|
|
config('opbrcharcut.codeLength'),
|
|
config('opbrcharcut.codeCharList')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Generate a serial from an int.
|
|
*
|
|
* @param string $serial
|
|
* @return integer The ID represented
|
|
* @throws SerialCasterException If an error happens due to config or wrong serial is given.
|
|
*/
|
|
public static function serialToInt(string $serial): int
|
|
{
|
|
return SerialCaster::decode(
|
|
$serial,
|
|
\abs(\crc32(config('app.key'))),
|
|
config('opbrcharcut.codeCharList')
|
|
);
|
|
}
|
|
}
|