proveedorRepository->fetchAll($orderBy)); } catch (Implement\Exception\EmptyResult) { return []; } } public function getById(int $proveedor_rut): ?Model\Inmobiliaria\Proveedor { try { return $this->process($this->proveedorRepository->fetchById($proveedor_rut)); } catch (Implement\Exception\EmptyResult) { return null; } } public function add(array $data): Model\Inmobiliaria\Proveedor { $filteredData = $this->proveedorRepository->filterData($data); try { $proveedor = $this->process($this->proveedorRepository->fetchByNombre($filteredData['nombre'])); if ($proveedor->contacto->rut !== $data['contacto']['rut']) { $contacto = $this->contactoService->add($data['contacto']); return $this->proveedorRepository->edit($proveedor, ['contacto_rut' => $contacto->rut]); } return $proveedor; } catch (Implement\Exception\EmptyResult) { $contacto = $this->contactoService->add($data['contacto']); $filteredData['contacto_rut'] = $contacto->rut; $proveedor = $this->proveedorRepository->create($filteredData); return $this->process($this->proveedorRepository->save($proveedor)); } } /** * @TODO Implement * @param Model\Inmobiliaria\Proveedor $proveedor * @param array $data * @return Model\Inmobiliaria\Proveedor */ public function edit(Model\Inmobiliaria\Proveedor $proveedor, array $data): Model\Inmobiliaria\Proveedor { return $proveedor; } public function delete(Model\Inmobiliaria\Proveedor $proveedor): bool { try { $this->proveedorRepository->remove($proveedor); return true; } catch (Implement\Exception\EmptyResult | PDOException) { return false; } } protected function process(Model\Inmobiliaria\Proveedor $proveedor): Model\Inmobiliaria\Proveedor { $proveedor->addFactory('datos', (new Implement\Repository\Factory())->setCallable([$this->datosRepository, 'fetchByProveedor'])->setArgs(['proveedor_rut' => $proveedor->rut])); return $proveedor; } }