From 1f0f25bbdeb3505eaf70cb5f8775678385d6801f Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Thu, 28 Nov 2024 11:39:19 -0300 Subject: [PATCH 1/8] Migraciones --- app/src/Model/Inmobiliaria/DatosProveedor.php | 23 ++++++++++++++ app/src/Model/Inmobiliaria/Proveedor.php | 30 +++++++++---------- app/tests/unit/src/Model/ProveedorTest.php | 22 ++++++++++++++ 3 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 app/src/Model/Inmobiliaria/DatosProveedor.php create mode 100644 app/tests/unit/src/Model/ProveedorTest.php diff --git a/app/src/Model/Inmobiliaria/DatosProveedor.php b/app/src/Model/Inmobiliaria/DatosProveedor.php new file mode 100644 index 0000000..aacd447 --- /dev/null +++ b/app/src/Model/Inmobiliaria/DatosProveedor.php @@ -0,0 +1,23 @@ + $this->proveedor, + 'direccion' => $this->direccion, + 'telefono' => $this->telefono, + 'giro' => $this->giro + ]; + } +} diff --git a/app/src/Model/Inmobiliaria/Proveedor.php b/app/src/Model/Inmobiliaria/Proveedor.php index ccb8934..9a84059 100644 --- a/app/src/Model/Inmobiliaria/Proveedor.php +++ b/app/src/Model/Inmobiliaria/Proveedor.php @@ -6,24 +6,22 @@ use Incoviba\Model; class Proveedor extends Ideal\Model { - public Model\Inmobiliaria $inmobiliaria; - public Model\Sociedad $sociedad; - - protected array $tipos; - public function tipos(): array - { - if (!isset($this->tipos)) { - $this->tipos = $this->runFactory('tipos'); - } - return $this->tipos; - } + public int $rut; + public string $digito; + public string $nombre; + public ?string $razon; + public ?DatosProveedor $datos; + public ?Model\Persona $contacto; public function jsonSerialize(): mixed { - return array_merge(parent::jsonSerialize(), [ - 'inmobiliaria' => $this->inmobiliaria, - 'sociedad' => $this->sociedad, - 'tipos' => $this->tipos(), - ]); + return [ + 'rut' => $this->rut, + 'digito' => $this->digito, + 'nombre' => $this->nombre, + 'razon' => $this->razon, + 'datos' => $this->datos, + 'contacto' => $this->contacto + ]; } } diff --git a/app/tests/unit/src/Model/ProveedorTest.php b/app/tests/unit/src/Model/ProveedorTest.php new file mode 100644 index 0000000..044834d --- /dev/null +++ b/app/tests/unit/src/Model/ProveedorTest.php @@ -0,0 +1,22 @@ +assertInstanceOf(Proveedor::class, $proveedor); + } + public function testProperties() + { + $proveedor = new Proveedor(); + + $this->assertObjectHasProperty('rut', $proveedor); + $this->assertObjectHasProperty('digito', $proveedor); + $this->assertObjectHasProperty('nombre', $proveedor); + $this->assertObjectHasProperty('razon', $proveedor); + $this->assertObjectHasProperty('contacto', $proveedor); + } +} -- 2.49.0 From b2c55c08ce7f94e90e704c24518d3caad9d778e7 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Fri, 29 Nov 2024 17:47:12 -0300 Subject: [PATCH 2/8] Servicio y vista --- .../views/inmobiliarias/proveedores.blade.php | 52 ++++++++----------- .../Controller/Inmobiliarias/Proveedores.php | 12 ++--- app/src/Service/Inmobiliaria/Proveedor.php | 35 +++++++++++++ 3 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 app/src/Service/Inmobiliaria/Proveedor.php diff --git a/app/resources/views/inmobiliarias/proveedores.blade.php b/app/resources/views/inmobiliarias/proveedores.blade.php index 74f0178..c9ef3f6 100644 --- a/app/resources/views/inmobiliarias/proveedores.blade.php +++ b/app/resources/views/inmobiliarias/proveedores.blade.php @@ -15,15 +15,15 @@ - @foreach ($sociedades as $sociedad) + @foreach ($proveedores as $proveedor) - {{$sociedad->nombre}} - {{$sociedad->contacto->nombreCompleto()}} + {{$proveedor->nombre}} + {{$proveedor->contacto->nombreCompleto()}} - - @@ -38,62 +38,53 @@
- +
-
- +
- -
-
- - +
Contacto
- +
-
- +
- +
- +
- +
+56
- +
@@ -133,7 +124,7 @@ }, proveedores: '' }, - data: JSON.parse('{!! json_encode($sociedades) !!}'), + data: JSON.parse('{!! json_encode($proveedores) !!}'), add() { return { sociedad: () => { @@ -175,7 +166,8 @@ } } }, - edit() {}, + edit() { + }, remove() { return { sociedad: rut => { @@ -253,7 +245,7 @@ } let suma = 0 let mul = 2 - for (let i = rut.length-1; i >= 0; i--) { + for (let i = rut.length - 1; i >= 0; i--) { suma += parseInt(rut[i]) * mul mul = (mul + 1) % 8 || 2 } diff --git a/app/src/Controller/Inmobiliarias/Proveedores.php b/app/src/Controller/Inmobiliarias/Proveedores.php index 09d736e..f7b5750 100644 --- a/app/src/Controller/Inmobiliarias/Proveedores.php +++ b/app/src/Controller/Inmobiliarias/Proveedores.php @@ -11,17 +11,13 @@ use Incoviba\Service; class Proveedores { public function __invoke(ServerRequestInterface $request, ResponseInterface $response, View $view, - Service\Sociedad $sociedadService, + Service\Inmobiliaria\Proveedor $proveedorService, Repository\Inmobiliaria\TipoSociedad $tipoSociedad): ResponseInterface { - $sociedades = []; + $proveedores = []; try { - $sociedades = $sociedadService->getAll('nombre'); + $proveedores = $proveedorService->getAll('nombre'); } catch (EmptyResult) {} - $tiposSociedades = []; - try { - $tiposSociedades = $tipoSociedad->fetchAll('descripcion'); - } catch (EmptyResult) {} - return $view->render($response, 'inmobiliarias.proveedores', compact('sociedades', 'tiposSociedades')); + return $view->render($response, 'inmobiliarias.proveedores', compact('proveedores')); } } diff --git a/app/src/Service/Inmobiliaria/Proveedor.php b/app/src/Service/Inmobiliaria/Proveedor.php new file mode 100644 index 0000000..d564b10 --- /dev/null +++ b/app/src/Service/Inmobiliaria/Proveedor.php @@ -0,0 +1,35 @@ +proveedorRepository->fetchAll($orderBy); + } catch (Implement\Exception\EmptyResult) { + return []; + } + } + + public function getByRut(int $proveedor_rut): ?Model\Inmobiliaria\Proveedor + { + try { + return $this->proveedorRepository->fetchById($proveedor_rut); + } catch (Implement\Exception\EmptyResult) { + return null; + } + } +} -- 2.49.0 From 5b442602451ccd7122fca0bec729c21de9a04c34 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Tue, 3 Dec 2024 16:45:04 -0300 Subject: [PATCH 3/8] Separacion logs --- app/setup/setups/logs.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/setup/setups/logs.php b/app/setup/setups/logs.php index 4630add..fe62d82 100644 --- a/app/setup/setups/logs.php +++ b/app/setup/setups/logs.php @@ -17,19 +17,19 @@ return [ ), new Monolog\Handler\FilterHandler( ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') - ? (new Monolog\Handler\RotatingFileHandler('/logs/notices.log', 10)) + ? (new Monolog\Handler\RotatingFileHandler('/logs/debug.log', 10)) ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)) : new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:notices'), - Monolog\Level::Notice, - Monolog\Level::Warning + Monolog\Level::Debug, + Monolog\Level::Info ), new Monolog\Handler\FilterHandler( ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') - ? (new Monolog\Handler\RotatingFileHandler('/logs/debug.log', 10)) + ? (new Monolog\Handler\RotatingFileHandler('/logs/notices.log', 10)) ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)) : (new Incoviba\Common\Implement\Log\MySQLHandler($container->get(Incoviba\Common\Define\Connection::class))) ->setFormatter(new Incoviba\Common\Implement\Log\PDOFormatter()), - Monolog\Level::Debug, + Monolog\Level::Notice, Monolog\Level::Warning ) ], [ -- 2.49.0 From 42e1dcdff70f5ffb1d27aee9a7edd15926fd23c7 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Tue, 3 Dec 2024 16:45:20 -0300 Subject: [PATCH 4/8] Agregar Proveedor --- app/common/Ideal/Repository.php | 2 +- .../routes/api/inmobiliarias/proveedores.php | 13 +- .../views/inmobiliarias/proveedores.blade.php | 214 +++--------------- .../proveedores/add_modal.blade.php | 137 +++++++++++ .../views/layout/body/scripts/rut.blade.php | 9 + .../API/Inmobiliarias/Proveedores.php | 79 +++++++ .../Controller/Inmobiliarias/Proveedores.php | 3 +- app/src/Model/DatosPersona.php | 32 --- app/src/Model/Inmobiliaria/Proveedor.php | 20 +- .../Datos.php} | 5 +- app/src/Model/Persona.php | 7 +- app/src/Model/Persona/Datos.php | 34 +++ app/src/Repository/Inmobiliaria/Proveedor.php | 45 ++-- .../Inmobiliaria/Proveedor/Datos.php | 52 +++++ app/src/Repository/Persona.php | 7 +- .../{DatosPersona.php => Persona/Datos.php} | 24 +- app/src/Repository/Sociedad.php | 2 +- app/src/Service/Inmobiliaria/Proveedor.php | 59 ++++- app/src/Service/Persona.php | 12 +- 19 files changed, 473 insertions(+), 283 deletions(-) create mode 100644 app/resources/views/inmobiliarias/proveedores/add_modal.blade.php create mode 100644 app/src/Controller/API/Inmobiliarias/Proveedores.php delete mode 100644 app/src/Model/DatosPersona.php rename app/src/Model/Inmobiliaria/{DatosProveedor.php => Proveedor/Datos.php} (78%) create mode 100644 app/src/Model/Persona/Datos.php create mode 100644 app/src/Repository/Inmobiliaria/Proveedor/Datos.php rename app/src/Repository/{DatosPersona.php => Persona/Datos.php} (83%) diff --git a/app/common/Ideal/Repository.php b/app/common/Ideal/Repository.php index e800bc6..0edb118 100644 --- a/app/common/Ideal/Repository.php +++ b/app/common/Ideal/Repository.php @@ -34,7 +34,7 @@ abstract class Repository implements Define\Repository $query = $this->connection->getQueryBuilder() ->delete()->from($this->getTable()) ->where("{$this->getKey()} = ?"); - $this->connection->execute($query, [$model->id]); + $this->connection->execute($query, [$model->{$this->getKey()}]); } /** diff --git a/app/resources/routes/api/inmobiliarias/proveedores.php b/app/resources/routes/api/inmobiliarias/proveedores.php index df5ab4b..306c496 100644 --- a/app/resources/routes/api/inmobiliarias/proveedores.php +++ b/app/resources/routes/api/inmobiliarias/proveedores.php @@ -1,11 +1,12 @@ group('/proveedores', function($app) { - $app->post('/add[/]', [Agentes::class, 'add']); - $app->post('/register[/]', [Agentes::class, 'register']); - $app->get('[/]', Agentes::class); + $app->post('/add[/]', [Proveedores::class, 'add']); + //$app->post('/register[/]', [Proveedores::class, 'register']); + $app->get('[/]', Proveedores::class); }); -$app->group('/proveedor/{agente_id}', function($app) { - $app->post('/edit[/]', [Agentes::class, 'edit']); +$app->group('/proveedor/{proveedor_rut:[0-9]+}', function($app) { + $app->post('/edit[/]', [Proveedores::class, 'edit']); + $app->delete('/delete[/]', [Proveedores::class, 'delete']); }); diff --git a/app/resources/views/inmobiliarias/proveedores.blade.php b/app/resources/views/inmobiliarias/proveedores.blade.php index c9ef3f6..0fe7d25 100644 --- a/app/resources/views/inmobiliarias/proveedores.blade.php +++ b/app/resources/views/inmobiliarias/proveedores.blade.php @@ -8,7 +8,7 @@ Nombre Contacto - @@ -20,10 +20,10 @@ {{$proveedor->nombre}} {{$proveedor->contacto->nombreCompleto()}} - - @@ -32,74 +32,16 @@ - + + @include('inmobiliarias.proveedores.add_modal') @endsection +@include('layout.body.scripts.rut') + @push('page_scripts') +@endpush diff --git a/app/resources/views/layout/body/scripts/rut.blade.php b/app/resources/views/layout/body/scripts/rut.blade.php index 3a93ebe..832d810 100644 --- a/app/resources/views/layout/body/scripts/rut.blade.php +++ b/app/resources/views/layout/body/scripts/rut.blade.php @@ -2,6 +2,9 @@ +@endpush diff --git a/app/src/Controller/API/Inmobiliarias/Proveedores.php b/app/src/Controller/API/Inmobiliarias/Proveedores.php index 572ccc0..bd1d265 100644 --- a/app/src/Controller/API/Inmobiliarias/Proveedores.php +++ b/app/src/Controller/API/Inmobiliarias/Proveedores.php @@ -22,6 +22,18 @@ class Proveedores extends Ideal\Controller } catch (Implement\Exception\EmptyResult) {} return $this->withJson($response, $output); } + public function get(ServerRequestInterface $request, ResponseInterface $response, + Service\Inmobiliaria\Proveedor $proveedorService, int $proveedor_rut): ResponseInterface + { + $output = [ + 'proveedor_rut' => $proveedor_rut, + 'proveedor' => null, + ]; + try { + $output['proveedor'] = $proveedorService->getById($proveedor_rut); + } catch (Implement\Exception\EmptyResult) {} + return $this->withJson($response, $output); + } public function add(ServerRequestInterface $request, ResponseInterface $response, Service\Inmobiliaria\Proveedor $proveedorService): ResponseInterface { @@ -54,7 +66,8 @@ class Proveedores extends Ideal\Controller foreach ($input['proveedores'] as $json) { $data = json_decode($json, true); try { - $output['proveedores'] []= $proveedorService->edit($data); + $proveedor = $proveedorService->getById($data['rut']); + $output['proveedores'] []= $proveedorService->edit($proveedor, $data); $output['success'] []= true; } catch (Implement\Exception\EmptyResult) { $output['success'] []= false; diff --git a/app/src/Repository/Persona.php b/app/src/Repository/Persona.php index 89f2b15..52ba83c 100644 --- a/app/src/Repository/Persona.php +++ b/app/src/Repository/Persona.php @@ -30,18 +30,9 @@ class Persona extends Ideal\Repository } public function edit(Define\Model $model, array $new_data): Model\Persona { - return $this->update($model, $new_data, ['rut', 'digito', 'nombres', 'apellido_paterno', 'apellido_materno']); + return $this->update($model, ['digito', 'nombres', 'apellido_paterno', 'apellido_materno'], $new_data); } - /*public function fetchById(int $rut): Model\Persona - { - $query = $this->connection->getQueryBuilder() - ->select() - ->from($this->getTable()) - ->where('rut = ?'); - return $this->fetchOne($query, [$rut]); - }*/ - public function filterData(array $data): array { return array_intersect_key($data, array_flip(['rut', 'digito', 'nombres', 'apellido_paterno', 'apellido_materno'])); diff --git a/app/src/Repository/Persona/Datos.php b/app/src/Repository/Persona/Datos.php index 574b4cb..1f9338d 100644 --- a/app/src/Repository/Persona/Datos.php +++ b/app/src/Repository/Persona/Datos.php @@ -80,9 +80,4 @@ class Datos extends Ideal\Repository ->where('persona_rut = ?'); return $this->fetchOne($query, [$persona_rut]); } - - protected function getKey(): string - { - return 'persona_rut'; - } } diff --git a/app/src/Service/Inmobiliaria/Proveedor.php b/app/src/Service/Inmobiliaria/Proveedor.php index ea40a32..219997c 100644 --- a/app/src/Service/Inmobiliaria/Proveedor.php +++ b/app/src/Service/Inmobiliaria/Proveedor.php @@ -55,14 +55,22 @@ class Proveedor extends Ideal\Service } } /** - * @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; + $filteredData = $this->proveedorRepository->filterData($data); + try { + if ($proveedor->contacto->rut !== $data['contacto']['rut']) { + $contacto = $this->contactoService->getById($data['contacto']['rut']); + $this->contactoService->edit($contacto, $data['contacto']); + } + return $this->process($this->proveedorRepository->edit($proveedor, $filteredData)); + } catch (Implement\Exception\EmptyResult) { + return $proveedor; + } } public function delete(Model\Inmobiliaria\Proveedor $proveedor): bool { diff --git a/app/src/Service/Persona.php b/app/src/Service/Persona.php index b87af5c..5e8244e 100644 --- a/app/src/Service/Persona.php +++ b/app/src/Service/Persona.php @@ -45,6 +45,17 @@ class Persona extends Ideal\Service } return $this->process($persona); } + public function edit(Model\Persona $persona, array $data): Model\Persona + { + $filteredData = $this->personaRepository->filterData($data); + try { + $datosData = $this->datosPersonaRepository->filterData($data); + $this->datosPersonaRepository->edit($persona->datos(), $datosData); + return $this->personaRepository->edit($persona, $filteredData); + } catch (Implement\Exception\EmptyResult) { + return $persona; + } + } protected function process(Model\Persona $persona): Model\Persona { -- 2.49.0 From fc575c3078254910dabee0f628b11bbf0aaca308 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Tue, 3 Dec 2024 17:39:30 -0300 Subject: [PATCH 6/8] Menu incluye proveedores --- .../body/header/menu/inmobiliarias.blade.php | 8 ++++- .../body/header/menu/proyectos.blade.php | 3 +- .../layout/body/header/menu/ventas.blade.php | 29 +++++++++---------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/app/resources/views/layout/body/header/menu/inmobiliarias.blade.php b/app/resources/views/layout/body/header/menu/inmobiliarias.blade.php index 9aa161c..5c8eb87 100644 --- a/app/resources/views/layout/body/header/menu/inmobiliarias.blade.php +++ b/app/resources/views/layout/body/header/menu/inmobiliarias.blade.php @@ -1 +1,7 @@ -Inmobiliarias + diff --git a/app/resources/views/layout/body/header/menu/proyectos.blade.php b/app/resources/views/layout/body/header/menu/proyectos.blade.php index 86e5bc2..eceae0e 100644 --- a/app/resources/views/layout/body/header/menu/proyectos.blade.php +++ b/app/resources/views/layout/body/header/menu/proyectos.blade.php @@ -1,8 +1,7 @@ diff --git a/app/resources/views/layout/body/header/menu/ventas.blade.php b/app/resources/views/layout/body/header/menu/ventas.blade.php index 5df196e..a2ebf8f 100644 --- a/app/resources/views/layout/body/header/menu/ventas.blade.php +++ b/app/resources/views/layout/body/header/menu/ventas.blade.php @@ -1,26 +1,25 @@