This commit is contained in:
2020-03-22 17:25:11 -03:00
parent dc3faee09e
commit 00f9a10cbf
36 changed files with 559 additions and 68 deletions

1
.ENV Normal file
View File

@ -0,0 +1 @@
ADMIN_PASSWORD admin

View File

@ -0,0 +1,8 @@
<?php
use Psr\Container\ContainerInterface as Container;
return [
Symfony\Component\Filesystem\Filesystem::class => function(Container $c) {
return new Symfony\Component\Filesystem\Filesystem();
}
];

View File

@ -8,6 +8,14 @@ return [
'{folders.resources}',
'cache'
])),
'folders.upload' => DI\string(implode(DIRECTORY_SEPARATOR, [
'{folders.base}',
'uploads'
])),
'folders.data' => DI\string(implode(DIRECTORY_SEPARATOR, [
'{folders.resources}',
'data'
])),
'blade_template_path' => DI\get('folders.templates'),
'blade_cache_path' => DI\get('folders.cache'),
'urls.assets' => DI\string(implode('/', [
@ -32,8 +40,8 @@ return [
])),
'urls.metro.logo' => 'https://img.freepik.com/free-icon/santiago-metro-logo_318-66588.jpg?size=338&ext=jpg',
'urls.notaria.turno' => 'http://www.notariasdeturno.cl',
'urls.play.store' => 'https://play.google.com/store/apps/details?id=cl.totalpack.suturno.movil',
'urls.play.store.logo' => 'https://www.gstatic.com/android/market_images/web/favicon_v2.ico',
'urls.play.store' => 'https://zeroq.cl/#/local/notaria-patricio-raby',
'urls.play.store.logo' => 'https://zeroq.cl/img/logo-small.png',
'assets' => (object) [
(object) [
'script' => 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js'
@ -56,7 +64,9 @@ return [
(object) [
'style' => implode('/', ['assets', 'styles', 'metro.css']),
'fonts' => [
'https://fonts.googleapis.com/css?family=Roboto&subset=latin&display=swap',
'https://fonts.googleapis.com/css?family=Roboto&subset=latin&display=swap'
],
'xfont' => [
implode('/', ['assets', 'fonts', 'metro.ttf'])
]
]

View File

@ -1,2 +1,11 @@
<?php
$app->add(new ProVM\NotariaRaby\Common\Middleware\Blade($app->getContainer()));
$app->add(new Tuupola\Middleware\HttpBasicAuthentication([
'path' => $app->getContainer()->get('urls.base') . '/admin',
'ignore' => [
'/admin/login'
],
'users' => [
'admin' => 'admin'
]
]));

View File

@ -1,8 +1,8 @@
<?php
use Psr\Container\ContainerInterface;
use Psr\Container\ContainerInterface as Container;
return [
Slim\Views\Blade::class => function(ContainerInterface $container) {
Slim\Views\Blade::class => function(Container $container) {
return new Slim\Views\Blade(
$container->get('blade_template_path'),
$container->get('blade_cache_path'),
@ -23,5 +23,10 @@ return [
'assets' => $container->get('assets')
]
);
},
ProVM\Common\Service\Filemanager::class => function(Container $c) {
$manager = new ProVM\Common\Service\Filemanager($c->get(Symfony\Component\Filesystem\Filesystem::class), $c->get('folders.upload'));
$manager->addFolder('data', $c->get('folders.data'));
return $manager;
}
];

View File

@ -0,0 +1,12 @@
<?php
namespace ProVM\NotariaRaby\Common\Controller\Web\Admin;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
class Admin {
public function __invoke(Request $request, Response $response, View $view): Response {
return $view->render($response, 'admin.admin');
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace ProVM\NotariaRaby\Common\Controller\Web\Admin;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
class Login {
public function __invoke(Request $request, Response $response, View $view): Response {
return $view->render($response, 'admin.login');
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace ProVM\NotariaRaby\Common\Controller\Web\Admin;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
use ProVM\Common\Service\Filemanager;
class Notificacion {
public function __invoke(Request $request, Response $response, View $view, Filemanager $filemanager): Response {
$filename = 'notificacion.yml';
$notificacion = $filemanager->load($filename);
if (!$notificacion) {
$notificacion = (object) [
'title' => '',
'text' => '',
'active' => false
];
}
return $view->render($response, 'admin.notificacion.show', compact('notificacion'));
}
public function do_edit(Request $request, Response $response, View $view, Filemanager $filemanager): Response {
$post = $request->getParsedBody();
$filename = 'notificacion.yml';
$notificacion = $filemanager->load($filename);
if (!$notificacion) {
$notificacion = (object) [
'title' => '',
'text' => '',
'active' => false
];
}
$notificacion->title = $post['title'];
$notificacion->text = $post['text'];
$notificacion->active = (isset($post['active']) and $post['active'] == 'on') ? true : false;
$filemanager->save($filename, $notificacion);
return $response
->withHeader('Location', implode('/', [
$container->get('urls.base'),
'admin',
'notificacion'
]))
->withStatus(302);
}
}

View File

@ -13,13 +13,6 @@ class Home {
'contenido' => "Gertrudis Echenique 30, of. 32, El Golf\n<span class=\"icon-metro\"></span> Metro Alcantara"
];
$suplente = (object) [
'horario' => (object) [
'titulo' => "Horario lunes a viernes\n9:30 - 13:30 | 15:30 - 18:00",
'contenido' => "La atención dentro del horario, puede verse
afectada circunstancialmente y sin previo
aviso, por encontrarse el notario cumpliendo
funciones fuera de la Notaría."
],
'datos' => (object) [
'fechas' => "DEL 1 DE ABRIL AL 15 DE MAYO",
'nombre' => "MARIA VIRGINIA\nWIELANDT COVARRUBIAS"

View File

@ -4,9 +4,12 @@ namespace ProVM\NotariaRaby\Common\Controller\Web;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
use ProVM\Common\Service\Filemanager;
class Notaria {
public function __invoke(Request $request, Response $response, View $view): Response {
return $view->render($response, 'notaria');
public function __invoke(Request $request, Response $response, View $view, Filemanager $filemanager): Response {
$filename = 'equipos.yml';
$equipos = $filemanager->folder('data')->load($filename);
return $view->render($response, 'notaria', compact('equipos'));
}
}

View File

@ -10,7 +10,10 @@
"php-di/slim-bridge": "^3.0",
"zeuxisoo/slim-whoops": "^0.7.2",
"whoops/soap": "^1.0",
"symfony/var-dumper": "^5.0"
"symfony/var-dumper": "^5.0",
"symfony/filesystem": "^5.0",
"tuupola/slim-basic-auth": "^3.2",
"mustangostang/spyc": "^0.6.3"
},
"require-dev": {
"phpunit/phpunit": "^8.5",

View File

@ -0,0 +1,80 @@
<?php
namespace ProVM\Common\Service;
use Spyc as Yaml;
use Symfony\Component\Filesystem\Filesystem;
class Filemanager {
protected $filesystem;
protected $base_folder;
public function __construct(Filesystem $filesystem, string $base_folder) {
$this->filesystem = $filesystem;
$this->base_folder = $base_folder;
}
protected function fullPath(string $filename): string {
if ($this->filesystem->exists($filename)) {
return $filename;
}
return implode(DIRECTORY_SEPARATOR, [
$this->base_folder,
$filename
]);
}
protected $folders;
public function addFolder(string $name, string $folder) {
if ($this->folders === null) {
$this->folders = [];
}
$this->folders[$name] = $folder;
}
public function folder(string $name) {
return new Filemanager($this->filesystem, $this->folders[$name]);
}
public function load(string $filename) {
$filename = $this->fullPath($filename);
if (!$this->filesystem->exists($filename)) {
return false;
}
$file = new \SplFileInfo($filename);
$method = 'load' . ucfirst($file->getExtension());
return $this->parseData($this->{$method}($filename));
}
protected function loadYml(string $filename) {
return Yaml::YAMLLoad($filename);
}
protected function loadYaml(string $filename) {
return $this->loadYml($filename);
}
protected function loadJson(string $filename) {
return json_decode(trim(file_get_contents($filename)));
}
protected function loadPhp(string $filename) {
return include $filename;
}
protected function parseData($data) {
$temp = $data;
if (is_array($temp)) {
$is_object = false;
foreach ($data as $i => $sub) {
if (!is_numeric($i)) {
$is_object = true;
}
$temp[$i] = $this->parseData($sub);
}
if ($is_object) {
$temp = (object) $temp;
}
}
return $temp;
}
public function save(string $filename, $data) {
if (is_object($data)) {
$data = (array) $data;
}
if (is_array($data)) {
$data = implode(PHP_EOL, $data);
}
$filename = $this->fullPath($filename);
file_put_contents($filename, $data);
}
}

View File

@ -1,6 +1,3 @@
$(document).ready(function() {
var base_width = 1110
var width = $(window).width()
var padding = (width - base_width) / 2
$('#page_container').find('.padded').css('padding-left', padding + 'px').css('padding-right', padding + 'px')
})

View File

@ -0,0 +1,10 @@
#equipos {
padding-top: 50px;
padding-bottom: 50px;
}
#transparencia {
background-color: rgba(0, 0, 0, .05);
padding-top: 50px;
padding-bottom: 50px;
font-family: Roboto;
}

View File

@ -0,0 +1,7 @@
documentos:
- titulo: Autorizaciones
- titulo: Declaraciones
- titulo: Certificados
- titulo: Poderes
- titulo: Contratos
- titulo: Otros

View File

@ -0,0 +1,40 @@
- titulo: ABOGADOS
miembros:
- nombre: María Virginia Wielandt Covarrubias
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- titulo: ESCRITURAS PÚBLICAS
miembros:
- nombre: Paola Díaz de Lartundo
cargo: Jefe de Registro
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- nombre: Carmen Gloria Alvarez Carrasco
cargo: Jefe de Registro
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- nombre: Roxana Muñoz Donoso
cargo: Jefe de Registro
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- titulo: INSTRUMENTOS PRIVADOS
miembros:
- nombre: Massiel Guzmán Villalobos
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- titulo: FACTORING
miembros:
- nombre: Karen Ramirez Gortaris
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- titulo: PROTESTOS
miembros:
- nombre: Alejandro González Villalobos
cargo: Asistente
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl
- titulo: ADMINISTRACIÓN CUENTAS
miembros:
- nombre: Juan Corrales Carrasco
telefono: +56 2 2222 2222
email: vwielandt@notariaraby.cl

View File

@ -0,0 +1,20 @@
<?php
use ProVM\NotariaRaby\Common\Controller\Web\Admin\Admin;
$app->group('/admin', function($app) {
$folder = implode(DIRECTORY_SEPARATOR, [
__DIR__,
'admin'
]);
if (file_exists($folder)) {
$files = new DirectoryIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
include_once $file->getRealPath();
}
}
$app->get('[/]', Admin::class);
});

View File

@ -0,0 +1,7 @@
<?php
use ProVM\NotariaRaby\Common\Controller\Web\Admin\Notificacion;
$app->group('/notificacion', function($app) {
$app->get('[/]', Notificacion::class);
$app->post('[/]', [Notificacion::class, 'do_edit']);
});

View File

@ -0,0 +1,5 @@
@extends('admin.layout.base')
@section('content')
@endsection

View File

@ -0,0 +1,12 @@
@extends('layout.base')
@section('page_title')
- Admin
@endsection
@section('page_content')
<div class="ui container">
@include('admin.layout.menu')
@yield('content')
</div>
@endsection

View File

@ -0,0 +1,8 @@
<div class="ui container">
<nav class="ui secondary pointing menu">
<a class="item" href="{{$urls->base}}">Inicio</a>
<a class="active item" href="{{$urls->base}}/admin">Administraci&oacute;n</a>
<a class="item" href="{{$urls->base}}/admin/notificacion">Notificaci&oacute;n</a>
</nav>
</div>
<br />

View File

@ -0,0 +1,11 @@
@extends('admin.base')
@section('content')
<form class="ui form" method="post" action="{{$base_url}}/admin/login">
<div class="inline field">
<label>Clave</label>
<input type="password" name="clave" />
</div>
<button class="ui button">Entrar</button>
</form>
@endsection

View File

@ -0,0 +1,36 @@
@extends('admin.layout.base')
@section('content')
<form class="ui form" method="post" action="{{$urls->base}}/admin/notificacion">
<div class="inline field">
<label>T&iacute;tulo</label>
<input type="text" name="title" value="{{$notificacion->title}}" />
</div>
<div class="six wide field">
<label>Texto</label>
<textarea name="text">
{{$notificacion->text}}
</textarea>
</div>
<div class="inline field">
<div class="ui slider checkbox" id="activar">
<label>Activar</label>
<input type="checkbox" name="active"
@if ($notificacion->active)
checked="checked"
@endif
/>
</div>
</div>
<button class="ui button">Editar</button>
</form>
<br />
@endsection
@push('scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#activar').checkbox()
})
</script>
@endpush

View File

@ -1,5 +1,7 @@
<div class="banner padded">
@include('home.banner.pastilla')
<div class="banner">
<div class="ui container">
@include('home.banner.pastilla')
</div>
</div>
@push('styles')

View File

@ -1,17 +1,19 @@
<div id="indice" class="ui grid padded">
<div class="two columns row">
<div class="column img">
<img src="{{$urls->assets->images}}/Indice.jpg" />
</div>
<div class="column contenido">
<div class="titulo">&Iacute;NDICE</div>
<br />
<nav class="ui divided list">
<a class="item" href="">Repertorios</a>
<a class="item" href="">Escrituras protocolizadas</a>
<a class="item" href="">Anotaciones</a>
<a class="item" href="">Repositorio</a>
</nav>
<div class="ui container">
<div id="indice" class="ui grid">
<div class="two columns row">
<div class="column img">
<img src="{{$urls->assets->images}}/Indice.jpg" />
</div>
<div class="column contenido">
<div class="titulo">&Iacute;NDICE</div>
<br />
<nav class="ui divided list">
<a class="item" href="">Repertorios</a>
<a class="item" href="">Escrituras protocolizadas</a>
<a class="item" href="">Anotaciones</a>
<a class="item" href="">Repositorio</a>
</nav>
</div>
</div>
</div>
</div>

View File

@ -1,15 +1,19 @@
<div class="ui grid padded" id="servicios">
<div class="row" id="consultas">
<div class="column"></div>
<div class="four wide column">
@include('home.links.documentos', ['title' => 'DOCUMENTOS ONLINE', 'items' => $links->documentos])
</div>
<div class="column separator"></div>
<div class="four wide column">
@include('home.links.consultas', ['title' => 'LINKS DE CONSULTA', 'items' => $links->consulta])
</div>
<div class="column separator"></div>
<div class="center aligned three wide column seguimiento" style="background-image: url('{{$urls->assets->images}}/Seguimiento.jpg')">
<div id="servicios">
<div class="ui container">
<div class="ui grid">
<div class="row" id="consultas">
<div class="column"></div>
<div class="four wide column">
@include('home.links.documentos', ['title' => 'DOCUMENTOS ONLINE', 'items' => $links->documentos])
</div>
<div class="column separator"></div>
<div class="four wide column">
@include('home.links.consultas', ['title' => 'LINKS DE CONSULTA', 'items' => $links->consulta])
</div>
<div class="column separator"></div>
<div class="center aligned three wide column seguimiento" style="background-image: url('{{$urls->assets->images}}/Seguimiento.jpg')">
</div>
</div>
</div>
</div>
</div>

View File

@ -1,6 +1,8 @@
<div class="ui attached grid padded suplente">
<div class="attached row">
@include('home.suplente.horario')
@include('home.suplente.datos')
<div class="ui container">
<div class="ui attached grid suplente">
<div class="attached row">
@include('home.suplente.horario')
@include('home.suplente.datos')
</div>
</div>
</div>

View File

@ -1,9 +1,14 @@
<div class="five wide column" style="padding: 2em;">
<h4>
{!!nl2br($suplente->horario->titulo)!!}
Horario lunes a viernes
<br />
9:30 - 13:30 | 15:30 - 18:00
</h4>
<p>
{!!nl2br($suplente->horario->contenido)!!}
La atención dentro del horario, puede verse
afectada circunstancialmente y sin previo
aviso, por encontrarse el notario cumpliendo
funciones fuera de la Notaría.
</p>
<a href="{{$urls->notaria_turno}}">
<button class="ui inverted dark-blue button">

View File

@ -1,14 +1,16 @@
<footer>
<div class="ui inverted dark-blue grid padded main">
<div class="three columns row">
<div class="column">
@include('layout.footer.horario')
</div>
<div class="column">
@include('layout.footer.datos')
</div>
<div class="column">
@include('layout.footer.ubicacion')
<div class="inverted dark-blue">
<div class="ui inverted container grid main">
<div class="three columns row">
<div class="column">
@include('layout.footer.horario')
</div>
<div class="column">
@include('layout.footer.datos')
</div>
<div class="column">
@include('layout.footer.ubicacion')
</div>
</div>
</div>
</div>

View File

@ -2,10 +2,15 @@
<img style="height: 2em;" src="{{$urls->assets->images}}/Horarios.png" />
<p>
<strong>
{!!nl2br(strtoupper($suplente->horario->titulo))!!}
Horario lunes a viernes
<br />
9:30 - 13:30 | 15:30 - 18:00
</strong>
</p>
<p>
{!!nl2br($suplente->horario->contenido)!!}
La atención dentro del horario, puede verse
afectada circunstancialmente y sin previo
aviso, por encontrarse el notario cumpliendo
funciones fuera de la Notaría.
</p>
</div>

View File

@ -1,4 +1,4 @@
<nav class="ui padded attached text menu">
<nav class="ui container attached text menu">
<a class="item" href="{{$urls->base}}">
Notar&iacute;a
</a>

View File

@ -1,5 +1,5 @@
<header>
<nav class="ui attached text menu dark-blue inverted padded" id="page_menu">
<header class="ui dark-blue inverted">
<nav class="ui attached text menu inverted container" id="page_menu">
<a class="left aligned item brand" href="{{$urls->base}}">
NOTAR&Iacute;A RABY
</a>

View File

@ -9,6 +9,11 @@
<link rel="stylesheet" href="{{$font}}" />
@endforeach
@endif
@if (isset($asset->xfont))
@foreach ($asset->xfont as $font)
<link type="application/x-font-ttf" href="{{$font}}" />
@endforeach
@endif
@if (isset($asset->octet))
@foreach ($asset->octet as $font)
<link type="application/octet-stream" href="{{$font}}" />

View File

@ -0,0 +1,10 @@
@extends('layout.base')
@section('page_content')
@include('notaria.equipos')
@include('notaria.transparencia')
@endsection
@push('styles')
<link rel="stylesheet" type="text/css" href="{{$urls->assets->styles}}/notaria.css" />
@endpush

View File

@ -0,0 +1,33 @@
<div class="ui container" id="equipos">
<div class="ui grid">
<div class="two column row">
<div class="column">
@foreach ($equipos as $i => $equipo)
<h3>{{$equipo->titulo}}</h3>
<div class="ui list">
@foreach ($equipo->miembros as $miembro)
<div class="item">
<div class="content">
<div class="header">
{{$miembro->nombre}}@if (isset($miembro->cargo)),
{{$miembro->cargo}}
@endif
</div>
<div class="description">
{{$miembro->telefono}}
|
{{$miembro->email}}
</div>
</div>
</div>
@endforeach
</div>
@if (($i + 1) % 3 == 0 and $i > 0)
</div>
<div class="column">
@endif
@endforeach
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,87 @@
<div id="transparencia">
<div class="ui container">
<div class="ui grid">
<div class="three column row">
<div class="ten wide column">
<p>
La functi&oacute;n del notario P&uacute;blico se encuentra regida por las normas establecidas en el Título XI párrafo 7
artículo 399 al 445 del Código Orgánico de tribunales.
Son funciones del Notario, entre otras, las contenidas en el artículo 401 del código señalado y que se
expresan a continuación
</p>
<div class="ui grid">
<div class="two column row">
<div class="column">
<div class="ui list">
<div class="item">
1. Extender los instrumentos públicos con
arreglo a las instrucciones que, de palabra o por
escrito, les dieren las partes otorgantes.
</div>
<div class="item">
2. Levantar inventarios solemnes.
</div>
<div class="item">
3. Efectuar protestos de letras de cambio y
demás documentos mercantiles.
</div>
<div class="item">
4. Notificar los traspasos de acciones,
constituciones y notificaciones de prendas que
se les solicitaren.
</div>
<div class="item">
5. Asistir a las juntas generales de
accionistas de sociedades anónimas, para los
efectos que la ley o reglamento de ellas lo
exigieren.
</div>
<div class="item">
6. En general dar fe de los hechos para que
fueren requeridos y que no estuvieren
encomendados a otros funcionarios.
</div>
</div>
</div>
<div class="column">
<div class="ui list">
<div class="item">
7. Guardar y conservar en riguroso orden
cronológico los documentos que ante ellos se
otorguen, en forma de precaver todo extravío y
hacer fácil y expedito su examen.
</div>
<div class="item">
8. Otorgar certificados o testimonios de los
actos celebrados ante ellos o protocolizados en
sus registros.
</div>
<div class="item">
9. Facilitar a cualquiera persona que lo solicite
el examen de los instrumentos públicos que ante
ellos se otorguen y documentos que se
protocolicen.
</div>
<div class="item">
10. Autorizar las firmas que se estampen en
documentos privados, sea en su presencia o cuya
autenticidad les conste.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="column">
<h3>TRANSPARENCIA</h3>
<nav class="ui vertical text menu">
<a class="item" href="#">Balances Anuales</a>
<a class="item" href="#">Interés y Patrimonio</a>
<a class="item" href="#">Informes Fiscal&iacute;a</a>
<a class="item" href="#">Valores</a>
</nav>
</div>
</div>
</div>
</div>
</div>