dmencu 3.0.5 → 3.0.7

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 (45) hide show
  1. package/dist/client/unlogged/abrir-formulario.js +1 -1
  2. package/dist/client/unlogged/css/bootstrap.min.css +6 -6
  3. package/dist/client/unlogged/render-config.js +1 -1
  4. package/dist/client/unlogged/render-formulario.js +9 -5
  5. package/dist/client/unlogged/render-formulario.tsx +46 -43
  6. package/dist/client/unlogged/render-init.js +1 -1
  7. package/dist/client/unlogged/tsconfig.json +14 -14
  8. package/dist/server/server/app-dmencu.d.ts +516 -863
  9. package/dist/server/server/table-area_enc_proximas.js +1 -1
  10. package/dist/server/server/table-barrios.js +1 -1
  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 +1 -1
  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/server/server/types-dmencu.js +1 -1
  27. package/dist/unlogged/unlogged/abrir-formulario.js +1 -1
  28. package/dist/unlogged/unlogged/css/bootstrap.min.css +6 -6
  29. package/dist/unlogged/unlogged/render-config.js +1 -1
  30. package/dist/unlogged/unlogged/render-formulario.js +9 -5
  31. package/dist/unlogged/unlogged/render-formulario.tsx +46 -43
  32. package/dist/unlogged/unlogged/render-init.js +1 -1
  33. package/dist/unlogged/unlogged/tsconfig.json +14 -14
  34. package/install/actualizar-2023-05-14.sql +38 -38
  35. package/install/actualizar_inconvar.sql +28 -28
  36. package/install/agregados_tem.sql +4 -4
  37. package/install/asignar_desasignar_tareas_tem_trg.sql +43 -43
  38. package/install/metadatos/permisos.tab +11 -11
  39. package/install/metadatos/roles.tab +10 -10
  40. package/install/metadatos/roles_permisos.tab +94 -94
  41. package/install/metadatos/tipovar.tab +9 -9
  42. package/install/sincro_tareas_areas_tareas_tem_trg.sql +29 -29
  43. package/install/usuarios_trg.sql +41 -41
  44. package/install/validar_tareas_tem_trg.sql +67 -67
  45. package/package.json +91 -91
@@ -581,7 +581,10 @@ function EncabezadoDespliegue(props: {
581
581
  variant="outlined"
582
582
  className="boton-pregunta-nsnc"
583
583
  onClick={() => {
584
- dispatchByPass(accion_registrar_respuesta, { respuesta: ns_nc, variable: casillero.var_name as IdVariable, forPk: forPk })
584
+ var { siguienteVariable } = dispatchByPass(accion_registrar_respuesta, { respuesta: ns_nc, variable: casillero.var_name as IdVariable, forPk: forPk });
585
+ if(siguienteVariable) {
586
+ enfocarElementoDeVariable(casillero.especial?.scrollTo ?? siguienteVariable);
587
+ }
585
588
  }}
586
589
  >
587
590
  NS/NC
@@ -702,7 +705,7 @@ function Campo(props: { disabled: boolean, pregunta: PreguntaSimple | PreguntaCo
702
705
  };
703
706
  const handleSubmit = ({ esBotonConfirmar }: { esBotonConfirmar: boolean }) => {
704
707
  debeSaltar = esBotonConfirmar ? true : (saltoAutomatico || conCampoOpciones);
705
-
708
+
706
709
  var isInputFocused = document.activeElement && (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA');
707
710
  if (isInputFocused) {
708
711
  if (document.activeElement instanceof HTMLElement) {
@@ -721,9 +724,9 @@ function Campo(props: { disabled: boolean, pregunta: PreguntaSimple | PreguntaCo
721
724
  variable={pregunta.var_name}
722
725
  forPk={props.forPk}
723
726
  />}
724
- <form
725
- className="form-campo-wrapper"
726
- style={{ display: 'contents' }}
727
+ <form
728
+ className="form-campo-wrapper"
729
+ style={{ display: 'contents' }}
727
730
  onSubmit={(e) => {
728
731
  e.preventDefault();
729
732
  handleSubmit({ esBotonConfirmar: false });
@@ -734,7 +737,7 @@ function Campo(props: { disabled: boolean, pregunta: PreguntaSimple | PreguntaCo
734
737
  id={`var-${pregunta.var_name || ''}`}
735
738
  disabled={disabled || pregunta.especial?.gps}
736
739
  className="variable"
737
- //var-length={pregunta.longitud}
740
+ //var-length={pregunta.longitud}
738
741
  fullWidth={true}
739
742
  inputProps={inputProps}
740
743
  type={pregunta.despliegueTipoInput ?? adaptarTipoVarCasillero(pregunta.tipovar)}
@@ -1318,14 +1321,14 @@ function BotonFormularioDespliegue(props: { casillero: BotonFormulario, formular
1318
1321
  var sufijoIdElemento = toPlainForPk(forPk);
1319
1322
  /*
1320
1323
  registrarElemento({
1321
- id:`div-boton-formulario-${sufijoIdElemento}`,
1322
- attr:'esta-inhabilitada',
1324
+ id:`div-boton-formulario-${sufijoIdElemento}`,
1325
+ attr:'esta-inhabilitada',
1323
1326
  // fun: (r:Respuestas)=>habilitador(r)?'SI':'NO'
1324
1327
  fun: (_r:Respuestas)=>'NO'
1325
1328
  });
1326
1329
  registrarElemento<HTMLButtonElement>({
1327
- id:`boton-formulario-${sufijoIdElemento}`,
1328
- prop:'disabled',
1330
+ id:`boton-formulario-${sufijoIdElemento}`,
1331
+ prop:'disabled',
1329
1332
  // fun: (r:Respuestas)=>!habilitador(r)
1330
1333
  fun: (_r:Respuestas)=>false
1331
1334
  });
@@ -1514,29 +1517,29 @@ function BotonFormularioDespliegue(props: { casillero: BotonFormulario, formular
1514
1517
  <Button color="primary" variant="contained" onClick={() => setConfirmarForzarIr(null)}>Entendido</Button>
1515
1518
  </Dialog>
1516
1519
  {confirmacionBorrado && (
1517
- <Dialog open={true} onClose={() => {
1518
- setConfirmacionBorrado(null);
1519
- setFraseBorrado('');
1520
- setErrorFraseBorrado(false);
1520
+ <Dialog open={true} onClose={() => {
1521
+ setConfirmacionBorrado(null);
1522
+ setFraseBorrado('');
1523
+ setErrorFraseBorrado(false);
1521
1524
  }}>
1522
1525
  <DialogTitle>Advertencia: Se perderán datos</DialogTitle>
1523
1526
  <DialogContent>
1524
1527
  <DialogContentText>
1525
1528
  {`Está por borrar el formulario ${confirmacionBorrado.defBoton.forPk.formulario} (${estructura.unidades_analisis[estructura.formularios[confirmacionBorrado.defBoton.forPk.formulario].casilleros.unidad_analisis].pk_agregada}: ${confirmacionBorrado.defBoton.num}). Los datos del mismo y todos sus registros asociados se perderán. ¿Desea continuar?`}
1526
1529
  </DialogContentText>
1527
-
1530
+
1528
1531
  <div style={{ marginTop: '20px', marginBottom: '20px' }}>
1529
1532
  <DialogContentText>
1530
1533
  Para confirmar el borrado, escriba la frase <strong>"forzar borrado"</strong> a continuación:
1531
1534
  </DialogContentText>
1532
- <input
1535
+ <input
1533
1536
  id="input-forzar-borrado"
1534
- type="text"
1535
- value={fraseBorrado}
1537
+ type="text"
1538
+ value={fraseBorrado}
1536
1539
  onChange={e => {
1537
1540
  setFraseBorrado(e.target.value);
1538
1541
  setErrorFraseBorrado(false);
1539
- }}
1542
+ }}
1540
1543
  style={{width: '100%', padding: '8px', border: errorFraseBorrado ? '1px solid red' : '1px solid #ccc', borderRadius: '4px'}}
1541
1544
  placeholder="forzar borrado"
1542
1545
  autoComplete="off"
@@ -1550,20 +1553,20 @@ function BotonFormularioDespliegue(props: { casillero: BotonFormulario, formular
1550
1553
  </div>
1551
1554
  </DialogContent>
1552
1555
  <DialogActions>
1553
- <Button
1554
- color="primary"
1555
- variant="outlined"
1556
- onClick={() => {
1557
- setConfirmacionBorrado(null);
1558
- setFraseBorrado('');
1559
- setErrorFraseBorrado(false);
1556
+ <Button
1557
+ color="primary"
1558
+ variant="outlined"
1559
+ onClick={() => {
1560
+ setConfirmacionBorrado(null);
1561
+ setFraseBorrado('');
1562
+ setErrorFraseBorrado(false);
1560
1563
  }}
1561
1564
  >
1562
1565
  Cancelar
1563
1566
  </Button>
1564
1567
  <Button color="secondary" variant="contained" onClick={() => {
1565
1568
  if (!confirmacionBorrado) return;
1566
-
1569
+
1567
1570
  if (fraseBorrado.trim().toLowerCase() !== "forzar borrado") {
1568
1571
  setErrorFraseBorrado(true);
1569
1572
  setTimeout(() => {
@@ -1712,7 +1715,7 @@ function BloqueDespliegue(props: { bloque: Bloque, formulario: Formulario, forPk
1712
1715
  var { modoDespliegue } = useSelectorVivienda(forPk);
1713
1716
  if (multiple) {
1714
1717
  // TODO: GENERALIZAR
1715
- // @ts-ignore
1718
+ // @ts-ignore
1716
1719
  // lista=respuestas.personas.map((_persona, i)=>(
1717
1720
  // {forPk:{...forPk, persona:i+1}, key:i+1, multiple:true}
1718
1721
  // ))
@@ -2078,7 +2081,7 @@ setDesplegarLineaResumenUAPrincipal((props: {
2078
2081
  feedbackAll: { [formulario in PlainForPk]: FormStructureState<IdVariable, Valor, IdFin> },
2079
2082
  _estructura: Estructura
2080
2083
  ) => {
2081
- //pregunto si es la misma vivienda porque la funcion se dispara
2084
+ //pregunto si es la misma vivienda porque la funcion se dispara
2082
2085
  //con todas las combinaciones de respuestas para cada forPk
2083
2086
  //@ts-ignore vivienda existe
2084
2087
  if (r[estructura.pkAgregadaUaPpal] == forPk[estructura.pkAgregadaUaPpal]) {
@@ -2283,8 +2286,8 @@ export function AppBarPrincipal(props: AppBarPrincipalProps): JSX.Element {
2283
2286
  <Toolbar>
2284
2287
  {props.barraNavFormulario}
2285
2288
  {mostrarBotoneraNavegacion ? (
2286
- <BotoneraNavegacion disabled={props.disabled}/>
2287
- ) : null}
2289
+ <BotoneraNavegacion disabled={props.disabled}/>
2290
+ ) : null}
2288
2291
  {props.modoDM === 'capa' && !props.barraNavFormulario ? (
2289
2292
  <Typography><span style={{ marginLeft: '5px' }}> MODO CAPACITACIÓN</span></Typography>
2290
2293
  ) : null}
@@ -2301,7 +2304,7 @@ export function BotoneraNavegacion(props: { disabled?: boolean }): JSX.Element {
2301
2304
  return (
2302
2305
  <ButtonGroup variant="outlined" size="small" color="inherit">
2303
2306
  <Button
2304
- onClick={() =>
2307
+ onClick={() =>
2305
2308
  dispatch(dispatchers.SET_OPCION({ opcion: 'pantallaActual', valor: 'hdr' }))
2306
2309
  }
2307
2310
  disabled={pantallaActual === 'hdr' || props.disabled}
@@ -2309,7 +2312,7 @@ export function BotoneraNavegacion(props: { disabled?: boolean }): JSX.Element {
2309
2312
  >
2310
2313
  <ICON.Assignment /> Hoja de Ruta
2311
2314
  </Button>
2312
-
2315
+
2313
2316
  <Button
2314
2317
  onClick={() =>
2315
2318
  dispatch(dispatchers.SET_OPCION({ opcion: 'pantallaActual', valor: 'sincronizacion' }))
@@ -2323,11 +2326,11 @@ export function BotoneraNavegacion(props: { disabled?: boolean }): JSX.Element {
2323
2326
  );
2324
2327
  }
2325
2328
 
2326
- export function UsuarioLogueadoYConfig(props: {
2329
+ export function UsuarioLogueadoYConfig(props: {
2327
2330
  mostrarSetup?: boolean,
2328
2331
  mostrarLogout?: boolean,
2329
- onLogout?: () => void,
2330
- navigationMenu?: React.ReactNode
2332
+ onLogout?: () => void,
2333
+ navigationMenu?: React.ReactNode
2331
2334
  }): JSX.Element {
2332
2335
  var username: string | null = getFormRenderer().getUsernameLogueado();
2333
2336
  var idper: string | null = getFormRenderer().getIdperLogueado();
@@ -2362,8 +2365,8 @@ export function UsuarioLogueadoYConfig(props: {
2362
2365
  </Typography>
2363
2366
  {props.mostrarSetup ? (
2364
2367
  <FastSetup>
2365
- <MenuItem
2366
- onClick={() =>
2368
+ <MenuItem
2369
+ onClick={() =>
2367
2370
  dispatch(dispatchers.SET_OPCION({ opcion: 'pantallaActual', valor: 'modo' }))}
2368
2371
  >
2369
2372
  <ListItemIcon>{modoDM === 'capa' ? <ICON.BusinessCenter /> : <ICON.SportsEsports />} </ListItemIcon>
@@ -2375,8 +2378,8 @@ export function UsuarioLogueadoYConfig(props: {
2375
2378
  >
2376
2379
  <ListItemText>Soporte técnico</ListItemText>
2377
2380
  </MenuItem>
2378
- <MenuItem
2379
- onClick={() =>
2381
+ <MenuItem
2382
+ onClick={() =>
2380
2383
  dispatch(dispatchers.RESET_OPCIONES({}))}
2381
2384
  >
2382
2385
  <ListItemIcon><ICON.Refresh/></ListItemIcon>
@@ -2386,7 +2389,7 @@ export function UsuarioLogueadoYConfig(props: {
2386
2389
  onClick={() => {
2387
2390
  history.replaceState(null, '', `${location.origin + location.pathname}/../menu#i=sincronizar`);
2388
2391
  location.reload();
2389
- }}
2392
+ }}
2390
2393
  >
2391
2394
  <ListItemIcon><ICON.SyncAlt /></ListItemIcon>
2392
2395
  <ListItemText>Sincronización (link viejo)</ListItemText>
@@ -2525,7 +2528,7 @@ export function LayoutAccionDispositivo(props: LayoutAccionDispositivoProps): JS
2525
2528
  onClick={props.onAccion}
2526
2529
  >
2527
2530
  {props.textoBotonAccion}
2528
- </Button>
2531
+ </Button>
2529
2532
  </div>
2530
2533
  <div style={{ display: 'flex', gap: '10px', alignItems: 'center', flexWrap: 'wrap' }}>
2531
2534
  {!props.online && (
@@ -2595,7 +2598,7 @@ export function PantallaSincronizacion(props: PantallaSincronizacionProps): JSX.
2595
2598
  loading={loading}
2596
2599
  online={online}
2597
2600
  textoBotonAccion={
2598
- loading ?
2601
+ loading ?
2599
2602
  'Sincronizando...'
2600
2603
  :
2601
2604
  <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}><ICON.CloudSync /> Sincronizar</span>
@@ -124,4 +124,4 @@
124
124
  return createLocalStorageFormRenderer({});
125
125
  }
126
126
  });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWluaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNEhBLHdFQUlDO0lBTUQsNENBRUM7SUF2SUQsbURBQW1FO0lBSW5FLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxDQUFDO0lBQzdDLE1BQU0sdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUM5QixRQUFBLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztJQUNuQyxRQUFBLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUNqQyxRQUFBLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUNqQyxRQUFBLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsUUFBQSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztJQUVyRCx1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLE1BQU0sa0JBQWtCLEdBQUc7UUFDdkIsWUFBWTtZQUNSLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxZQUFZLENBQUMsS0FBVTtZQUNuQixLQUFLLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxvQkFBb0I7WUFDaEIsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELG9CQUFvQixDQUFDLEtBQWE7WUFDOUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsa0JBQWtCO1lBQ2QsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEQs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LENBQUM7aUJBQU0sQ0FBQztnQkFDSixLQUFLLENBQUMsYUFBYSxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLHlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELFFBQVE7WUFDSixVQUFVLENBQUMsR0FBRSxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsWUFBWSxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFDTixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBRUosQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxTQUFnQiw4QkFBOEIsQ0FDMUMsYUFBdUQ7UUFFdkQsT0FBTyxJQUFBLGtDQUFrQixrQ0FBTSxrQkFBa0IsR0FBSyxhQUFhLEVBQUcsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsZ0JBQWdCO1FBQzVCLE9BQU8sOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdvdG9Db25zaXN0aXIgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtUmVuZGVyZXIsIEZvcm1SZW5kZXJlciB9IGZyb20gXCIuL3JlbmRlci1jb25maWdcIjtcbmltcG9ydCB7IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLCBNb2RvRE0sIEVzdHJ1Y3R1cmEsIE1vZG9BbG1hY2VuYW1pZW50byB9IGZyb20gXCIuL3RpcG9zXCI7XG5cblxuY29uc3QgTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FID0gJ2hkci1zdGF0ZSc7XG5jb25zdCBMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiA9ICdwcm94aW1vX3ZhbG9yX3BrX3JhaXonO1xuY29uc3QgQVBQX0NBQ0hFX1ZFUlNJT04gPSAnYXBwLWNhY2hlLXZlcnNpb24nO1xuY29uc3QgTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZID0gJ21vZG9fZG0nO1xuZXhwb3J0IGNvbnN0IEdMT1ZBUl9EQVRPU0JZUEFTUyA9ICdkYXRvc2J5cGFzcyc7XG5leHBvcnQgY29uc3QgR0xPVkFSX01PRE9CWVBBU1MgPSAnbW9kb2J5cGFzcyc7XG5leHBvcnQgY29uc3QgR0xPVkFSX0VTVFJVQ1RVUkEgPSAnZXN0cnVjdHVyYSc7XG5leHBvcnQgY29uc3QgU0VUVVAgPSAnc2V0dXAnO1xuZXhwb3J0IGNvbnN0IExBU1RfTE9HR0VEX1NFVFVQID0gJ2xhc3RfbG9nZ2VkX3NldHVwJztcblxuLy8gQ29uZmlndXJhY2nDs24gZGUgYWxtYWNlbmFtaWVudG8gbG9jYWwgKGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZSkuXG4vLyBFcyBsYSBjb25maWd1cmFjacOzbiByZWNvbWVuZGFkYSBwb3IgZGVmZWN0byBwYXJhIGVsIHJlbmRlcmVyIG9mZmxpbmUuXG5jb25zdCBsb2NhbFN0b3JhZ2VDb25maWcgPSB7XG4gICAgZ2V0Q2Fzb1N0YXRlKCkge1xuICAgICAgICByZXR1cm4gbXlPd24uZ2V0TG9jYWxWYXIoTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FKTtcbiAgICB9LFxuXG4gICAgc2V0Q2Fzb1N0YXRlKHN0YXRlOiBhbnkpIHtcbiAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FLCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIGdldFVsdGltb1ZhbG9yUGtSYWl6KCkge1xuICAgICAgICByZXR1cm4gbXlPd24uZ2V0TG9jYWxWYXIoTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVopO1xuICAgIH0sXG5cbiAgICBzZXRVbHRpbW9WYWxvclBrUmFpeih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG15T3duLnNldExvY2FsVmFyKExBU1RfQVVUT19WQUxVRV9QS19SQUlaLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIGdldEFwcENhY2hlVmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIG15T3duLmdldExvY2FsVmFyKEFQUF9DQUNIRV9WRVJTSU9OKTtcbiAgICB9LFxuXG4gICAgc2V0QXBwQ2FjaGVWZXJzaW9uKHZlcnNpb246IHN0cmluZykge1xuICAgICAgICBteU93bi5zZXRMb2NhbFZhcihBUFBfQ0FDSEVfVkVSU0lPTiwgdmVyc2lvbik7XG4gICAgfSxcbiAgICBcbiAgICBnZXRNb2RvRE0oKSB7XG4gICAgICAgIHJldHVybiBteU93bi5nZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVkpO1xuICAgIH0sXG4gICAgXG4gICAgc2V0TW9kb0RNKG1vZG86IE1vZG9ETSkge1xuICAgICAgICBteU93bi5zZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVksIG1vZG8pO1xuICAgIH0sXG5cbiAgICBnZXRJZHBlckxvZ3VlYWRvKCkge1xuICAgICAgICBjb25zdCBzZXR1cCA9IG15T3duLmdldExvY2FsVmFyKFNFVFVQKSB8fCB7fTtcbiAgICAgICAgY29uc3QgYmFja3VwID0gbXlPd24uZ2V0TG9jYWxWYXIoTEFTVF9MT0dHRURfU0VUVVApIHx8IHt9O1xuXG4gICAgICAgIGlmIChzZXR1cC5pZHBlcikge1xuICAgICAgICAgICAgLy8gU2kgZWwgc2V0dXAgZXN0w6Egc2Fubywgbm9zIGFzZWd1cmFtb3MgZGUgcXVlIGVsIGJhY2t1cCBlc3TDqSBhY3R1YWxpemFkb1xuICAgICAgICAgICAgaWYgKGJhY2t1cC5pZHBlciAhPT0gc2V0dXAuaWRwZXIpIHtcbiAgICAgICAgICAgICAgICBteU93bi5zZXRMb2NhbFZhcihMQVNUX0xPR0dFRF9TRVRVUCwgeyAuLi5iYWNrdXAsIGlkcGVyOiBzZXR1cC5pZHBlciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXR1cC5pZHBlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpIHBlcmRpbW9zIGxhIGNvb2tpZSB5IGVsIHNldHVwIHZpbm8gdmFjw61vLCB1c2Ftb3MgZWwgYmFja3VwXG4gICAgICAgIHJldHVybiBiYWNrdXAuaWRwZXIgfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0VXNlcm5hbWVMb2d1ZWFkbygpIHtcbiAgICAgICAgY29uc3Qgc2V0dXAgPSBteU93bi5nZXRMb2NhbFZhcihTRVRVUCkgfHwge307XG4gICAgICAgIGNvbnN0IGJhY2t1cCA9IG15T3duLmdldExvY2FsVmFyKExBU1RfTE9HR0VEX1NFVFVQKSB8fCB7fTtcblxuICAgICAgICBpZiAoc2V0dXAudXNlcm5hbWUpIHtcbiAgICAgICAgICAgIGlmIChiYWNrdXAudXNlcm5hbWUgIT09IHNldHVwLnVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoTEFTVF9MT0dHRURfU0VUVVAsIHsgLi4uYmFja3VwLCB1c2VybmFtZTogc2V0dXAudXNlcm5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0dXAudXNlcm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmFja3VwLnVzZXJuYW1lIHx8IG51bGw7XG4gICAgfSxcblxuICAgIGxlZXJFc3RydWN0dXJhKCk6IFByb21pc2U8RXN0cnVjdHVyYSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShteU93bi5nZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSkpO1xuICAgIH0sXG4gICAgXG4gICAgcGVyc2lzdGlyRXN0cnVjdHVyYShlc3RydWN0dXJhOiBFc3RydWN0dXJhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIG15T3duLnNldExvY2FsVmFyKEdMT1ZBUl9FU1RSVUNUVVJBLCBlc3RydWN0dXJhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sXG5cbiAgICBsZWVyRGF0b3MoKTogUHJvbWlzZTxEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGw+IHtcbiAgICAgICAgdmFyIG1vZG9BbG1hY2VuYW1pZW50byA9IG15T3duLmdldFNlc3Npb25WYXIoR0xPVkFSX01PRE9CWVBBU1MpIGFzIE1vZG9BbG1hY2VuYW1pZW50bztcbiAgICAgICAgXG4gICAgICAgIGlmIChtb2RvQWxtYWNlbmFtaWVudG8gPT0gJ2xvY2FsJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShteU93bi5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobXlPd24uZ2V0U2Vzc2lvblZhcihHTE9WQVJfREFUT1NCWVBBU1MpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwZXJzaXN0aXJEYXRvcyhkYXRvczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdmFyIHsgbW9kb0FsbWFjZW5hbWllbnRvIH0gPSBkYXRvcztcbiAgICAgICAgaWYgKG1vZG9BbG1hY2VuYW1pZW50byA9PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICBteU93bi5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIGRhdG9zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG15T3duLnNldFNlc3Npb25WYXIoR0xPVkFSX0RBVE9TQllQQVNTLCBkYXRvcyk7XG4gICAgICAgIH1cbiAgICAgICAgbXlPd24uc2V0U2Vzc2lvblZhcihHTE9WQVJfTU9ET0JZUEFTUywgbW9kb0FsbWFjZW5hbWllbnRvKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sXG4gICAgb25Mb2dvdXQoKTogUHJvbWlzZTx2b2lkPntcbiAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9sb2dvdXRgKTtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9LDEwMClcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBcbn07XG5cbi8qKlxuICogQ3JlYSB1biBGb3JtUmVuZGVyZXIgY29uIGFsbWFjZW5hbWllbnRvIGVuIGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZS5cbiAqIEVzIGxhIGNvbmZpZ3VyYWNpw7NuIHJlY29tZW5kYWRhIHBvciBkZWZlY3RvIHBhcmEgZWwgbW9kbyBvZmZsaW5lLlxuICogU2UgcHVlZGUgc29icmVlc2NyaWJpciBjdWFscXVpZXIgbcOpdG9kbyBtZWRpYW50ZSBwYXJ0aWFsQ29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxTdG9yYWdlRm9ybVJlbmRlcmVyKFxuICAgIHBhcnRpYWxDb25maWc6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUZvcm1SZW5kZXJlcj5bMF1cbik6IEZvcm1SZW5kZXJlciB7XG4gICAgcmV0dXJuIGNyZWF0ZUZvcm1SZW5kZXJlcih7IC4uLmxvY2FsU3RvcmFnZUNvbmZpZywgLi4ucGFydGlhbENvbmZpZyB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2FyIGNyZWF0ZUxvY2FsU3RvcmFnZUZvcm1SZW5kZXJlciBlbiBzdSBsdWdhci5cbiAqIFNlIG1hbnRpZW5lIHBvciBjb21wYXRpYmlsaWRhZCBtaWVudHJhcyBzZSBtaWdyYW4gbG9zIGNvbnN1bWlkb3Jlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRGb3JtUmVuZGVyZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsU3RvcmFnZUZvcm1SZW5kZXJlcih7fSk7XG59Il19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWluaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNEhBLHdFQUlDO0lBTUQsNENBRUM7SUF2SUQsbURBQW1FO0lBSW5FLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxDQUFDO0lBQzdDLE1BQU0sdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUM5QixRQUFBLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztJQUNuQyxRQUFBLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUNqQyxRQUFBLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUNqQyxRQUFBLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsUUFBQSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztJQUVyRCx1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLE1BQU0sa0JBQWtCLEdBQUc7UUFDdkIsWUFBWTtZQUNSLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxZQUFZLENBQUMsS0FBVTtZQUNuQixLQUFLLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxvQkFBb0I7WUFDaEIsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELG9CQUFvQixDQUFDLEtBQWE7WUFDOUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsa0JBQWtCO1lBQ2QsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEQs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LENBQUM7aUJBQU0sQ0FBQztnQkFDSixLQUFLLENBQUMsYUFBYSxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLHlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELFFBQVE7WUFDSixVQUFVLENBQUMsR0FBRSxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsWUFBWSxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFDTixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBRUosQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxTQUFnQiw4QkFBOEIsQ0FDMUMsYUFBdUQ7UUFFdkQsT0FBTyxJQUFBLGtDQUFrQixrQ0FBTSxrQkFBa0IsR0FBSyxhQUFhLEVBQUcsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsZ0JBQWdCO1FBQzVCLE9BQU8sOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdvdG9Db25zaXN0aXIgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUZvcm1SZW5kZXJlciwgRm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgTW9kb0RNLCBFc3RydWN0dXJhLCBNb2RvQWxtYWNlbmFtaWVudG8gfSBmcm9tIFwiLi90aXBvc1wiO1xyXG5cclxuXHJcbmNvbnN0IExPQ0FMX1NUT1JBR0VfU1RBVEVfTkFNRSA9ICdoZHItc3RhdGUnO1xyXG5jb25zdCBMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiA9ICdwcm94aW1vX3ZhbG9yX3BrX3JhaXonO1xyXG5jb25zdCBBUFBfQ0FDSEVfVkVSU0lPTiA9ICdhcHAtY2FjaGUtdmVyc2lvbic7XHJcbmNvbnN0IE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSA9ICdtb2RvX2RtJztcclxuZXhwb3J0IGNvbnN0IEdMT1ZBUl9EQVRPU0JZUEFTUyA9ICdkYXRvc2J5cGFzcyc7XHJcbmV4cG9ydCBjb25zdCBHTE9WQVJfTU9ET0JZUEFTUyA9ICdtb2RvYnlwYXNzJztcclxuZXhwb3J0IGNvbnN0IEdMT1ZBUl9FU1RSVUNUVVJBID0gJ2VzdHJ1Y3R1cmEnO1xyXG5leHBvcnQgY29uc3QgU0VUVVAgPSAnc2V0dXAnO1xyXG5leHBvcnQgY29uc3QgTEFTVF9MT0dHRURfU0VUVVAgPSAnbGFzdF9sb2dnZWRfc2V0dXAnO1xyXG5cclxuLy8gQ29uZmlndXJhY2nDs24gZGUgYWxtYWNlbmFtaWVudG8gbG9jYWwgKGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZSkuXHJcbi8vIEVzIGxhIGNvbmZpZ3VyYWNpw7NuIHJlY29tZW5kYWRhIHBvciBkZWZlY3RvIHBhcmEgZWwgcmVuZGVyZXIgb2ZmbGluZS5cclxuY29uc3QgbG9jYWxTdG9yYWdlQ29uZmlnID0ge1xyXG4gICAgZ2V0Q2Fzb1N0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiBteU93bi5nZXRMb2NhbFZhcihMT0NBTF9TVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDYXNvU3RhdGUoc3RhdGU6IGFueSkge1xyXG4gICAgICAgIG15T3duLnNldExvY2FsVmFyKExPQ0FMX1NUT1JBR0VfU1RBVEVfTkFNRSwgc3RhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRVbHRpbW9WYWxvclBrUmFpeigpIHtcclxuICAgICAgICByZXR1cm4gbXlPd24uZ2V0TG9jYWxWYXIoTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVopO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRVbHRpbW9WYWxvclBrUmFpeih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVosIHZhbHVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QXBwQ2FjaGVWZXJzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiBteU93bi5nZXRMb2NhbFZhcihBUFBfQ0FDSEVfVkVSU0lPTik7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEFwcENhY2hlVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBteU93bi5zZXRMb2NhbFZhcihBUFBfQ0FDSEVfVkVSU0lPTiwgdmVyc2lvbik7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICBnZXRNb2RvRE0oKSB7XHJcbiAgICAgICAgcmV0dXJuIG15T3duLmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSk7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICBzZXRNb2RvRE0obW9kbzogTW9kb0RNKSB7XHJcbiAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZLCBtb2RvKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SWRwZXJMb2d1ZWFkbygpIHtcclxuICAgICAgICBjb25zdCBzZXR1cCA9IG15T3duLmdldExvY2FsVmFyKFNFVFVQKSB8fCB7fTtcclxuICAgICAgICBjb25zdCBiYWNrdXAgPSBteU93bi5nZXRMb2NhbFZhcihMQVNUX0xPR0dFRF9TRVRVUCkgfHwge307XHJcblxyXG4gICAgICAgIGlmIChzZXR1cC5pZHBlcikge1xyXG4gICAgICAgICAgICAvLyBTaSBlbCBzZXR1cCBlc3TDoSBzYW5vLCBub3MgYXNlZ3VyYW1vcyBkZSBxdWUgZWwgYmFja3VwIGVzdMOpIGFjdHVhbGl6YWRvXHJcbiAgICAgICAgICAgIGlmIChiYWNrdXAuaWRwZXIgIT09IHNldHVwLmlkcGVyKSB7XHJcbiAgICAgICAgICAgICAgICBteU93bi5zZXRMb2NhbFZhcihMQVNUX0xPR0dFRF9TRVRVUCwgeyAuLi5iYWNrdXAsIGlkcGVyOiBzZXR1cC5pZHBlciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2V0dXAuaWRwZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaSBwZXJkaW1vcyBsYSBjb29raWUgeSBlbCBzZXR1cCB2aW5vIHZhY8OtbywgdXNhbW9zIGVsIGJhY2t1cFxyXG4gICAgICAgIHJldHVybiBiYWNrdXAuaWRwZXIgfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VXNlcm5hbWVMb2d1ZWFkbygpIHtcclxuICAgICAgICBjb25zdCBzZXR1cCA9IG15T3duLmdldExvY2FsVmFyKFNFVFVQKSB8fCB7fTtcclxuICAgICAgICBjb25zdCBiYWNrdXAgPSBteU93bi5nZXRMb2NhbFZhcihMQVNUX0xPR0dFRF9TRVRVUCkgfHwge307XHJcblxyXG4gICAgICAgIGlmIChzZXR1cC51c2VybmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoYmFja3VwLnVzZXJuYW1lICE9PSBzZXR1cC51c2VybmFtZSkge1xyXG4gICAgICAgICAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoTEFTVF9MT0dHRURfU0VUVVAsIHsgLi4uYmFja3VwLCB1c2VybmFtZTogc2V0dXAudXNlcm5hbWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNldHVwLnVzZXJuYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJhY2t1cC51c2VybmFtZSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBsZWVyRXN0cnVjdHVyYSgpOiBQcm9taXNlPEVzdHJ1Y3R1cmEgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShteU93bi5nZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSkpO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgcGVyc2lzdGlyRXN0cnVjdHVyYShlc3RydWN0dXJhOiBFc3RydWN0dXJhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgbXlPd24uc2V0TG9jYWxWYXIoR0xPVkFSX0VTVFJVQ1RVUkEsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgbGVlckRhdG9zKCk6IFByb21pc2U8RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsPiB7XHJcbiAgICAgICAgdmFyIG1vZG9BbG1hY2VuYW1pZW50byA9IG15T3duLmdldFNlc3Npb25WYXIoR0xPVkFSX01PRE9CWVBBU1MpIGFzIE1vZG9BbG1hY2VuYW1pZW50bztcclxuICAgICAgICBcclxuICAgICAgICBpZiAobW9kb0FsbWFjZW5hbWllbnRvID09ICdsb2NhbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShteU93bi5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG15T3duLmdldFNlc3Npb25WYXIoR0xPVkFSX0RBVE9TQllQQVNTKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwZXJzaXN0aXJEYXRvcyhkYXRvczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB2YXIgeyBtb2RvQWxtYWNlbmFtaWVudG8gfSA9IGRhdG9zO1xyXG4gICAgICAgIGlmIChtb2RvQWxtYWNlbmFtaWVudG8gPT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgICBteU93bi5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIGRhdG9zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBteU93bi5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgZGF0b3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBteU93bi5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9NT0RPQllQQVNTLCBtb2RvQWxtYWNlbmFtaWVudG8pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH0sXHJcbiAgICBvbkxvZ291dCgpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9sb2dvdXRgKTtcclxuICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSwxMDApXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYSB1biBGb3JtUmVuZGVyZXIgY29uIGFsbWFjZW5hbWllbnRvIGVuIGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZS5cclxuICogRXMgbGEgY29uZmlndXJhY2nDs24gcmVjb21lbmRhZGEgcG9yIGRlZmVjdG8gcGFyYSBlbCBtb2RvIG9mZmxpbmUuXHJcbiAqIFNlIHB1ZWRlIHNvYnJlZXNjcmliaXIgY3VhbHF1aWVyIG3DqXRvZG8gbWVkaWFudGUgcGFydGlhbENvbmZpZy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIoXHJcbiAgICBwYXJ0aWFsQ29uZmlnOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVGb3JtUmVuZGVyZXI+WzBdXHJcbik6IEZvcm1SZW5kZXJlciB7XHJcbiAgICByZXR1cm4gY3JlYXRlRm9ybVJlbmRlcmVyKHsgLi4ubG9jYWxTdG9yYWdlQ29uZmlnLCAuLi5wYXJ0aWFsQ29uZmlnIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNhciBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIgZW4gc3UgbHVnYXIuXHJcbiAqIFNlIG1hbnRpZW5lIHBvciBjb21wYXRpYmlsaWRhZCBtaWVudHJhcyBzZSBtaWdyYW4gbG9zIGNvbnN1bWlkb3Jlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0Rm9ybVJlbmRlcmVyKCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsU3RvcmFnZUZvcm1SZW5kZXJlcih7fSk7XHJcbn0iXX0=
@@ -1,15 +1,15 @@
1
- {
2
- "compilerOptions": {
3
- "outDir": "../../dist/unlogged/unlogged",
4
- "moduleResolution": "node",
5
- "inlineSourceMap": true,
6
- "inlineSources": true,
7
- "typeRoots" : ["node_modules/@types", "../../node_modules/types.d.ts/modules"],
8
- "lib": ["dom","es2016"],
9
- "jsx": "react"
10
- },
11
- "include":[
12
- "."
13
- ],
14
- "extends": "../../tsconfig-common.json"
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "../../dist/unlogged/unlogged",
4
+ "moduleResolution": "node",
5
+ "inlineSourceMap": true,
6
+ "inlineSources": true,
7
+ "typeRoots" : ["node_modules/@types", "../../node_modules/types.d.ts/modules"],
8
+ "lib": ["dom","es2016"],
9
+ "jsx": "react"
10
+ },
11
+ "include":[
12
+ "."
13
+ ],
14
+ "extends": "../../tsconfig-common.json"
15
15
  }
@@ -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