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