Files
oficial/app/src/Service/Persona.php
Juan Pablo Vial 42e1dcdff7 Agregar Proveedor
2024-12-03 16:45:42 -03:00

57 lines
2.0 KiB
PHP

<?php
namespace Incoviba\Service;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository;
use Psr\Log\LoggerInterface;
class Persona extends Ideal\Service
{
public function __construct(LoggerInterface $logger, protected Repository\Persona $personaRepository,
protected Repository\Persona\Datos $datosPersonaRepository)
{
parent::__construct($logger);
}
public function getById(int $rut): Model\Persona
{
return $this->process($this->personaRepository->fetchById($rut));
}
public function add(array $data): Model\Persona
{
try {
$persona = $this->personaRepository->fetchById($data['rut']);
} catch (Implement\Exception\EmptyResult) {
$persona = $this->personaRepository->create($data);
$persona = $this->personaRepository->save($persona);
}
if (isset($data['email']) or isset($data['telefono'])) {
$datosData = ['persona_rut' => $persona->rut];
if (isset($data['email'])) {
$datosData['email'] = $data['email'];
}
if (isset($data['telefono'])) {
$datosData['telefono'] = $data['telefono'];
}
try {
$datos = $this->datosPersonaRepository->fetchByPersona($persona->rut);
$this->datosPersonaRepository->edit($datos, $data);
} catch (Implement\Exception\EmptyResult) {
$datos = $this->datosPersonaRepository->create($datosData);
$this->datosPersonaRepository->save($datos);
}
}
return $this->process($persona);
}
protected function process(Model\Persona $persona): Model\Persona
{
$persona->addFactory('datos', (new Implement\Repository\Factory())
->setCallable([$this->datosPersonaRepository, 'fetchByPersona'])
->setArgs(['persona_rut' => $persona->rut]));
return $persona;
}
}