@manticore-labs/nest 0.0.100 → 0.0.101

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 (20) hide show
  1. package/.idea/workspace.xml +169 -136
  2. package/build/main/lib/funciones-util/buscar-registro.js +751 -178
  3. package/build/main/lib/funciones-util/funciones-busqueda/generar-campos-con-condiciones.d.ts +4 -0
  4. package/build/main/lib/funciones-util/funciones-busqueda/generar-campos-con-condiciones.js +364 -0
  5. package/build/main/lib/funciones-util/funciones-busqueda/generar-joins.d.ts +5 -0
  6. package/build/main/lib/funciones-util/funciones-busqueda/generar-joins.js +55 -0
  7. package/build/main/lib/funciones-util/funciones-busqueda/obtener-objeto-where-y-relations.d.ts +4 -0
  8. package/build/main/lib/funciones-util/funciones-busqueda/obtener-objeto-where-y-relations.js +25 -0
  9. package/build/main/lib/principal.service.d.ts +1 -1
  10. package/build/main/lib/principal.service.js +1 -1
  11. package/build/module/lib/funciones-util/buscar-registro.js +751 -178
  12. package/build/module/lib/funciones-util/funciones-busqueda/generar-campos-con-condiciones.d.ts +4 -0
  13. package/build/module/lib/funciones-util/funciones-busqueda/generar-campos-con-condiciones.js +361 -0
  14. package/build/module/lib/funciones-util/funciones-busqueda/generar-joins.d.ts +5 -0
  15. package/build/module/lib/funciones-util/funciones-busqueda/generar-joins.js +55 -0
  16. package/build/module/lib/funciones-util/funciones-busqueda/obtener-objeto-where-y-relations.d.ts +4 -0
  17. package/build/module/lib/funciones-util/funciones-busqueda/obtener-objeto-where-y-relations.js +22 -0
  18. package/build/module/lib/principal.service.d.ts +1 -1
  19. package/build/module/lib/principal.service.js +1 -1
  20. package/package.json +1 -1
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const class_validator_1 = require("class-validator");
4
4
  const class_transformer_1 = require("class-transformer");
5
5
  const typeorm_1 = require("typeorm");
6
+ const obtener_objeto_where_y_relations_1 = require("./funciones-busqueda/obtener-objeto-where-y-relations");
7
+ const generar_joins_1 = require("./funciones-busqueda/generar-joins");
6
8
  async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions, skip, take, servicio, tipoPoliticaSeguridad, funcionMiddleware, controlador) {
7
9
  let existeErrorEnConvertirAJSON = false;
8
10
  const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
@@ -43,25 +45,270 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
43
45
  criterioBusquedaClase = await funcionMiddleware(criterioBusquedaClase, tipoPoliticaSeguridad, controlador);
44
46
  }
45
47
  if (criterioBusquedaClase.where) {
46
- if (Array.isArray(criterioBusquedaClase.where)) {
47
- criterioBusquedaClase
48
- .where
49
- .forEach((busqueda, indice) => {
48
+ const objetoWhereYRelations = obtener_objeto_where_y_relations_1.obtenerObjetoWhereYRelations(criterioBusquedaClase.where);
49
+ if (objetoWhereYRelations.objetoRelaciones === {}) {
50
+ if (Array.isArray(criterioBusquedaClase.where)) {
51
+ criterioBusquedaClase
52
+ .where
53
+ .forEach((busqueda, indice) => {
54
+ Object
55
+ .keys(busqueda)
56
+ .forEach((campo) => {
57
+ let noEncuentraOperador = true;
58
+ let campoEsTexto = typeof criterioBusquedaClase.where[indice][campo] === 'string';
59
+ if (noEncuentraOperador && campoEsTexto) {
60
+ const expresionRegularNot = /Not\(".+"\)+/g;
61
+ const contieneNot = criterioBusquedaClase.where[indice][campo].match(expresionRegularNot);
62
+ if (contieneNot && noEncuentraOperador) {
63
+ const sinNot = criterioBusquedaClase.where[indice][campo].replace('Not("', '').replace('")', '');
64
+ if (noEncuentraOperador && campoEsTexto) {
65
+ const expresionRegularLike = /Like\(".+"\)+/g;
66
+ const contieneLike = sinNot.match(expresionRegularLike);
67
+ if (contieneLike) {
68
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
69
+ noEncuentraOperador = false;
70
+ }
71
+ }
72
+ if (noEncuentraOperador && campoEsTexto) {
73
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
74
+ const contieneLessThan = sinNot.match(expresionRegularLessThan);
75
+ if (contieneLessThan) {
76
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
77
+ noEncuentraOperador = false;
78
+ }
79
+ }
80
+ if (noEncuentraOperador && campoEsTexto) {
81
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
82
+ const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
83
+ if (contieneMoreThan) {
84
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
85
+ noEncuentraOperador = false;
86
+ }
87
+ }
88
+ if (noEncuentraOperador && campoEsTexto) {
89
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
90
+ const contieneEqual = sinNot.match(expresionRegularEqual);
91
+ if (contieneEqual) {
92
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
93
+ noEncuentraOperador = false;
94
+ }
95
+ }
96
+ if (noEncuentraOperador && campoEsTexto) {
97
+ const expresionRegularBetween = /Between\(".+"\)+/g;
98
+ const contieneBetween = sinNot.match(expresionRegularBetween);
99
+ if (contieneBetween) {
100
+ const busqueda = [...sinNot
101
+ .replace('Between("', '')
102
+ .replace('")', '')
103
+ .replace(' ', '')
104
+ .split(',')
105
+ .map((n) => isNaN(n) ? n : +n)];
106
+ const esFecha = busqueda[0].length === 10 &&
107
+ busqueda[0].length === 10 &&
108
+ (typeof busqueda[0] === 'string') &&
109
+ (typeof busqueda[1] === 'string') &&
110
+ busqueda[0].match('-') &&
111
+ busqueda[1].match('-');
112
+ if (esFecha) {
113
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
114
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
115
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
116
+ }
117
+ else {
118
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
119
+ }
120
+ noEncuentraOperador = false;
121
+ }
122
+ }
123
+ if (noEncuentraOperador && campoEsTexto) {
124
+ const expresionRegularIn = /In\(.+\)+/g;
125
+ const contieneIn = sinNot.match(expresionRegularIn);
126
+ if (contieneIn) {
127
+ let arreglo;
128
+ try {
129
+ arreglo = JSON.parse(sinNot
130
+ .replace('In(', '')
131
+ .replace('])', ']'));
132
+ if (arreglo.length > 0) {
133
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
134
+ noEncuentraOperador = false;
135
+ }
136
+ else {
137
+ console.error({
138
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
139
+ });
140
+ delete criterioBusquedaClase.where[campo];
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error({
145
+ error,
146
+ mensaje: 'IN mal formateado, eliminando campo.'
147
+ });
148
+ delete criterioBusquedaClase.where[campo];
149
+ }
150
+ }
151
+ }
152
+ if (noEncuentraOperador && campoEsTexto) {
153
+ const expresionRegularAny = /Any\(.+\)+/g;
154
+ const contieneAny = sinNot.match(expresionRegularAny);
155
+ if (contieneAny) {
156
+ let arreglo;
157
+ try {
158
+ arreglo = JSON.parse(sinNot
159
+ .replace('Any(', '')
160
+ .replace(')', ''));
161
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
162
+ noEncuentraOperador = false;
163
+ }
164
+ catch (e) {
165
+ console.log('Error formateando clausula ANY');
166
+ console.log(e);
167
+ }
168
+ }
169
+ }
170
+ if (noEncuentraOperador && campoEsTexto) {
171
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
172
+ const contieneIsNull = sinNot.match(expresionRegularIsNull);
173
+ if (contieneIsNull) {
174
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.IsNull());
175
+ noEncuentraOperador = false;
176
+ }
177
+ }
178
+ }
179
+ } // Fin de NOT
180
+ if (noEncuentraOperador && campoEsTexto) {
181
+ const expresionRegularLike = /Like\(".+"\)+/g;
182
+ const contieneLike = criterioBusquedaClase.where[indice][campo].match(expresionRegularLike);
183
+ if (contieneLike) {
184
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Like(criterioBusquedaClase.where[indice][campo].replace('Like("', '').replace('")', ''));
185
+ noEncuentraOperador = false;
186
+ }
187
+ }
188
+ if (noEncuentraOperador && campoEsTexto) {
189
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
190
+ const contieneLessThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularLessThan);
191
+ if (contieneLessThan) {
192
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.LessThan(criterioBusquedaClase.where[indice][campo].replace('LessThan("', '').replace('")', ''));
193
+ noEncuentraOperador = false;
194
+ }
195
+ }
196
+ if (noEncuentraOperador && campoEsTexto) {
197
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
198
+ const contieneMoreThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularMoreThan);
199
+ if (contieneMoreThan) {
200
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[indice][campo].replace('MoreThan("', '').replace('")', ''));
201
+ noEncuentraOperador = false;
202
+ }
203
+ }
204
+ if (noEncuentraOperador && campoEsTexto) {
205
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
206
+ const contieneEqual = criterioBusquedaClase.where[indice][campo].match(expresionRegularEqual);
207
+ if (contieneEqual) {
208
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Equal(criterioBusquedaClase.where[indice][campo].replace('Equal("', '').replace('")', ''));
209
+ noEncuentraOperador = false;
210
+ }
211
+ }
212
+ if (noEncuentraOperador && campoEsTexto) {
213
+ const expresionRegularBetween = /Between\(".+"\)+/g;
214
+ const contieneBetween = criterioBusquedaClase.where[indice][campo].match(expresionRegularBetween);
215
+ if (contieneBetween) {
216
+ const busqueda = [...criterioBusquedaClase.where[indice][campo]
217
+ .replace('Between("', '')
218
+ .replace('")', '')
219
+ .replace(' ', '')
220
+ .split(',')
221
+ .map((n) => isNaN(n) ? n : +n)];
222
+ const esFecha = busqueda[0].length === 10 &&
223
+ busqueda[0].length === 10 &&
224
+ (typeof busqueda[0] === 'string') &&
225
+ (typeof busqueda[1] === 'string') &&
226
+ busqueda[0].match('-') &&
227
+ busqueda[1].match('-');
228
+ if (esFecha) {
229
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
230
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
231
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(fechaInicio, fechaFin);
232
+ }
233
+ else {
234
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
235
+ }
236
+ noEncuentraOperador = false;
237
+ }
238
+ }
239
+ if (noEncuentraOperador && campoEsTexto) {
240
+ const expresionRegularIn = /In\(.+\)+/g;
241
+ const contieneIn = criterioBusquedaClase.where[indice][campo].match(expresionRegularIn);
242
+ if (contieneIn) {
243
+ let arreglo;
244
+ try {
245
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
246
+ .replace('In(', '')
247
+ .replace('])', ']'));
248
+ if (arreglo.length > 0) {
249
+ criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
250
+ noEncuentraOperador = false;
251
+ }
252
+ else {
253
+ console.error({
254
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
255
+ });
256
+ delete criterioBusquedaClase.where[campo];
257
+ }
258
+ }
259
+ catch (error) {
260
+ console.error({
261
+ error,
262
+ mensaje: 'IN mal formateado, eliminando campo.'
263
+ });
264
+ delete criterioBusquedaClase.where[campo];
265
+ }
266
+ }
267
+ }
268
+ if (noEncuentraOperador && campoEsTexto) {
269
+ const expresionRegularAny = /Any\(.+\)+/g;
270
+ const contieneAny = criterioBusquedaClase.where[indice][campo].match(expresionRegularAny);
271
+ if (contieneAny) {
272
+ let arreglo;
273
+ try {
274
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
275
+ .replace('Any(', '')
276
+ .replace(')', ''));
277
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Any(arreglo);
278
+ noEncuentraOperador = false;
279
+ }
280
+ catch (e) {
281
+ console.log(e);
282
+ }
283
+ }
284
+ }
285
+ if (noEncuentraOperador && campoEsTexto) {
286
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
287
+ const contieneIsNull = criterioBusquedaClase.where[indice][campo].match(expresionRegularIsNull);
288
+ if (contieneIsNull) {
289
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.IsNull();
290
+ noEncuentraOperador = false;
291
+ }
292
+ }
293
+ });
294
+ });
295
+ }
296
+ else {
50
297
  Object
51
- .keys(busqueda)
298
+ .keys(criterioBusquedaClase.where)
52
299
  .forEach((campo) => {
53
300
  let noEncuentraOperador = true;
54
- let campoEsTexto = typeof criterioBusquedaClase.where[indice][campo] === 'string';
301
+ let campoEsTexto = typeof criterioBusquedaClase.where[campo] === 'string';
55
302
  if (noEncuentraOperador && campoEsTexto) {
56
303
  const expresionRegularNot = /Not\(".+"\)+/g;
57
- const contieneNot = criterioBusquedaClase.where[indice][campo].match(expresionRegularNot);
304
+ const contieneNot = criterioBusquedaClase.where[campo].match(expresionRegularNot);
58
305
  if (contieneNot && noEncuentraOperador) {
59
- const sinNot = criterioBusquedaClase.where[indice][campo].replace('Not("', '').replace('")', '');
306
+ const sinNot = criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '');
60
307
  if (noEncuentraOperador && campoEsTexto) {
61
308
  const expresionRegularLike = /Like\(".+"\)+/g;
62
309
  const contieneLike = sinNot.match(expresionRegularLike);
63
310
  if (contieneLike) {
64
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
311
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
65
312
  noEncuentraOperador = false;
66
313
  }
67
314
  }
@@ -69,7 +316,7 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
69
316
  const expresionRegularLessThan = /LessThan\(".+"\)+/g;
70
317
  const contieneLessThan = sinNot.match(expresionRegularLessThan);
71
318
  if (contieneLessThan) {
72
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
319
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
73
320
  noEncuentraOperador = false;
74
321
  }
75
322
  }
@@ -77,7 +324,7 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
77
324
  const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
78
325
  const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
79
326
  if (contieneMoreThan) {
80
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
327
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
81
328
  noEncuentraOperador = false;
82
329
  }
83
330
  }
@@ -85,7 +332,7 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
85
332
  const expresionRegularEqual = /Equal\(".+"\)+/g;
86
333
  const contieneEqual = sinNot.match(expresionRegularEqual);
87
334
  if (contieneEqual) {
88
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
335
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
89
336
  noEncuentraOperador = false;
90
337
  }
91
338
  }
@@ -108,10 +355,10 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
108
355
  if (esFecha) {
109
356
  const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
110
357
  const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
111
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
358
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
112
359
  }
113
360
  else {
114
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
361
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
115
362
  }
116
363
  noEncuentraOperador = false;
117
364
  }
@@ -125,12 +372,23 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
125
372
  arreglo = JSON.parse(sinNot
126
373
  .replace('In(', '')
127
374
  .replace('])', ']'));
128
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.In(arreglo));
129
- noEncuentraOperador = false;
375
+ if (arreglo.length > 0) {
376
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
377
+ noEncuentraOperador = false;
378
+ }
379
+ else {
380
+ console.error({
381
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
382
+ });
383
+ delete criterioBusquedaClase.where[campo];
384
+ }
130
385
  }
131
- catch (e) {
132
- console.log('Error formateando clausula IN');
133
- console.log(e);
386
+ catch (error) {
387
+ console.error({
388
+ error,
389
+ mensaje: 'IN mal formateado, eliminando campo.'
390
+ });
391
+ delete criterioBusquedaClase.where[campo];
134
392
  }
135
393
  }
136
394
  }
@@ -143,7 +401,7 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
143
401
  arreglo = JSON.parse(sinNot
144
402
  .replace('Any(', '')
145
403
  .replace(')', ''));
146
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
404
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
147
405
  noEncuentraOperador = false;
148
406
  }
149
407
  catch (e) {
@@ -156,7 +414,7 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
156
414
  const expresionRegularIsNull = /IsNull\(".+"\)+/g;
157
415
  const contieneIsNull = sinNot.match(expresionRegularIsNull);
158
416
  if (contieneIsNull) {
159
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.IsNull());
417
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.IsNull());
160
418
  noEncuentraOperador = false;
161
419
  }
162
420
  }
@@ -164,41 +422,41 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
164
422
  } // Fin de NOT
165
423
  if (noEncuentraOperador && campoEsTexto) {
166
424
  const expresionRegularLike = /Like\(".+"\)+/g;
167
- const contieneLike = criterioBusquedaClase.where[indice][campo].match(expresionRegularLike);
425
+ const contieneLike = criterioBusquedaClase.where[campo].match(expresionRegularLike);
168
426
  if (contieneLike) {
169
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Like(criterioBusquedaClase.where[indice][campo].replace('Like("', '').replace('")', ''));
427
+ criterioBusquedaClase.where[campo] = typeorm_1.Like(criterioBusquedaClase.where[campo].replace('Like("', '').replace('")', ''));
170
428
  noEncuentraOperador = false;
171
429
  }
172
430
  }
173
431
  if (noEncuentraOperador && campoEsTexto) {
174
432
  const expresionRegularLessThan = /LessThan\(".+"\)+/g;
175
- const contieneLessThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularLessThan);
433
+ const contieneLessThan = criterioBusquedaClase.where[campo].match(expresionRegularLessThan);
176
434
  if (contieneLessThan) {
177
- criterioBusquedaClase.where[indice][campo] = typeorm_1.LessThan(criterioBusquedaClase.where[indice][campo].replace('LessThan("', '').replace('")', ''));
435
+ criterioBusquedaClase.where[campo] = typeorm_1.LessThan(criterioBusquedaClase.where[campo].replace('LessThan("', '').replace('")', ''));
178
436
  noEncuentraOperador = false;
179
437
  }
180
438
  }
181
439
  if (noEncuentraOperador && campoEsTexto) {
182
440
  const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
183
- const contieneMoreThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularMoreThan);
441
+ const contieneMoreThan = criterioBusquedaClase.where[campo].match(expresionRegularMoreThan);
184
442
  if (contieneMoreThan) {
185
- criterioBusquedaClase.where[indice][campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[indice][campo].replace('MoreThan("', '').replace('")', ''));
443
+ criterioBusquedaClase.where[campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[campo].replace('MoreThan("', '').replace('")', ''));
186
444
  noEncuentraOperador = false;
187
445
  }
188
446
  }
189
447
  if (noEncuentraOperador && campoEsTexto) {
190
448
  const expresionRegularEqual = /Equal\(".+"\)+/g;
191
- const contieneEqual = criterioBusquedaClase.where[indice][campo].match(expresionRegularEqual);
449
+ const contieneEqual = criterioBusquedaClase.where[campo].match(expresionRegularEqual);
192
450
  if (contieneEqual) {
193
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Equal(criterioBusquedaClase.where[indice][campo].replace('Equal("', '').replace('")', ''));
451
+ criterioBusquedaClase.where[campo] = typeorm_1.Equal(criterioBusquedaClase.where[campo].replace('Equal("', '').replace('")', ''));
194
452
  noEncuentraOperador = false;
195
453
  }
196
454
  }
197
455
  if (noEncuentraOperador && campoEsTexto) {
198
456
  const expresionRegularBetween = /Between\(".+"\)+/g;
199
- const contieneBetween = criterioBusquedaClase.where[indice][campo].match(expresionRegularBetween);
457
+ const contieneBetween = criterioBusquedaClase.where[campo].match(expresionRegularBetween);
200
458
  if (contieneBetween) {
201
- const busqueda = [...criterioBusquedaClase.where[indice][campo]
459
+ const busqueda = [...criterioBusquedaClase.where[campo]
202
460
  .replace('Between("', '')
203
461
  .replace('")', '')
204
462
  .replace(' ', '')
@@ -213,41 +471,53 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
213
471
  if (esFecha) {
214
472
  const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
215
473
  const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
216
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(fechaInicio, fechaFin);
474
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(fechaInicio, fechaFin);
217
475
  }
218
476
  else {
219
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
477
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
220
478
  }
221
479
  noEncuentraOperador = false;
222
480
  }
223
481
  }
224
482
  if (noEncuentraOperador && campoEsTexto) {
225
483
  const expresionRegularIn = /In\(.+\)+/g;
226
- const contieneIn = criterioBusquedaClase.where[indice][campo].match(expresionRegularIn);
484
+ const contieneIn = criterioBusquedaClase.where[campo].match(expresionRegularIn);
227
485
  if (contieneIn) {
228
486
  let arreglo;
229
487
  try {
230
- arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
488
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
231
489
  .replace('In(', '')
232
490
  .replace('])', ']'));
233
- criterioBusquedaClase.where[indice][campo] = typeorm_1.In(arreglo);
234
- noEncuentraOperador = false;
491
+ if (arreglo.length > 0) {
492
+ criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
493
+ noEncuentraOperador = false;
494
+ }
495
+ else {
496
+ console.error({
497
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
498
+ });
499
+ delete criterioBusquedaClase.where[campo];
500
+ }
235
501
  }
236
- catch (e) {
237
- console.log(e);
502
+ catch (error) {
503
+ console.error({
504
+ error,
505
+ mensaje: 'IN mal formateado, eliminando campo.'
506
+ });
507
+ delete criterioBusquedaClase.where[campo];
238
508
  }
239
509
  }
240
510
  }
241
511
  if (noEncuentraOperador && campoEsTexto) {
242
512
  const expresionRegularAny = /Any\(.+\)+/g;
243
- const contieneAny = criterioBusquedaClase.where[indice][campo].match(expresionRegularAny);
513
+ const contieneAny = criterioBusquedaClase.where[campo].match(expresionRegularAny);
244
514
  if (contieneAny) {
245
515
  let arreglo;
246
516
  try {
247
- arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
517
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
248
518
  .replace('Any(', '')
249
519
  .replace(')', ''));
250
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Any(arreglo);
520
+ criterioBusquedaClase.where[campo] = typeorm_1.Any(arreglo);
251
521
  noEncuentraOperador = false;
252
522
  }
253
523
  catch (e) {
@@ -257,67 +527,185 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
257
527
  }
258
528
  if (noEncuentraOperador && campoEsTexto) {
259
529
  const expresionRegularIsNull = /IsNull\(".+"\)+/g;
260
- const contieneIsNull = criterioBusquedaClase.where[indice][campo].match(expresionRegularIsNull);
530
+ const contieneIsNull = criterioBusquedaClase.where[campo].match(expresionRegularIsNull);
261
531
  if (contieneIsNull) {
262
- criterioBusquedaClase.where[indice][campo] = typeorm_1.IsNull();
532
+ criterioBusquedaClase.where[campo] = typeorm_1.IsNull();
263
533
  noEncuentraOperador = false;
264
534
  }
265
535
  }
266
536
  });
267
- });
537
+ }
538
+ return servicio.find(criterioBusquedaClase);
268
539
  }
269
540
  else {
270
- Object
271
- .keys(criterioBusquedaClase.where)
272
- .forEach((campo) => {
273
- let noEncuentraOperador = true;
274
- let campoEsTexto = typeof criterioBusquedaClase.where[campo] === 'string';
275
- if (noEncuentraOperador && campoEsTexto) {
276
- const expresionRegularNot = /Not\(".+"\)+/g;
277
- const contieneNot = criterioBusquedaClase.where[campo].match(expresionRegularNot);
278
- if (contieneNot && noEncuentraOperador) {
279
- // criterioBusquedaClase.where[campo] = Not(
280
- // criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '')
281
- // );
282
- // noEncuentraOperador = false;
283
- const sinNot = criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '');
541
+ criterioBusquedaClase.where = objetoWhereYRelations.objetoCampos;
542
+ if (Array.isArray(criterioBusquedaClase.where)) {
543
+ criterioBusquedaClase
544
+ .where
545
+ .forEach((busqueda, indice) => {
546
+ Object
547
+ .keys(busqueda)
548
+ .forEach((campo) => {
549
+ let noEncuentraOperador = true;
550
+ let campoEsTexto = typeof criterioBusquedaClase.where[indice][campo] === 'string';
551
+ if (noEncuentraOperador && campoEsTexto) {
552
+ const expresionRegularNot = /Not\(".+"\)+/g;
553
+ const contieneNot = criterioBusquedaClase.where[indice][campo].match(expresionRegularNot);
554
+ if (contieneNot && noEncuentraOperador) {
555
+ const sinNot = criterioBusquedaClase.where[indice][campo].replace('Not("', '').replace('")', '');
556
+ if (noEncuentraOperador && campoEsTexto) {
557
+ const expresionRegularLike = /Like\(".+"\)+/g;
558
+ const contieneLike = sinNot.match(expresionRegularLike);
559
+ if (contieneLike) {
560
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
561
+ noEncuentraOperador = false;
562
+ }
563
+ }
564
+ if (noEncuentraOperador && campoEsTexto) {
565
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
566
+ const contieneLessThan = sinNot.match(expresionRegularLessThan);
567
+ if (contieneLessThan) {
568
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
569
+ noEncuentraOperador = false;
570
+ }
571
+ }
572
+ if (noEncuentraOperador && campoEsTexto) {
573
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
574
+ const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
575
+ if (contieneMoreThan) {
576
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
577
+ noEncuentraOperador = false;
578
+ }
579
+ }
580
+ if (noEncuentraOperador && campoEsTexto) {
581
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
582
+ const contieneEqual = sinNot.match(expresionRegularEqual);
583
+ if (contieneEqual) {
584
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
585
+ noEncuentraOperador = false;
586
+ }
587
+ }
588
+ if (noEncuentraOperador && campoEsTexto) {
589
+ const expresionRegularBetween = /Between\(".+"\)+/g;
590
+ const contieneBetween = sinNot.match(expresionRegularBetween);
591
+ if (contieneBetween) {
592
+ const busqueda = [...sinNot
593
+ .replace('Between("', '')
594
+ .replace('")', '')
595
+ .replace(' ', '')
596
+ .split(',')
597
+ .map((n) => isNaN(n) ? n : +n)];
598
+ const esFecha = busqueda[0].length === 10 &&
599
+ busqueda[0].length === 10 &&
600
+ (typeof busqueda[0] === 'string') &&
601
+ (typeof busqueda[1] === 'string') &&
602
+ busqueda[0].match('-') &&
603
+ busqueda[1].match('-');
604
+ if (esFecha) {
605
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
606
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
607
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
608
+ }
609
+ else {
610
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
611
+ }
612
+ noEncuentraOperador = false;
613
+ }
614
+ }
615
+ if (noEncuentraOperador && campoEsTexto) {
616
+ const expresionRegularIn = /In\(.+\)+/g;
617
+ const contieneIn = sinNot.match(expresionRegularIn);
618
+ if (contieneIn) {
619
+ let arreglo;
620
+ try {
621
+ arreglo = JSON.parse(sinNot
622
+ .replace('In(', '')
623
+ .replace('])', ']'));
624
+ if (arreglo.length > 0) {
625
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
626
+ noEncuentraOperador = false;
627
+ }
628
+ else {
629
+ console.error({
630
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
631
+ });
632
+ delete criterioBusquedaClase.where[campo];
633
+ }
634
+ }
635
+ catch (error) {
636
+ console.error({
637
+ error,
638
+ mensaje: 'IN mal formateado, eliminando campo.'
639
+ });
640
+ delete criterioBusquedaClase.where[campo];
641
+ }
642
+ }
643
+ }
644
+ if (noEncuentraOperador && campoEsTexto) {
645
+ const expresionRegularAny = /Any\(.+\)+/g;
646
+ const contieneAny = sinNot.match(expresionRegularAny);
647
+ if (contieneAny) {
648
+ let arreglo;
649
+ try {
650
+ arreglo = JSON.parse(sinNot
651
+ .replace('Any(', '')
652
+ .replace(')', ''));
653
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
654
+ noEncuentraOperador = false;
655
+ }
656
+ catch (e) {
657
+ console.log('Error formateando clausula ANY');
658
+ console.log(e);
659
+ }
660
+ }
661
+ }
662
+ if (noEncuentraOperador && campoEsTexto) {
663
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
664
+ const contieneIsNull = sinNot.match(expresionRegularIsNull);
665
+ if (contieneIsNull) {
666
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.IsNull());
667
+ noEncuentraOperador = false;
668
+ }
669
+ }
670
+ }
671
+ } // Fin de NOT
284
672
  if (noEncuentraOperador && campoEsTexto) {
285
673
  const expresionRegularLike = /Like\(".+"\)+/g;
286
- const contieneLike = sinNot.match(expresionRegularLike);
674
+ const contieneLike = criterioBusquedaClase.where[indice][campo].match(expresionRegularLike);
287
675
  if (contieneLike) {
288
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
676
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Like(criterioBusquedaClase.where[indice][campo].replace('Like("', '').replace('")', ''));
289
677
  noEncuentraOperador = false;
290
678
  }
291
679
  }
292
680
  if (noEncuentraOperador && campoEsTexto) {
293
681
  const expresionRegularLessThan = /LessThan\(".+"\)+/g;
294
- const contieneLessThan = sinNot.match(expresionRegularLessThan);
682
+ const contieneLessThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularLessThan);
295
683
  if (contieneLessThan) {
296
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
684
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.LessThan(criterioBusquedaClase.where[indice][campo].replace('LessThan("', '').replace('")', ''));
297
685
  noEncuentraOperador = false;
298
686
  }
299
687
  }
300
688
  if (noEncuentraOperador && campoEsTexto) {
301
689
  const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
302
- const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
690
+ const contieneMoreThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularMoreThan);
303
691
  if (contieneMoreThan) {
304
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
692
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[indice][campo].replace('MoreThan("', '').replace('")', ''));
305
693
  noEncuentraOperador = false;
306
694
  }
307
695
  }
308
696
  if (noEncuentraOperador && campoEsTexto) {
309
697
  const expresionRegularEqual = /Equal\(".+"\)+/g;
310
- const contieneEqual = sinNot.match(expresionRegularEqual);
698
+ const contieneEqual = criterioBusquedaClase.where[indice][campo].match(expresionRegularEqual);
311
699
  if (contieneEqual) {
312
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
700
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Equal(criterioBusquedaClase.where[indice][campo].replace('Equal("', '').replace('")', ''));
313
701
  noEncuentraOperador = false;
314
702
  }
315
703
  }
316
704
  if (noEncuentraOperador && campoEsTexto) {
317
705
  const expresionRegularBetween = /Between\(".+"\)+/g;
318
- const contieneBetween = sinNot.match(expresionRegularBetween);
706
+ const contieneBetween = criterioBusquedaClase.where[indice][campo].match(expresionRegularBetween);
319
707
  if (contieneBetween) {
320
- const busqueda = [...sinNot
708
+ const busqueda = [...criterioBusquedaClase.where[indice][campo]
321
709
  .replace('Between("', '')
322
710
  .replace('")', '')
323
711
  .replace(' ', '')
@@ -332,167 +720,352 @@ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions,
332
720
  if (esFecha) {
333
721
  const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
334
722
  const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
335
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
723
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(fechaInicio, fechaFin);
336
724
  }
337
725
  else {
338
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
726
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
339
727
  }
340
728
  noEncuentraOperador = false;
341
729
  }
342
730
  }
343
731
  if (noEncuentraOperador && campoEsTexto) {
344
732
  const expresionRegularIn = /In\(.+\)+/g;
345
- const contieneIn = sinNot.match(expresionRegularIn);
733
+ const contieneIn = criterioBusquedaClase.where[indice][campo].match(expresionRegularIn);
346
734
  if (contieneIn) {
347
735
  let arreglo;
348
736
  try {
349
- arreglo = JSON.parse(sinNot
737
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
350
738
  .replace('In(', '')
351
739
  .replace('])', ']'));
352
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
353
- noEncuentraOperador = false;
740
+ if (arreglo.length > 0) {
741
+ criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
742
+ noEncuentraOperador = false;
743
+ }
744
+ else {
745
+ console.error({
746
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
747
+ });
748
+ delete criterioBusquedaClase.where[campo];
749
+ }
354
750
  }
355
- catch (e) {
356
- console.log('Error formateando clausula IN');
357
- console.log(e);
751
+ catch (error) {
752
+ console.error({
753
+ error,
754
+ mensaje: 'IN mal formateado, eliminando campo.'
755
+ });
756
+ delete criterioBusquedaClase.where[campo];
358
757
  }
359
758
  }
360
759
  }
361
760
  if (noEncuentraOperador && campoEsTexto) {
362
761
  const expresionRegularAny = /Any\(.+\)+/g;
363
- const contieneAny = sinNot.match(expresionRegularAny);
762
+ const contieneAny = criterioBusquedaClase.where[indice][campo].match(expresionRegularAny);
364
763
  if (contieneAny) {
365
764
  let arreglo;
366
765
  try {
367
- arreglo = JSON.parse(sinNot
766
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
368
767
  .replace('Any(', '')
369
768
  .replace(')', ''));
370
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
769
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Any(arreglo);
371
770
  noEncuentraOperador = false;
372
771
  }
373
772
  catch (e) {
374
- console.log('Error formateando clausula ANY');
375
773
  console.log(e);
376
774
  }
377
775
  }
378
776
  }
379
777
  if (noEncuentraOperador && campoEsTexto) {
380
778
  const expresionRegularIsNull = /IsNull\(".+"\)+/g;
381
- const contieneIsNull = sinNot.match(expresionRegularIsNull);
779
+ const contieneIsNull = criterioBusquedaClase.where[indice][campo].match(expresionRegularIsNull);
382
780
  if (contieneIsNull) {
383
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.IsNull());
781
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.IsNull();
384
782
  noEncuentraOperador = false;
385
783
  }
386
784
  }
785
+ });
786
+ });
787
+ }
788
+ else {
789
+ Object
790
+ .keys(criterioBusquedaClase.where)
791
+ .forEach((campo) => {
792
+ let noEncuentraOperador = true;
793
+ let campoEsTexto = typeof criterioBusquedaClase.where[campo] === 'string';
794
+ if (noEncuentraOperador && campoEsTexto) {
795
+ const expresionRegularNot = /Not\(".+"\)+/g;
796
+ const contieneNot = criterioBusquedaClase.where[campo].match(expresionRegularNot);
797
+ if (contieneNot && noEncuentraOperador) {
798
+ // criterioBusquedaClase.where[campo] = Not(
799
+ // criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '')
800
+ // );
801
+ // noEncuentraOperador = false;
802
+ const sinNot = criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '');
803
+ if (noEncuentraOperador && campoEsTexto) {
804
+ const expresionRegularLike = /Like\(".+"\)+/g;
805
+ const contieneLike = sinNot.match(expresionRegularLike);
806
+ if (contieneLike) {
807
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
808
+ noEncuentraOperador = false;
809
+ }
810
+ }
811
+ if (noEncuentraOperador && campoEsTexto) {
812
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
813
+ const contieneLessThan = sinNot.match(expresionRegularLessThan);
814
+ if (contieneLessThan) {
815
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
816
+ noEncuentraOperador = false;
817
+ }
818
+ }
819
+ if (noEncuentraOperador && campoEsTexto) {
820
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
821
+ const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
822
+ if (contieneMoreThan) {
823
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
824
+ noEncuentraOperador = false;
825
+ }
826
+ }
827
+ if (noEncuentraOperador && campoEsTexto) {
828
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
829
+ const contieneEqual = sinNot.match(expresionRegularEqual);
830
+ if (contieneEqual) {
831
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
832
+ noEncuentraOperador = false;
833
+ }
834
+ }
835
+ if (noEncuentraOperador && campoEsTexto) {
836
+ const expresionRegularBetween = /Between\(".+"\)+/g;
837
+ const contieneBetween = sinNot.match(expresionRegularBetween);
838
+ if (contieneBetween) {
839
+ const busqueda = [...sinNot
840
+ .replace('Between("', '')
841
+ .replace('")', '')
842
+ .replace(' ', '')
843
+ .split(',')
844
+ .map((n) => isNaN(n) ? n : +n)];
845
+ const esFecha = busqueda[0].length === 10 &&
846
+ busqueda[0].length === 10 &&
847
+ (typeof busqueda[0] === 'string') &&
848
+ (typeof busqueda[1] === 'string') &&
849
+ busqueda[0].match('-') &&
850
+ busqueda[1].match('-');
851
+ if (esFecha) {
852
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
853
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
854
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
855
+ }
856
+ else {
857
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
858
+ }
859
+ noEncuentraOperador = false;
860
+ }
861
+ }
862
+ if (noEncuentraOperador && campoEsTexto) {
863
+ const expresionRegularIn = /In\(.+\)+/g;
864
+ const contieneIn = sinNot.match(expresionRegularIn);
865
+ if (contieneIn) {
866
+ let arreglo;
867
+ try {
868
+ arreglo = JSON.parse(sinNot
869
+ .replace('In(', '')
870
+ .replace('])', ']'));
871
+ if (arreglo.length > 0) {
872
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
873
+ noEncuentraOperador = false;
874
+ }
875
+ else {
876
+ console.error({
877
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
878
+ });
879
+ delete criterioBusquedaClase.where[campo];
880
+ }
881
+ }
882
+ catch (error) {
883
+ console.error({
884
+ error,
885
+ mensaje: 'IN mal formateado, eliminando campo.'
886
+ });
887
+ delete criterioBusquedaClase.where[campo];
888
+ }
889
+ }
890
+ }
891
+ if (noEncuentraOperador && campoEsTexto) {
892
+ const expresionRegularAny = /Any\(.+\)+/g;
893
+ const contieneAny = sinNot.match(expresionRegularAny);
894
+ if (contieneAny) {
895
+ let arreglo;
896
+ try {
897
+ arreglo = JSON.parse(sinNot
898
+ .replace('Any(', '')
899
+ .replace(')', ''));
900
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
901
+ noEncuentraOperador = false;
902
+ }
903
+ catch (e) {
904
+ console.log('Error formateando clausula ANY');
905
+ console.log(e);
906
+ }
907
+ }
908
+ }
909
+ if (noEncuentraOperador && campoEsTexto) {
910
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
911
+ const contieneIsNull = sinNot.match(expresionRegularIsNull);
912
+ if (contieneIsNull) {
913
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.IsNull());
914
+ noEncuentraOperador = false;
915
+ }
916
+ }
917
+ }
918
+ } // Fin de NOT
919
+ if (noEncuentraOperador && campoEsTexto) {
920
+ const expresionRegularLike = /Like\(".+"\)+/g;
921
+ const contieneLike = criterioBusquedaClase.where[campo].match(expresionRegularLike);
922
+ if (contieneLike) {
923
+ criterioBusquedaClase.where[campo] = typeorm_1.Like(criterioBusquedaClase.where[campo].replace('Like("', '').replace('")', ''));
924
+ noEncuentraOperador = false;
925
+ }
387
926
  }
388
- } // Fin de NOT
389
- if (noEncuentraOperador && campoEsTexto) {
390
- const expresionRegularLike = /Like\(".+"\)+/g;
391
- const contieneLike = criterioBusquedaClase.where[campo].match(expresionRegularLike);
392
- if (contieneLike) {
393
- criterioBusquedaClase.where[campo] = typeorm_1.Like(criterioBusquedaClase.where[campo].replace('Like("', '').replace('")', ''));
394
- noEncuentraOperador = false;
395
- }
396
- }
397
- if (noEncuentraOperador && campoEsTexto) {
398
- const expresionRegularLessThan = /LessThan\(".+"\)+/g;
399
- const contieneLessThan = criterioBusquedaClase.where[campo].match(expresionRegularLessThan);
400
- if (contieneLessThan) {
401
- criterioBusquedaClase.where[campo] = typeorm_1.LessThan(criterioBusquedaClase.where[campo].replace('LessThan("', '').replace('")', ''));
402
- noEncuentraOperador = false;
403
- }
404
- }
405
- if (noEncuentraOperador && campoEsTexto) {
406
- const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
407
- const contieneMoreThan = criterioBusquedaClase.where[campo].match(expresionRegularMoreThan);
408
- if (contieneMoreThan) {
409
- criterioBusquedaClase.where[campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[campo].replace('MoreThan("', '').replace('")', ''));
410
- noEncuentraOperador = false;
411
- }
412
- }
413
- if (noEncuentraOperador && campoEsTexto) {
414
- const expresionRegularEqual = /Equal\(".+"\)+/g;
415
- const contieneEqual = criterioBusquedaClase.where[campo].match(expresionRegularEqual);
416
- if (contieneEqual) {
417
- criterioBusquedaClase.where[campo] = typeorm_1.Equal(criterioBusquedaClase.where[campo].replace('Equal("', '').replace('")', ''));
418
- noEncuentraOperador = false;
419
- }
420
- }
421
- if (noEncuentraOperador && campoEsTexto) {
422
- const expresionRegularBetween = /Between\(".+"\)+/g;
423
- const contieneBetween = criterioBusquedaClase.where[campo].match(expresionRegularBetween);
424
- if (contieneBetween) {
425
- const busqueda = [...criterioBusquedaClase.where[campo]
426
- .replace('Between("', '')
427
- .replace('")', '')
428
- .replace(' ', '')
429
- .split(',')
430
- .map((n) => isNaN(n) ? n : +n)];
431
- const esFecha = busqueda[0].length === 10 &&
432
- busqueda[0].length === 10 &&
433
- (typeof busqueda[0] === 'string') &&
434
- (typeof busqueda[1] === 'string') &&
435
- busqueda[0].match('-') &&
436
- busqueda[1].match('-');
437
- if (esFecha) {
438
- const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
439
- const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
440
- criterioBusquedaClase.where[campo] = typeorm_1.Between(fechaInicio, fechaFin);
441
- }
442
- else {
443
- criterioBusquedaClase.where[campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
444
- }
445
- noEncuentraOperador = false;
927
+ if (noEncuentraOperador && campoEsTexto) {
928
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
929
+ const contieneLessThan = criterioBusquedaClase.where[campo].match(expresionRegularLessThan);
930
+ if (contieneLessThan) {
931
+ criterioBusquedaClase.where[campo] = typeorm_1.LessThan(criterioBusquedaClase.where[campo].replace('LessThan("', '').replace('")', ''));
932
+ noEncuentraOperador = false;
933
+ }
446
934
  }
447
- }
448
- if (noEncuentraOperador && campoEsTexto) {
449
- const expresionRegularIn = /In\(.+\)+/g;
450
- const contieneIn = criterioBusquedaClase.where[campo].match(expresionRegularIn);
451
- if (contieneIn) {
452
- let arreglo;
453
- try {
454
- arreglo = JSON.parse(criterioBusquedaClase.where[campo]
455
- .replace('In(', '')
456
- .replace('])', ']'));
457
- criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
935
+ if (noEncuentraOperador && campoEsTexto) {
936
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
937
+ const contieneMoreThan = criterioBusquedaClase.where[campo].match(expresionRegularMoreThan);
938
+ if (contieneMoreThan) {
939
+ criterioBusquedaClase.where[campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[campo].replace('MoreThan("', '').replace('")', ''));
458
940
  noEncuentraOperador = false;
459
941
  }
460
- catch (e) {
461
- console.log(e);
942
+ }
943
+ if (noEncuentraOperador && campoEsTexto) {
944
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
945
+ const contieneEqual = criterioBusquedaClase.where[campo].match(expresionRegularEqual);
946
+ if (contieneEqual) {
947
+ criterioBusquedaClase.where[campo] = typeorm_1.Equal(criterioBusquedaClase.where[campo].replace('Equal("', '').replace('")', ''));
948
+ noEncuentraOperador = false;
462
949
  }
463
950
  }
464
- }
465
- if (noEncuentraOperador && campoEsTexto) {
466
- const expresionRegularAny = /Any\(.+\)+/g;
467
- const contieneAny = criterioBusquedaClase.where[campo].match(expresionRegularAny);
468
- if (contieneAny) {
469
- let arreglo;
470
- try {
471
- arreglo = JSON.parse(criterioBusquedaClase.where[campo]
472
- .replace('Any(', '')
473
- .replace(')', ''));
474
- criterioBusquedaClase.where[campo] = typeorm_1.Any(arreglo);
951
+ if (noEncuentraOperador && campoEsTexto) {
952
+ const expresionRegularBetween = /Between\(".+"\)+/g;
953
+ const contieneBetween = criterioBusquedaClase.where[campo].match(expresionRegularBetween);
954
+ if (contieneBetween) {
955
+ const busqueda = [...criterioBusquedaClase.where[campo]
956
+ .replace('Between("', '')
957
+ .replace('")', '')
958
+ .replace(' ', '')
959
+ .split(',')
960
+ .map((n) => isNaN(n) ? n : +n)];
961
+ const esFecha = busqueda[0].length === 10 &&
962
+ busqueda[0].length === 10 &&
963
+ (typeof busqueda[0] === 'string') &&
964
+ (typeof busqueda[1] === 'string') &&
965
+ busqueda[0].match('-') &&
966
+ busqueda[1].match('-');
967
+ if (esFecha) {
968
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
969
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
970
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(fechaInicio, fechaFin);
971
+ }
972
+ else {
973
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
974
+ }
475
975
  noEncuentraOperador = false;
476
976
  }
477
- catch (e) {
478
- console.log(e);
977
+ }
978
+ if (noEncuentraOperador && campoEsTexto) {
979
+ const expresionRegularIn = /In\(.+\)+/g;
980
+ const contieneIn = criterioBusquedaClase.where[campo].match(expresionRegularIn);
981
+ if (contieneIn) {
982
+ let arreglo;
983
+ try {
984
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
985
+ .replace('In(', '')
986
+ .replace('])', ']'));
987
+ if (arreglo.length > 0) {
988
+ criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
989
+ noEncuentraOperador = false;
990
+ }
991
+ else {
992
+ console.error({
993
+ mensaje: 'IN mal formateado, no tiene elementos eliminando campo.'
994
+ });
995
+ delete criterioBusquedaClase.where[campo];
996
+ }
997
+ }
998
+ catch (error) {
999
+ console.error({
1000
+ error,
1001
+ mensaje: 'IN mal formateado, eliminando campo.'
1002
+ });
1003
+ delete criterioBusquedaClase.where[campo];
1004
+ }
1005
+ }
1006
+ }
1007
+ if (noEncuentraOperador && campoEsTexto) {
1008
+ const expresionRegularAny = /Any\(.+\)+/g;
1009
+ const contieneAny = criterioBusquedaClase.where[campo].match(expresionRegularAny);
1010
+ if (contieneAny) {
1011
+ let arreglo;
1012
+ try {
1013
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
1014
+ .replace('Any(', '')
1015
+ .replace(')', ''));
1016
+ criterioBusquedaClase.where[campo] = typeorm_1.Any(arreglo);
1017
+ noEncuentraOperador = false;
1018
+ }
1019
+ catch (e) {
1020
+ console.log(e);
1021
+ }
479
1022
  }
480
1023
  }
481
- }
482
- if (noEncuentraOperador && campoEsTexto) {
483
- const expresionRegularIsNull = /IsNull\(".+"\)+/g;
484
- const contieneIsNull = criterioBusquedaClase.where[campo].match(expresionRegularIsNull);
485
- if (contieneIsNull) {
486
- criterioBusquedaClase.where[campo] = typeorm_1.IsNull();
487
- noEncuentraOperador = false;
1024
+ if (noEncuentraOperador && campoEsTexto) {
1025
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
1026
+ const contieneIsNull = criterioBusquedaClase.where[campo].match(expresionRegularIsNull);
1027
+ if (contieneIsNull) {
1028
+ criterioBusquedaClase.where[campo] = typeorm_1.IsNull();
1029
+ noEncuentraOperador = false;
1030
+ }
488
1031
  }
489
- }
1032
+ });
1033
+ }
1034
+ let consulta = servicio.repository.createQueryBuilder('raiz');
1035
+ // Consulta where normal
1036
+ consulta.where(criterioBusquedaClase.where);
1037
+ // Consulta ya con relaciones
1038
+ const relaciones = Object
1039
+ .keys(objetoWhereYRelations.objetoRelaciones);
1040
+ relaciones.forEach((relacion) => {
1041
+ consulta = generar_joins_1.generarJoins('raiz', relacion, objetoWhereYRelations.objetoRelaciones[relacion], consulta);
490
1042
  });
1043
+ // Revisa skip
1044
+ if (criterioBusquedaClase.skip) {
1045
+ consulta.skip(criterioBusquedaClase.skip);
1046
+ }
1047
+ else {
1048
+ consulta.skip(0);
1049
+ }
1050
+ // Revisa take
1051
+ if (criterioBusqueda.take) {
1052
+ consulta.take(criterioBusquedaClase.take);
1053
+ }
1054
+ else {
1055
+ consulta.take(10);
1056
+ }
1057
+ // Revisa order
1058
+ if (criterioBusqueda.order) {
1059
+ consulta.orderBy(criterioBusqueda.order);
1060
+ }
1061
+ return await consulta.getManyAndCount();
491
1062
  }
492
1063
  }
493
- return servicio.find(criterioBusquedaClase);
1064
+ else {
1065
+ return servicio.find(criterioBusquedaClase);
1066
+ }
494
1067
  }
495
1068
  }
496
1069
  }
497
1070
  exports.buscarVariosRegistros = buscarVariosRegistros;
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzY2FyLXJlZ2lzdHJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mdW5jaW9uZXMtdXRpbC9idXNjYXItcmVnaXN0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBMkM7QUFDM0MseURBQWlEO0FBQ2pELHFDQUF5RjtBQUdsRixLQUFLLGdDQUNWLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsSUFBSSxFQUNKLElBQUksRUFDSixRQUFRLEVBQ1IscUJBQTJDLEVBQzNDLGlCQUFpQixFQUNqQixXQUFXO0lBQ1gsSUFBSSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7SUFDeEMsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLGdCQUFnQixLQUFLLFFBQVEsQ0FBQztJQUUxRSxJQUFJLDRCQUE0QixFQUFFO1FBQ2hDLElBQUk7WUFDRixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLDJCQUEyQixHQUFHLElBQUksQ0FBQztTQUNwQztLQUNGO0lBRUQsSUFBSSwyQkFBMkIsRUFBRTtRQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDMUUsTUFBTSwwQkFBMEIsR0FBRztZQUNqQyxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUNGLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hDO1NBQU07UUFDTCxJQUFJLHFCQUFxQixHQUFRLGdDQUFZLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRixNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRCxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FB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
1071
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzY2FyLXJlZ2lzdHJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mdW5jaW9uZXMtdXRpbC9idXNjYXItcmVnaXN0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBMkM7QUFDM0MseURBQWlEO0FBQ2pELHFDQUF5RjtBQUV6Riw0R0FBcUc7QUFDckcsc0VBQWtFO0FBRTNELEtBQUssZ0NBQ1YsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixJQUFJLEVBQ0osSUFBSSxFQUNKLFFBQVEsRUFDUixxQkFBMkMsRUFDM0MsaUJBQWlCLEVBQ2pCLFdBQVc7SUFDWCxJQUFJLDJCQUEyQixHQUFHLEtBQUssQ0FBQztJQUN4QyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxDQUFDO0lBRTFFLElBQUksNEJBQTRCLEVBQUU7UUFDaEMsSUFBSTtZQUNGLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1NBQ3BDO0tBQ0Y7SUFFRCxJQUFJLDJCQUEyQixFQUFFO1FBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztRQUMxRSxNQUFNLDBCQUEwQixHQUFHO1lBQ2pDLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO1FBQ0YsZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDeEM7U0FBTTtRQUNMLElBQUkscUJBQXFCLEdBQVEsZ0NBQVksQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JE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