HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/api_matriculas/app/Services/ConfigurationService.php
<?php

namespace App\Services;

use App\Http\Resources\ConfigurationResource;
use App\Models\ContractFormat;
use App\Repositories\ConfigurationRepository;
use App\Repositories\ParentRepository;
use Exception;

class ConfigurationService
{

    protected $configurationRepository;
    protected $parentRepository;

    public function __construct(
        ConfigurationRepository $configurationRepository,
        ParentRepository $parentRepository
    ) {
        $this->configurationRepository = $configurationRepository;
        $this->parentRepository = $parentRepository;
    }



    public function showByCode($code, $mapper = true)
    {
        $register = $this->configurationRepository->getByCode($code);
        if (!$register) {
            throw new Exception("Configuración no existe o fue eliminada", 400);
        }
        if ($mapper) {
            return (object)(new ConfigurationResource($register))->resolve();
        }
        return $register;
    }


    public function storeOrUpdate($requestData)
    {
        $register = $this->configurationRepository->getByCode($requestData->code);
        if (!$register) {
            throw new Exception("Configuración no existe o fue eliminada", 400);
        }
        $encodedData = $requestData->input('data');
        $config = json_decode(base64_decode($encodedData), true);

        $mappedFields = ConfigurationResource::mapFields($config, $requestData->code);

        // Validar que el RUT genérico de Toku no exista como apoderado
        if ($requestData->code === 'toku' && !empty($mappedFields['generic_rut'])) {
            $formattedRut = formatterRut($mappedFields['generic_rut'], false);
            $existingParent = $this->parentRepository->getByRut($formattedRut);
            if ($existingParent) {
                throw new Exception("El RUT genérico ingresado ya está registrado como apoderado ({$existingParent->first_name} {$existingParent->last_name}). Utilice un RUT que no esté en uso.", 409);
            }
        }

        $register->data_fields = json_encode((object)$mappedFields);
        $update = $this->configurationRepository->updateOrCreate($register);
        if (!$update) {
            throw new Exception("Ocurrió un problema al actualizar registro", 500);
        }
        return $update;
    }
}