setTable('propietario'); } protected function getKey(): string { return 'rut'; } public function create(?array $data = null): Define\Model { $map = (new Implement\Repository\MapperParser(['rut', 'dv', 'nombres'])) ->register('apellido_paterno', (new Implement\Repository\Mapper()) ->setProperty('apellidos') ->setFunction(function($data) { $arr = [ 'paterno' => $data['apellido_paterno'] ]; if ($data['apellido_materno'] !== '') { $arr['materno'] = $data['apellido_materno']; } return $arr; }) ->setDefault([])) ->register('direccion', (new Implement\Repository\Mapper()) ->setProperty('datos') ->setFunction(function($data) { $datos = new Model\Venta\Datos(); if ($data['direccion'] !== null and $data['direccion'] !== 0) { $datos->direccion = $this->direccionRepository->fetchById($data['direccion']); } return $datos; })) ->register('representante', (new Implement\Repository\Mapper()) ->setFunction(function($data) { if ($data['representante'] === null or $data['representante'] === 0) { return null; } return $this->fetchById($data['representante']); })) ->register('otro', (new Implement\Repository\Mapper()) ->setFunction(function($data) { if ($data['otro'] === null) { return null; } return $data['otro'] !== 0; }) ->setDefault(null)); return $this->parseData(new Model\Venta\Propietario(), $data, $map); } public function save(Define\Model $model): Define\Model { $model->rut = $this->saveNew( ['rut', 'dv', 'nombres', 'apellido_paterno', 'apellido_materno', 'direccion', 'otro', 'representante'], [$model->rut, $model->dv, $model->nombres, $model->apellidos['paterno'], $model->apellidos['materno'], $model->datos->direccion->id, $model->otro->rut ?? 0, $model->contacto->rut ?? 0] ); return $model; } public function edit(Define\Model $model, array $new_data): Define\Model { return $this->update($model, ['dv', 'nombres', 'apellido_paterno', 'apellido_materno', 'direccion', 'otro', 'representante'], $new_data); } public function filterData(array $data): array { return array_intersect_key($data, array_flip(['rut', 'dv', 'nombres', 'apellido_paterno', 'apellido_materno', 'direccion', 'representante'])); } }