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.
Files changed (59) hide show
  1. package/dist/client/server/table-tem.d.ts +3 -0
  2. package/dist/client/server/table-tem.js +239 -0
  3. package/dist/client/server/types-dmencu.d.ts +48 -0
  4. package/dist/client/server/types-dmencu.js +33 -0
  5. package/dist/client/unlogged/css/bootstrap.min.css +6 -6
  6. package/dist/client/unlogged/tsconfig.json +14 -14
  7. package/dist/server/server/table-barrios.js +1 -1
  8. package/dist/server/server/table-comunas copy.d.ts +2 -0
  9. package/dist/server/server/table-comunas copy.js +28 -0
  10. package/dist/server/server/table-comunas.js +2 -2
  11. package/dist/server/server/table-encuestadores.js +7 -7
  12. package/dist/server/server/table-fracciones.js +1 -1
  13. package/dist/server/server/table-hogares.js +1 -1
  14. package/dist/server/server/table-hogares_sup.js +1 -1
  15. package/dist/server/server/table-manzanas.js +1 -1
  16. package/dist/server/server/table-parametros.js +1 -1
  17. package/dist/server/server/table-personal.js +7 -7
  18. package/dist/server/server/table-personal_rol.js +7 -7
  19. package/dist/server/server/table-personas.js +1 -1
  20. package/dist/server/server/table-personas_sup.js +1 -1
  21. package/dist/server/server/table-radios.js +3 -3
  22. package/dist/server/server/table-recepcionistas.js +1 -1
  23. package/dist/server/server/table-visitas.js +1 -1
  24. package/dist/server/server/table-visitas_sup.js +1 -1
  25. package/dist/server/server/table-viviendas.js +1 -1
  26. package/dist/unlogged/unlogged/css/bootstrap.min.css +6 -6
  27. package/dist/unlogged/unlogged/server/table-tem.d.ts +3 -0
  28. package/dist/unlogged/unlogged/server/table-tem.js +239 -0
  29. package/dist/unlogged/unlogged/server/types-dmencu.d.ts +48 -0
  30. package/dist/unlogged/unlogged/server/types-dmencu.js +33 -0
  31. package/dist/unlogged/unlogged/tsconfig.json +14 -14
  32. package/dist/unlogged/unlogged/unlogged/abrir-formulario.d.ts +13 -0
  33. package/dist/unlogged/unlogged/unlogged/abrir-formulario.js +109 -0
  34. package/dist/unlogged/unlogged/unlogged/adapt.d.ts +0 -0
  35. package/dist/unlogged/unlogged/unlogged/adapt.js +8 -0
  36. package/dist/unlogged/unlogged/unlogged/bypass-formulario.d.ts +202 -0
  37. package/dist/unlogged/unlogged/unlogged/bypass-formulario.js +1100 -0
  38. package/dist/unlogged/unlogged/unlogged/redux-formulario.d.ts +349 -0
  39. package/dist/unlogged/unlogged/unlogged/redux-formulario.js +318 -0
  40. package/dist/unlogged/unlogged/unlogged/render-formulario.d.ts +86 -0
  41. package/dist/unlogged/unlogged/unlogged/render-formulario.js +1692 -0
  42. package/dist/unlogged/unlogged/unlogged/render-general.d.ts +127 -0
  43. package/dist/unlogged/unlogged/unlogged/render-general.js +176 -0
  44. package/dist/unlogged/unlogged/unlogged/tipos.d.ts +486 -0
  45. package/dist/unlogged/unlogged/unlogged/tipos.js +22 -0
  46. package/dist/unlogged/unlogged/unlogged/unlogged.d.ts +1 -0
  47. package/dist/unlogged/unlogged/unlogged/unlogged.js +180 -0
  48. package/install/actualizar-2023-05-14.sql +38 -38
  49. package/install/actualizar_inconvar.sql +28 -28
  50. package/install/agregados_tem.sql +4 -4
  51. package/install/asignar_desasignar_tareas_tem_trg.sql +43 -43
  52. package/install/metadatos/permisos.tab +11 -11
  53. package/install/metadatos/roles.tab +10 -10
  54. package/install/metadatos/roles_permisos.tab +94 -94
  55. package/install/metadatos/tipovar.tab +9 -9
  56. package/install/sincro_tareas_areas_tareas_tem_trg.sql +29 -29
  57. package/install/usuarios_trg.sql +41 -41
  58. package/install/validar_tareas_tem_trg.sql +67 -67
  59. 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