dmencu 2.0.20 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/server/table-tem.d.ts +3 -0
- package/dist/client/server/table-tem.js +239 -0
- package/dist/client/server/types-dmencu.d.ts +48 -0
- package/dist/client/server/types-dmencu.js +33 -0
- package/dist/client/unlogged/css/bootstrap.min.css +6 -6
- package/dist/client/unlogged/tsconfig.json +14 -14
- package/dist/server/server/table-barrios.js +1 -1
- package/dist/server/server/table-comunas copy.d.ts +2 -0
- package/dist/server/server/table-comunas copy.js +28 -0
- package/dist/server/server/table-comunas.js +2 -2
- package/dist/server/server/table-encuestadores.js +7 -7
- package/dist/server/server/table-fracciones.js +1 -1
- package/dist/server/server/table-hogares.js +1 -1
- package/dist/server/server/table-hogares_sup.js +1 -1
- package/dist/server/server/table-manzanas.js +1 -1
- package/dist/server/server/table-parametros.js +1 -1
- package/dist/server/server/table-personal.js +7 -7
- package/dist/server/server/table-personal_rol.js +7 -7
- package/dist/server/server/table-personas.js +1 -1
- package/dist/server/server/table-personas_sup.js +1 -1
- package/dist/server/server/table-radios.js +3 -3
- package/dist/server/server/table-recepcionistas.js +1 -1
- package/dist/server/server/table-visitas.js +1 -1
- package/dist/server/server/table-visitas_sup.js +1 -1
- package/dist/server/server/table-viviendas.js +1 -1
- package/dist/unlogged/unlogged/css/bootstrap.min.css +6 -6
- package/dist/unlogged/unlogged/server/table-tem.d.ts +3 -0
- package/dist/unlogged/unlogged/server/table-tem.js +239 -0
- package/dist/unlogged/unlogged/server/types-dmencu.d.ts +48 -0
- package/dist/unlogged/unlogged/server/types-dmencu.js +33 -0
- package/dist/unlogged/unlogged/tsconfig.json +14 -14
- package/dist/unlogged/unlogged/unlogged/abrir-formulario.d.ts +13 -0
- package/dist/unlogged/unlogged/unlogged/abrir-formulario.js +109 -0
- package/dist/unlogged/unlogged/unlogged/adapt.d.ts +0 -0
- package/dist/unlogged/unlogged/unlogged/adapt.js +8 -0
- package/dist/unlogged/unlogged/unlogged/bypass-formulario.d.ts +202 -0
- package/dist/unlogged/unlogged/unlogged/bypass-formulario.js +1100 -0
- package/dist/unlogged/unlogged/unlogged/redux-formulario.d.ts +349 -0
- package/dist/unlogged/unlogged/unlogged/redux-formulario.js +318 -0
- package/dist/unlogged/unlogged/unlogged/render-formulario.d.ts +86 -0
- package/dist/unlogged/unlogged/unlogged/render-formulario.js +1692 -0
- package/dist/unlogged/unlogged/unlogged/render-general.d.ts +127 -0
- package/dist/unlogged/unlogged/unlogged/render-general.js +176 -0
- package/dist/unlogged/unlogged/unlogged/tipos.d.ts +486 -0
- package/dist/unlogged/unlogged/unlogged/tipos.js +22 -0
- package/dist/unlogged/unlogged/unlogged/unlogged.d.ts +1 -0
- package/dist/unlogged/unlogged/unlogged/unlogged.js +180 -0
- package/install/actualizar-2023-05-14.sql +38 -38
- package/install/actualizar_inconvar.sql +28 -28
- package/install/agregados_tem.sql +4 -4
- package/install/asignar_desasignar_tareas_tem_trg.sql +43 -43
- package/install/metadatos/permisos.tab +11 -11
- package/install/metadatos/roles.tab +10 -10
- package/install/metadatos/roles_permisos.tab +94 -94
- package/install/metadatos/tipovar.tab +9 -9
- package/install/sincro_tareas_areas_tareas_tem_trg.sql +29 -29
- package/install/usuarios_trg.sql +41 -41
- package/install/validar_tareas_tem_trg.sql +67 -67
- package/package.json +91 -91
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
(function (factory) {
|
|
11
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
+
var v = factory(require, exports);
|
|
13
|
+
if (v !== undefined) module.exports = v;
|
|
14
|
+
}
|
|
15
|
+
else if (typeof define === "function" && define.amd) {
|
|
16
|
+
define(["require", "exports", "js-to-html", "./render-formulario", "./abrir-formulario"], factory);
|
|
17
|
+
}
|
|
18
|
+
})(function (require, exports) {
|
|
19
|
+
"use strict";
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.awaitForCacheLayout = void 0;
|
|
22
|
+
const js_to_html_1 = require("js-to-html");
|
|
23
|
+
const render_formulario_1 = require("./render-formulario");
|
|
24
|
+
const abrir_formulario_1 = require("./abrir-formulario");
|
|
25
|
+
const ServiceWorkerAdmin = require("service-worker-admin");
|
|
26
|
+
function siExisteId(id, hacer) {
|
|
27
|
+
var elemento = document.getElementById(id);
|
|
28
|
+
if (elemento != null) {
|
|
29
|
+
hacer(elemento);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function mostrarElementoId(id, mostrar) {
|
|
33
|
+
siExisteId(id, e => e.style.display = mostrar ? 'block' : 'none');
|
|
34
|
+
}
|
|
35
|
+
const URL_DM = 'campo';
|
|
36
|
+
var reloadWithoutHash = () => {
|
|
37
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../${URL_DM}`);
|
|
38
|
+
location.reload();
|
|
39
|
+
};
|
|
40
|
+
window.addEventListener('load', function () {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
var layout = document.getElementById('total-layout');
|
|
43
|
+
if (!layout) {
|
|
44
|
+
console.log('no encuentro el DIV.total-layout');
|
|
45
|
+
yield myOwn.ready;
|
|
46
|
+
layout = document.getElementById('total-layout');
|
|
47
|
+
}
|
|
48
|
+
yield myOwn.ready;
|
|
49
|
+
if (location.pathname.endsWith('/salvar')) {
|
|
50
|
+
try {
|
|
51
|
+
for (let x in localStorage) {
|
|
52
|
+
console.log(localStorage[x]);
|
|
53
|
+
yield myOwn.ajax.dm_rescatar({ localStorageItem: localStorage[x], localStorageItemKey: x });
|
|
54
|
+
layout.append(js_to_html_1.html.p(`item "${x}" de localStogage guardado.`).create());
|
|
55
|
+
}
|
|
56
|
+
layout.append(js_to_html_1.html.p(`todos los items fueron salvados.`).create());
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
layout.append(js_to_html_1.html.p(`se produjo un error al salvar los datos del dm.`).create());
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
var registrations = yield navigator.serviceWorker.getRegistrations();
|
|
63
|
+
for (let registration of registrations) {
|
|
64
|
+
yield registration.unregister();
|
|
65
|
+
}
|
|
66
|
+
layout.append(js_to_html_1.html.p(`todos los sw fueron desinstalados.`).create());
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
layout.append(js_to_html_1.html.p(`se produjo un error al desinstalar los sw.`).create());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
layout.innerHTML = `
|
|
74
|
+
<span id="mini-console"></span>
|
|
75
|
+
<div id=nueva-version-instalada style="position:fixed; top:5px; z-index:9500; display:none">
|
|
76
|
+
<span>Hay una nueva versión instalada </span><button id=refrescar><span class=rotar>↻</span> refrescar</button>
|
|
77
|
+
</div>
|
|
78
|
+
<div id=instalado style="display:none">
|
|
79
|
+
<div id=main_layout></div>
|
|
80
|
+
</div>
|
|
81
|
+
<div id=instalando style="display:none; margin-top:30px">
|
|
82
|
+
<div id=volver-de-instalacion style="position:fixed; top:5px; z-index:9500;">
|
|
83
|
+
<span id=volver-de-instalacion-por-que></span>
|
|
84
|
+
<button id=volver-de-instalacion-como>volver</button>
|
|
85
|
+
</div>
|
|
86
|
+
<div id=archivos>
|
|
87
|
+
<h2>progreso instalacion</h2>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
`;
|
|
91
|
+
if (location.pathname.endsWith(`/${URL_DM}`)) {
|
|
92
|
+
var startApp = () => __awaiter(this, void 0, void 0, function* () { });
|
|
93
|
+
var datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
|
|
94
|
+
if (datosByPass) {
|
|
95
|
+
startApp = () => __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
var version = yield swa.getSW('version');
|
|
97
|
+
myOwn.setLocalVar('app-cache-version', version);
|
|
98
|
+
//@ts-ignore existe
|
|
99
|
+
(0, abrir_formulario_1.cargarEstructura)(my.getLocalVar(abrir_formulario_1.GLOVAR_ESTRUCTURA));
|
|
100
|
+
(0, abrir_formulario_1.cargarHojaDeRuta)(Object.assign(Object.assign({}, datosByPass), { modoAlmacenamiento: 'local' }));
|
|
101
|
+
(0, render_formulario_1.desplegarFormularioActual)({ modoDemo: false });
|
|
102
|
+
my.menuName = URL_DM;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
startApp = () => __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
//@ts-ignore existe
|
|
108
|
+
(0, render_formulario_1.dmPantallaInicialSinCarga)();
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
var refrescarStatus = function (showScreen, newVersionAvaiable, installing) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
var buscandoActualizacion = location.href.endsWith('#inst=1');
|
|
114
|
+
document.getElementById('nueva-version-instalada').style.display = newVersionAvaiable == 'yes' ? '' : 'none';
|
|
115
|
+
document.getElementById('volver-de-instalacion').style.display = newVersionAvaiable == 'yes' ? 'none' : '';
|
|
116
|
+
if (showScreen == 'app' && !buscandoActualizacion) {
|
|
117
|
+
document.getElementById('instalado').style.display = '';
|
|
118
|
+
document.getElementById('instalando').style.display = 'none';
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
document.getElementById('instalado').style.display = 'none';
|
|
122
|
+
document.getElementById('instalando').style.display = '';
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
var swa = new ServiceWorkerAdmin();
|
|
127
|
+
swa.installOrActivate({
|
|
128
|
+
onEachFile: (url, error) => __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
console.log('file: ', url);
|
|
130
|
+
document.getElementById('archivos').append(js_to_html_1.html.div(url).create());
|
|
131
|
+
}),
|
|
132
|
+
onInfoMessage: (m) => console.log('message: ', m),
|
|
133
|
+
onError: (err, context) => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
console.log('error: ' + (context ? ` en (${context})` : ''), err);
|
|
135
|
+
console.log(context, err, 'error-console');
|
|
136
|
+
console.log('error al descargar cache', err.message);
|
|
137
|
+
if (context != 'initializing service-worker') {
|
|
138
|
+
var layout = yield exports.awaitForCacheLayout;
|
|
139
|
+
var cacheStatusElement = document.getElementById('cache-status');
|
|
140
|
+
if (!cacheStatusElement) {
|
|
141
|
+
cacheStatusElement = js_to_html_1.html.p({ id: 'cache-status' }).create();
|
|
142
|
+
layout.insertBefore(cacheStatusElement, layout.firstChild);
|
|
143
|
+
}
|
|
144
|
+
cacheStatusElement.classList.remove('warning');
|
|
145
|
+
cacheStatusElement.classList.remove('all-ok');
|
|
146
|
+
cacheStatusElement.classList.add('danger');
|
|
147
|
+
cacheStatusElement.textContent = 'error al descargar la aplicación. ' + err.message;
|
|
148
|
+
}
|
|
149
|
+
}),
|
|
150
|
+
onReadyToStart: startApp,
|
|
151
|
+
onStateChange: refrescarStatus
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
document.getElementById('refrescar').addEventListener('click', () => {
|
|
155
|
+
reloadWithoutHash();
|
|
156
|
+
});
|
|
157
|
+
document.getElementById('volver-de-instalacion-como').addEventListener('click', () => {
|
|
158
|
+
reloadWithoutHash();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
exports.awaitForCacheLayout = function prepareLayoutForCache() {
|
|
164
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
165
|
+
yield new Promise(function (resolve, _reject) {
|
|
166
|
+
window.addEventListener('load', resolve);
|
|
167
|
+
});
|
|
168
|
+
var layout = (document.getElementById('cache-layout') || document.createElement('div'));
|
|
169
|
+
if (!layout.id) {
|
|
170
|
+
layout.id = 'cache-layout';
|
|
171
|
+
layout.appendChild(js_to_html_1.html.div({ id: 'app-versions' }).create());
|
|
172
|
+
layout.appendChild(js_to_html_1.html.div({ id: 'app-status' }).create());
|
|
173
|
+
document.body.appendChild(layout.appendChild(js_to_html_1.html.div({ id: 'cache-log' }).create()));
|
|
174
|
+
document.body.insertBefore(layout, document.body.firstChild);
|
|
175
|
+
}
|
|
176
|
+
return layout;
|
|
177
|
+
});
|
|
178
|
+
}();
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5sb2dnZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdW5sb2dnZWQvdW5sb2dnZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFDYiwyQ0FBaUM7SUFDakMsMkRBQTJGO0lBQzNGLHlEQUErRztJQUMvRyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTNELFNBQVMsVUFBVSxDQUFDLEVBQVUsRUFBRSxLQUFrQztRQUM5RCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUcsUUFBUSxJQUFFLElBQUksRUFBQyxDQUFDO1lBQ2YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFTLEVBQUUsT0FBZTtRQUNqRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxPQUFPLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFFdkIsSUFBSSxpQkFBaUIsR0FBRyxHQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBQyxRQUFRLENBQUMsUUFBUSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEYsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JCLENBQUMsQ0FBQTtJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7O1lBQzVCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFj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Q3ZDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sR0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLEVBQUUsR0FBQyxjQUFjLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLENBQUMsV0FBVyxDQUFDLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDekQsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkYsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDL0QsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7S0FBQSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IHtodG1sfSAgZnJvbSAnanMtdG8taHRtbCc7XHJcbmltcG9ydCB7IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwsIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EgfSBmcm9tICcuL3JlbmRlci1mb3JtdWxhcmlvJztcclxuaW1wb3J0IHsgY2FyZ2FyRXN0cnVjdHVyYSwgY2FyZ2FySG9qYURlUnV0YSwgR0xPVkFSX0VTVFJVQ1RVUkEsIEdMT1ZBUl9EQVRPU0JZUEFTUyB9IGZyb20gJy4vYWJyaXItZm9ybXVsYXJpbyc7XHJcbmNvbnN0IFNlcnZpY2VXb3JrZXJBZG1pbiA9IHJlcXVpcmUoXCJzZXJ2aWNlLXdvcmtlci1hZG1pblwiKTtcclxuXHJcbmZ1bmN0aW9uIHNpRXhpc3RlSWQoaWQ6IHN0cmluZywgaGFjZXI6IChhcmcwOiBIVE1MRWxlbWVudCkgPT4gdm9pZCl7XHJcbiAgICB2YXIgZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZihlbGVtZW50byE9bnVsbCl7XHJcbiAgICAgICAgaGFjZXIoZWxlbWVudG8pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtb3N0cmFyRWxlbWVudG9JZChpZDpzdHJpbmcsIG1vc3RyYXI6Ym9vbGVhbil7XHJcbiAgICBzaUV4aXN0ZUlkKGlkLCBlPT5lLnN0eWxlLmRpc3BsYXk9bW9zdHJhcj8nYmxvY2snOidub25lJyk7XHJcbn1cclxuY29uc3QgVVJMX0RNID0gJ2NhbXBvJztcclxuXHJcbnZhciByZWxvYWRXaXRob3V0SGFzaCA9ICgpPT57XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lfS8uLi8ke1VSTF9ETX1gKTtcclxuICAgIGxvY2F0aW9uLnJlbG9hZCgpXHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgIHZhciBsYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwtbGF5b3V0JykhO1xyXG4gICAgaWYoIWxheW91dCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25vIGVuY3VlbnRybyBlbCBESVYudG90YWwtbGF5b3V0JylcclxuICAgICAgICBhd2FpdCBteU93bi5yZWFkeTtcclxuICAgICAgICBsYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwtbGF5b3V0JykhO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgbXlPd24ucmVhZHk7XHJcbiAgICBpZihsb2NhdGlvbi5wYXRobmFtZS5lbmRzV2l0aCgnL3NhbHZhcicpKXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggaW4gbG9jYWxTdG9yYWdlKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2FsU3RvcmFnZVt4XSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteU93bi5hamF4LmRtX3Jlc2NhdGFyKHtsb2NhbFN0b3JhZ2VJdGVtOmxvY2FsU3RvcmFnZVt4XSwgbG9jYWxTdG9yYWdlSXRlbUtleTp4fSlcclxuICAgICAgICAgICAgICAgIGxheW91dC5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5wKGBpdGVtIFwiJHt4fVwiIGRlIGxvY2FsU3RvZ2FnZSBndWFyZGFkby5gKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxheW91dC5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICBodG1sLnAoYHRvZG9zIGxvcyBpdGVtcyBmdWVyb24gc2FsdmFkb3MuYCkuY3JlYXRlKClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICBsYXlvdXQuYXBwZW5kKFxyXG4gICAgICAgICAgICAgICAgaHRtbC5wKGBzZSBwcm9kdWpvIHVuIGVycm9yIGFsIHNhbHZhciBsb3MgZGF0b3MgZGVsIGRtLmApLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICB2YXIgcmVnaXN0cmF0aW9ucyA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmdldFJlZ2lzdHJhdGlvbnMoKTtcclxuICAgICAgICAgICAgZm9yKGxldCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxheW91dC5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICBodG1sLnAoYHRvZG9zIGxvcyBzdyBmdWVyb24gZGVzaW5zdGFsYWRvcy5gKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgIGxheW91dC5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICBodG1sLnAoYHNlIHByb2R1am8gdW4gZXJyb3IgYWwgZGVzaW5zdGFsYXIgbG9zIHN3LmApLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBsYXlvdXQuaW5uZXJIVE1MPWBcclxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJtaW5pLWNvbnNvbGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9bnVldmEtdmVyc2lvbi1pbnN0YWxhZGEgc3R5bGU9XCJwb3NpdGlvbjpmaXhlZDsgdG9wOjVweDsgei1pbmRleDo5NTAwOyBkaXNwbGF5Om5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkhheSB1bmEgbnVldmEgdmVyc2nDs24gaW5zdGFsYWRhIDwvc3Bhbj48YnV0dG9uIGlkPXJlZnJlc2Nhcj48c3BhbiBjbGFzcz1yb3Rhcj7ihrs8L3NwYW4+IHJlZnJlc2NhcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBpZD1pbnN0YWxhZG8gc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9bWFpbl9sYXlvdXQ+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPWluc3RhbGFuZG8gc3R5bGU9XCJkaXNwbGF5Om5vbmU7IG1hcmdpbi10b3A6MzBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD12b2x2ZXItZGUtaW5zdGFsYWNpb24gc3R5bGU9XCJwb3NpdGlvbjpmaXhlZDsgdG9wOjVweDsgei1pbmRleDo5NTAwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPXZvbHZlci1kZS1pbnN0YWxhY2lvbi1wb3ItcXVlPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPXZvbHZlci1kZS1pbnN0YWxhY2lvbi1jb21vPnZvbHZlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPWFyY2hpdm9zPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMj5wcm9ncmVzbyBpbnN0YWxhY2lvbjwvaDI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYDtcclxuICAgICAgICBpZihsb2NhdGlvbi5wYXRobmFtZS5lbmRzV2l0aChgLyR7VVJMX0RNfWApKXtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0QXBwOigpPT5Qcm9taXNlPHZvaWQ+ID0gYXN5bmMgKCk9Pnt9O1xyXG4gICAgICAgICAgICB2YXIgZGF0b3NCeVBhc3MgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgICAgICAgICBpZihkYXRvc0J5UGFzcyl7XHJcbiAgICAgICAgICAgICAgICBzdGFydEFwcCA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBhd2FpdCBzd2EuZ2V0U1coJ3ZlcnNpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICBteU93bi5zZXRMb2NhbFZhcignYXBwLWNhY2hlLXZlcnNpb24nLCB2ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgZXhpc3RlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmdhckVzdHJ1Y3R1cmEobXkuZ2V0TG9jYWxWYXIoR0xPVkFSX0VTVFJVQ1RVUkEpKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXJnYXJIb2phRGVSdXRhKHsgLi4uZGF0b3NCeVBhc3MsIG1vZG9BbG1hY2VuYW1pZW50bzogJ2xvY2FsJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKHttb2RvRGVtbzogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICBteS5tZW51TmFtZSA9IFVSTF9ETTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBzdGFydEFwcCA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGV4aXN0ZSBcclxuICAgICAgICAgICAgICAgICAgICBkbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlZnJlc2NhclN0YXR1cz1hc3luYyBmdW5jdGlvbihzaG93U2NyZWVuLCBuZXdWZXJzaW9uQXZhaWFibGUsIGluc3RhbGxpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1c2NhbmRvQWN0dWFsaXphY2lvbiA9IGxvY2F0aW9uLmhyZWYuZW5kc1dpdGgoJyNpbnN0PTEnKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdudWV2YS12ZXJzaW9uLWluc3RhbGFkYScpIS5zdHlsZS5kaXNwbGF5PW5ld1ZlcnNpb25BdmFpYWJsZT09J3llcyc/Jyc6J25vbmUnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZvbHZlci1kZS1pbnN0YWxhY2lvbicpIS5zdHlsZS5kaXNwbGF5PW5ld1ZlcnNpb25BdmFpYWJsZT09J3llcyc/J25vbmUnOicnO1xyXG4gICAgICAgICAgICAgICAgaWYoc2hvd1NjcmVlbj09J2FwcCcgJiYgIWJ1c2NhbmRvQWN0dWFsaXphY2lvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RhbGFkbycpIS5zdHlsZS5kaXNwbGF5PScnO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0YWxhbmRvJykhLnN0eWxlLmRpc3BsYXk9J25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RhbGFkbycpIS5zdHlsZS5kaXNwbGF5PSdub25lJztcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdGFsYW5kbycpIS5zdHlsZS5kaXNwbGF5PScnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB2YXIgc3dhID0gbmV3IFNlcnZpY2VXb3JrZXJBZG1pbigpO1xyXG4gICAgICAgICAgICBzd2EuaW5zdGFsbE9yQWN0aXZhdGUoe1xyXG4gICAgICAgICAgICAgICAgb25FYWNoRmlsZTogYXN5bmMgKHVybCwgZXJyb3IpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZpbGU6ICcsdXJsKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJjaGl2b3MnKSEuYXBwZW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih1cmwpLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uSW5mb01lc3NhZ2U6IChtKT0+Y29uc29sZS5sb2coJ21lc3NhZ2U6ICcsIG0pLFxyXG4gICAgICAgICAgICAgICAgb25FcnJvcjogYXN5bmMgKGVyciwgY29udGV4dCk9PntcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3I6ICcrKGNvbnRleHQ/YCBlbiAoJHtjb250ZXh0fSlgOicnKSwgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LCBlcnIsICdlcnJvci1jb25zb2xlJylcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgYWwgZGVzY2FyZ2FyIGNhY2hlJywgZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29udGV4dCE9J2luaXRpYWxpemluZyBzZXJ2aWNlLXdvcmtlcicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5b3V0ID0gYXdhaXQgYXdhaXRGb3JDYWNoZUxheW91dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlU3RhdHVzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWNoZS1zdGF0dXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNhY2hlU3RhdHVzRWxlbWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVN0YXR1c0VsZW1lbnQgPSBodG1sLnAoe2lkOidjYWNoZS1zdGF0dXMnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuaW5zZXJ0QmVmb3JlKGNhY2hlU3RhdHVzRWxlbWVudCwgbGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlU3RhdHVzRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd3YXJuaW5nJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVTdGF0dXNFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2FsbC1vaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlU3RhdHVzRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkYW5nZXInKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVN0YXR1c0VsZW1lbnQudGV4dENvbnRlbnQ9J2Vycm9yIGFsIGRlc2NhcmdhciBsYSBhcGxpY2FjacOzbi4gJyArIGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblJlYWR5VG9TdGFydDpzdGFydEFwcCxcclxuICAgICAgICAgICAgICAgIG9uU3RhdGVDaGFuZ2U6cmVmcmVzY2FyU3RhdHVzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzY2FyJykhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKT0+e1xyXG4gICAgICAgICAgICByZWxvYWRXaXRob3V0SGFzaCgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZvbHZlci1kZS1pbnN0YWxhY2lvbi1jb21vJykhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKT0+e1xyXG4gICAgICAgICAgICByZWxvYWRXaXRob3V0SGFzaCgpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG5leHBvcnQgdmFyIGF3YWl0Rm9yQ2FjaGVMYXlvdXQgPSBhc3luYyBmdW5jdGlvbiBwcmVwYXJlTGF5b3V0Rm9yQ2FjaGUoKXtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIF9yZWplY3Qpe1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxyZXNvbHZlKTtcclxuICAgIH0pO1xyXG4gICAgdmFyIGxheW91dD0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhY2hlLWxheW91dCcpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XHJcbiAgICBpZighbGF5b3V0LmlkKXtcclxuICAgICAgICBsYXlvdXQuaWQ9J2NhY2hlLWxheW91dCc7XHJcbiAgICAgICAgbGF5b3V0LmFwcGVuZENoaWxkKGh0bWwuZGl2KHtpZDonYXBwLXZlcnNpb25zJ30pLmNyZWF0ZSgpKTtcclxuICAgICAgICBsYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe2lkOidhcHAtc3RhdHVzJ30pLmNyZWF0ZSgpKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxheW91dC5hcHBlbmRDaGlsZChodG1sLmRpdih7aWQ6J2NhY2hlLWxvZyd9KS5jcmVhdGUoKSkpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGxheW91dCxkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGF5b3V0O1xyXG59KCk7Il19
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
-- Actualizar
|
|
2
|
-
set search_path = base;
|
|
3
|
-
|
|
4
|
-
do $command$
|
|
5
|
-
declare
|
|
6
|
-
vTareasConAsignante boolean;
|
|
7
|
-
begin
|
|
8
|
-
select true
|
|
9
|
-
into vTareasConAsignante
|
|
10
|
-
from information_schema.columns
|
|
11
|
-
where table_schema='base'
|
|
12
|
-
and table_name='tareas_areas'
|
|
13
|
-
and column_name='asignante';
|
|
14
|
-
if vTareasConAsignante or true then
|
|
15
|
-
alter table tareas_areas rename column asignante to recepcionista;
|
|
16
|
-
DROP TRIGGER IF EXISTS sincro_tareas_areas_tareas_tem_trg ON tareas_areas;
|
|
17
|
-
DROP FUNCTION if exists sincro_tareas_areas_tareas_tem_trg();
|
|
18
|
-
alter table tareas_areas drop column fecha_asignacion;
|
|
19
|
-
alter table tareas_areas drop column operacion;
|
|
20
|
-
alter table tareas_areas drop column obs_asignante;
|
|
21
|
-
alter table "tareas_areas" drop constraint "asignante<>''";
|
|
22
|
-
alter table "tareas_areas" add constraint "recepcionista<>''" check ("recepcionista"<>'');
|
|
23
|
-
alter table "tareas_areas" drop constraint "tareas_areas at REL";
|
|
24
|
-
alter table "tareas_areas" add constraint "tareas_areas recepcionista REL" foreign key ("recepcionista") references "usuarios" ("idper") on update cascade;
|
|
25
|
-
alter index "asignante 4 tareas_areas IDX" rename to "recepcionista 4 tareas_areas IDX";
|
|
26
|
-
DROP TRIGGER IF EXISTS asignar_desasignar_tareas_tem_trg ON tareas_tem;
|
|
27
|
-
DROP FUNCTION if exists asignar_desasignar_tareas_tem_trg();
|
|
28
|
-
alter table tareas_tem rename column recepcionista_tarea to recepcionista;
|
|
29
|
-
alter table "tareas_tem" add constraint "recepcionista<>''" check ("recepcionista"<>'');
|
|
30
|
-
alter table "tareas_tem" add constraint "tareas_tem recepcionista REL" foreign key ("recepcionista") references "usuarios" ("idper") on update cascade;
|
|
31
|
-
alter table "tareas" rename column rol_asignante to rol_recepcionista;
|
|
32
|
-
raise notice 'cambios debidos a tareas_areas.asignante realizadas!';
|
|
33
|
-
raise notice 'correr: install/sincro_tareas_areas_tareas_tem_trg.sql';
|
|
34
|
-
raise notice 'correr: install/asignar_desasignar_tareas_tem_trg';
|
|
35
|
-
end if;
|
|
36
|
-
end;
|
|
37
|
-
$command$;
|
|
38
|
-
|
|
1
|
+
-- Actualizar
|
|
2
|
+
set search_path = base;
|
|
3
|
+
|
|
4
|
+
do $command$
|
|
5
|
+
declare
|
|
6
|
+
vTareasConAsignante boolean;
|
|
7
|
+
begin
|
|
8
|
+
select true
|
|
9
|
+
into vTareasConAsignante
|
|
10
|
+
from information_schema.columns
|
|
11
|
+
where table_schema='base'
|
|
12
|
+
and table_name='tareas_areas'
|
|
13
|
+
and column_name='asignante';
|
|
14
|
+
if vTareasConAsignante or true then
|
|
15
|
+
alter table tareas_areas rename column asignante to recepcionista;
|
|
16
|
+
DROP TRIGGER IF EXISTS sincro_tareas_areas_tareas_tem_trg ON tareas_areas;
|
|
17
|
+
DROP FUNCTION if exists sincro_tareas_areas_tareas_tem_trg();
|
|
18
|
+
alter table tareas_areas drop column fecha_asignacion;
|
|
19
|
+
alter table tareas_areas drop column operacion;
|
|
20
|
+
alter table tareas_areas drop column obs_asignante;
|
|
21
|
+
alter table "tareas_areas" drop constraint "asignante<>''";
|
|
22
|
+
alter table "tareas_areas" add constraint "recepcionista<>''" check ("recepcionista"<>'');
|
|
23
|
+
alter table "tareas_areas" drop constraint "tareas_areas at REL";
|
|
24
|
+
alter table "tareas_areas" add constraint "tareas_areas recepcionista REL" foreign key ("recepcionista") references "usuarios" ("idper") on update cascade;
|
|
25
|
+
alter index "asignante 4 tareas_areas IDX" rename to "recepcionista 4 tareas_areas IDX";
|
|
26
|
+
DROP TRIGGER IF EXISTS asignar_desasignar_tareas_tem_trg ON tareas_tem;
|
|
27
|
+
DROP FUNCTION if exists asignar_desasignar_tareas_tem_trg();
|
|
28
|
+
alter table tareas_tem rename column recepcionista_tarea to recepcionista;
|
|
29
|
+
alter table "tareas_tem" add constraint "recepcionista<>''" check ("recepcionista"<>'');
|
|
30
|
+
alter table "tareas_tem" add constraint "tareas_tem recepcionista REL" foreign key ("recepcionista") references "usuarios" ("idper") on update cascade;
|
|
31
|
+
alter table "tareas" rename column rol_asignante to rol_recepcionista;
|
|
32
|
+
raise notice 'cambios debidos a tareas_areas.asignante realizadas!';
|
|
33
|
+
raise notice 'correr: install/sincro_tareas_areas_tareas_tem_trg.sql';
|
|
34
|
+
raise notice 'correr: install/asignar_desasignar_tareas_tem_trg';
|
|
35
|
+
end if;
|
|
36
|
+
end;
|
|
37
|
+
$command$;
|
|
38
|
+
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
set search_path= base;
|
|
2
|
-
|
|
3
|
-
CREATE OR REPLACE FUNCTION actualizar_inconvar_trg()
|
|
4
|
-
RETURNS trigger AS
|
|
5
|
-
$BODY$
|
|
6
|
-
begin
|
|
7
|
-
if tg_op = 'INSERT' or tg_op = 'UPDATE' then
|
|
8
|
-
delete from in_con_var where operativo=new.operativo and pk_integrada=new.pk_integrada and consistencia=new.consistencia;
|
|
9
|
-
insert into in_con_var(operativo, consistencia, pk_integrada, variable, tabla_datos, valor)
|
|
10
|
-
select new.operativo, new.consistencia, new.pk_integrada, split_part(key, '.', 2 ) as variable, split_part(key, '.', 1) as tabla_datos, value as valor
|
|
11
|
-
from jsonb_each_text(new.incon_valores) ;
|
|
12
|
-
return new;
|
|
13
|
-
end if;
|
|
14
|
-
if tg_op = 'DELETE' then
|
|
15
|
-
delete from in_con_var where operativo=old.operativo and pk_integrada=old.pk_integrada and consistencia=old.consistencia;
|
|
16
|
-
return old;
|
|
17
|
-
else
|
|
18
|
-
return new;
|
|
19
|
-
end if;
|
|
20
|
-
end;
|
|
21
|
-
$BODY$
|
|
22
|
-
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
23
|
-
|
|
24
|
-
--DROP TRIGGER actualizar_inconvar_trg ON inconsistencias;
|
|
25
|
-
CREATE TRIGGER actualizar_inconvar_trg
|
|
26
|
-
BEFORE INSERT OR DELETE OR UPDATE OF incon_valores
|
|
27
|
-
ON inconsistencias
|
|
28
|
-
FOR EACH ROW
|
|
1
|
+
set search_path= base;
|
|
2
|
+
|
|
3
|
+
CREATE OR REPLACE FUNCTION actualizar_inconvar_trg()
|
|
4
|
+
RETURNS trigger AS
|
|
5
|
+
$BODY$
|
|
6
|
+
begin
|
|
7
|
+
if tg_op = 'INSERT' or tg_op = 'UPDATE' then
|
|
8
|
+
delete from in_con_var where operativo=new.operativo and pk_integrada=new.pk_integrada and consistencia=new.consistencia;
|
|
9
|
+
insert into in_con_var(operativo, consistencia, pk_integrada, variable, tabla_datos, valor)
|
|
10
|
+
select new.operativo, new.consistencia, new.pk_integrada, split_part(key, '.', 2 ) as variable, split_part(key, '.', 1) as tabla_datos, value as valor
|
|
11
|
+
from jsonb_each_text(new.incon_valores) ;
|
|
12
|
+
return new;
|
|
13
|
+
end if;
|
|
14
|
+
if tg_op = 'DELETE' then
|
|
15
|
+
delete from in_con_var where operativo=old.operativo and pk_integrada=old.pk_integrada and consistencia=old.consistencia;
|
|
16
|
+
return old;
|
|
17
|
+
else
|
|
18
|
+
return new;
|
|
19
|
+
end if;
|
|
20
|
+
end;
|
|
21
|
+
$BODY$
|
|
22
|
+
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
23
|
+
|
|
24
|
+
--DROP TRIGGER actualizar_inconvar_trg ON inconsistencias;
|
|
25
|
+
CREATE TRIGGER actualizar_inconvar_trg
|
|
26
|
+
BEFORE INSERT OR DELETE OR UPDATE OF incon_valores
|
|
27
|
+
ON inconsistencias
|
|
28
|
+
FOR EACH ROW
|
|
29
29
|
EXECUTE PROCEDURE actualizar_inconvar_trg();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
set search_path=base;
|
|
2
|
-
|
|
3
|
-
alter table tem
|
|
4
|
-
add column "libre" boolean default true,
|
|
1
|
+
set search_path=base;
|
|
2
|
+
|
|
3
|
+
alter table tem
|
|
4
|
+
add column "libre" boolean default true,
|
|
5
5
|
add column "fecha_bloqueo" timestamp;
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
--set role dmencu_owner;
|
|
2
|
-
--set search_path=base;
|
|
3
|
-
|
|
4
|
-
--DROP FUNCTION if exists asignar_desasignar_tareas_tem_trg();
|
|
5
|
-
CREATE OR REPLACE FUNCTION asignar_desasignar_tareas_tem_trg()
|
|
6
|
-
RETURNS trigger
|
|
7
|
-
LANGUAGE 'plpgsql'
|
|
8
|
-
AS $BODY$
|
|
9
|
-
declare
|
|
10
|
-
v_estado_al_asignar text;
|
|
11
|
-
v_tarea_actual text;
|
|
12
|
-
v_tarea_inicial text;
|
|
13
|
-
begin
|
|
14
|
-
select tarea_actual into v_tarea_actual
|
|
15
|
-
from tem
|
|
16
|
-
where operativo = new.operativo and enc = new.enc;
|
|
17
|
-
select estado_al_asignar into v_estado_al_asignar from estados where operativo = new.operativo and estado = new.estado;
|
|
18
|
-
select tarea into v_tarea_inicial
|
|
19
|
-
from tareas
|
|
20
|
-
where operativo = new.operativo and es_inicial;
|
|
21
|
-
if new.asignado is null then
|
|
22
|
-
if new.tarea = v_tarea_inicial then
|
|
23
|
-
update tem
|
|
24
|
-
set tarea_actual = null
|
|
25
|
-
where operativo = new.operativo and enc = new.enc;
|
|
26
|
-
end if;
|
|
27
|
-
else
|
|
28
|
-
if v_tarea_actual is null and v_tarea_actual is distinct from new.tarea then
|
|
29
|
-
update tem
|
|
30
|
-
set tarea_actual = v_tarea_inicial
|
|
31
|
-
where operativo = new.operativo and enc = new.enc;
|
|
32
|
-
end if;
|
|
33
|
-
end if;
|
|
34
|
-
return new;
|
|
35
|
-
end;
|
|
36
|
-
$BODY$;
|
|
37
|
-
|
|
38
|
-
--DROP TRIGGER IF EXISTS asignar_desasignar_tareas_tem_trg ON tareas_tem;
|
|
39
|
-
CREATE TRIGGER asignar_desasignar_tareas_tem_trg
|
|
40
|
-
AFTER UPDATE OF asignado
|
|
41
|
-
ON tareas_tem
|
|
42
|
-
FOR EACH ROW
|
|
43
|
-
EXECUTE PROCEDURE asignar_desasignar_tareas_tem_trg();
|
|
1
|
+
--set role dmencu_owner;
|
|
2
|
+
--set search_path=base;
|
|
3
|
+
|
|
4
|
+
--DROP FUNCTION if exists asignar_desasignar_tareas_tem_trg();
|
|
5
|
+
CREATE OR REPLACE FUNCTION asignar_desasignar_tareas_tem_trg()
|
|
6
|
+
RETURNS trigger
|
|
7
|
+
LANGUAGE 'plpgsql'
|
|
8
|
+
AS $BODY$
|
|
9
|
+
declare
|
|
10
|
+
v_estado_al_asignar text;
|
|
11
|
+
v_tarea_actual text;
|
|
12
|
+
v_tarea_inicial text;
|
|
13
|
+
begin
|
|
14
|
+
select tarea_actual into v_tarea_actual
|
|
15
|
+
from tem
|
|
16
|
+
where operativo = new.operativo and enc = new.enc;
|
|
17
|
+
select estado_al_asignar into v_estado_al_asignar from estados where operativo = new.operativo and estado = new.estado;
|
|
18
|
+
select tarea into v_tarea_inicial
|
|
19
|
+
from tareas
|
|
20
|
+
where operativo = new.operativo and es_inicial;
|
|
21
|
+
if new.asignado is null then
|
|
22
|
+
if new.tarea = v_tarea_inicial then
|
|
23
|
+
update tem
|
|
24
|
+
set tarea_actual = null
|
|
25
|
+
where operativo = new.operativo and enc = new.enc;
|
|
26
|
+
end if;
|
|
27
|
+
else
|
|
28
|
+
if v_tarea_actual is null and v_tarea_actual is distinct from new.tarea then
|
|
29
|
+
update tem
|
|
30
|
+
set tarea_actual = v_tarea_inicial
|
|
31
|
+
where operativo = new.operativo and enc = new.enc;
|
|
32
|
+
end if;
|
|
33
|
+
end if;
|
|
34
|
+
return new;
|
|
35
|
+
end;
|
|
36
|
+
$BODY$;
|
|
37
|
+
|
|
38
|
+
--DROP TRIGGER IF EXISTS asignar_desasignar_tareas_tem_trg ON tareas_tem;
|
|
39
|
+
CREATE TRIGGER asignar_desasignar_tareas_tem_trg
|
|
40
|
+
AFTER UPDATE OF asignado
|
|
41
|
+
ON tareas_tem
|
|
42
|
+
FOR EACH ROW
|
|
43
|
+
EXECUTE PROCEDURE asignar_desasignar_tareas_tem_trg();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
permiso |accion |predeterminado
|
|
2
|
-
campo |editar |false
|
|
3
|
-
campo |ver |false
|
|
4
|
-
campo |administrar|false
|
|
5
|
-
configurar |editar |false
|
|
6
|
-
configurar |ver |false
|
|
7
|
-
encuestas |ingresar |false
|
|
8
|
-
encuestas |procesar |false
|
|
9
|
-
encuestas |justificar|false
|
|
10
|
-
encuestas |relevar |false
|
|
11
|
-
consistencias |editar |false
|
|
1
|
+
permiso |accion |predeterminado
|
|
2
|
+
campo |editar |false
|
|
3
|
+
campo |ver |false
|
|
4
|
+
campo |administrar|false
|
|
5
|
+
configurar |editar |false
|
|
6
|
+
configurar |ver |false
|
|
7
|
+
encuestas |ingresar |false
|
|
8
|
+
encuestas |procesar |false
|
|
9
|
+
encuestas |justificar|false
|
|
10
|
+
encuestas |relevar |false
|
|
11
|
+
consistencias |editar |false
|
|
12
12
|
casilleros_texto|editar |false
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
rol |superuser|nombre
|
|
2
|
-
admin |true |Administrador
|
|
3
|
-
direccion |false |Dirección
|
|
4
|
-
coor_campo |false |Coordinador de Campo
|
|
5
|
-
encuestador |false |Encuestador
|
|
6
|
-
dis_conceptual|false |Diseño Conceptual
|
|
7
|
-
recepcionista |false |Recepcionista
|
|
8
|
-
procesamiento |false |Procesamiento
|
|
9
|
-
auxiliar |false |Auxiliar de campo
|
|
10
|
-
recuperador |false |recuperador
|
|
1
|
+
rol |superuser|nombre
|
|
2
|
+
admin |true |Administrador
|
|
3
|
+
direccion |false |Dirección
|
|
4
|
+
coor_campo |false |Coordinador de Campo
|
|
5
|
+
encuestador |false |Encuestador
|
|
6
|
+
dis_conceptual|false |Diseño Conceptual
|
|
7
|
+
recepcionista |false |Recepcionista
|
|
8
|
+
procesamiento |false |Procesamiento
|
|
9
|
+
auxiliar |false |Auxiliar de campo
|
|
10
|
+
recuperador |false |recuperador
|
|
11
11
|
supervisor |false |Supervisor
|