OfflineDownloader.cs
1 
3 
4 
10 using sage.ew.db;
11 using sage.ew.ewbase;
12 using sage.ew.ewbase.Clases;
13 using sage.ew.functions;
15 using sage.ew.global;
17 using sage.ew.listados.Clases;
18 using System;
19 using System.Collections.Generic;
20 using System.Data;
21 
22 using System.IO;
23 using System.Linq;
24 using System.Threading.Tasks;
25 using System.Windows.Forms;
26 
27 
28 namespace sage.addons.offline.Negocio.Clases
29 {
30  internal class OfflineDownloader : OfflineUpAndDown
31  {
32  internal static string _tablaOld { get; set; } = string.Empty;
33  internal static string _ejercicioActual { get; set; } = string.Empty;
34  internal static string _ejercicioNew { get; set; } = string.Empty;
35 
36  internal static DataTable _dtStockLotesOffline = new DataTable();
37  internal static OfflineInfoConfig ficheroInfoConfig = null;
38 
39  internal static bool conCargaInicial = false;
40  internal static bool conDatosStock = false;
41 
42  internal static bool Download_Control_Files(int idConf, string tcSucursal)
43  {
44  _cIdLog = _offlineConfig.GenerarRandomId();
45 
46  return true;
47  }
48 
49  internal static DataTable Download_Control_Files_And_Get_Sucursales(int tnIdConf, string tcSucursal)
50  {
52  ILog_comoffRepository logRepository = offlineUnitOfWork.Log_comoffRepository;
53 
54  OfflineDatosComunicaciones datos = new OfflineDatosComunicaciones();
55 
56  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
57  _Porcen_Progreso_Async -= OfflineDownloader__Porcen_Progreso_Async;
58 
59  _Mostrar_Progreso_Async += OfflineDownloader__Mostrar_Progreso_Async;
60  _Porcen_Progreso_Async += OfflineDownloader__Porcen_Progreso_Async;
61 
62  if (string.IsNullOrWhiteSpace(_cIdLog))
63  {
64  _cIdLog = _offlineConfig.GenerarRandomId();
65  }
66 
67  ComprobacionesPrevias(tnIdConf);
68 
69  datos._Log_ComoffID = _cIdLog;
70  datos._IdConf = tnIdConf;
71  datos._MultConf = DB.SQLValor("MULTCONF", "IDCONF", tnIdConf.ToString(), "CODIGO", "OFFLINE").ToString();
72  datos._Usuario = EW_GLOBAL._GetVariable("wc_usuario").ToString();
73  datos._BdOffline = clsOfflineUtils.ObtenerNombreBdReal("OFFLINE");
74  datos._Sucursal = tcSucursal;
75  datos._PathFolderInicial = TempFolderName;
76  datos._IniServidor = DB._GetVariable("wc_iniservidor").ToString().ToLower();
77  datos._EnvioArticulos = _offlineConfig.GetValorVariable(EnumVariables.ENVIOARTICULOS) == ".T.";
78 
79  InicializarBarraProgreso();
80 
81  _TextStepDetalle = "Recibiendo fichero sucuralm.xml";
82  _TextStepProgreso = _TextStepDetalle;
83  _PorcenProgreso = IncrementarBarraProgreso();
84 
85  DataTable tableDatos = GetTablaOffline("OFFLINE", "SUCURALM", _formatoExportacionPredeterminado, datos, logRepository);
86  InsertarTablaBaseDatosBulk(tableDatos, "OFFLINE", "SUCURALM", false, true);
87 
88  _TextStepDetalle = "Recibiendo fichero sucurlet.xml";
89  _TextStepProgreso = _TextStepDetalle;
90  _PorcenProgreso = IncrementarBarraProgreso();
91  tableDatos = GetTablaOffline("OFFLINE", "SUCURLET", _formatoExportacionPredeterminado, datos, logRepository);
92  InsertarTablaBaseDatosBulk(tableDatos, "OFFLINE", "SUCURLET", false, true);
93 
94  _TextStepDetalle = "Recibiendo fichero sucurcaja.xml";
95  _TextStepProgreso = _TextStepDetalle;
96  _PorcenProgreso = IncrementarBarraProgreso();
97  tableDatos = GetTablaOffline("OFFLINE", "SUCURCAJA", _formatoExportacionPredeterminado, datos, logRepository);
98  InsertarTablaBaseDatosBulk(tableDatos, "OFFLINE", "SUCURCAJA", false, true);
99 
100  _TextStepDetalle = "Recibiendo fichero sucursales.xml";
101  _TextStepProgreso = _TextStepDetalle;
102  _PorcenProgreso = IncrementarBarraProgreso();
103  tableDatos = GetTablaOffline("OFFLINE", "SUCURSALES", _formatoExportacionPredeterminado, datos, logRepository);
104  InsertarTablaBaseDatosBulk(tableDatos, "OFFLINE", "SUCURSALES", false, true);
105 
106  RecibirOfflineVariables(datos, logRepository);
107 
108  offlineUnitOfWork.SaveChanges();
109  offlineUnitOfWork.Dispose();
110 
111  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
112  _Porcen_Progreso_Async -= OfflineDownloader__Porcen_Progreso_Async;
113 
114  return tableDatos;
115  }
116 
117  private static void RecibirOfflineVariables(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
118  {
119  DataTable tableDatos = new DataTable();
120  _TextStepDetalle = "Recibiendo fichero variables.xml";
121  _TextStepProgreso = _TextStepDetalle;
122  _PorcenProgreso = IncrementarBarraProgreso();
123 
124  tableDatos = GetTablaOffline("OFFLINE", "VARIABLES", _formatoExportacionPredeterminado, datos, logRepository);
125 
126  if (tableDatos != null & tableDatos.Rows.Count > 0)
127  {
128  foreach (DataRow item in tableDatos.Rows)
129  {
130  switch (item.Field<string>("VARIABLE").Trim())
131  {
132  case "ULTIMOLOG":
133 
134  _offlineConfig.InsertOrUpdateVariable(EnumVariables.ULTIMOLOG, item.Field<string>("VALOR").Trim(), "C");
135 
136  try
137  {
138  datos._UltimoLog = Convert.ToInt32(item.Field<string>("VALOR").Trim());
139  }
140  catch
141  {
142  datos._UltimoLog = 6;
143  }
144 
145 
146  break;
147  }
148  }
149  }
150  }
151 
152  private static void OfflineDownloader__Mostrar_Progreso_Async(string message)
153  {
154  try
155  {
156  _offBase._TextStepDetalle = message;
157  }
158  catch (Exception) { }
159  }
160 
161  private static void OfflineDownloader__Porcen_Progreso_Async(decimal porcen, string message)
162  {
163  try
164  {
165  if (_offBase != null)
166  {
167  _offBase._TextStepProgreso = message;
168  _offBase._PorcenProgreso = porcen;
169  }
170  }
171  catch (Exception) { }
172  }
173 
200  internal static bool Download_Offline_Files(clsOfflineUtils.ReportProgress progressReporter, DateTime tdFechaMin, DateTime tdFechaMax, string tcSucursal, bool tlImagenes, bool tlAnterior, bool isCentral, int idConf, bool tlInicial = false, Dictionary<int, bool> prioridades = null)
201  {
202  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
203  _Porcen_Progreso_Async -= OfflineDownloader__Porcen_Progreso_Async;
204 
205  _Mostrar_Progreso_Async += OfflineDownloader__Mostrar_Progreso_Async;
206  _Porcen_Progreso_Async += OfflineDownloader__Porcen_Progreso_Async;
207 
208  _cTempFolderName = string.Empty;
209 
210  if (!Directory.Exists(TempFolderName))
211  {
212  Directory.CreateDirectory(TempFolderName);
213  }
214 
215  bool llOk = Recibir_Datos(tcSucursal, tlImagenes, tdFechaMin, tdFechaMax, isCentral, idConf, prioridades);
216 
217  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
218  _Porcen_Progreso_Async -= OfflineDownloader__Porcen_Progreso_Async;
219 
220  return llOk;
221  }
222 
223 
224  private static bool Recibir_Datos(string tcSucursal, bool tlImagenes, DateTime tdFechaMin, DateTime tdFechaMax, bool isCentral, int idConf, Dictionary<int, bool> prioridades = null)
225  {
227  ILog_comoffRepository logRepository = offlineUnitOfWork.Log_comoffRepository;
228 
229  _tablaOld = string.Empty;
230  ReestablecerInfoConfig();
231 
232  bool llOk = true;
233  int lnValor = 0;
234  string lcTipoRecepcion = string.Empty;
235 
236  OfflineDatosComunicaciones datos = EstablecerConfiguracion(tcSucursal, tdFechaMin, tdFechaMax, isCentral, idConf, logRepository);
237 
238  List<string> laFiles = DescargarListaFicheros(tcSucursal, isCentral, idConf);
239 
240  if (laFiles.Count == 0)
241  {
242  Log_comoffDto logDto = logRepository.GetDto(datos);
243  logDto.TipoDato = "01";
244  logDto.Resultado = 2;
245  logDto.Detalle = "No existen ficheros de datos en la carpeta de FTP o OneDrive de la sucursal " + tcSucursal +
246  " - " + DB.SQLValor("SUCURSALES", "CODIGO", tcSucursal, "NOMBRE", "OFFLINE").ToString().TrimEnd() + ", por lo que no se realizará ninguna recepción de datos de dicha sucursal.";
247  logRepository.Insert(logDto);
248 
249  _TextStepDetalle = "No existen ficheros de datos en la carpeta de FTP o OneDrive de la sucursal " + tcSucursal;
250 
251  offlineUnitOfWork.SaveChanges();
252 
253  // Email de notificación de recepción
254  EnvioEmailNotificacion("", datos, logRepository);
255 
256  offlineUnitOfWork.SaveChanges();
257  offlineUnitOfWork.Dispose();
258 
259  //No existen ficheros de datos en la carpeta de FTP o OneDrive de las sucursales XXXX-XXXXXXXXXXXX, XXXX - XXXXXXXXXXXX, XXXX - XXXXXXXXXXXX, por lo que no se realizará ninguna recepción de datos
260  if (!isCentral)
261  {
262  return true;
263  }
264  }
265 
266  foreach (string item in laFiles)
267  {
268  lcTipoRecepcion = clsOfflineUtils.ObtenerTipoFichero(Path.GetFileNameWithoutExtension(item));
269 
270  datos._TipoCom = 3;
271 
272  conCargaInicial = conCargaInicial || lcTipoRecepcion == "i";
273 
274  if (GetFicheroZip(item, datos))
275  {
276  Log_comoffDto logDto = logRepository.GetDto(datos);
277  logDto.TipoDato = "01";
278  logDto.Resultado = 1;
279  logDto.Detalle = "Iniciando proceso de rececepción del fichero de " +
280  (lcTipoRecepcion == "i" ? "Carga inicial" : "Envío de datos") +
281  ", con fecha " + clsOfflineUtils.ObtenerFechaFicheroDatos(item) + ", fichero " + item + ".";
282  logRepository.Insert(logDto);
283 
284  // Validaciones previas
285  lnValor = Validaciones_Previas(datos, logRepository);
286 
287  if (lnValor != 0)
288  {
289  offlineUnitOfWork.SaveChanges();
290 
291  // Email de notificación de recepción
292  EnvioEmailNotificacion(item, datos, logRepository);
293 
294  offlineUnitOfWork.SaveChanges();
295 
296  if (lnValor < 0)
297  {
298  // Valor negativo, error excluyente, no se puede continuar
299  offlineUnitOfWork.Dispose();
300  return false;
301  }
302  else
303  {
304  // Valor positivo, advertencia, si se puede continuar
305  continue;
306  }
307  }
308 
309  // Guardar cópia de seguridad
310  SaveBackup(item, datos, logRepository);
311 
312  if (lcTipoRecepcion == "i")
313  {
314  RecibirOfflineVariables(datos, logRepository);
315  }
316 
317  // Vaciar log de comunicaciones
318  VaciarUltimoLog(datos, logRepository);
319 
320  if (_ejercicioNew != _ejercicioActual)
321  {
322  // Cambiar al ejercicio
323  FUNCTIONS.CambiarEjercicio(_ejercicioActual, _ejercicioNew);
324  }
325 
326  // Tratamiento de deletes
327  Tratamiento_Deletenet(datos, logRepository);
328 
329  // Actualización de datos en la Sucursal
330  if (datos._IsCentral)
331  {
332  Actualizar_Datos_Servidor(datos, logRepository);
333  }
334  else
335  {
336  Actualizar_Datos_Sucursales(datos, logRepository);
337  }
338 
339  // Recepción de datos de la carga inicial
340  EjecutarProcesoRecepcion(datos, lcTipoRecepcion, logRepository);
341 
342  if (_ejercicioNew != _ejercicioActual)
343  {
344  // Restaurar al ejercicio
345  FUNCTIONS.CambiarEjercicio(_ejercicioNew, _ejercicioActual);
346  }
347 
348  // Actualizar valor de campo ULTFECREC de tabla MULTCONF del registro correspondiente a la configuración de comunicaciones utilizada para la recepción con la fecha y hora de finalización del proceso.
349  Actualizar_Fecha_Recepcion_Multiconf(datos);
350 
351  // Actualizar valor de campo ULTFECREC y CARGAINI de tabla SUCURSALES del registro correspondiente a la sucursal que ha recibido los datos con la fecha y hora de finalización del proceso.
352  Actualizar_Fecha_Recepcion_Sucursales(datos, lcTipoRecepcion, logRepository);
353 
354  // Actualizar campo VALOR de variable HORA_CARGAINI en la tabla VARIABLES del registro correspondiente a IDCONF = 0 con la fecha y hora de finalización del proceso.
355  if (lcTipoRecepcion == "i")
356  {
357  _offlineConfig.InsertOrUpdateVariable(EnumVariables.HORA_CARGAINI, Convert.ToString(DateTime.Now), "D");
358  }
359 
360  offlineUnitOfWork.SaveChanges();
361 
362  // Email de notificación de recepción
363  EnvioEmailNotificacion(item, datos, logRepository);
364 
365  // Eliminar el fichero ZIP recibido.
366  DeleteFicheroZip(item, datos);
367 
368  // Eliminar todos los datos recibidos en la carpeta temporal
369  Eliminar_Carpetas_Temporales(datos, logRepository);
370 
371  // Eliminar base de datos temporal
372  EliminarDataBaseTemporal();
373  offlineUnitOfWork.SaveChanges();
374  }
375  }
376 
377  EjecutarRecalculoRiesgoCliente(datos);
378 
379  offlineUnitOfWork.Dispose();
380 
381  EW_GLOBAL._Empresa = null;
382  if (string.IsNullOrWhiteSpace(_cCaja))
383  {
385  }
386  else
387  {
388  DiccionariosLoader.CargarDiccionarios(_cEmpresa, _cCaja);
389  }
390 
391  EW_GLOBAL._Empresa = new sage.ew.empresa.Empresa(_cEmpresa);
393 
394  return llOk;
395  }
396 
397  private static void EjecutarRecalculoRiesgoCliente(OfflineDatosComunicaciones datos)
398  {
399  // Recalcular el riesgo a partir de la tabla OFFLINE!ACTRIESGO
400  if (!datos._IsCentral)
401  {
402  return;
403  }
404 
405  DataTable ldtActRiesgo = new DataTable();
406  DB.SQLExec("SELECT DISTINCT EMPRESA, CODIGO FROM " + DB.SQLDatabase("OFFLINE", "ACTRIESGO"), ref ldtActRiesgo);
407 
408  if (ldtActRiesgo != null && ldtActRiesgo.Rows.Count > 0)
409  {
410  _TextStepDetalle = "Recalculando riesgo de clientes";
411  _TextStepProgreso = _TextStepDetalle;
412  _PorcenProgreso = IncrementarBarraProgreso();
413 
414  ew.cliente.Clases.clsLimiteCredito clsLimite = new ew.cliente.Clases.clsLimiteCredito();
415 
416  foreach (DataRow item in ldtActRiesgo.Rows)
417  {
418  clsLimite._RecalcularRiesgoClienteOffline(item["empresa"].ToString(), item["codigo"].ToString());
419  }
420 
421  clsLimite.Dispose();
422  }
423 
424  // Vaciamos la tabla OFFLINE!ACTRIESGO para las pròximas recepciones
425  DB.SQLExec("DELETE FROM " + DB.SQLDatabase("OFFLINE", "ACTRIESGO"));
426  }
427 
428  private static List<string> DescargarListaFicheros(string tcSucursal, bool isCentral, int tnIdConf)
429  {
430  List<string> laFilesFolder = UploadManager.GetListFiles("SUCURNET" + tcSucursal, tnIdConf);
431  List<string> laFiles = new List<string>();
432 
433  string lcTipoRecepcion = string.Empty;
434 
435  // Quitar los ficheros que no son ZIP
436  for (int i = 0; i < laFilesFolder.Count; i++)
437  {
438  if (laFilesFolder[i].Contains(".zip"))
439  {
440  lcTipoRecepcion = clsOfflineUtils.ObtenerTipoFichero(Path.GetFileNameWithoutExtension(laFilesFolder[i]));
441 
442  // Comprobar si es un fichero correcto
443  if (isCentral && (lcTipoRecepcion == "c" || lcTipoRecepcion == "i"))
444  {
445  continue;
446  }
447 
448  if (!isCentral && lcTipoRecepcion == "s")
449  {
450  continue;
451  }
452 
453  laFiles.Add(laFilesFolder[i]);
454  }
455  }
456 
457  return laFiles;
458  }
459 
460  private static OfflineDatosComunicaciones EstablecerConfiguracion(string tcSucursal, DateTime tdFechaMin, DateTime tdFechaMax, bool isCentral, int idConf, ILog_comoffRepository logRepository)
461  {
462  OfflineDatosComunicaciones datos = new OfflineDatosComunicaciones();
463  _offlineConfig = DependencyInjector.Instance.Retrieve<OfflineConfig>();
464 
465  datos._Log_ComoffID = _cIdLog;
466  datos._IdConf = idConf;
467  datos._MultConf = DB.SQLValor("MULTCONF", "IDCONF", idConf.ToString(), "CODIGO", "OFFLINE").ToString();
468  datos._Usuario = EW_GLOBAL._GetVariable("wc_usuario").ToString();
469  datos._BdOffline = clsOfflineUtils.ObtenerNombreBdReal("OFFLINE");
470  datos._Sucursal = tcSucursal;
471  datos._PathFolderInicial = TempFolderName;
472  datos._IniServidor = DB._GetVariable("wc_iniservidor").ToString().ToLower();
473  datos._EnvioArticulos = _offlineConfig.GetValorVariable(EnumVariables.ENVIOARTICULOS) == ".T.";
474  datos._FechaInicial = tdFechaMin;
475  datos._FechaFinal = tdFechaMax;
476  datos._IsCentral = isCentral;
477  datos._TipoCom = 3;
478 
479  datos._NotificacionEnvio = Convert.ToBoolean(DB.SQLValor("MULTCONF", "IDCONF", idConf.ToString(), "NOTIFICAEN", "OFFLINE"));
480  datos._EmailNotificacionEnvio = Convert.ToString(DB.SQLValor("MULTCONF", "IDCONF", idConf.ToString(), "EMAILNOTEN", "OFFLINE"));
481 
482  datos._NotificacionRecepcion = Convert.ToBoolean(DB.SQLValor("MULTCONF", "IDCONF", idConf.ToString(), "NOTIFICARE", "OFFLINE"));
483  datos._EmailNotificacionRecepcion = Convert.ToString(DB.SQLValor("MULTCONF", "IDCONF", idConf.ToString(), "EMAILNOTRE", "OFFLINE"));
484 
485  try
486  {
487  datos._UltimoLog = Convert.ToInt32(_offlineConfig.GetValorVariable(EnumVariables.ULTIMOLOG));
488  }
489  catch
490  {
491  datos._UltimoLog = 6;
492  }
493 
494 
495  string[] loClaveBackup = _offlineConfig.GetValorVariable(EnumVariables.BACKUP_RECEP).Split('|');
496 
497  try
498  {
499  if (loClaveBackup.Length == 3)
500  {
501  datos._Backup = (loClaveBackup[0].ToUpper() == ".T." ? true : false);
502  datos._BackupPath = loClaveBackup[1].TrimEnd();
503  datos._BackupNumArchivos = Convert.ToInt32(loClaveBackup[2]);
504  }
505  }
506  catch
507  {
508  Log_comoffDto logDto = logRepository.GetDto(datos);
509  logDto.TipoDato = "01";
510  logDto.Resultado = 2;
511  logDto.Detalle = "Error al leer la configuración de la variable " + EnumVariables.BACKUP_RECEP.ToString();
512  logRepository.Insert(logDto);
513  }
514 
515  return datos;
516  }
517 
518  private static void EjecutarProcesoRecepcion(OfflineDatosComunicaciones datos, string tcTipoRecepcion, ILog_comoffRepository logRepository)
519  {
520  DataTable TabTmp = ObtenerDatosRecepcion(datos._IdConf);
521  string lcTablaControl = string.Empty;
522 
523  Log_comoffDto logDto = logRepository.GetDto(datos);
524  logDto.TipoDato = "01";
525  logDto.Resultado = 1;
526  logDto.Detalle = "Obtener configuración de " + (tcTipoRecepcion == "i" ? "la carga inicial" : "datos") + " para la sucursal " + datos._Sucursal + ".";
527  logRepository.Insert(logDto);
528  CrearDataBaseTemporal(datos._Sucursal);
529 
530 
531  decimal nCociente = (TabTmp != null ? TabTmp.Rows.Count : 99.0M);
532 
533  nCociente = (nCociente == 0 ? 100 : nCociente);
534  InicializarBarraProgreso(Convert.ToInt32(nCociente));
535 
536  // Compruebo los ficheros created
537  foreach (DataRow itemRow in TabTmp.Rows)
538  {
539  // comprovo si tinc el módul INSTAL·LAT
540  if (!clsOfflineUtils.EvaluarCondicion(itemRow.Field<string>("visicond").TrimEnd().ToLower()))
541  {
542  continue;
543  }
544 
545  RegistroTabRel registro = ComprobarFicheros(itemRow, "_CREATED");
546  lcTablaControl = TratarTablasRecepcion(datos, registro, logRepository);
547 
548  if (!string.IsNullOrWhiteSpace(lcTablaControl))
549  {
550  RegistroTabRel registroControl = new RegistroTabRel();
551 
552  registroControl._DBSecundaria = "OFFLINE";
553  registroControl._TablaSecundaria = lcTablaControl;
554  registroControl._Sufijo = registro._Sufijo;
555  registroControl._Clave = registro._Clave;
556  registroControl._Nombre = registro._Nombre;
557  registroControl._Prioridad = registro._Prioridad;
558 
559  TratarTablasRecepcion(datos, registroControl, logRepository);
560  }
561 
562  if (!string.IsNullOrWhiteSpace(registro._DBPrincipal) && !string.IsNullOrWhiteSpace(registro._DBSecundaria))
563  {
564  lcTablaControl = _offlineConfig.ObtenerTablaControlRelacionada(registro._DBSecundaria + "!" + registro._TablaSecundaria);
565 
566  if (!string.IsNullOrWhiteSpace(lcTablaControl))
567  {
568  RegistroTabRel registroControl = new RegistroTabRel();
569 
570  registroControl._DBSecundaria = "OFFLINE";
571  registroControl._TablaSecundaria = lcTablaControl;
572  registroControl._Sufijo = registro._Sufijo;
573  registroControl._Clave = registro._Clave;
574  registroControl._Nombre = registro._Nombre;
575  registroControl._Prioridad = registro._Prioridad;
576 
577  TratarTablasRecepcion(datos, registroControl, logRepository);
578  }
579  }
580  }
581 
582  // Compruebo los ficheros modified
583  foreach (DataRow itemRow in TabTmp.Rows)
584  {
585  // comprovo si tinc el módul INSTAL·LAT
586  if (!clsOfflineUtils.EvaluarCondicion(itemRow.Field<string>("visicond").TrimEnd().ToLower()))
587  {
588  continue;
589  }
590 
591  RegistroTabRel registro = ComprobarFicheros(itemRow, "_MODIFIED");
592  lcTablaControl = TratarTablasRecepcion(datos, registro, logRepository);
593  }
594 
595  InicializarBarraProgreso();
596 
597  //Faig el tractament dels partes de costes
598  TratarRegistrosPartesCostes();
599 
600  if (!datos._IsCentral)
601  {
602  TratarRegistrosRiesgoCliente();
603  }
604 
605  //S'han de rebre les imatges, en el cas que estigui marcat
606  ProcesarImagenesRecibidas(datos, logRepository);
607  }
608 
609  private static void ProcesarImagenesRecibidas(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
610  {
611  // Actualitzem la taula IMAGENES del mòdul OFFLINE
612  string lcFile = Path.Combine(TempFolderName, "IMAGENES", "IMAGENES.xml");
613 
614  if (!File.Exists(lcFile))
615  {
616  return;
617  }
618 
619  _TextStepDetalle = "Procesando imagenes recibidas";
620  _TextStepProgreso = _TextStepDetalle;
621  _PorcenProgreso = IncrementarBarraProgreso();
622 
623  DataTable table = ConvertFileToDatatable(lcFile, FormatoExportacion.XML);
624  string lcSql = string.Empty;
625 
626  foreach (DataRow item in table.Rows)
627  {
628  string lcFichero = item["nombre"].ToString().TrimEnd();
629  string lcOrigen = Path.Combine(TempFolderName, "IMAGENES", lcFichero);
630  string lcDestino = Path.Combine(datos._IniServidor, "COMUNES", "FOTOS", lcFichero);
631  string lcRuta = item["ruta"].ToString();
632  int lnTipo = Convert.ToInt32(item["tipo"]);
633 
634  Log_comoffDto logDto = logRepository.GetDto(datos);
635 
636  // Definir tipo de datos en función del tipo de la imagen
637  switch (lnTipo)
638  {
639  case 1:
640  case 2:
641  case 3:
642  case 4:
643  case 7:
644  case 9:
645 
646  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato("ARTICULO");
647  break;
648 
649  case 5:
650 
651  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato("_DATOSEMP");
652  break;
653 
654  case 6:
655 
656  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato("USUARIO");
657  break;
658 
659 
660  case 8:
661  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato("MANTENIMIENTOS");
662  break;
663 
664  default:
665 
666  logDto.TipoDato = "01";
667  break;
668  }
669 
670 
672 
673  logDto.Detalle = "La imagen " + lcFichero + " se ha copiado en la carpeta " + Path.Combine(datos._IniServidor, "COMUNES", "FOTOS");
674 
675  if (!File.Exists(lcOrigen))
676  {
677  logDto.Resultado = 3;
678  logDto.Detalle = "La imagen " + lcFichero + " no se ha recibido en el fichero de comunicaciones.";
679 
680  }
681  else
682  {
683  // Copiar els fitxers de les imatges a les rutes especificades
684  try
685  {
686  File.Copy(lcOrigen, lcDestino, true);
687  }
688  catch (Exception)
689  {
690  logDto.Resultado = 2;
691  logDto.Detalle = "No se ha podido realizar la copia de la imagen " + lcFichero + ", revise si existe la ruta indicada en la configuración " +
692  "o si el usuario de Windows tiene permisos para acceder a dicha carpeta " + Path.Combine(datos._IniServidor, "COMUNES", "FOTOS");
693  }
694  }
695 
696  logRepository.Insert(logDto);
697 
698  switch (lnTipo)
699  {
700  case 4: // Colores
701 
702  if (!lcRuta.Contains("COMUNES\\FOTOS\\"))
703  {
704  lcRuta = Path.Combine(lcRuta, lcFichero);
705 
706  lcSql = "UPDATE " + DB.SQLDatabase("COMUNES", "COLORES") + " SET IMAGEN = " + DB.SQLString(lcDestino) + " WHERE IMAGEN = " + DB.SQLString(lcRuta);
707  DB.SQLExec(lcSql);
708  }
709  break;
710 
711  case 8: // Vendedor
712 
713  if (!lcRuta.Contains("COMUNES\\FOTOS\\"))
714  {
715  lcRuta = Path.Combine(lcRuta, lcFichero);
716 
717  lcSql = "UPDATE " + DB.SQLDatabase("GESTION", "VENDEDOR") + " SET FOTO = " + DB.SQLString(lcDestino) + " WHERE FOTO = " + DB.SQLString(lcRuta);
718  DB.SQLExec(lcSql);
719  }
720  break;
721  }
722  }
723  }
724 
725  private static void TratarRegistrosRiesgoCliente()
726  {
727  string lcSql = string.Empty;
728  DataTable ldtRiesgoCliente = new DataTable();
729 
730  if (DB._SQLExisteTablaBBDD(_cRaizDataBaseTemporal + "GESTION", "RIESGO"))
731  {
732  lcSql = " SELECT EMPRESA,CODIGO,PED_PEND,ALB_PEND,FAC_PEND,FAC_NEG,FAC_REMPAG,NUM_IMPAGO,IMPAGOS,IMPAG4315,TOT_PEND,MED_DIAS,FAC_NOCONT," +
733  " PED_PENDIV,ALB_PENDIV,FAC_PENDIV,FAC_NEGDIV,FAC_REMDIV,IMPAGOSDIV,IMP4315DIV,TOT_PENDIV,FAC_NOCDIV " +
734  " FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[RIESGO] " +
735  " UNION ALL " +
736  " SELECT EMPRESA,CODIGO,PED_PEND*(-1) AS PED_PEND,ALB_PEND*(-1) AS ALB_PEND,FAC_PEND*(-1) AS FAC_PEND,FAC_NEG*(-1) AS FAC_NEG,FAC_REMPAG*(-1) AS FAC_REMPAG," +
737  " NUM_IMPAGO*(-1) AS NUM_IMPAGO,IMPAGOS*(-1) AS IMPAGOS,IMPAG4315*(-1) AS IMPAG4315,TOT_PEND*(-1) AS TOT_PEND,MED_DIAS*(-1) AS MED_DIAS,FAC_NOCONT*(-1) AS FAC_NOCONT," +
738  " PED_PENDIV*(-1) AS PED_PENDIV,ALB_PENDIV*(-1) AS ALB_PENDIV,FAC_PENDIV*(-1) AS FAC_PENDIV,FAC_NEGDIV*(-1) AS FAC_NEGDIV," +
739  " FAC_REMDIV*(-1) AS FAC_REMDIV,IMPAGOSDIV*(-1) AS IMPAGOSDIV,IMP4315DIV*(-1) AS IMP4315DIV,TOT_PENDIV*(-1) AS TOT_PENDIV,FAC_NOCDIV *(-1) AS FACNOCDIV " +
740  " FROM [" + clsOfflineUtils.ObtenerNombreBdReal("GESTION") + "].dbo.[RIESGO]";
741 
742  DB.SQLExec(lcSql, ref ldtRiesgoCliente);
743 
744  if (ldtRiesgoCliente.Rows.Count > 0)
745  {
746  // Agrupar lineas
747  var ldtAgrupado = (from item in ldtRiesgoCliente.AsEnumerable()
748  group item by new
749  {
750  empresa = item.Field<string>("empresa"),
751  codigo = item.Field<string>("codigo")
752  }
753  into g
754  select new
755  {
756  g.Key.empresa,
757  g.Key.codigo,
758  ped_pend = g.Sum(y => y.Field<decimal>("ped_pend")),
759  alb_pend = g.Sum(y => y.Field<decimal>("alb_pend")),
760  fac_pend = g.Sum(y => y.Field<decimal>("fac_pend")),
761  fac_neg = g.Sum(y => y.Field<decimal>("fac_neg")),
762  fac_rempag = g.Sum(y => y.Field<decimal>("fac_rempag")),
763  num_impago = g.Sum(y => y.Field<int>("num_impago")),
764  impagos = g.Sum(y => y.Field<decimal>("impagos")),
765  impag4315 = g.Sum(y => y.Field<decimal>("impag4315")),
766  tot_pend = g.Sum(y => y.Field<decimal>("tot_pend")),
767  med_dias = g.Sum(y => y.Field<decimal>("med_dias")),
768  fac_nocont = g.Sum(y => y.Field<decimal>("fac_nocont")),
769  ped_pendiv = g.Sum(y => y.Field<decimal>("ped_pendiv")),
770  alb_pendiv = g.Sum(y => y.Field<decimal>("alb_pendiv")),
771  fac_pendiv = g.Sum(y => y.Field<decimal>("fac_pendiv")),
772  fac_negdiv = g.Sum(y => y.Field<decimal>("fac_negdiv")),
773  fac_remdiv = g.Sum(y => y.Field<decimal>("fac_remdiv")),
774  impagosdiv = g.Sum(y => y.Field<decimal>("impagosdiv")),
775  imp4315div = g.Sum(y => y.Field<decimal>("imp4315div")),
776  tot_pendiv = g.Sum(y => y.Field<decimal>("tot_pendiv")),
777  fac_nocdiv = g.Sum(y => y.Field<decimal>("fac_nocdiv"))
778  }).__CopyToDataTable();
779 
780  string lcWhere = string.Empty;
781  foreach (DataRow item in ldtAgrupado.Rows)
782  {
783  lcWhere = " WHERE EMPRESA = " + DB.SQLString(item["EMPRESA"]) + " AND CODIGO = " + DB.SQLString(item["CODIGO"]);
784 
785  lcSql = " IF EXISTS " + Environment.NewLine +
786  " ( SELECT * FROM " + DB.SQLDatabase("OFFLINE", "RIESGOCEN") + lcWhere + " ) " + Environment.NewLine +
787  " BEGIN " + Environment.NewLine +
788  " Update " + DB.SQLDatabase("OFFLINE", "RIESGOCEN") +
789  " Set PED_PEND = " + DB.SQLString(item["PED_PEND"]) + ", " +
790  " ALB_PEND = " + DB.SQLString(item["ALB_PEND"]) + ", " +
791  " FAC_PEND = " + DB.SQLString(item["FAC_PEND"]) + ", " +
792  " FAC_NEG = " + DB.SQLString(item["FAC_NEG"]) + ", " +
793  " FAC_REMPAG = " + DB.SQLString(item["FAC_REMPAG"]) + ", " +
794  " NUM_IMPAGO = " + DB.SQLString(item["NUM_IMPAGO"]) + ", " +
795  " IMPAGOS = " + DB.SQLString(item["IMPAGOS"]) + ", " +
796  " IMPAG4315 = " + DB.SQLString(item["IMPAG4315"]) + ", " +
797  " TOT_PEND = " + DB.SQLString(item["TOT_PEND"]) + ", " +
798  " MED_DIAS = " + DB.SQLString(item["MED_DIAS"]) + ", " +
799  " FAC_NOCONT = " + DB.SQLString(item["FAC_NOCONT"]) + ", " +
800  " PED_PENDIV = " + DB.SQLString(item["PED_PENDIV"]) + ", " +
801  " ALB_PENDIV = " + DB.SQLString(item["ALB_PENDIV"]) + ", " +
802  " FAC_PENDIV = " + DB.SQLString(item["FAC_PENDIV"]) + ", " +
803  " FAC_NEGDIV = " + DB.SQLString(item["FAC_NEGDIV"]) + ", " +
804  " FAC_REMDIV = " + DB.SQLString(item["FAC_REMDIV"]) + ", " +
805  " IMPAGOSDIV = " + DB.SQLString(item["IMPAGOSDIV"]) + ", " +
806  " IMP4315DIV = " + DB.SQLString(item["IMP4315DIV"]) + ", " +
807  " TOT_PENDIV = " + DB.SQLString(item["TOT_PENDIV"]) + ", " +
808  " FAC_NOCDIV = " + DB.SQLString(item["FAC_NOCDIV"]) +
809  lcWhere + Environment.NewLine +
810  " END " + Environment.NewLine +
811  " ELSE " + Environment.NewLine +
812  " BEGIN" + Environment.NewLine +
813  " INSERT INTO " + DB.SQLDatabase("OFFLINE", "RIESGOCEN") + " " +
814  " (EMPRESA,CODIGO,PED_PEND,ALB_PEND,FAC_PEND,FAC_NEG,FAC_REMPAG,NUM_IMPAGO,IMPAGOS,IMPAG4315,TOT_PEND,MED_DIAS,FAC_NOCONT," +
815  " PED_PENDIV,ALB_PENDIV,FAC_PENDIV,FAC_NEGDIV,FAC_REMDIV,IMPAGOSDIV,IMP4315DIV,TOT_PENDIV,FAC_NOCDIV) " +
816  " VALUES (" +
817  DB.SQLString(item["EMPRESA"]) + ", " +
818  DB.SQLString(item["CODIGO"]) + ", " +
819  DB.SQLString(item["PED_PEND"]) + ", " +
820  DB.SQLString(item["ALB_PEND"]) + ", " +
821  DB.SQLString(item["FAC_PEND"]) + ", " +
822  DB.SQLString(item["FAC_NEG"]) + ", " +
823  DB.SQLString(item["FAC_REMPAG"]) + ", " +
824  DB.SQLString(item["NUM_IMPAGO"]) + ", " +
825  DB.SQLString(item["IMPAGOS"]) + ", " +
826  DB.SQLString(item["IMPAG4315"]) + ", " +
827  DB.SQLString(item["TOT_PEND"]) + ", " +
828  DB.SQLString(item["MED_DIAS"]) + ", " +
829  DB.SQLString(item["FAC_NOCONT"]) + ", " +
830  DB.SQLString(item["PED_PENDIV"]) + ", " +
831  DB.SQLString(item["ALB_PENDIV"]) + ", " +
832  DB.SQLString(item["FAC_PENDIV"]) + ", " +
833  DB.SQLString(item["FAC_NEGDIV"]) + ", " +
834  DB.SQLString(item["FAC_REMDIV"]) + ", " +
835  DB.SQLString(item["IMPAGOSDIV"]) + ", " +
836  DB.SQLString(item["IMP4315DIV"]) + ", " +
837  DB.SQLString(item["TOT_PENDIV"]) + ", " +
838  DB.SQLString(item["FAC_NOCDIV"]) + ") " +
839  " END ";
840 
841  DB.SQLExec(lcSql);
842  }
843  }
844  }
845  }
846 
847  private static void TratarRegistrosPartesCostes()
848  {
849  TratarRegistrosEspeciales("GESTION", "C_PARTES", "_CREATED");
850  TratarRegistrosEspeciales("GESTION", "D_PARTES", "_CREATED");
851  TratarRegistrosEspeciales("OFFLINE", "CTRL_PARCO", "_CREATED");
852 
853  TratarRegistrosEspeciales("GESTION", "C_PARTES", "_MODIFIED");
854  TratarRegistrosEspeciales("GESTION", "D_PARTES", "_MODIFIED");
855  TratarRegistrosEspeciales("OFFLINE", "CTRL_PARCO", "_MODIFIED");
856  }
857 
858  private static void TratarRegistrosEspeciales(string tcDatabase, string tcTabla, string tcSufijo)
859  {
860  string lcCadenaCamps = string.Empty;
861  string lcSetCampos = string.Empty;
862  string lcIndice = string.Empty;
863  string lcCondicion = string.Empty;
864  string lcRutaOtrasien = string.Empty;
865  string lcSql = string.Empty;
866 
867  // BUSQUEM A LA RUTA TEMPORAL SI S'HAN REBUT ELS FITXERS
868  lcRutaOtrasien = Path.Combine(TempFolderName, tcDatabase, tcTabla + tcSufijo) + ".xml";
869 
870  if (!File.Exists(lcRutaOtrasien))
871  {
872  return;
873  }
874 
875  _TextStepDetalle = "Procesando registros " + tcTabla;
876  _TextStepProgreso = _TextStepDetalle;
877  _PorcenProgreso = IncrementarBarraProgreso();
878 
879  // Index de la taula a tractar
880  lcCadenaCamps = ObtenerCamposSelect(tcDatabase, tcTabla + tcSufijo);
881  lcSetCampos = ObtenerCamposSet(tcDatabase, tcTabla + tcSufijo);
882  lcIndice = ObtenerCamposIndices(tcDatabase, tcTabla);
883 
884  lcSql = " UPDATE [" + clsOfflineUtils.ObtenerNombreBdReal(tcDatabase) + "].dbo.[" + tcTabla + "] " +
885  " SET " + lcSetCampos +
886  " FROM [" + clsOfflineUtils.ObtenerNombreBdReal(tcDatabase) + "].dbo.[" + tcTabla + "] a " +
887  " INNER JOIN [" + _cRaizDataBaseTemporal + tcDatabase +"].dbo.[" + tcTabla + tcSufijo + "] b " +
888  " ON " + lcIndice;
889  DB.SQLExec(lcSql);
890 
891  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + tcDatabase + "].dbo.[_Especial] ";
892  DB.SQLExec(lcSql);
893 
894  // la condicion només l'aplicarem sobre el primer camp
895  lcCondicion = lcIndice.Trim();
896  lcCondicion = lcCondicion.Substring(0, lcCondicion.IndexOf('='));
897 
898  // farem el FULL JOIN, per trobar els nous registres
899  lcSql = "SELECT b.* into [" + _cRaizDataBaseTemporal + tcDatabase + "].dbo.[_Especial] " +
900  " FROM [" + clsOfflineUtils.ObtenerNombreBdReal(tcDatabase) + "].dbo.[" + tcTabla + "] a " +
901  " RIGHT JOIN [" + _cRaizDataBaseTemporal + tcDatabase + "].dbo.[" + tcTabla + tcSufijo + "] b " +
902  " ON " + lcIndice +
903  " WHERE " + lcCondicion + " is null ";
904  DB.SQLExec(lcSql);
905 
906 
907  // farem el insert
908  lcSql = "INSERT INTO [" + clsOfflineUtils.ObtenerNombreBdReal(tcDatabase) + "].dbo.[" + tcTabla + "] (" + lcCadenaCamps + ") " +
909  "SELECT " + lcCadenaCamps + " FROM [" + _cRaizDataBaseTemporal + tcDatabase + "].dbo.[_Especial] ";
910  DB.SQLExec(lcSql);
911  }
912 
913  private static RegistroTabRel ComprobarFicheros(DataRow item, string tcSufijo)
914  {
915  RegistroTabRel registro = new RegistroTabRel();
916 
917  registro._DBPrincipal = string.Empty;
918  registro._TablaPrincipal = string.Empty;
919 
920  registro._DBSecundaria = string.Empty;
921  registro._TablaSecundaria = string.Empty;
922 
923  registro._Empresa = item.Field<string>("empresa").TrimEnd();
924  registro._EmpresaSecundaria = item.Field<string>("empresecun").TrimEnd();
925  registro._Sufijo = string.Empty;
926  registro._Prioridad = 0;
927  registro._ID = item.Field<int>("ID");
928  registro._Clave = item.Field<string>("clave").TrimEnd();
929  registro._Nombre = item.Field<string>("nombre").TrimEnd();
930  registro._Visible = item.Field<bool>("visible");
931 
932  if (!string.IsNullOrWhiteSpace(item.Field<string>("principal")))
933  {
934  string[] subPos = item.Field<string>("principal").TrimEnd().Split('!');
935  if (subPos.Length == 2)
936  {
937  registro._DBPrincipal = subPos[0].TrimEnd();
938  registro._TablaPrincipal = subPos[1].TrimEnd();
939  registro._Sufijo = tcSufijo;
940  }
941 
942  // S'HA DE BUSCAR EL FITXER FISIC, AMB EL NOM ALTERNATIU, SI ES QUE EN TE
943  // BUSQUEM A LA RUTA TEMPORAL SI S'HAN REBUT ELS FITXERS
944  string lcRutaPrin = Path.Combine(TempFolderName, registro._DBPrincipal, registro._TablaPrincipal + registro._Sufijo) + ".xml";
945 
946  if (!File.Exists(lcRutaPrin))
947  {
948  registro._DBPrincipal = string.Empty;
949  registro._TablaPrincipal = string.Empty;
950  }
951  }
952 
953  // taula secundaria
954  if (!string.IsNullOrWhiteSpace(item.Field<string>("secundaria")))
955  {
956  string[] subPos = item.Field<string>("secundaria").TrimEnd().Split('!');
957  if (subPos.Length == 2)
958  {
959  registro._DBSecundaria = subPos[0].TrimEnd();
960  registro._TablaSecundaria = subPos[1].TrimEnd();
961  registro._Sufijo = tcSufijo;
962  }
963 
964  registro._Relacion = item.Field<string>("relacion");
965 
966  // S'HA DE BUSCAR EL FITXER FISIC, AMB EL NOM ALTERNATIU, SI ES QUE EN TE
967  // BUSQUEM A LA RUTA TEMPORAL SI S'HAN REBUT ELS FITXERS
968  string lcRutaSecun = Path.Combine(TempFolderName, registro._DBSecundaria, registro._TablaSecundaria + registro._Sufijo) + ".xml";
969 
970  if (!File.Exists(lcRutaSecun))
971  {
972  registro._DBSecundaria = string.Empty;
973  registro._TablaSecundaria = string.Empty;
974  registro._Relacion = string.Empty;
975  }
976  }
977 
978  registro._Prioridad = item.Field<int>("prioridad");
979 
980  registro._Otrasien = item.Field<string>("otrasien").TrimEnd();
981  registro._Asientos = item.Field<string>("asientos").TrimEnd();
982  registro._Ivareper = item.Field<string>("ivareper").TrimEnd();
983  registro._Ivasopor = item.Field<string>("ivasopor").TrimEnd();
984  registro._Iva_exen = item.Field<string>("iva_exen").TrimEnd();
985  registro._Retreper = item.Field<string>("retreper").TrimEnd();
986  registro._Retsopor = item.Field<string>("retsopor").TrimEnd();
987  registro._Eos = item.Field<string>("eos").TrimEnd();
988  registro._Compras = item.Field<string>("compras").TrimEnd();
989 
990  return registro;
991  }
992 
993  private static string TratarTablasRecepcion(OfflineDatosComunicaciones datos, RegistroTabRel registro, ILog_comoffRepository logRepository)
994  {
995  bool llDiferente = true;
996  string lcTablaControl = string.Empty;
997 
998  TratamientoEspecialRecepcion(datos, ref registro, logRepository);
999  registro._Sobreescribir = (datos._IsCentral ? registro._Prioridad == 2 : registro._Prioridad == 1);
1000 
1001  //TRACTAR PRINCIPAL
1002  if (!string.IsNullOrWhiteSpace(registro._DBPrincipal) && !string.IsNullOrWhiteSpace(registro._TablaPrincipal))
1003  {
1004  if (!registro._TablaPrincipal.Contains("CTRL_"))
1005  {
1006  llDiferente = _tablaOld != registro._Clave + registro._DBPrincipal + registro._TablaPrincipal + registro._Sufijo + (registro._Sobreescribir ? "S" : "N");
1007  _tablaOld = registro._Clave + registro._DBPrincipal + registro._TablaPrincipal + registro._Sufijo + (registro._Sobreescribir ? "S" : "N");
1008  }
1009 
1010  // La principal només cal fer-la la primera vegada
1011  if (llDiferente)
1012  {
1013  //Si al recuperar la tabla viene "sobreescribir" no tendremos la tabla "_InsertPrin" por esos su cambia el valor de la propiedad deberá de pasar por el método actualziar_datos
1014  registro._Actualizado = ActualizarDatosRecepcion(datos, registro, logRepository);
1015 
1016  lcTablaControl = _offlineConfig.ObtenerTablaControlRelacionada(registro._DBPrincipal + "!" + registro._TablaPrincipal);
1017  }
1018  }
1019 
1020  // TRACTAR SECUNDARIA
1021  if (!string.IsNullOrWhiteSpace(registro._DBSecundaria) && !string.IsNullOrWhiteSpace(registro._TablaSecundaria))
1022  {
1023  ActualizarDatosRecepcion(datos, registro, logRepository, true);
1024  }
1025 
1026  // Tratamiento especial para la tabla COMPRAS
1027  if (!string.IsNullOrWhiteSpace(registro._Compras))
1028  {
1029  TratamientoEspecial_Compras(registro);
1030  }
1031 
1032  return lcTablaControl;
1033  }
1034 
1035  private static bool CrearTablaTemporal(string tcDB, string tcTabla, string tcSufijo, string tcEmpresa, bool tlPrincipal)
1036  {
1037  string lcTaulaTemp = string.Empty;
1038  string lcFiltre = string.Empty;
1039  string lcOr = string.Empty;
1040  string lcSql = string.Empty;
1041 
1042  lcTaulaTemp = (tlPrincipal ? "_Principal" : "_Secundaria");
1043 
1044  if (!DB._SQLExisteBBDD(_cRaizDataBaseTemporal + tcDB))
1045  {
1046  return false;
1047  }
1048 
1049  // Eliminem la taula de la base de dades
1050  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + tcDB + "].dbo.[" + lcTaulaTemp + "] ";
1051  DB.SQLExec(lcSql);
1052 
1053  // S'ha de comprovar si tenim el camp EMPRESA ple, i filtrar només per les empreses existents
1054  if (!string.IsNullOrWhiteSpace(tcEmpresa))
1055  {
1056  lcOr = "";
1057  string lcCampoEmpresa = tcEmpresa;
1058  clsOfflineUtils.RevisarTablasCampoEmpresa(tcTabla, ref lcCampoEmpresa);
1059 
1060  if (!string.IsNullOrWhiteSpace(lcCampoEmpresa))
1061  {
1062  DataTable ldtEmpresa = new DataTable();
1063  DB.SQLExec("SELECT CODIGO as EMPRESA FROM " + DB.SQLDatabase("GESTION", "EMPRESA"), ref ldtEmpresa);
1064 
1065  // Montem el filtre
1066  foreach (DataRow item in ldtEmpresa.Rows)
1067  {
1068  lcFiltre = lcFiltre + lcOr + lcCampoEmpresa + " = " + DB.SQLString(item.Field<string>("empresa")) + " ";
1069  lcOr = " Or ";
1070  }
1071 
1072  // Pueden existir registros metidos a mano sin empresa asignada
1073  if (tcTabla.ToUpper() == "REFERPRO")
1074  {
1075  lcFiltre = lcFiltre + lcOr + lcCampoEmpresa + " = " + DB.SQLString("") + " ";
1076  }
1077  }
1078  }
1079 
1080  lcFiltre = (!string.IsNullOrWhiteSpace(lcFiltre) ? " Where " : "") + lcFiltre;
1081 
1082  // Fem una copia de la taula a tractar
1083  if (!DB._SQLExisteTablaBBDD(_cRaizDataBaseTemporal + tcDB, tcTabla + tcSufijo))
1084  {
1085  lcSql = "SELECT * INTO [" + _cRaizDataBaseTemporal + tcDB + "].dbo.[" + tcTabla + tcSufijo + "] " +
1086  " FROM " + DB.SQLDatabase(tcDB, tcTabla) + " WHERE 1=2 ";
1087 
1088  DB.SQLExec(lcSql);
1089  }
1090 
1091  lcSql = "SELECT * INTO [" + _cRaizDataBaseTemporal + tcDB + "].dbo.[" + lcTaulaTemp + "] " +
1092  " FROM [" + _cRaizDataBaseTemporal + tcDB + "].dbo.[" + tcTabla + tcSufijo + "] " + lcFiltre;
1093 
1094  DB.SQLExec(lcSql);
1095 
1096  return true;
1097  }
1098 
1099  private static bool ImportarAsientos(OfflineDatosComunicaciones datos, RegistroTabRel registro, ILog_comoffRepository logRepository, string tcTabla = "_Secundaria")
1100  {
1101  int lnAsiento = 0;
1102  int lnNumAntic = 0;
1103 
1104  string lcSql = string.Empty;
1105  DataTable ldtAsi = new DataTable();
1106 
1107  lcSql = "SELECT DISTINCT empresa, numero FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + "] ";
1108  DB.SQLExec(lcSql, ref ldtAsi);
1109 
1110  if (ldtAsi.Rows.Count == 0)
1111  {
1112  return true;
1113  }
1114  else
1115  {
1116  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[_ControlAsientos] ");
1117 
1118  // Fem una copia de la taula a tractar
1119  if (DB._SQLExisteTablaBBDD(_cRaizDataBaseTemporal + "OFFLINE", "CTRL_ASIEN" + registro._Sufijo))
1120  {
1121  string lcAny = EW_GLOBAL._GetVariable("wc_any").ToString();
1122  lcSql = "SELECT a.* INTO [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[_ControlAsientos] " +
1123  " FROM [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[" + "CTRL_ASIEN" + registro._Sufijo + "] a " +
1124  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION].dbo.[" + tcTabla + "] b " +
1125  " ON A.EMPRESA = b.EMPRESA AND a.NUMERO = b.NUMERO and a.LINEA = b.LINEA AND a.EJERCICIO = " + DB.SQLString(lcAny);
1126  }
1127  else
1128  {
1129  lcSql = "SELECT * INTO [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[_ControlAsientos] " +
1130  " FROM " + DB.SQLDatabase("OFFLINE", "CTRL_ASIEN") +
1131  " WHERE 1=2 ";
1132  }
1133 
1134  DB.SQLExec(lcSql);
1135 
1136  DB.SQLBegin();
1137 
1138  // he de passar el valor del numero d'asiento a negatiu per evitar problemes
1139  lcSql = "UPDATE [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + "] SET NUMERO = NUMERO * (-1) ";
1140  DB.SQLExec(lcSql);
1141 
1142  // he de passar el valor del numero d'asiento a negatiu per evitar problemes
1143  lcSql = "UPDATE [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[_ControlAsientos] SET NUMERO = NUMERO * (-1) ";
1144  DB.SQLExec(lcSql);
1145 
1146  foreach (DataRow item in ldtAsi.Rows)
1147  {
1148  lnNumAntic = item.Field<int>("numero") * (-1);
1149 
1150  // busco el contador d'asientos de l'empresa actual.
1151  lnAsiento = Convert.ToInt32(FUNCTIONS._SumaNumero(item.Field<string>("empresa"), "ASIENTO", "EMPRESA", "GESTION", "CODIGO"));
1152 
1153  while (!string.IsNullOrWhiteSpace(DB.SQLValor("ASIENTOS","EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) + " AND NUMERO",lnAsiento.ToString(),"EMPRESA","GESTION").ToString()))
1154  {
1155  lnAsiento = Convert.ToInt32(FUNCTIONS._SumaNumero(item.Field<string>("empresa"), "ASIENTO", "EMPRESA", "GESTION", "CODIGO"));
1156  }
1157 
1158  lcSql = "UPDATE [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + "] " +
1159  " SET NUMERO = " + DB.SQLString(lnAsiento) +
1160  " WHERE NUMERO = " + DB.SQLString(lnNumAntic) + " AND EMPRESA = " + DB.SQLString(item.Field<string>("empresa"));
1161  DB.SQLExec(lcSql);
1162 
1163  lcSql = "UPDATE [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.[_ControlAsientos] " +
1164  " SET NUMERO = " + DB.SQLString(lnAsiento) +
1165  " WHERE NUMERO = " + DB.SQLString(lnNumAntic) + " AND EMPRESA = " + DB.SQLString(item.Field<string>("empresa"));
1166  DB.SQLExec(lcSql);
1167  }
1168 
1169  DB.SQLCommit();
1170 
1171  lcSql = "SELECT DISTINCT empresa, asi FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + "] ";
1172  DB.SQLExec(lcSql, ref ldtAsi);
1173 
1174  string lcInnerOn = string.Empty;
1175 
1176  switch (registro._TablaSecundaria)
1177  {
1178  case "ASIENTOS":
1179 
1180  if (!string.IsNullOrWhiteSpace(registro._TablaPrincipal))
1181  {
1182  lcInnerOn = " INNER JOIN " + DB.SQLDatabase(registro._DBPrincipal, registro._TablaPrincipal) + " b ON " + ObtenerInnerOn(registro._DBSecundaria, registro._DBPrincipal, registro._TablaSecundaria, registro._TablaPrincipal, registro._Relacion, registro._Clave, datos, logRepository);
1183  }
1184  break;
1185 
1186  case "IVACJREPER":
1187  case "IVACJSOPOR":
1188 
1189  lcInnerOn = " INNER JOIN " + DB.SQLDatabase(registro._DBSecundaria, registro._TablaSecundaria) + " b ON " + " a.empresa = b.empresa AND a.asi = b.asirecc ";
1190  break;
1191 
1192  default:
1193 
1194  lcInnerOn = " INNER JOIN " + DB.SQLDatabase(registro._DBSecundaria, registro._TablaSecundaria) + " b ON " + " a.empresa = b.empresa AND a.asi = b.asi ";
1195  break;
1196 
1197  }
1198 
1199  foreach (DataRow item in ldtAsi.Rows)
1200  {
1201  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", "CTRL_ASIEN") +
1202  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1203  " AND EJERCICIO = " + DB.SQLString(_cAny) +
1204  " AND NUMERO IN ( SELECT a.NUMERO FROM " + DB.SQLDatabase("GESTION", "ASIENTOS") + " a " +
1205  lcInnerOn +
1206  " WHERE a.EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1207  " AND a.ASI = " + DB.SQLString(item.Field<string>("asi")) + " ) ";
1208  DB.SQLExec(lcSql);
1209 
1210  lcSql = " DELETE FROM " + DB.SQLDatabase("GESTION", "ASIENTOS") +
1211  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1212  " AND NUMERO IN ( SELECT a.NUMERO FROM " + DB.SQLDatabase("GESTION", "ASIENTOS") + " a " +
1213  lcInnerOn +
1214  " WHERE a.EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1215  " AND a.ASI = " + DB.SQLString(item.Field<string>("asi")) + " ) ";
1216  DB.SQLExec(lcSql);
1217  }
1218  }
1219 
1220  return true;
1221  }
1222 
1223  private static bool ImportarEntidad(RegistroTabRel registro)
1224  {
1225  // tractar els diferents casos on esta la taula cajas
1226  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1227 
1228  // Actualitzem la temporal amb les dades de la BD real abans de volcar-la a la real
1229  string lcSql = "Update [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] " +
1230  "Set CARTAPAG = COALESCE(B.CARTAPAG, '') " +
1231  "From [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] A " +
1232  "Left Join [" + lcDbReal + "].dbo.[" + registro._TablaPrincipal + "] B On A.CODIGO = B.CODIGO ";
1233 
1234  return DB.SQLExec(lcSql);
1235  }
1236 
1237  private static bool ImportarCajas(RegistroTabRel registro)
1238  {
1239  // tractar els diferents casos on esta la taula cajas
1240  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1241 
1242  // Actualitzem la temporal amb les dades de la BD real abans de volcar-la a la real
1243  string lcSql = "Update [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] " +
1244  "Set PTICKETS = COALESCE(B.PTICKETS, ''), " +
1245  "PDISPLAY = COALESCE(B.PDISPLAY, ''), " +
1246  "PCAJA = COALESCE(B.PCAJA, ''), " +
1247  "NOMPCAJA = COALESCE(B.NOMPCAJA, ''), " +
1248  "NOMPDISP = COALESCE(B.NOMPDISP, ''), " +
1249  "IMPRESORA2 = COALESCE(B.IMPRESORA2, ''), " +
1250  "IMPRESORA = COALESCE(B.IMPRESORA, ''), " +
1251  "IMP_COCI = COALESCE(B.IMP_COCI, ''), " +
1252  "IMP_RESUM = COALESCE(B.IMP_RESUM, '') " +
1253  "From [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] A " +
1254  "Left Join [" + lcDbReal + "].dbo.[" + registro._TablaPrincipal + "] B On A.CODIGO = B.CODIGO ";
1255 
1256  return DB.SQLExec(lcSql);
1257  }
1258 
1259  private static bool ImportarUniUsers(RegistroTabRel registro)
1260  {
1261  string lcIdSage50 = DB.SQLValor("GRUPOSEMP", "CODIGO", GrupoEmpresa._CodigoGrupoActual().ToString().Trim(), "IDSAGE50", "EUROWINSYS").ToString();
1262 
1263  // Actualitzem la temporal amb les dades de la BD real abans de volcar-la a la real
1264  string lcSql = "Update [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] " +
1265  "Set IDSAGE50 = " + DB.SQLString(lcIdSage50);
1266 
1267  DB.SQLExec(lcSql);
1268 
1269  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Especial]");
1270 
1271  lcSql = " SELECT DISTINCT " + ObtenerCamposSelect(registro._DBSecundaria, registro._TablaSecundaria + registro._Sufijo, "a.") +
1272  " INTO [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Especial] " +
1273  " FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] a ";
1274  DB.SQLExec(lcSql);
1275 
1276  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria]");
1277 
1278  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] " +
1279  " FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Especial] ";
1280  DB.SQLExec(lcSql);
1281 
1282  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Especial]");
1283 
1284  return true;
1285  }
1286 
1287  private static bool ImportarAccesoGrup(RegistroTabRel registro)
1288  {
1289  string lcGrupo = GrupoEmpresa._CodigoGrupoActual().ToString().Trim();
1290  string lcIdSage50 = DB.SQLValor("GRUPOSEMP", "CODIGO", lcGrupo, "IDSAGE50", "EUROWINSYS").ToString();
1291 
1292  // Actualitzem la temporal amb les dades de la BD real abans de volcar-la a la real
1293  string lcSql = "Update [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] " +
1294  "Set IDSAGE50 = " + DB.SQLString(lcIdSage50) + ", GRUPO = " + DB.SQLString(lcGrupo);
1295 
1296  return DB.SQLExec(lcSql);
1297  }
1298 
1299  private static bool ImportarAccesos(RegistroTabRel registro)
1300  {
1301  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1302 
1303  string lcSql = "DELETE FROM [" + lcDbReal + "].dbo.[" + registro._TablaPrincipal + "] ";
1304 
1305  return DB.SQLExec(lcSql);
1306  }
1307 
1308  private static bool ImportarConfTick(RegistroTabRel registro)
1309  {
1310  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1311 
1312  // Actualitzem la temporal amb les dades de la BD real abans de volcar-la a la real
1313  string lcSql = "Update [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] " +
1314  "Set TICKETS = B.TICKETS, " +
1315  "ARQUEO = B.ARQUEO, " +
1316  "FACTICK = B.FACTICK, " +
1317  "PEDINT = B.PEDINT " +
1318  "From [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] A " +
1319  "Inner Join [" + lcDbReal + "].dbo.[" + registro._TablaPrincipal + "] B On A.EMPRESA = B.EMPRESA ";
1320 
1321 
1322  return DB.SQLExec(lcSql);
1323  }
1324 
1325  private static bool ImportarAlbaranesFacturas(RegistroTabRel registro)
1326  {
1327  string lcSql = " DELETE FROM [" + _cRaizDataBaseTemporal + registro._DBPrincipal + "].dbo.[_Principal] ";
1328 
1329  switch (registro._Clave)
1330  {
1331  case "C_ALBVEN":
1332  case "C_ALBCOM":
1333 
1334  lcSql += " WHERE FACTURA != '' ";
1335  break;
1336 
1337  case "FACTURAS":
1338  case "FACTURAC":
1339 
1340  lcSql += " WHERE FACTURA = '' ";
1341  break;
1342 
1343  default:
1344 
1345  lcSql = "";
1346  break;
1347  }
1348 
1349  if (string.IsNullOrWhiteSpace(lcSql))
1350  {
1351  return true;
1352  }
1353  else
1354  {
1355  return DB.SQLExec(lcSql);
1356  }
1357  }
1358 
1359  private static bool ImportarStocklotes(RegistroTabRel registro)
1360  {
1361  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1362  string lcDbReal2 = clsOfflineUtils.ObtenerNombreBdReal(registro._DBSecundaria);
1363 
1364  switch (registro._TablaPrincipal)
1365  {
1366  case "STOCKS2":
1367 
1368  // preparo la taula secundaria
1369  DataTable ldtStockLotes = new DataTable();
1370  string lcSql = "SELECT * " +
1371  " FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] " +
1372  " ORDER BY EMPRESA, ALMACEN, ARTICULO, TALLA, COLOR ";
1373 
1374  DB.SQLExec(lcSql, ref ldtStockLotes);
1375 
1376  if (ldtStockLotes.Rows.Count == 0)
1377  {
1378  return true;
1379  }
1380 
1381  // faig una regularització al dia anterior, ja que ha de ser l'últim moviment del dia
1382  DateTime FechaMaxima = DateTime.Today.AddDays(-1);
1383 
1384  // Eliminar els possibles registres de la data que anem a afegir
1385 
1386  DataTable ldtRevisar = new DataTable();
1387  lcSql = "SELECT DISTINCT empresa, almacen " +
1388  " FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] " +
1389  " ORDER BY EMPRESA, ALMACEN ";
1390  DB.SQLExec(lcSql, ref ldtRevisar);
1391 
1392  string lcCondicion = string.Empty;
1393 
1394  foreach (DataRow item in ldtRevisar.Rows)
1395  {
1396  lcCondicion = " EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) + " AND ALMACEN = " + DB.SQLString(item.Field<string>("almacen"));
1397 
1398  lcSql = "DELETE FROM " + DB.SQLDatabase("GESTION", "REGULARI") +
1399  " WHERE (DOCUMENTO='SINCRONIZACION' OR DOCUMENTO='STOCKSOFFLINE') " +
1400  " AND " + lcCondicion + " AND FECHA = " + DB.SQLString(FechaMaxima);
1401  DB.SQLExec(lcSql);
1402 
1403  lcSql = "DELETE FROM " + DB.SQLDatabase("LOTES", "LTREGUL") +
1404  " WHERE (DOCUMENTO='SINCRONIZACION' OR DOCUMENTO='STOCKSOFFLINE') " +
1405  " AND " + lcCondicion + " AND FECHA = " + DB.SQLString(FechaMaxima);
1406  DB.SQLExec(lcSql);
1407  }
1408 
1409  DataTable ldtRegulari = new DataTable();
1410  lcSql = " SELECT * FROM " + DB.SQLDatabase("GESTION", "REGULARI") + " WHERE 1=2 ";
1411  DB.SQLExec(lcSql, ref ldtRegulari);
1412 
1413  DataTable ldtLtregul = new DataTable();
1414  lcSql = " SELECT * FROM " + DB.SQLDatabase("LOTES", "LTREGUL") + " WHERE 1=2 ";
1415  DB.SQLExec(lcSql, ref ldtLtregul);
1416 
1417  string lcOldCodi = "##@@";
1418  string lcOldArticulo = "%&/(";
1419  string lcDocumento = "STOCKSOFFLINE";
1420  int lnLinia = 0;
1421 
1422  foreach (DataRow item in ldtStockLotes.Rows)
1423  {
1424  // si canvia l'empresa o el magatzem, fem un inventari nou
1425 
1426  if (lcOldCodi != item.Field<string>("EMPRESA") + item.Field<string>("ALMACEN"))
1427  {
1428  if (lcOldCodi != "##@@")
1429  {
1430  foreach (DataRow row in ldtRegulari.Rows)
1431  {
1432  ImportarStocklotesRegulari(row);
1433  }
1434  }
1435 
1436  lcSql = " SELECT * FROM " + DB.SQLDatabase("GESTION", "REGULARI") +
1437  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1438  " AND ALMACEN = " + DB.SQLString(item.Field<string>("almacen")) +
1439  " AND FECHA = " + DB.SQLString(FechaMaxima) +
1440  " AND DOCUMENTO = " + DB.SQLString(lcDocumento);
1441  DB.SQLExec(lcSql, ref ldtRegulari);
1442 
1443  if (ldtRegulari.Rows.Count == 0)
1444  {
1445  lnLinia = 0;
1446  }
1447  else
1448  {
1449  lnLinia = Convert.ToInt32(ldtRegulari.Compute("MAX(LINIA)", ""));
1450  }
1451 
1452  lcOldCodi = item.Field<string>("empresa") + item.Field<string>("almacen");
1453  lcOldArticulo = "%&/(";
1454  }
1455 
1456 
1457  if (lcOldArticulo != item.Field<string>("ARTICULO") + item.Field<string>("TALLA") + item.Field<string>("COLOR"))
1458  {
1459  lnLinia = lnLinia + 1;
1460 
1461  DataRow newRowRegulari = ldtRegulari.NewRow();
1462 
1463  newRowRegulari["EMPRESA"] = item.Field<string>("empresa");
1464  newRowRegulari["ALMACEN"] = item.Field<string>("ALMACEN");
1465  newRowRegulari["FECHA"] = FechaMaxima;
1466  newRowRegulari["FECHASTOCK"] = FechaMaxima;
1467  newRowRegulari["ARTICULO"] = item.Field<string>("ARTICULO");
1468  newRowRegulari["UNIDADES"] = item.Field<decimal>("UNIDADES");
1469  newRowRegulari["PESO"] = item.Field<decimal>("PESO");
1470  newRowRegulari["LINIA"] = lnLinia;
1471  newRowRegulari["TALLA"] = item.Field<string>("TALLA");
1472  newRowRegulari["COLOR"] = item.Field<string>("COLOR");
1473  newRowRegulari["PMCOM"] = 0M;
1474  newRowRegulari["PMSTOCK"] = 0M;
1475  newRowRegulari["DOCUMENTO"] = lcDocumento;
1476 
1477  ldtRegulari.Rows.Add(newRowRegulari);
1478 
1479  lcOldArticulo = item.Field<string>("ARTICULO") + item.Field<string>("TALLA") + item.Field<string>("COLOR");
1480 
1481 
1482  if (lcOldArticulo != "%&/(")
1483  {
1484  foreach (DataRow row in ldtLtregul.Rows)
1485  {
1486  ImportarStocklotesLtregul(row);
1487  }
1488  }
1489 
1490 
1491  lcSql = " SELECT * FROM " + DB.SQLDatabase("LOTES", "LTREGUL") +
1492  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
1493  " AND ALMACEN = " + DB.SQLString(item.Field<string>("almacen")) +
1494  " AND FECHA = " + DB.SQLString(FechaMaxima) +
1495  " AND DOCUMENTO = " + DB.SQLString(lcDocumento) +
1496  " AND LINIA = " + DB.SQLString(lnLinia);
1497  DB.SQLExec(lcSql, ref ldtLtregul);
1498  }
1499  else
1500  {
1501  DataRow[] rows = ldtRegulari.Select("articulo = '" + item.Field<string>("ARTICULO") + "' and talla ='" + item.Field<string>("TALLA") + "' and color = '" + item.Field<string>("COLOR") + "'");
1502 
1503  if (rows.Length == 1)
1504  {
1505  rows[0]["UNIDADES"] = Convert.ToDecimal(rows[0]["UNIDADES"]) + item.Field<decimal>("UNIDADES");
1506  rows[0]["PESO"] = Convert.ToDecimal(rows[0]["PESO"]) + item.Field<decimal>("PESO");
1507  }
1508  }
1509 
1510  DataRow newRowLtregul = ldtLtregul.NewRow();
1511 
1512 
1513  newRowLtregul["EMPRESA"] = item.Field<string>("EMPRESA");
1514  newRowLtregul["ALMACEN"] = item.Field<string>("ALMACEN");
1515  newRowLtregul["FECHA"] = FechaMaxima;
1516  newRowLtregul["LINIA"] = lnLinia;
1517  newRowLtregul["DOCUMENTO"] = lcDocumento;
1518  newRowLtregul["ARTICULO"] = item.Field<string>("ARTICULO");
1519  newRowLtregul["LOTE"] = item.Field<string>("LOTE");
1520  newRowLtregul["UNIDADES"] = item.Field<decimal>("UNIDADES");
1521 
1522  if (item.Field<DateTime?>("CADUCIDAD") != null)
1523  {
1524  newRowLtregul["CADUCIDAD"] = item.Field<DateTime?>("CADUCIDAD");
1525  }
1526  newRowLtregul["FECHA2"] = FechaMaxima;
1527  newRowLtregul["PESO"] = item.Field<decimal>("PESO");
1528  newRowLtregul["TALLA"] = item.Field<string>("TALLA");
1529  newRowLtregul["COLOR"] = item.Field<string>("COLOR");
1530 
1531  ldtLtregul.Rows.Add(newRowLtregul);
1532 
1533  }
1534 
1535  foreach (DataRow row in ldtRegulari.Rows)
1536  {
1537  ImportarStocklotesRegulari(row);
1538  }
1539 
1540  foreach (DataRow row in ldtLtregul.Rows)
1541  {
1542  ImportarStocklotesLtregul(row);
1543  }
1544 
1545  ImportarStocklotesRevisarRegularizacion(FechaMaxima);
1546 
1547 
1548  //Una vegada acabat el proces correctament, s'han d'eliminar els inventaris de SINCRONIZACION de dies anteriors
1549  foreach (DataRow item in ldtRevisar.Rows)
1550  {
1551  lcCondicion = " EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) + " AND ALMACEN = " + DB.SQLString(item.Field<string>("almacen"));
1552 
1553  // Primer buido la taula STOCKLOTES, ja la recalcularem al final
1554  lcSql = "DELETE FROM " + DB.SQLDatabase("LOTES", "STOCKLOTES") +
1555  " WHERE " + lcCondicion;
1556  DB.SQLExec(lcSql);
1557 
1558  // Desprem elimino les regularitzacions de dies anteriors
1559  lcSql = "DELETE FROM " + DB.SQLDatabase("GESTION", "REGULARI") +
1560  " WHERE (DOCUMENTO='SINCRONIZACION' OR DOCUMENTO='STOCKSOFFLINE') " +
1561  " AND " + lcCondicion + " AND FECHA < " + DB.SQLString(FechaMaxima);
1562  DB.SQLExec(lcSql);
1563 
1564  lcSql = "DELETE FROM " + DB.SQLDatabase("LOTES", "LTREGUL") +
1565  " WHERE (DOCUMENTO='SINCRONIZACION' OR DOCUMENTO='STOCKSOFFLINE') " +
1566  " AND " + lcCondicion + " AND FECHA < " + DB.SQLString(FechaMaxima);
1567  DB.SQLExec(lcSql);
1568  }
1569  break;
1570 
1571  }
1572 
1573  return true;
1574 
1575  }
1576 
1577  private static void ImportarStocklotesRevisarRegularizacion(DateTime tdFechaMaxima)
1578  {
1579  bool llTrobat = false;
1580  int lnLinia = 0;
1581 
1582  string lcOldCodi = string.Empty;
1583  string lcOldArticulo = string.Empty;
1584  string lcDocumento = string.Empty;
1585  string _regula = string.Empty;
1586  string _ltregul = string.Empty;
1587 
1588  string lcSql = string.Empty;
1589 
1590  string lcFiltroArticulo = string.Empty;
1591  string lcFiltroLotes = string.Empty;
1592 
1593  DataTable ldtRegulari = new DataTable();
1594  DataTable ldtLtregul = new DataTable();
1595 
1596  // S'ha de revisar si hi ha documents del dia actual, que s'han traspasat via OFFLINE
1597  // he de revisar el moviments del inventari de regularització que acabo de crear
1598  if (_dtStockLotesOffline != null && _dtStockLotesOffline.Rows.Count > 0)
1599  {
1600  lcOldCodi = "##@@";
1601  lcOldArticulo = "%&/(";
1602  lcDocumento = "STOCKSOFFLINE";
1603 
1604 
1605  _dtStockLotesOffline.DefaultView.Sort = "EMPRESA, ALMACEN, ARTICULO, TALLA, COLOR";
1606  _dtStockLotesOffline = _dtStockLotesOffline.DefaultView.ToTable();
1607 
1608  foreach (DataRow item in _dtStockLotesOffline.Rows)
1609  {
1610  //si canvia l'empresa o el magatzem, fem un inventari nou
1611  if (lcOldCodi != item.Field<string>("EMPRESA") + item.Field<string>("ALMACEN"))
1612  {
1613  if (lcOldCodi != "##@@")
1614  {
1615  // Actualizar datos
1616  foreach (DataRow row in ldtRegulari.Rows)
1617  {
1618  lcSql = " UPDATE " + DB.SQLDatabase("GESTION","REGULARI") +
1619  " SET UNIDADES = " + DB.SQLString(row.Field<decimal>("UNIDADES")) +
1620  " , PESO = " + DB.SQLString(row.Field<decimal>("PESO")) +
1621  " WHERE EMPRESA = " + DB.SQLString(row.Field<string>("EMPRESA")) +
1622  " AND ALMACEN = " + DB.SQLString(row.Field<string>("ALMACEN")) +
1623  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1624  " AND DOCUMENTO = " + DB.SQLString(lcDocumento);
1625 
1626  DB.SQLExec(lcSql);
1627  }
1628 
1629  // Actualizar datos
1630  foreach (DataRow row in ldtLtregul.Rows)
1631  {
1632  lcSql = " UPDATE " + DB.SQLDatabase("LOTES", "LTREGUL") +
1633  " SET UNIDADES = " + DB.SQLString(row.Field<decimal>("UNIDADES")) +
1634  " , PESO = " + DB.SQLString(row.Field<decimal>("PESO")) +
1635  " WHERE EMPRESA = " + DB.SQLString(row.Field<string>("EMPRESA")) +
1636  " AND ALMACEN = " + DB.SQLString(row.Field<string>("ALMACEN")) +
1637  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1638  " AND DOCUMENTO = " + DB.SQLString(lcDocumento) +
1639  " AND LINIA = " + DB.SQLString(lnLinia);
1640 
1641  DB.SQLExec(lcSql);
1642  }
1643  }
1644 
1645  lcSql = " SELECT * FROM " + DB.SQLDatabase("GESTION", "REGULARI") +
1646  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("EMPRESA")) +
1647  " AND ALMACEN = " + DB.SQLString(item.Field<string>("ALMACEN")) +
1648  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1649  " AND DOCUMENTO = " + DB.SQLString(lcDocumento);
1650  DB.SQLExec(lcSql, ref ldtRegulari);
1651 
1652  lcSql = " SELECT * FROM " + DB.SQLDatabase("LOTES", "LTREGUL") +
1653  " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("EMPRESA")) +
1654  " AND ALMACEN = " + DB.SQLString(item.Field<string>("ALMACEN")) +
1655  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1656  " AND DOCUMENTO = " + DB.SQLString(lcDocumento);
1657 
1658  DB.SQLExec(lcSql, ref ldtLtregul);
1659 
1660  lcOldCodi = item.Field<string>("EMPRESA") + item.Field<string>("ALMACEN");
1661  }
1662 
1663 
1664  lcFiltroArticulo = "ARTICULO = '" + item.Field<string>("ARTICULO").Trim() + "' and TALLA = '" + item.Field<string>("TALLA").Trim() + "' and COLOR = '" + item.Field<string>("COLOR").Trim() + "'";
1665  lcFiltroLotes = " and LOTE = '" + item.Field<string>("LOTE").Trim() + "'";
1666 
1667  llTrobat = false;
1668 
1669  DataRow[] rowstr = ldtRegulari.Select(lcFiltroArticulo);
1670 
1671  if (rowstr.Length == 1)
1672  {
1673  rowstr[0]["UNIDADES"] = Convert.ToDecimal(rowstr[0]["UNIDADES"]) - item.Field<decimal>("UNIDADES");
1674  rowstr[0]["PESO"] = Convert.ToDecimal(rowstr[0]["PESO"]) - item.Field<decimal>("PESO");
1675 
1676  lnLinia = Convert.ToInt32(rowstr[0]["LINIA"]);
1677  llTrobat = true;
1678  }
1679 
1680  if (llTrobat)
1681  {
1682  lcFiltroArticulo = lcFiltroArticulo + lcFiltroLotes + " AND LINIA = " + DB.SQLString(lnLinia);
1683 
1684  DataRow[] rowstrLotes = ldtLtregul.Select(lcFiltroArticulo);
1685 
1686  if (rowstrLotes.Length == 1)
1687  {
1688  rowstrLotes[0]["UNIDADES"] = Convert.ToDecimal(rowstrLotes[0]["UNIDADES"]) - item.Field<decimal>("UNIDADES");
1689  rowstrLotes[0]["PESO"] = Convert.ToDecimal(rowstrLotes[0]["PESO"]) - item.Field<decimal>("PESO");
1690 
1691  }
1692  }
1693  }
1694 
1695  // Actualizar datos
1696  foreach (DataRow row in ldtRegulari.Rows)
1697  {
1698  lcSql = " UPDATE " + DB.SQLDatabase("GESTION", "REGULARI") +
1699  " SET UNIDADES = " + DB.SQLString(row.Field<decimal>("UNIDADES")) +
1700  " , PESO = " + DB.SQLString(row.Field<decimal>("PESO")) +
1701  " WHERE EMPRESA = " + DB.SQLString(row.Field<string>("EMPRESA")) +
1702  " AND ALMACEN = " + DB.SQLString(row.Field<string>("ALMACEN")) +
1703  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1704  " AND DOCUMENTO = " + DB.SQLString(lcDocumento);
1705 
1706  DB.SQLExec(lcSql);
1707  }
1708 
1709  // Actualizar datos
1710  foreach (DataRow row in ldtLtregul.Rows)
1711  {
1712  lcSql = " UPDATE " + DB.SQLDatabase("LOTES", "LTREGUL") +
1713  " SET UNIDADES = " + DB.SQLString(row.Field<decimal>("UNIDADES")) +
1714  " , PESO = " + DB.SQLString(row.Field<decimal>("PESO")) +
1715  " WHERE EMPRESA = " + DB.SQLString(row.Field<string>("EMPRESA")) +
1716  " AND ALMACEN = " + DB.SQLString(row.Field<string>("ALMACEN")) +
1717  " AND FECHA = " + DB.SQLString(tdFechaMaxima) +
1718  " AND DOCUMENTO = " + DB.SQLString(lcDocumento) +
1719  " AND LOTE = " + DB.SQLString(row.Field<string>("LOTE")) +
1720  " AND LINIA = " + DB.SQLString(row.Field<int>("LINIA"));
1721 
1722  DB.SQLExec(lcSql);
1723  }
1724  }
1725  }
1726 
1727  private static void ImportarStocklotesRegulari(DataRow row)
1728  {
1729  string lcSql = " Insert Into " + DB.SQLDatabase("GESTION", "REGULARI") + Environment.NewLine +
1730  " (EMPRESA, ALMACEN, DOCUMENTO, FECHA, FECHASTOCK, OBSERVACIONES, ARTICULO, UNIDADES, LINIA, PMSTOCK, PMCOM, TALLA, COLOR, PESO) " + Environment.NewLine +
1731  " Values(" +
1732  DB.SQLString(row.Field<string>("empresa")) + ", " +
1733  DB.SQLString(row.Field<string>("almacen")) + ", " +
1734  DB.SQLString(row.Field<string>("documento")) + ", " +
1735  DB.SQLString(row.Field<DateTime>("fecha")) + ", " +
1736  DB.SQLString(row.Field<DateTime>("fechastock")) + ", " +
1737  DB.SQLString(row.Field<string>("observaciones")) + ", " +
1738  DB.SQLString(row.Field<string>("articulo")) + ", " +
1739  DB.SQLString(row.Field<decimal>("unidades")) + ", " +
1740  DB.SQLString(row.Field<int>("linia")) + ", " +
1741  DB.SQLString(row.Field<decimal>("pmstock")) + ", " +
1742  DB.SQLString(row.Field<decimal>("pmcom")) + ", " +
1743  DB.SQLString(row.Field<string>("talla")) + ", " +
1744  DB.SQLString(row.Field<string>("color")) + ", " +
1745  DB.SQLString(row.Field<decimal>("peso")) + ")" + Environment.NewLine;
1746  DB.SQLExec(lcSql);
1747  }
1748 
1749  private static void ImportarStocklotesLtregul(DataRow row)
1750  {
1751  string lcSql = " Insert Into " + DB.SQLDatabase("LOTES", "LTREGUL") + Environment.NewLine +
1752  "(EMPRESA,ALMACEN,FECHA,LINIA,DOCUMENTO,ARTICULO,LOTE,UNIDADES,CADUCIDAD,FECHA2,PESO,TALLA,COLOR) " + Environment.NewLine +
1753  " Values(" +
1754  DB.SQLString(row.Field<string>("empresa")) + ", " +
1755  DB.SQLString(row.Field<string>("almacen")) + ", " +
1756  DB.SQLString(row.Field<DateTime>("fecha")) + ", " +
1757  DB.SQLString(row.Field<int>("linia")) + ", " +
1758  DB.SQLString(row.Field<string>("documento")) + ", " +
1759  DB.SQLString(row.Field<string>("articulo")) + ", " +
1760  DB.SQLString(row.Field<string>("lote")) + ", " +
1761  DB.SQLString(row.Field<decimal>("unidades")) + ", " +
1762  DB.SQLString(row.Field<DateTime?>("caducidad")) + ", " +
1763  DB.SQLString(row.Field<DateTime>("fecha")) + ", " +
1764  DB.SQLString(row.Field<decimal>("peso")) + ", " +
1765  DB.SQLString(row.Field<string>("talla")) + ", " +
1766  DB.SQLString(row.Field<string>("color")) + ")" + Environment.NewLine;
1767  DB.SQLExec(lcSql);
1768  }
1769 
1770  private static bool ImportarLotesDocumentos(RegistroTabRel registro)
1771  {
1772  bool llNoFerRes = false;
1773 
1774  string lcAlmacen = string.Empty;
1775  decimal lnUnidades = 0M;
1776  decimal lnPeso = 0M;
1777 
1778  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBPrincipal);
1779  string lcDbReal2 = clsOfflineUtils.ObtenerNombreBdReal(registro._DBSecundaria);
1780 
1781  // Primer creem la taula si no existeix
1782  DB.SQLExec("SELECT * FROM " + DB.SQLDatabase("LOTES", "STOCKLOTES") + " WHERE 1 = 2 ", ref _dtStockLotesOffline);
1783 
1784  DataTable ldtDatos = new DataTable();
1785  DB.SQLExec("SELECT * FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo.[_Secundaria] ", ref ldtDatos);
1786 
1787  foreach (DataRow item in ldtDatos.Rows)
1788  {
1789  if (item.Field<DateTime>("fecha") == DateTime.Today)
1790  {
1791  llNoFerRes = false;
1792 
1793 
1794  //**********************************
1795  //** Lotes de los documentos *******
1796  //**********************************
1797  switch (registro._TablaSecundaria)
1798  {
1799  case "LTALBTR":
1800 
1801  // Faig el cas especial, per la part del magatzem desti
1802  DataRow[] rowstr = _dtStockLotesOffline.Select("empresa = '" + item.Field<string>("EMPRESA") + "' " +
1803  " and articulo = '" + item.Field<string>("ARTICULO") + "' " +
1804  " and talla = '" + item.Field<string>("TALLA") + "' " +
1805  " and color = '" + item.Field<string>("COLOR") + "' " +
1806  " and lote = '" + item.Field<string>("LOTE") + "' " +
1807  " and almacen = '" + item.Field<string>("ALMDEST") + "' ");
1808 
1809  if (rowstr.Length == 0)
1810  {
1811  DataRow newRow = _dtStockLotesOffline.NewRow();
1812 
1813  newRow["EMPRESA"] = item.Field<string>("EMPRESA");
1814  newRow["ALMACEN"] = item.Field<string>("almdest");
1815  newRow["FECHA"] = DateTime.Today;
1816  newRow["ARTICULO"] = item.Field<string>("articulo");
1817 
1818  newRow["UNIDADES"] = item.Field<decimal>("unidades");
1819  newRow["PESO"] = item.Field<decimal>("peso");
1820 
1821  newRow["TALLA"] = item.Field<string>("TALLA");
1822  newRow["COLOR"] = item.Field<string>("COLOR");
1823 
1824  newRow["LOTE"] = item.Field<string>("lote");
1825 
1826  if (item.Field<DateTime?>("caducidad") != null)
1827  {
1828  newRow["CADUCIDAD"] = item.Field<DateTime?>("caducidad");
1829  }
1830 
1831  }
1832  else
1833  {
1834  rowstr[0]["UNIDADES"] = Convert.ToDecimal(rowstr[0]["UNIDADES"]) + item.Field<decimal>("UNIDADES");
1835  rowstr[0]["PESO"] = Convert.ToDecimal(rowstr[0]["PESO"]) + item.Field<decimal>("PESO");
1836  }
1837 
1838  lcAlmacen = item.Field<string>("ALMORIG");
1839  lnUnidades = (-1) * item.Field<decimal>("UNIDADES");
1840  lnPeso = (-1) * item.Field<decimal>("PESO");
1841 
1842  break;
1843 
1844 
1845  case "LTALBCO":
1846  case "LTPEDCO":
1847  case "LTCPROD":
1848  case "LTDTRAN":
1849  case "LTDEPCO":
1850 
1851  lcAlmacen = item.Field<string>("ALMACEN");
1852  lnUnidades = item.Field<decimal>("UNIDADES");
1853  lnPeso = item.Field<decimal>("PESO");
1854  break;
1855 
1856 
1857  case "LTALBRE":
1858  case "LTDEPVE":
1859  case "LTALBVE":
1860  case "LTPEDVE":
1861  case "LTDPROD":
1862  case "LTCTRAN":
1863 
1864  // Els documents de sortida d'stock, resten
1865 
1866  lcAlmacen = item.Field<string>("ALMACEN");
1867  lnUnidades = (-1) * item.Field<decimal>("UNIDADES");
1868  lnPeso = (-1) * item.Field<decimal>("PESO");
1869 
1870  break;
1871 
1872 
1873  case "LTREGUL":
1874  case "LTSTINI":
1875 
1876  // Amb els inventaris, no s'hauria de fer res
1877  llNoFerRes = true;
1878  lnUnidades = 0M;
1879  lnPeso = 0M;
1880  break;
1881 
1882  }
1883 
1884  if (!llNoFerRes)
1885  {
1886  DataRow[] rows = _dtStockLotesOffline.Select("empresa = '" + item.Field<string>("EMPRESA") + "' " +
1887  " and articulo = '" + item.Field<string>("ARTICULO") + "' " +
1888  " and talla = '" + item.Field<string>("TALLA") + "' " +
1889  " and color = '" + item.Field<string>("COLOR") + "' " +
1890  " and lote = '" + item.Field<string>("LOTE") + "' " +
1891  " and almacen = '" + lcAlmacen + "' ");
1892 
1893  if (rows.Length == 0)
1894  {
1895  DataRow newRow = _dtStockLotesOffline.NewRow();
1896 
1897  newRow["EMPRESA"] = item.Field<string>("EMPRESA");
1898  newRow["ALMACEN"] = lcAlmacen;
1899  newRow["FECHA"] = DateTime.Today;
1900  newRow["ARTICULO"] = item.Field<string>("articulo");
1901 
1902  newRow["UNIDADES"] = lnUnidades;
1903  newRow["PESO"] = lnPeso;
1904 
1905  newRow["TALLA"] = item.Field<string>("TALLA");
1906  newRow["COLOR"] = item.Field<string>("COLOR");
1907 
1908  newRow["LOTE"] = item.Field<string>("lote");
1909 
1910  if (item.Field<DateTime?>("caducidad") != null)
1911  {
1912  newRow["CADUCIDAD"] = item.Field<DateTime?>("caducidad");
1913  }
1914 
1915  _dtStockLotesOffline.Rows.Add(newRow);
1916  }
1917  else
1918  {
1919  rows[0]["UNIDADES"] = Convert.ToDecimal(rows[0]["UNIDADES"]) + lnUnidades;
1920  rows[0]["PESO"] = Convert.ToDecimal(rows[0]["PESO"]) + lnPeso;
1921  }
1922  }
1923  }
1924  }
1925 
1926  return true;
1927  }
1928 
1929 
1930  private static bool TratamientoEspecialRecepcion(OfflineDatosComunicaciones datos, ref RegistroTabRel registro, ILog_comoffRepository logRepository)
1931  {
1932  bool llRetorn = false;
1933 
1934  // Genero les taules temporals per poder fer els DELETEs/ INSERTs
1935  if (!string.IsNullOrWhiteSpace(registro._DBPrincipal))
1936  {
1937  llRetorn = CrearTablaTemporal(registro._DBPrincipal, registro._TablaPrincipal, registro._Sufijo, registro._Empresa, true);
1938 
1939  if (!llRetorn)
1940  {
1941  Log_comoffDto logDto = logRepository.GetDto(datos);
1942  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato(registro._Clave);
1943  logDto.Resultado = 3;
1944  logDto.Detalle = "No existe la tabla " + registro._DBPrincipal + "!" + registro._TablaPrincipal + " en el fichero recibido.";
1945  logRepository.Insert(logDto);
1946 
1947  registro._DBPrincipal = "";
1948  registro._TablaPrincipal = "";
1949 
1950 
1951  }
1952  }
1953 
1954  // Genero les taules temporals per poder fer els DELETEs/ INSERTs
1955  if (!string.IsNullOrWhiteSpace(registro._DBSecundaria))
1956  {
1957  llRetorn = CrearTablaTemporal(registro._DBSecundaria, registro._TablaSecundaria, registro._Sufijo, registro._EmpresaSecundaria, false);
1958 
1959  if (!llRetorn)
1960  {
1961  Log_comoffDto logDto = logRepository.GetDto(datos);
1962  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato(registro._Clave);
1963  logDto.Resultado = 3;
1964  logDto.Detalle = "No existe la tabla " + registro._DBSecundaria + "!" + registro._TablaSecundaria + " en el fichero recibido.";
1965  logRepository.Insert(logDto);
1966 
1967  registro._DBSecundaria = "";
1968  registro._TablaSecundaria = "";
1969  }
1970  }
1971 
1972  //** tot això no ho tinc molt clar, de moment
1973  switch (registro._TablaPrincipal)
1974  {
1975  case "ENTIDAD":
1976 
1977  // No importar carta pagaré
1978  llRetorn = ImportarEntidad(registro);
1979 
1980  break;
1981 
1982  case "CAJAS":
1983 
1984  // No importar configuració d'impressores, displays, etc...
1985  llRetorn = ImportarCajas(registro);
1986 
1987  break;
1988 
1989  case "ACCESOS":
1990 
1991  if (!datos._IsCentral)
1992  {
1993  // Eliminar tots els accesos i tornar - los a carregar
1994  llRetorn = ImportarAccesos(registro);
1995  }
1996  break;
1997 
1998  case "CONFTICK":
1999 
2000  // No importar los contadores del TPV, si no se importan los contadores generales
2001  //llRetorn = ImportarConfTick(registro);
2002  break;
2003 
2004  case "C_ALBVEN":
2005  case "C_ALBCOM":
2006 
2007  // Separar los albaranes de las facturas
2008  llRetorn = ImportarAlbaranesFacturas(registro);
2009  break;
2010 
2011  default:
2012  llRetorn = true;
2013  break;
2014  }
2015 
2016 
2017  switch (registro._TablaSecundaria)
2018  {
2019  case "STOCKLOTES":
2020 
2021  if (!datos._IsCentral)
2022  {
2023  llRetorn = ImportarStocklotes(registro);
2024  }
2025  break;
2026 
2027  case "LTALBRE":
2028  case "LTALBTR":
2029  case "LTALBCO":
2030  case "LTDEPVE":
2031  case "LTALBVE":
2032  case "LTPEDCO":
2033  case "LTPEDVE":
2034  case "LTREGUL":
2035  case "LTSTINI":
2036  case "LTCPROD":
2037  case "LTDPROD":
2038  case "LTCTRAN":
2039  case "LTDTRAN":
2040  case "LTDEPCO":
2041 
2042  if (!datos._IsCentral)
2043  {
2044  llRetorn = ImportarLotesDocumentos(registro);
2045  }
2046  break;
2047 
2048  case "FCFACTUVEN":
2049  case "FCTICKETS":
2050  // llRetorn = this.recibir_xml_facturacion_certificada(tcSucursal, lcTbSecun)
2051  break;
2052 
2053  case "UNIUSERS":
2054 
2055  llRetorn = ImportarUniUsers(registro);
2056  break;
2057 
2058  case "ACCESOGRUP":
2059 
2060  llRetorn = ImportarAccesoGrup(registro);
2061  break;
2062 
2063 
2064  default:
2065 
2066  llRetorn = true;
2067  break;
2068  }
2069 
2070  return llRetorn;
2071  }
2072 
2073 
2074 
2075  private static bool ActualizarDatosRecepcion(OfflineDatosComunicaciones datos, RegistroTabRel registro, ILog_comoffRepository logRepository, bool tlAuxiliar = false)
2076  {
2077  string lcIndice = string.Empty;
2078  string lcTaulaTemp = string.Empty;
2079  string lcTaulaIns = string.Empty;
2080  string lcTaulaLocal = string.Empty;
2081  string lcTaulaLocalAux = string.Empty;
2082  string lcIndiceAux = string.Empty;
2083  string lcCadenaCamps = string.Empty;
2084  string lcCadenaOutput = string.Empty;
2085 
2086  string lcSetCampos = string.Empty;
2087 
2088  string lcSql = string.Empty;
2089  string lcdbReal = string.Empty;
2090  string lcCondicion = string.Empty;
2091  string lcCondicionAux = string.Empty;
2092 
2093  string lcDb = string.Empty;
2094  string lcTaula = string.Empty;
2095  string lcDbAux = string.Empty;
2096  string lcTaulaAux = string.Empty;
2097 
2098  bool llOk = false;
2099 
2100  //si som secundaria, s'han de tractar els registres coincidents de la inserció
2101  //Index de la taula on es s'ha de fer el lligam
2102  if (tlAuxiliar)
2103  {
2104  lcDb = registro._DBSecundaria;
2105  lcTaula = registro._TablaSecundaria + registro._Sufijo;
2106  lcTaulaLocal = registro._TablaSecundaria;
2107 
2108  //Index de la taula a tractar
2109  lcCadenaCamps = ObtenerCamposSelect(lcDb, lcTaula);
2110  lcCadenaOutput = ObtenerCamposSelect(lcDb, lcTaula, "b.", true);
2111  lcSetCampos = ObtenerCamposSet(lcDb, lcTaula);
2112  lcIndice = ObtenerCamposIndices(lcDb, lcTaulaLocal);
2113 
2114  lcTaulaTemp = "_Secundaria";
2115  lcTaulaIns = "_InsertSecun";
2116 
2117  if (string.IsNullOrWhiteSpace(registro._DBPrincipal))
2118  {
2119  switch (registro._TablaSecundaria)
2120  {
2121  case "ASIENTOS":
2122 
2123  // Si es la tabla ASIENTOS, no hacemos nada.
2124  return true;
2125 
2126  case "CTRL_PARCO":
2127 
2128  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2129 
2130  lcSql = " SELECT empresa, numero, linia, ejercicio, MAX(origen) AS ORIGEN, MAX(guid_id) AS GUID_ID, MAX(idtabrel) AS IDTABREL, MAX(created) AS CREATED, MAX(modified) AS MODIFIED " +
2131  " into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2132  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2133  " GROUP BY empresa, numero, linia, ejercicio ";
2134  DB.SQLExec(lcSql);
2135 
2136  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2137 
2138  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2139  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2140  DB.SQLExec(lcSql);
2141 
2142  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2143  break;
2144 
2145  default:
2146 
2147  break;
2148  }
2149  }
2150  else
2151  {
2152  lcDbAux = registro._DBPrincipal;
2153  lcTaulaAux = registro._TablaPrincipal + registro._Sufijo;
2154  lcTaulaLocalAux = registro._TablaPrincipal;
2155 
2156  lcIndiceAux = ObtenerInnerOn(lcDbAux, lcDb, lcTaulaLocalAux, lcTaulaLocal, registro._Relacion, registro._Clave, datos, logRepository);
2157 
2158  if (string.IsNullOrWhiteSpace(lcIndiceAux))
2159  {
2160  lcIndiceAux = ObtenerCamposIndices(lcDb, lcTaulaLocalAux);
2161  }
2162 
2163  if (!registro._Sobreescribir)
2164  {
2165  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_InsertPrin]"))
2166  {
2167  // la condicion només l'aplicarem sobre el primer camp
2168  lcCondicionAux = lcIndiceAux.Trim();
2169  lcCondicionAux = lcCondicionAux.Substring(0, lcCondicionAux.IndexOf('='));
2170 
2171  switch (registro._TablaSecundaria)
2172  {
2173  case "D_PEDIVE":
2174 
2175  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2176 
2177  break;
2178 
2179  case "D_PEDICO":
2180 
2181  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2182 
2183  break;
2184 
2185  case "D_ALBDEP":
2186 
2187  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2188  TratamientoEspecial_DepositosVenta(lcDb, registro._Sobreescribir);
2189 
2190  break;
2191 
2192  case "D_DEPCOM":
2193 
2194  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2195  TratamientoEspecial_DepositosCompra(lcDb, registro._Sobreescribir);
2196 
2197  break;
2198 
2199  case "D_ALBVEN":
2200 
2201  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2202  TratamientoEspecial_DepositosVenta(lcDb, registro._Sobreescribir);
2203  TratamientoEspecial_AlbaranesVenta(lcDb, registro._Sobreescribir);
2204 
2205  if (registro._Clave == "FACTURAS")
2206  {
2207  TratamientoEspecial_FacturasVenta(lcDb, registro._Sobreescribir);
2208  }
2209 
2210  break;
2211 
2212  case "D_ALBCOM":
2213 
2214  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2215  TratamientoEspecial_DepositosCompra(lcDb, registro._Sobreescribir);
2216  TratamientoEspecial_AlbaranesCompra(lcDb, registro._Sobreescribir);
2217 
2218  if (registro._Clave == "FACTURAC")
2219  {
2220  TratamientoEspecial_FacturasCompra(lcDb, registro._Sobreescribir);
2221  }
2222 
2223  break;
2224 
2225 
2226  case "ASIENTOS":
2227 
2228  string lcCampoAsi = "ASI";
2229 
2230  switch (registro._ID)
2231  {
2232  case 285:
2233 
2234  lcCampoAsi = "ASI_TRANS";
2235  break;
2236 
2237  case 286:
2238 
2239  lcCampoAsi = "ASI_DUA";
2240  break;
2241  }
2242 
2243  if (registro._Clave == "FACTURAS" || registro._Clave == "FACTURAC")
2244  {
2245  lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDbAux);
2246  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2247 
2248  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2249  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2250  " INNER JOIN ( " +
2251  " SELECT b.empresa, b.numero " +
2252  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2253  " INNER JOIN [" + lcdbReal + "].dbo.[" + lcTaulaLocalAux + "] a ON A.EMPRESA = B.EMPRESA And A.ASI = B.ASI " +
2254  " ) b " +
2255  " ON A.EMPRESA = B.EMPRESA AND A.numero = B.numero ";
2256 
2257  DB.SQLExec(lcSql);
2258 
2259  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2260 
2261  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2262  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2263  DB.SQLExec(lcSql);
2264 
2265  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2266  }
2267  else
2268  {
2269  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2270 
2271  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2272  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2273  " INNER JOIN ( " +
2274  " SELECT DISTINCT b.empresa, b.numero " +
2275  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2276  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_InsertPrin] a ON A.EMPRESA = B.EMPRESA And A." + lcCampoAsi + " = B.ASI ) b " +
2277  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2278 
2279  DB.SQLExec(lcSql);
2280 
2281  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2282 
2283  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2284  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2285  DB.SQLExec(lcSql);
2286 
2287  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2288  }
2289 
2290  ImportarAsientos(datos, registro, logRepository);
2291 
2292  break;
2293 
2294  case "ENTREGAS":
2295 
2296  if (registro._Clave == "FACTURAS" || registro._Clave == "FACTURAC")
2297  {
2298  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2299 
2300  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2301  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2302  " INNER JOIN ( " +
2303  " SELECT b.empresa, b.albaran, b.letra " +
2304  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2305  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_InsertPrin] a ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.ALBARAN " + (registro._Clave == "FACTURAS" ? " AND A.LETRA = B.LETRA " : "") + " ) b " +
2306  " ON A.EMPRESA = B.EMPRESA AND A.ALBARAN = B.ALBARAN " + (registro._Clave == "FACTURAS" ? " AND A.LETRA = B.LETRA " : "");
2307 
2308  DB.SQLExec(lcSql);
2309 
2310  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2311 
2312  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2313  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2314  DB.SQLExec(lcSql);
2315 
2316  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2317  }
2318  else
2319  {
2320  lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDbAux);
2321  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2322 
2323  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2324  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2325  " INNER JOIN ( " +
2326  " SELECT b.empresa, b.albaran, b.letra " +
2327  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2328  " INNER JOIN [" + lcdbReal + "].dbo.[" + lcTaulaLocalAux + "] a ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.ALBARAN AND A.LETRA = B.LETRA " +
2329  " ) b " +
2330  " ON A.EMPRESA = B.EMPRESA AND A.ALBARAN = B.ALBARAN AND A.LETRA = B.LETRA ";
2331 
2332  DB.SQLExec(lcSql);
2333 
2334  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2335 
2336  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2337  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2338  DB.SQLExec(lcSql);
2339 
2340  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2341  }
2342 
2343  break;
2344 
2345  case "ENTRE_PR":
2346  case "ENTRE_PV":
2347 
2348  lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDbAux);
2349  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2350 
2351  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2352  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2353  " INNER JOIN ( " +
2354  " SELECT b.empresa, b.numero, b.letra " +
2355  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2356  " INNER JOIN [" + lcdbReal + "].dbo.[" + lcTaulaLocalAux + "] a ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO AND A.LETRA = B.LETRA " +
2357  " ) b " +
2358  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.LETRA ";
2359 
2360  DB.SQLExec(lcSql);
2361 
2362  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2363 
2364  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2365  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2366  DB.SQLExec(lcSql);
2367 
2368  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2369 
2370  break;
2371 
2372  default:
2373 
2374  if (registro._Clave == "FACTURAS" || registro._Clave == "FACTURAC")
2375  {
2376  lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDbAux);
2377  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2378 
2379  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2380  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2381  " INNER JOIN ( " +
2382  " SELECT b.* " +
2383  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2384  " INNER JOIN [" + lcdbReal + "].dbo.[" + lcTaulaLocalAux + "] a ON " + lcIndiceAux +
2385  " ) b " +
2386  " ON " + lcIndice;
2387 
2388  DB.SQLExec(lcSql);
2389 
2390  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2391 
2392  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2393  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2394  DB.SQLExec(lcSql);
2395 
2396  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2397  }
2398  else
2399  {
2400  lcSql = " DELETE FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2401  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2402  " LEFT JOIN [" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_InsertPrin] a " +
2403  " ON " + lcIndiceAux +
2404  " WHERE " + lcCondicionAux + " is null ";
2405 
2406  DB.SQLExec(lcSql);
2407  }
2408 
2409  break;
2410  }
2411  }
2412  }
2413  else
2414  {
2415  switch (registro._TablaSecundaria)
2416  {
2417  case "D_PEDIVE":
2418 
2419  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2420 
2421  break;
2422 
2423  case "D_PEDICO":
2424 
2425  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2426 
2427  break;
2428 
2429  case "D_ALBDEP":
2430 
2431  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2432  TratamientoEspecial_DepositosVenta(lcDb, registro._Sobreescribir);
2433 
2434  break;
2435 
2436  case "D_DEPCOM":
2437 
2438  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2439  TratamientoEspecial_DepositosCompra(lcDb, registro._Sobreescribir);
2440 
2441  break;
2442 
2443  case "D_ALBVEN":
2444 
2445  TratamientoEspecial_PedidosVenta(lcDb, registro._Sobreescribir);
2446  TratamientoEspecial_DepositosVenta(lcDb, registro._Sobreescribir);
2447  TratamientoEspecial_AlbaranesVenta(lcDb, registro._Sobreescribir);
2448 
2449  if (registro._Clave == "FACTURAS")
2450  {
2451  TratamientoEspecial_FacturasVenta(lcDb, registro._Sobreescribir);
2452  }
2453 
2454  break;
2455 
2456  case "D_ALBCOM":
2457 
2458  TratamientoEspecial_PedidosCompra(lcDb, registro._Sobreescribir);
2459  TratamientoEspecial_DepositosCompra(lcDb, registro._Sobreescribir);
2460  TratamientoEspecial_AlbaranesCompra(lcDb, registro._Sobreescribir);
2461 
2462  if (registro._Clave == "FACTURAC")
2463  {
2464  TratamientoEspecial_FacturasCompra(lcDb, registro._Sobreescribir);
2465  }
2466 
2467  break;
2468 
2469 
2470 
2471  case "ASIENTOS":
2472 
2473 
2474  string lcCampoAsi = "ASI";
2475 
2476  switch (registro._ID)
2477  {
2478  case 285:
2479 
2480  lcCampoAsi = "ASI_TRANS";
2481  break;
2482 
2483  case 286:
2484 
2485  lcCampoAsi = "ASI_DUA";
2486  break;
2487  }
2488 
2489  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2490 
2491  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2492  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2493  " INNER JOIN ( " +
2494  " SELECT DISTINCT b.empresa, b.numero " +
2495  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2496  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_Principal] a ON A.EMPRESA = B.EMPRESA And A." + lcCampoAsi + " = B.ASI ) b " +
2497  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2498 
2499  DB.SQLExec(lcSql);
2500 
2501  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2502 
2503  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2504  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2505  DB.SQLExec(lcSql);
2506 
2507  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2508 
2509  ImportarAsientos(datos, registro, logRepository);
2510 
2511  break;
2512 
2513  case "ENTREGAS":
2514 
2515  if (registro._Clave == "FACTURAS" || registro._Clave == "FACTURAC")
2516  {
2517 
2518  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2519 
2520  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2521  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2522  " INNER JOIN ( " +
2523  " SELECT b.empresa, b.albaran, b.letra " +
2524  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] b " +
2525  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Principal] a ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.ALBARAN " + (registro._Clave == "FACTURAS" ? " AND A.LETRA = B.LETRA " : "") + " ) b " +
2526  " ON A.EMPRESA = B.EMPRESA AND A.ALBARAN = B.ALBARAN " + (registro._Clave == "FACTURAS" ? " AND A.LETRA = B.LETRA " : "");
2527 
2528  DB.SQLExec(lcSql);
2529 
2530  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria]");
2531 
2532  lcSql = " SELECT * INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] " +
2533  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] ";
2534  DB.SQLExec(lcSql);
2535 
2536  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2537  }
2538  break;
2539 
2540  }
2541  }
2542  }
2543  }
2544  else
2545  {
2546  lcDb = registro._DBPrincipal;
2547  lcTaula = registro._TablaPrincipal + registro._Sufijo;
2548  lcTaulaLocal = registro._TablaPrincipal;
2549 
2550  //Index de la taula a tractar
2551  lcCadenaCamps = ObtenerCamposSelect(lcDb, lcTaula);
2552  lcCadenaOutput = ObtenerCamposSelect(lcDb, lcTaula, "b.", true);
2553  lcSetCampos = ObtenerCamposSet(lcDb, lcTaula);
2554  lcIndice = ObtenerCamposIndices(lcDb, lcTaulaLocal);
2555 
2556  lcTaulaTemp = "_Principal";
2557  lcTaulaIns = "_InsertPrin";
2558  }
2559 
2560  _TextStepDetalle = "Recibiendo datos tabla " + lcDb + "!" + lcTaulaLocal;
2561  _TextStepProgreso = _TextStepDetalle;
2562  _PorcenProgreso = IncrementarBarraProgreso();
2563 
2564  //** Busquem el nom de la base de dades real i el propietari
2565  lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
2566 
2567 
2568  ActualizarDatosRecepcionEspecial(datos, registro, lcTaulaTemp, lcTaulaLocal, lcDb, lcTaula, logRepository);
2569 
2570  if (registro._TablaSecundaria == "CTRL_ASIEN" && clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_ControlAsientos]"))
2571  {
2572  lcTaulaTemp = "_ControlAsientos";
2573  }
2574 
2575  if (registro._Sobreescribir)
2576  {
2577  DataTable ldtUpdate = new DataTable();
2578 
2579  lcSql = " UPDATE [" + lcdbReal + "].dbo.[" + lcTaulaLocal + "] " +
2580  " SET " + lcSetCampos +
2581  " OUTPUT " + lcCadenaOutput +
2582  " FROM [" + lcdbReal + "].dbo.[" + lcTaulaLocal + "] a " +
2583  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaTemp + "] b " +
2584  " ON " + lcIndice;
2585 
2586  DB.SQLExec(lcSql, ref ldtUpdate);
2587 
2588  if (ldtUpdate != null && ldtUpdate.Rows.Count > 0)
2589  {
2590  RegistroDatosRecepcion(datos, registro, ldtUpdate, lcTaulaLocal, lcDb, false, logRepository);
2591 
2592  llOk = true;
2593 
2594  conDatosStock = conDatosStock || clsOfflineUtils.EsTipoDatoDocumento(registro._Clave);
2595 
2596  if (tlAuxiliar)
2597  {
2598  TratamientoEspecialTablas(datos, registro, ldtUpdate, logRepository);
2599  }
2600  }
2601  }
2602 
2603  // S'ha tenir en compte si NO tenim prioritat, ja que només s'han d'insertar el registres que no hi són
2604  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "]");
2605 
2606  // la condicion només l'aplicarem sobre el primer camp
2607  lcCondicion = lcIndice.Trim();
2608  lcCondicion = lcCondicion.Substring(0, lcCondicion.IndexOf('='));
2609 
2610 
2611  // farem el FULL JOIN, per trobar els nous registres
2612  lcSql = "SELECT b.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "] " +
2613  " FROM [" + lcdbReal + "].dbo.[" + lcTaulaLocal + "] a " +
2614  " RIGHT JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaTemp + "] b " +
2615  " ON " + lcIndice +
2616  " WHERE " + lcCondicion + " is null ";
2617  DB.SQLExec(lcSql);
2618 
2619 
2620  // he de comprovar, que els registres estiguin dins de la cursor de dades Auxiliar
2621 
2622  if (tlAuxiliar && !string.IsNullOrWhiteSpace(lcDbAux))
2623  {
2624  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Control]");
2625 
2626 
2627  // la condicion només l'aplicarem sobre el primer camp
2628  lcCondicionAux = lcIndiceAux.Trim();
2629  lcCondicionAux = lcCondicionAux.Substring(0, lcCondicionAux.IndexOf('='));
2630 
2631 
2632  // Faig dos casos especials pels arquejos, més endavant s'haurà de repensar una mica
2633  switch (lcTaulaLocal)
2634  {
2635  case "ASIENTOS":
2636 
2637  string lcCampoAsi = "ASI";
2638 
2639  switch (registro._ID)
2640  {
2641  case 285:
2642 
2643  lcCampoAsi = "ASI_TRANS";
2644  break;
2645 
2646  case 286:
2647 
2648  lcCampoAsi = "ASI_DUA";
2649  break;
2650  }
2651 
2652  lcSql = " SELECT c.* INTO [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Control] " +
2653  " From [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "] as c " +
2654  " inner join ( " +
2655  " Select A.* " +
2656  " From [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "] as A " +
2657  " Where Exists ( " +
2658  " Select B.* " +
2659  " From [" + _cRaizDataBaseTemporal + lcDbAux + "].dbo.[_Principal] as B " +
2660  " Where A.EMPRESA = B.EMPRESA And A.ASI = B." + lcCampoAsi + " ) " +
2661  " ) d ON c.EMPRESA = d.EMPRESA AND c.NUMERO = d.NUMERO ";
2662 
2663  break;
2664 
2665  default:
2666 
2667  lcSql = string.Empty;
2668  break;
2669  }
2670 
2671  if (!string.IsNullOrWhiteSpace(lcSql))
2672  {
2673  DB.SQLExec(lcSql);
2674 
2675  lcTaulaIns = "_Control";
2676  }
2677  }
2678 
2679  // ******************************************************************************************************************************************
2680 
2681  // farem el insert
2682  DataTable ldtInsert = new DataTable();
2683  lcSql = "SELECT " + lcCadenaCamps + " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "] ";
2684  DB.SQLExec(lcSql, ref ldtInsert);
2685 
2686  if (ldtInsert != null && ldtInsert.Rows.Count > 0)
2687  {
2688  lcSql = "INSERT INTO [" + lcdbReal + "].dbo.[" + lcTaulaLocal + "] (" + lcCadenaCamps + ") " +
2689  "SELECT " + lcCadenaCamps + " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaIns + "] ";
2690  DB.SQLExec(lcSql);
2691 
2692  RegistroDatosRecepcion(datos, registro, ldtInsert, lcTaulaLocal, lcDb, true, logRepository);
2693 
2694  llOk = true;
2695 
2696  conDatosStock = conDatosStock || clsOfflineUtils.EsTipoDatoDocumento(registro._Clave);
2697 
2698  if (tlAuxiliar)
2699  {
2700  TratamientoEspecialTablas(datos, registro, ldtInsert, logRepository);
2701  }
2702  }
2703 
2704 
2705  // Eliminem la taula de la base de dades, en cas que sigui la principal
2706  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertSecun]");
2707  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Control]");
2708 
2709  return llOk;
2710  }
2711 
2712  private static void TratamientoEspecial_PedidosVenta(string lcDb, bool tlSobreescribir)
2713  {
2714  //** Busquem el nom de la base de dades real i el propietari
2715  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
2716  string lcSql = string.Empty;
2717 
2718  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PRESUV_ESPECIAL"))
2719  {
2720  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2721 
2722  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2723  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PRESUV_ESPECIAL a " +
2724  " INNER JOIN ( " +
2725  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2726  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2727  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2728  " WHERE a.DOC = 3) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2729 
2730  DB.SQLExec(lcSql);
2731 
2732  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_PRESUV] " +
2733  " SET " + ObtenerCamposSet(lcDb, "C_PRESUV_ESPECIAL") +
2734  " FROM [" + lcdbReal + "].dbo.[C_PRESUV] a " +
2735  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2736  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2737 
2738  DB.SQLExec(lcSql);
2739 
2740  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2741  }
2742 
2743  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PRESUV_ESPECIAL"))
2744  {
2745  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2746 
2747  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2748  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PRESUV_ESPECIAL a " +
2749  " INNER JOIN ( " +
2750  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2751  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2752  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2753  " WHERE a.DOC = 3) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2754 
2755  DB.SQLExec(lcSql);
2756 
2757  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_PRESUV] " +
2758  " SET " + ObtenerCamposSet(lcDb, "D_PRESUV_ESPECIAL") +
2759  " FROM [" + lcdbReal + "].dbo.[D_PRESUV] a " +
2760  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2761  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra AND A.LINIA = B.LINIA ";
2762 
2763  DB.SQLExec(lcSql);
2764 
2765  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2766  }
2767  }
2768 
2769  private static void TratamientoEspecial_PedidosCompra(string lcDb, bool tlSobreescribir)
2770  {
2771  // No hay nada que hacer
2772 
2773  }
2774 
2775  private static void TratamientoEspecial_DepositosVenta(string lcDb, bool tlSobreescribir)
2776  {
2777  //** Busquem el nom de la base de dades real i el propietari
2778  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
2779  string lcSql = string.Empty;
2780 
2781  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDIVE_ESPECIAL"))
2782  {
2783  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2784 
2785  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2786  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDIVE_ESPECIAL a " +
2787  " INNER JOIN ( " +
2788  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2789  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2790  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2791  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2792 
2793  DB.SQLExec(lcSql);
2794 
2795  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_PEDIVE] " +
2796  " SET " + ObtenerCamposSet(lcDb, "C_PEDIVE_ESPECIAL") +
2797  " FROM [" + lcdbReal + "].dbo.[C_PEDIVE] a " +
2798  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2799  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2800 
2801  DB.SQLExec(lcSql);
2802 
2803  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2804  }
2805 
2806  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDIVE_ESPECIAL"))
2807  {
2808  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2809 
2810  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2811  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDIVE_ESPECIAL a " +
2812  " INNER JOIN ( " +
2813  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2814  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2815  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2816  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2817 
2818  DB.SQLExec(lcSql);
2819 
2820  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_PEDIVE] " +
2821  " SET " + ObtenerCamposSet(lcDb, "D_PEDIVE_ESPECIAL") +
2822  " FROM [" + lcdbReal + "].dbo.[D_PEDIVE] a " +
2823  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2824  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra AND A.LINIA = B.LINIA ";
2825 
2826  DB.SQLExec(lcSql);
2827 
2828  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2829  }
2830 
2831  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBDEP_ESPECIAL"))
2832  {
2833  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2834 
2835  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2836  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBDEP_ESPECIAL a " +
2837  " INNER JOIN ( " +
2838  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2839  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2840  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2841  " WHERE a.DOC = 2) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2842 
2843  DB.SQLExec(lcSql);
2844 
2845  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_ALBDEP] " +
2846  " SET " + ObtenerCamposSet(lcDb, "C_ALBDEP_ESPECIAL") +
2847  " FROM [" + lcdbReal + "].dbo.[C_ALBDEP] a " +
2848  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2849  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2850 
2851  DB.SQLExec(lcSql);
2852 
2853  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2854  }
2855 
2856  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_ALBDEP_ESPECIAL"))
2857  {
2858  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2859 
2860  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2861  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_ALBDEP_ESPECIAL a " +
2862  " INNER JOIN ( " +
2863  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
2864  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2865  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
2866  " WHERE a.DOC = 2) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
2867 
2868  DB.SQLExec(lcSql);
2869 
2870  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_ALBDEP] " +
2871  " SET " + ObtenerCamposSet(lcDb, "D_ALBDEP_ESPECIAL") +
2872  " FROM [" + lcdbReal + "].dbo.[D_ALBDEP] a " +
2873  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2874  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra AND A.LINIA = B.LINIA ";
2875 
2876  DB.SQLExec(lcSql);
2877 
2878  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2879  }
2880  }
2881 
2882  private static void TratamientoEspecial_DepositosCompra(string lcDb, bool tlSobreescribir)
2883  {
2884  //** Busquem el nom de la base de dades real i el propietari
2885  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
2886  string lcSql = string.Empty;
2887 
2888  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDICO_ESPECIAL"))
2889  {
2890  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2891 
2892  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2893  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDICO_ESPECIAL a " +
2894  " INNER JOIN ( " +
2895  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
2896  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2897  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO AND A.PROVEEDOR = B.PROVEEDOR " : "") +
2898  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2899 
2900  DB.SQLExec(lcSql);
2901 
2902  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_PEDICO] " +
2903  " SET " + ObtenerCamposSet(lcDb, "C_PEDICO_ESPECIAL") +
2904  " FROM [" + lcdbReal + "].dbo.[C_PEDICO] a " +
2905  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2906  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2907 
2908  DB.SQLExec(lcSql);
2909 
2910  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2911  }
2912 
2913  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDICO_ESPECIAL"))
2914  {
2915  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2916 
2917  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2918  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDICO_ESPECIAL a " +
2919  " INNER JOIN ( " +
2920  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
2921  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2922  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.PROVEEDOR = B.PROVEEDOR " : "") +
2923  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2924 
2925  DB.SQLExec(lcSql);
2926 
2927  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_PEDICO] " +
2928  " SET " + ObtenerCamposSet(lcDb, "D_PEDICO_ESPECIAL") +
2929  " FROM [" + lcdbReal + "].dbo.[D_PEDICO] a " +
2930  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2931  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LINIA = B.LINIA ";
2932 
2933  DB.SQLExec(lcSql);
2934 
2935  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2936  }
2937 
2938  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_DEPCOM_ESPECIAL"))
2939  {
2940  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2941 
2942  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2943  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_DEPCOM_ESPECIAL a " +
2944  " INNER JOIN ( " +
2945  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
2946  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2947  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO AND A.PROVEEDOR = B.PROVEEDOR " : "") +
2948  " WHERE a.DOC = 3) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2949 
2950  DB.SQLExec(lcSql);
2951 
2952  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_DEPCOM] " +
2953  " SET " + ObtenerCamposSet(lcDb, "C_DEPCOM_ESPECIAL") +
2954  " FROM [" + lcdbReal + "].dbo.[C_DEPCOM] a " +
2955  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2956  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2957 
2958  DB.SQLExec(lcSql);
2959 
2960  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2961  }
2962 
2963  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_DEPCOM_ESPECIAL"))
2964  {
2965  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2966 
2967  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
2968  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_DEPCOM_ESPECIAL a " +
2969  " INNER JOIN ( " +
2970  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
2971  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
2972  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.PROVEEDOR = B.PROVEEDOR " : "") +
2973  " WHERE a.DOC = 3) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
2974 
2975  DB.SQLExec(lcSql);
2976 
2977  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_DEPCOM] " +
2978  " SET " + ObtenerCamposSet(lcDb, "D_DEPCOM_ESPECIAL") +
2979  " FROM [" + lcdbReal + "].dbo.[D_DEPCOM] a " +
2980  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
2981  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LINIA = B.LINIA ";
2982 
2983  DB.SQLExec(lcSql);
2984 
2985  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2986  }
2987  }
2988 
2989  private static void TratamientoEspecial_AlbaranesVenta(string lcDb, bool tlSobreescribir)
2990  {
2991  //** Busquem el nom de la base de dades real i el propietari
2992  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
2993  string lcSql = string.Empty;
2994 
2995  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDIVE_ESPECIAL"))
2996  {
2997  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
2998 
2999  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3000  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDIVE_ESPECIAL a " +
3001  " INNER JOIN ( " +
3002  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
3003  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3004  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
3005  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
3006 
3007  DB.SQLExec(lcSql);
3008 
3009  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_PEDIVE] " +
3010  " SET " + ObtenerCamposSet(lcDb, "C_PEDIVE_ESPECIAL") +
3011  " FROM [" + lcdbReal + "].dbo.[C_PEDIVE] a " +
3012  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3013  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
3014 
3015  DB.SQLExec(lcSql);
3016 
3017  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3018  }
3019 
3020  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDIVE_ESPECIAL"))
3021  {
3022  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3023 
3024  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3025  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDIVE_ESPECIAL a " +
3026  " INNER JOIN ( " +
3027  " SELECT DISTINCT a.empresa, SUBSTRING(a.DOC_NUM, 1, 10) as numero, SUBSTRING(a.doc_num, 11, 2) as letra " +
3028  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3029  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.LETRA = B.LETRA " : "") +
3030  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
3031 
3032  DB.SQLExec(lcSql);
3033 
3034  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_PEDIVE] " +
3035  " SET " + ObtenerCamposSet(lcDb, "D_PEDIVE_ESPECIAL") +
3036  " FROM [" + lcdbReal + "].dbo.[D_PEDIVE] a " +
3037  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3038  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra AND A.LINIA = B.LINIA ";
3039 
3040  DB.SQLExec(lcSql);
3041 
3042  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3043  }
3044  }
3045 
3046  private static void TratamientoEspecial_AlbaranesCompra(string lcDb, bool tlSobreescribir)
3047  {
3048  //** Busquem el nom de la base de dades real i el propietari
3049  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
3050  string lcSql = string.Empty;
3051 
3052  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDICO_ESPECIAL"))
3053  {
3054  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3055 
3056  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3057  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_PEDICO_ESPECIAL a " +
3058  " INNER JOIN ( " +
3059  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
3060  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3061  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO AND A.PROVEEDOR = B.PROVEEDOR " : "") +
3062  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
3063 
3064  DB.SQLExec(lcSql);
3065 
3066  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_PEDICO] " +
3067  " SET " + ObtenerCamposSet(lcDb, "C_PEDICO_ESPECIAL") +
3068  " FROM [" + lcdbReal + "].dbo.[C_PEDICO] a " +
3069  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3070  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
3071 
3072  DB.SQLExec(lcSql);
3073 
3074  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3075  }
3076 
3077  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDICO_ESPECIAL"))
3078  {
3079  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3080 
3081  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3082  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.D_PEDICO_ESPECIAL a " +
3083  " INNER JOIN ( " +
3084  " SELECT DISTINCT a.empresa, a.DOC_NUM as numero " +
3085  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3086  (!tlSobreescribir ? " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_InsertPrin] b ON A.EMPRESA = B.EMPRESA And A.NUMERO = B.NUMERO And A.PROVEEDOR = B.PROVEEDOR " : "") +
3087  " WHERE a.DOC = 1) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO ";
3088 
3089  DB.SQLExec(lcSql);
3090 
3091  lcSql = " UPDATE [" + lcdbReal + "].dbo.[D_PEDICO] " +
3092  " SET " + ObtenerCamposSet(lcDb, "D_PEDICO_ESPECIAL") +
3093  " FROM [" + lcdbReal + "].dbo.[D_PEDICO] a " +
3094  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3095  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LINIA = B.LINIA ";
3096 
3097  DB.SQLExec(lcSql);
3098 
3099  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3100  }
3101  }
3102 
3103  private static void TratamientoEspecial_FacturasVenta(string lcDb, bool tlSobreescribir)
3104  {
3105  //** Busquem el nom de la base de dades real i el propietari
3106  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
3107  string lcSql = string.Empty;
3108 
3109  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBVEN_ESPECIAL"))
3110  {
3111  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3112 
3113  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3114  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBVEN_ESPECIAL a " +
3115  " INNER JOIN ( " +
3116  " SELECT DISTINCT a.empresa, a.numero, a.letra " +
3117  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3118  " ) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.LETRA ";
3119 
3120  DB.SQLExec(lcSql);
3121 
3122  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_ALBVEN] " +
3123  " SET " + ObtenerCamposSet(lcDb, "C_ALBVEN_ESPECIAL") +
3124  " FROM [" + lcdbReal + "].dbo.[C_ALBVEN] a " +
3125  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3126  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.LETRA = B.letra ";
3127 
3128  DB.SQLExec(lcSql);
3129 
3130  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3131  }
3132  }
3133 
3134  private static void TratamientoEspecial_FacturasCompra(string lcDb, bool tlSobreescribir)
3135  {
3136  //** Busquem el nom de la base de dades real i el propietari
3137  string lcdbReal = clsOfflineUtils.ObtenerNombreBdReal(lcDb);
3138  string lcSql = string.Empty;
3139 
3140  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBCOM_ESPECIAL"))
3141  {
3142  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3143 
3144  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] " +
3145  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.C_ALBCOM_ESPECIAL a " +
3146  " INNER JOIN ( " +
3147  " SELECT DISTINCT a.empresa, a.numero, a.proveedor " +
3148  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Secundaria] a " +
3149  " ) b ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.PROVEEDOR = B.PROVEEDOR ";
3150 
3151  DB.SQLExec(lcSql);
3152 
3153  lcSql = " UPDATE [" + lcdbReal + "].dbo.[C_ALBCOM] " +
3154  " SET " + ObtenerCamposSet(lcDb, "C_ALBCOM_ESPECIAL") +
3155  " FROM [" + lcdbReal + "].dbo.[C_ALBCOM] a " +
3156  " INNER JOIN [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial] b " +
3157  " ON A.EMPRESA = B.EMPRESA AND A.NUMERO = B.NUMERO AND A.PROVEEDOR = B.PROVEEDOR ";
3158 
3159  DB.SQLExec(lcSql);
3160 
3161  DB.SQLExec("DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[_Especial]");
3162  }
3163  }
3164 
3165  private static void TratamientoEspecial_Compras(RegistroTabRel registro)
3166  {
3167  string lcSql = string.Empty;
3168  DataTable table = new DataTable();
3169 
3170  if (clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + "COMUNES].dbo.COMPRAS" + registro._Sufijo))
3171  {
3172  lcSql = " SELECT DISTINCT " + registro._Compras + " AS Serie FROM [" + _cRaizDataBaseTemporal + "COMUNES].dbo.COMPRAS" + registro._Sufijo;
3173  DB.SQLExec(lcSql, ref table);
3174 
3175  if (table.Rows.Count > 0)
3176  {
3177  // Index de la taula a tractar
3178  string lcCadenaCamps = ObtenerCamposSelect("COMUNES", "COMPRAS" + registro._Sufijo);
3179  string lcSetCampos = ObtenerCamposSet("COMUNES", "COMPRAS" + registro._Sufijo);
3180  string lcIndice = ObtenerCamposIndices("COMUNES", "COMPRAS");
3181 
3182  if (registro._Sobreescribir)
3183  {
3184  lcSql = " UPDATE [" + clsOfflineUtils.ObtenerNombreBdReal("COMUNES") + "].dbo.[" + "COMPRAS" + "] " +
3185  " SET " + lcSetCampos +
3186  " FROM [" + clsOfflineUtils.ObtenerNombreBdReal("COMUNES") + "].dbo.[" + "COMPRAS" + "] a " +
3187  " INNER JOIN [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[" + "COMPRAS" + registro._Sufijo + "] b " +
3188  " ON " + lcIndice;
3189  DB.SQLExec(lcSql);
3190  }
3191 
3192  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[_Especial] ";
3193  DB.SQLExec(lcSql);
3194 
3195  // la condicion només l'aplicarem sobre el primer camp
3196  string lcCondicion = lcIndice.Trim();
3197  lcCondicion = lcCondicion.Substring(0, lcCondicion.IndexOf('='));
3198 
3199  // farem el FULL JOIN, per trobar els nous registres
3200  lcSql = "SELECT b.* into [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[_Especial] " +
3201  " FROM [" + clsOfflineUtils.ObtenerNombreBdReal("COMUNES") + "].dbo.[" + "COMPRAS" + "] a " +
3202  " RIGHT JOIN [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[" + "COMPRAS" + registro._Sufijo + "] b " +
3203  " ON " + lcIndice +
3204  " WHERE " + lcCondicion + " is null ";
3205  DB.SQLExec(lcSql);
3206 
3207 
3208  // farem el insert
3209  lcSql = "INSERT INTO [" + clsOfflineUtils.ObtenerNombreBdReal("COMUNES") + "].dbo.[" + "COMPRAS" + "] (" + lcCadenaCamps + ") " +
3210  "SELECT " + lcCadenaCamps + " FROM [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[_Especial] ";
3211  DB.SQLExec(lcSql);
3212 
3213  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "COMUNES" + "].dbo.[_Especial] ";
3214  DB.SQLExec(lcSql);
3215  }
3216  }
3217  }
3218 
3219  private static void TratamientoEspecial_CriterioCaja(OfflineDatosComunicaciones datos, RegistroTabRel registro, string lcCampo, ILog_comoffRepository logRepository)
3220  {
3221  string lcSql = string.Empty;
3222  DataTable table = new DataTable();
3223 
3224  lcSql = " SELECT empresa, " + lcCampo + " AS asi FROM [" + _cRaizDataBaseTemporal + registro._DBSecundaria + "].dbo." + registro._TablaSecundaria + registro._Sufijo;
3225  DB.SQLExec(lcSql, ref table);
3226 
3227  if (table.Rows.Count > 0)
3228  {
3229  TratamientoEspecial_Asientos(datos, registro, table, logRepository);
3230  }
3231  }
3232 
3233  private static void TratamientoEspecialTablas(OfflineDatosComunicaciones datos, RegistroTabRel registro, DataTable ldtData, ILog_comoffRepository logRepository)
3234  {
3235  switch (registro._TablaSecundaria)
3236  {
3237  case "ASIENTOS":
3238 
3239  // buscar ASI en las tablas relacionadas
3240  if (!string.IsNullOrWhiteSpace(registro._Otrasien))
3241  {
3242  TratamientoEspecial_ASI(registro, "OTRASIEN", registro._Otrasien, ldtData);
3243  }
3244 
3245  if (!string.IsNullOrWhiteSpace(registro._Ivareper))
3246  {
3247  TratamientoEspecial_ASI(registro, "IVAREPER", registro._Ivareper, ldtData);
3248  }
3249 
3250  if (!string.IsNullOrWhiteSpace(registro._Ivasopor))
3251  {
3252  TratamientoEspecial_ASI(registro, "IVASOPOR", registro._Ivasopor, ldtData);
3253  }
3254 
3255  if (!string.IsNullOrWhiteSpace(registro._Iva_exen))
3256  {
3257  TratamientoEspecial_ASI(registro, "IVA_EXEN", registro._Iva_exen, ldtData);
3258  }
3259 
3260  if (!string.IsNullOrWhiteSpace(registro._Retreper))
3261  {
3262  TratamientoEspecial_ASI(registro, "RETREPER", registro._Retreper, ldtData);
3263  }
3264 
3265  if (!string.IsNullOrWhiteSpace(registro._Retsopor))
3266  {
3267  TratamientoEspecial_ASI(registro, "RETSOPOR", registro._Retsopor, ldtData);
3268  }
3269 
3270  if (!string.IsNullOrWhiteSpace(registro._Eos))
3271  {
3272  TratamientoEspecial_ASI(registro, "EOS", registro._Eos, ldtData);
3273  }
3274 
3275  break;
3276 
3277  default:
3278 
3279  if (!string.IsNullOrWhiteSpace(registro._Asientos))
3280  {
3281  switch (registro._TablaSecundaria)
3282  {
3283  case "IVACJREPER":
3284  case "IVACJSOPOR":
3285 
3286  TratamientoEspecial_CriterioCaja(datos, registro, "ASIRECC", logRepository);
3287  break;
3288 
3289  default:
3290 
3291  TratamientoEspecial_Asientos(datos, registro, ldtData, logRepository);
3292  break;
3293  }
3294  }
3295 
3296  break;
3297  }
3298  }
3299 
3300  private static void TratamientoEspecial_Asientos(OfflineDatosComunicaciones datos, RegistroTabRel registro, DataTable tdtData, ILog_comoffRepository logRepository)
3301  {
3302  DataTable ldtDatosASI = new DataTable();
3303  DataTable ldtDatosCTRL = new DataTable();
3304  string lcSql = string.Empty;
3305  string lcSelect = string.Empty;
3306  string lcWhere = string.Empty;
3307 
3308  if (!DB._SQLExisteTablaBBDD(_cRaizDataBaseTemporal + "GESTION", "ASIENTOS" + registro._Sufijo))
3309  {
3310  return;
3311  }
3312 
3313  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIORIGEN] ";
3314  lcSql += ";";
3315  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASITEMPORAL] ";
3316  lcSql += ";";
3317  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIINSERT] ";
3318  DB.SQLExec(lcSql);
3319 
3320 
3321  // quitar las columnas que no sean EMPRESA y ASI
3322  int lnColumns = tdtData.Columns.Count;
3323  for (int i = lnColumns - 1; i >= 0; i--)
3324  {
3325  if (tdtData.Columns[i].ColumnName.ToLower() != "empresa" && tdtData.Columns[i].ColumnName.ToLower() != "asi")
3326  {
3327  tdtData.Columns.RemoveAt(i);
3328  }
3329  else
3330  {
3331  if (string.IsNullOrWhiteSpace(lcSelect))
3332  {
3333  if (tdtData.Columns[i].ColumnName.ToLower() == "empresa")
3334  {
3335  lcSelect = " asi, empresa ";
3336  }
3337  else
3338  {
3339  lcSelect = " empresa, asi ";
3340  }
3341  }
3342  }
3343  }
3344 
3345  if (!clsOfflineUtils.ExisteDatabaseOffline(_cRaizDataBaseTemporal + "GESTION"))
3346  {
3347  CrearDataTable("GESTION", _cRaizDataBaseTemporal);
3348  }
3349 
3350  if (!clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASIORIGEN]"))
3351  {
3352  lcSql = " Select " + lcSelect + " INTO [" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASIORIGEN]" +
3353  " From " + DB.SQLDatabase("GESTION", "ASIENTOS") + " as A Where 1 = 2 ";
3354 
3355  // Executem la consulta
3356  DB.SQLExec(lcSql);
3357  }
3358 
3359  InsertarDatosBulkMode(tdtData, "[" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASIORIGEN]");
3360 
3361  lcSql = " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + "ASIENTOS" + registro._Sufijo + "] as c " +
3362  " inner join ( " +
3363  " Select A.* " +
3364  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + "ASIENTOS" + registro._Sufijo + "] as A " +
3365  " Where Exists ( " +
3366  " Select B.* " +
3367  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIORIGEN] as B " +
3368  " Where A.EMPRESA=B.EMPRESA And A.ASI = B.ASI ) " +
3369  " ) d ON c.EMPRESA = d.EMPRESA AND c.NUMERO = d.NUMERO ";
3370 
3371  // Executem la consulta
3372  DB.SQLExec(" Select c.* " + lcSql, ref ldtDatosASI);
3373 
3374  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal("GESTION");
3375  string lcCondicion = string.Empty;
3376  string lcIndice = " A.EMPRESA = B.EMPRESA And A.ASI = B.ASI ";
3377  string lcInnerOn = ObtenerCamposIndices("GESTION", "ASIENTOS");
3378 
3379  if (ldtDatosASI != null && ldtDatosASI.Rows.Count > 0)
3380  {
3381  DB.SQLExec(" Select c.* " + " INTO [" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASITEMPORAL] " + lcSql);
3382 
3383  ImportarAsientos(datos, registro, logRepository, "_ASITEMPORAL");
3384 
3385  // la condicion només l'aplicarem sobre el primer camp
3386  lcCondicion = lcIndice.Trim();
3387  lcCondicion = lcCondicion.Substring(0, lcCondicion.IndexOf('='));
3388 
3389  lcSql = "SELECT a.* into [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIINSERT] " +
3390  " FROM [" + lcDbReal + "].dbo.[ASIENTOS] a " +
3391  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + "ASIENTOS" + registro._Sufijo + "] b ON " + lcInnerOn +
3392  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIORIGEN] c ON b.EMPRESA = c.EMPRESA And b.ASI = c.ASI ";
3393  DB.SQLExec(lcSql);
3394 
3395  string lcCadenaCamps = ObtenerCamposSelect("GESTION", "ASIENTOS" + registro._Sufijo);
3396  string lcCadenaCampsAlias = ObtenerCamposSelect("GESTION", "ASIENTOS" + registro._Sufijo, "a.");
3397 
3398  lcSql = " INSERT INTO [" + lcDbReal + "].dbo.[" + "ASIENTOS" + "] (" + lcCadenaCamps + ") " +
3399  " SELECT " + lcCadenaCampsAlias + " FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASITEMPORAL] a " +
3400  " LEFT JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIINSERT] b ON " + lcInnerOn +
3401  " where B.asi is null ";
3402  DB.SQLExec(lcSql);
3403 
3404  TratamientoEspecial_ASI(registro, "OTRASIEN", "ASI", ldtDatosASI);
3405 
3406  lcSql = " Select a.*, c.NUMERO as NUEVO_NUMERO " +
3407  " from [" + _cRaizDataBaseTemporal + "OFFLINE" + "].dbo.CTRL_ASIEN" + registro._Sufijo + " a " +
3408  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[ASIENTOS" + registro._Sufijo + "] b ON a.EMPRESA = b.EMPRESA and a.NUMERO = b.NUMERO and a.LINEA = b.LINEA and a.EJERCICIO = " + DB.SQLString(_cAny) +
3409  " INNER JOIN (SELECT a.empresa, a.asi, a.numero " +
3410  " FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASITEMPORAL] a " +
3411  " LEFT JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIINSERT] b ON a.empresa = b.empresa AND a.asi = b.asi " +
3412  " WHERE B.asi is null ) c ON b.EMPRESA = c.empresa and b.asi = c.asi ";
3413 
3414  DB.SQLExec(lcSql, ref ldtDatosCTRL);
3415 
3416  foreach (DataRow item in ldtDatosCTRL.Rows)
3417  {
3418  lcWhere = " WHERE EMPRESA = " + DB.SQLString(item.Field<string>("empresa")) +
3419  " AND LINEA = " + DB.SQLString(item.Field<int>("linea")) +
3420  " AND EJERCICIO = " + DB.SQLString(_cAny);
3421 
3422  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", "CTRL_ASIEN") + lcWhere + " AND NUMERO = " + DB.SQLString(item.Field<int>("nuevo_numero")) + "; " +
3423  " INSERT INTO " + DB.SQLDatabase("OFFLINE", "CTRL_ASIEN") +
3424  " (empresa, numero, linea, ejercicio, origen, idtabrel) " +
3425  " Values ( " +
3426  DB.SQLString(item.Field<string>("empresa")) + ", " + DB.SQLString(item.Field<int>("nuevo_numero")) + ", " +
3427  DB.SQLString(item.Field<int>("linea")) + ", " + DB.SQLString(_cAny) + ", " +
3428  DB.SQLString(item.Field<string>("origen")) + ", " + DB.SQLString(item.Field<int>("idtabrel")) + ")";
3429  DB.SQLExec(lcSql);
3430  }
3431  }
3432 
3433  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIORIGEN] ";
3434  lcSql += ";";
3435  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASITEMPORAL] ";
3436  lcSql += ";";
3437  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIINSERT] ";
3438  DB.SQLExec(lcSql);
3439 
3440  }
3441 
3442  private static void TratamientoEspecial_ASI(RegistroTabRel registro, string tcTabla, string tcCampo, DataTable tdtData)
3443  {
3444  DataTable ldtDatosASI = new DataTable();
3445  string lcSql = string.Empty;
3446 
3447  if (!DB._SQLExisteTablaBBDD(_cRaizDataBaseTemporal + "GESTION", tcTabla + registro._Sufijo))
3448  {
3449  return;
3450  }
3451 
3452  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASI] ";
3453  lcSql += ";";
3454  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASINUEVO] ";
3455  lcSql += ";";
3456  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIESPECIAL] ";
3457  DB.SQLExec(lcSql);
3458 
3459 
3460  if (!clsOfflineUtils.ExisteDatabaseOffline(_cRaizDataBaseTemporal + "GESTION"))
3461  {
3462  CrearDataTable("GESTION", _cRaizDataBaseTemporal);
3463  }
3464 
3465  if (!clsOfflineUtils.ExisteTablaOffline("[" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASI]"))
3466  {
3467  lcSql = " Select empresa, asi INTO [" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASI]" +
3468  " From " + DB.SQLDatabase("GESTION", "ASIENTOS") + " as A Where 1 = 2 ";
3469 
3470  // Executem la consulta
3471  DB.SQLExec(lcSql);
3472  }
3473 
3474  // quitar las columnas que no sean EMPRESA y ASI
3475  int lnColumns = tdtData.Columns.Count;
3476  for (int i = lnColumns - 1; i >= 0; i--)
3477  {
3478  if (tdtData.Columns[i].ColumnName.ToLower() != "empresa" && tdtData.Columns[i].ColumnName.ToLower() != tcCampo.ToLower())
3479  {
3480  tdtData.Columns.RemoveAt(i);
3481  }
3482  }
3483 
3484  InsertarDatosBulkMode(tdtData, "[" + _cRaizDataBaseTemporal + "GESTION].dbo.[_ASI]");
3485 
3486 
3487  lcSql = " Select A.* " +
3488  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + registro._Sufijo + "] as A " +
3489  " Where Exists ( " +
3490  " Select B.* " +
3491  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASI] as B " +
3492  " Where A.EMPRESA=B.EMPRESA And A." + tcCampo + " = B.ASI )";
3493 
3494  //Executem la consulta
3495  DB.SQLExec(lcSql, ref ldtDatosASI);
3496 
3497  string lcDbReal = clsOfflineUtils.ObtenerNombreBdReal(registro._DBSecundaria);
3498  string lcCondicion = string.Empty;
3499  string lcIndice = " A.EMPRESA = B.EMPRESA And A.ASI = B." + tcCampo + " ";
3500  string lcInnerOn = ObtenerCamposIndices("GESTION", tcTabla);
3501 
3502  if (ldtDatosASI != null && ldtDatosASI.Rows.Count > 0)
3503  {
3504  if (registro._Sobreescribir)
3505  {
3506  string lcSetCampos = ObtenerCamposSet("GESTION", tcTabla + registro._Sufijo);
3507 
3508  lcSql = " UPDATE " + DB.SQLDatabase("GESTION", tcTabla) +
3509  " SET " + lcSetCampos +
3510  " FROM " + DB.SQLDatabase("GESTION", tcTabla) + " a " +
3511  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + registro._Sufijo + "] b ON " + lcInnerOn +
3512  " INNER JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASI] c ON b.EMPRESA = c.EMPRESA And b." + tcCampo + " = c.ASI ";
3513 
3514  DB.SQLExec(lcSql);
3515  }
3516 
3517  // la condicion només l'aplicarem sobre el primer camp
3518  lcCondicion = lcIndice.Trim();
3519  lcCondicion = lcCondicion.Substring(0, lcCondicion.IndexOf('='));
3520 
3521  lcSql = " SELECT a.* into [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASINUEVO] " +
3522  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + registro._Sufijo + "] as a " +
3523  " inner join ( " +
3524  " Select c.* " +
3525  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[" + tcTabla + registro._Sufijo + "] as c " +
3526  " Where Exists ( " +
3527  " Select d.* " +
3528  " From [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASI] as d " +
3529  " Where c.EMPRESA = d.EMPRESA And c.ASI = d.ASI ) " +
3530  " ) b ON " + lcInnerOn;
3531 
3532  DB.SQLExec(lcSql);
3533 
3534  string lcCadenaCamps = ObtenerCamposSelect("GESTION", tcTabla + registro._Sufijo);
3535 
3536  // farem el FULL JOIN, per trobar els nous registres
3537  lcSql = "SELECT b.* into [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIESPECIAL] " +
3538  " FROM " + DB.SQLDatabase("GESTION", tcTabla) + " a " +
3539  " RIGHT JOIN [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASINUEVO] b " +
3540  " ON " + lcIndice +
3541  " WHERE " + lcCondicion + " is null ";
3542  DB.SQLExec(lcSql);
3543 
3544  lcSql = " INSERT INTO " + DB.SQLDatabase("GESTION", tcTabla) + " (" + lcCadenaCamps + ") " +
3545  " SELECT " + lcCadenaCamps + " FROM [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIESPECIAL] ";
3546  DB.SQLExec(lcSql);
3547  }
3548 
3549  lcSql = "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASI] ";
3550  lcSql += ";";
3551  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASINUEVO] ";
3552  lcSql += ";";
3553  lcSql += "DROP TABLE IF EXISTS [" + _cRaizDataBaseTemporal + "GESTION" + "].dbo.[_ASIESPECIAL] ";
3554  DB.SQLExec(lcSql);
3555  }
3556 
3557  private static void ActualizarDatosRecepcionEspecial(OfflineDatosComunicaciones datos, RegistroTabRel registro, string lcTaulaTemp, string lcTaulaLocal, string lcDb, string lcTaula, ILog_comoffRepository logRepository)
3558  {
3559  if (lcTaulaLocal == "EMPRESA")
3560  {
3561  DataTable ldtEmpresa = new DataTable();
3562 
3563  // buscamos si se han recibido empresas que no estan dadas de alta
3564  string lcSql = " SELECT a.CODIGO, a.NOMBRE " +
3565  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaula + "] a " +
3566  " WHERE a.codigo NOT IN ( " +
3567  " SELECT b.codigo " +
3568  " FROM [" + _cRaizDataBaseTemporal + lcDb + "].dbo.[" + lcTaulaTemp + "] b ) ";
3569  DB.SQLExec(lcSql, ref ldtEmpresa);
3570 
3571  if (ldtEmpresa != null && ldtEmpresa.Rows.Count > 0)
3572  {
3573  string lcDetalle = "Se han detectado en el fichero datos de empresas que no existen en el grupo de empresa que recibe los datos." + Environment.NewLine +
3574  "Para poder recibir datos de dichas empresas, deberá crearlas en el grupo de empresa en el que desee recibir los datos." + Environment.NewLine +
3575  "Las empresas incluidas en fichero que no existen en el grupo de empresa son las siguientes: " + Environment.NewLine + Environment.NewLine;
3576 
3577  lcDetalle += ConstruirTextoDetalleEspecial(ldtEmpresa, "codigo", "nombre");
3578 
3579  Log_comoffDto logDto = logRepository.GetDto(datos);
3580  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato(registro._Clave);
3581  logDto.Resultado = 3;
3582  logDto.Detalle = lcDetalle;
3583  logRepository.Insert(logDto);
3584  }
3585  }
3586  }
3587 
3588  private static void RegistroDatosRecepcion(OfflineDatosComunicaciones datos, RegistroTabRel registro, DataTable tdtDatos, string tcTaulaLocal, string tcDb, bool tlInsert, ILog_comoffRepository logRepository)
3589  {
3590  List<string> lista = new List<string>();
3591 
3592  string lcDetalle = string.Empty;
3593  string lcCampo = string.Empty;
3594  int lnResultado = 0;
3595 
3596  if (registro._Visible && registro._Actualizado && registro._TablaSecundaria == tcTaulaLocal)
3597  {
3598  return;
3599  }
3600 
3601  if (registro._Sufijo == "_CREATED")
3602  {
3603  if (tlInsert)
3604  {
3605  lcDetalle = "Se ha dado de alta la siguiente información." + Environment.NewLine;
3606  lnResultado = 1;
3607  }
3608  else
3609  {
3610  lcDetalle = "Se ha actualizado la siguiente información a partir datos nuevos en el grupo de empresa origen." + Environment.NewLine +
3611  "Revise que la información es correcta en el grupo de empresa que ha recibido los datos:" + Environment.NewLine;
3612  lnResultado = 2;
3613  }
3614  }
3615  else
3616  {
3617  if (tlInsert)
3618  {
3619  lcDetalle = "Se ha dado de alta la siguiente información a partir de datos modificados en el grupo de empresa origen." + Environment.NewLine +
3620  "Revise que la información es correcta en el grupo de empresa que ha recibido los datos:" + Environment.NewLine;
3621  lnResultado = 2;
3622  }
3623  else
3624  {
3625  lcDetalle = "Se ha actualizado la siguiente información." + Environment.NewLine;
3626  lnResultado = 1;
3627  }
3628  }
3629 
3630  lcDetalle += "Dato: " + (tcTaulaLocal.Contains("CTRL_") ? "Información extendida de " : "") + registro._Nombre.ToUpper() + Environment.NewLine + Environment.NewLine;
3631 
3632 
3633  switch (tcTaulaLocal)
3634  {
3635  case "BARRAS":
3636  case "IDI_ART":
3637  case "OFERTAS":
3638  case "PVP":
3639  case "REFERPRO":
3640  case "PVPCOL":
3641  case "ART_COLO":
3642  case "ART_TALL":
3643  case "ESCANDAL":
3644  case "FACTORPTOS":
3645  case "ART_FOTO":
3646  case "ARTLOT":
3647  case "BAREAN":
3648  case "COSTELOT":
3649  case "STOALMMM":
3650  case "EAN_PESO":
3651  case "ART_REST":
3652  case "ART_REG":
3653  case "CMBPVP":
3654 
3655  lcDetalle += ConstruirTextoDetalle(tdtDatos, "articulo", "ARTICULO", "GESTION");
3656  break;
3657 
3658  case "DESC_FAM":
3659 
3660  lcDetalle += ConstruirTextoDetalle(tdtDatos, "familia", "ARTICULO", "GESTION");
3661  break;
3662 
3663  case "MULTICAM":
3664  case "VALMULTI":
3665 
3666  lcDetalle += ConstruirTextoDetalle(tdtDatos, "codigo", "MCAMPOS", "GESTION");
3667  break;
3668 
3669  case "DESC_SUB":
3670 
3671  lcDetalle += ConstruirTextoDetalle(tdtDatos, "subfam", "SUBFAM", "GESTION");
3672  break;
3673 
3674  case "TALLGRUP":
3675 
3676  lcDetalle += ConstruirTextoDetalle(tdtDatos, "talla", "TALLAS", "COMUNES");
3677  break;
3678 
3679  case "COLOGRUP":
3680 
3681  lcDetalle += ConstruirTextoDetalle(tdtDatos, "color", "COLORES", "COMUNES");
3682  break;
3683 
3684  case "COMPRAS":
3685  case "STOCKS2":
3686  case "STOCKLOTES":
3687  case "STOCKS":
3688  case "STOCKINI":
3689  case "ALMA_ANALI":
3690 
3691  case "INICIALSER":
3692  case "LTSTINI":
3693  case "CTRL_STINI":
3694 
3695  case "REGULARI":
3696  case "LTREGUL":
3697  case "REGULARISER":
3698  case "CTRL_REGUL":
3699 
3700  lcDetalle += ConstruirTextoDetalle(tdtDatos, "almacen", "ALMACEN", "GESTION");
3701  break;
3702 
3703  case "HISSERIE":
3704 
3705  switch (registro._Clave)
3706  {
3707  case "STOCKINI":
3708 
3709  lcDetalle += ConstruirTextoDetalle(tdtDatos, "almacen", "ALMACEN", "GESTION");
3710  break;
3711 
3712  case "C_ALBARE":
3713  case "C_ALBATR":
3714  case "PEDINT_C":
3715  case "C_ALBCOM":
3716  case "C_DEPCOM":
3717  case "C_PROD":
3718  case "C_TRANS":
3719  case "C_ALBVEN":
3720  case "C_ALBDEP":
3721 
3722  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numero", "", "numero");
3723  break;
3724 
3725  case "REGULARI":
3726 
3727  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "documento", "", "documento");
3728  break;
3729  }
3730  break;
3731 
3732  case "C_FORMUL":
3733  case "D_FORMUL":
3734  case "CTRL_FORMU":
3735 
3736  lcCampo = (tcTaulaLocal == "D_FORMUL" ? "formula" : "articulo");
3737  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "C_FORMUL", "LOTES", "ARTICULO");
3738  break;
3739 
3740  case "ART_CLASIF":
3741 
3742  lcDetalle += ConstruirTextoDetalle(tdtDatos, "clasif", "CLASIF", "COMUNES");
3743  break;
3744 
3745  case "DESCUEN":
3746  case "ACTI_CLI":
3747  case "BANC_CLI":
3748  case "CONT_CLI":
3749  case "ENV_CLI":
3750  case "GIRO_CLI":
3751  case "TELF_CLI":
3752  case "VACA_CLI":
3753  case "CLITARJFID":
3754  case "MANDATOS":
3755  //case "MANDEMP":
3756  case "CONTLF_CLI":
3757  case "RIESGO":
3758  case "CUOTAS":
3759  case "CUO_MES":
3760  case "CCAACLI":
3761 
3762  lcCampo = (tcTaulaLocal == "RIESGO" ? "codigo" : "cliente");
3763  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
3764  break;
3765 
3766  case "TCPS":
3767 
3768  lcDetalle += ConstruirTextoDetalle(tdtDatos, "tcp", "TCP", "COMUNES");
3769  break;
3770 
3771  case "OTRAS":
3772  case "GIRO_CUE":
3773  case "BANC_CUE":
3774  case "MODIDFIS":
3775  case "RET_EMP":
3776 
3777  lcCampo = (tcTaulaLocal == "OTRAS" ? "codigo" : "cuenta");
3778  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CUENTAS", "GESTION");
3779  break;
3780 
3781  case "TELF_PRO":
3782  case "GIRO_PRO":
3783  case "CONT_PRO":
3784  case "ACTI_PRO":
3785  case "ENV_PRO":
3786  case "VACA_PRO":
3787  case "BANC_PRO":
3788  case "CONTLF_PRO":
3789  case "DESC_PRO":
3790 
3791  lcCampo = (tcTaulaLocal == "DESC_PRO" ? "proveed" : "proveedor");
3792  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
3793  break;
3794 
3795  case "ENTRE_CL":
3796 
3797  switch (registro._ID)
3798  {
3799  case 113:
3800  // Entregas a cuenta de cliente
3801  lcCampo = (tcTaulaLocal == "ENTRE_CL" || tcTaulaLocal == "PREVI_CL" ? "cliente" : "cuenta");
3802  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
3803  break;
3804 
3805  case 318:
3806  // Entregas a cuenta de proveedor
3807  lcCampo = (tcTaulaLocal == "ENTRE_CL" ? "cliente" : (tcTaulaLocal == "PREVIS" ? "proveedor" : "cuenta"));
3808  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
3809  break;
3810  }
3811  break;
3812 
3813  case "EOS":
3814 
3815  switch (registro._ID)
3816  {
3817  case 68: // Facturas de venta
3818  case 301: // TPV con arqueo
3819  case 326: // TPV sin arqueo
3820 
3821  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "factura");
3822  break;
3823 
3824  case 113:
3825  // Entregas a cuenta de cliente
3826  lcCampo = (tcTaulaLocal == "ENTRE_CL" || tcTaulaLocal == "PREVI_CL" ? "cliente" : "cuenta");
3827  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
3828  break;
3829 
3830  case 318:
3831  // Entregas a cuenta de proveedor
3832  lcCampo = (tcTaulaLocal == "ENTRE_CL" ? "cliente" : (tcTaulaLocal == "PREVIS" ? "proveedor" : "cuenta"));
3833  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
3834  break;
3835 
3836  case 216:
3837  // Facturas de compra
3838 
3839  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "cuenta", "factura");
3840  break;
3841  }
3842 
3843  break;
3844 
3845  case "IVAREPER":
3846 
3847  switch (registro._ID)
3848  {
3849  case 69: // Facturas de venta
3850  case 302: // TPV con arqueo
3851  case 327: // TPV sin arqueo
3852 
3853  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numfra");
3854  break;
3855 
3856  case 113:
3857  // Entregas a cuenta de cliente
3858  lcCampo = (tcTaulaLocal == "ENTRE_CL" || tcTaulaLocal == "PREVI_CL" ? "cliente" : "cuenta");
3859  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
3860  break;
3861 
3862  case 318:
3863  // Entregas a cuenta de proveedor
3864  lcCampo = (tcTaulaLocal == "ENTRE_CL" ? "cliente" : (tcTaulaLocal == "PREVIS" ? "proveedor" : "cuenta"));
3865  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
3866  break;
3867 
3868  case 344:
3869  // Facturas de compra
3870  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "cuenta", "numfra");
3871  break;
3872  }
3873 
3874  break;
3875 
3876  case "IVASOPOR":
3877 
3878  switch (registro._ID)
3879  {
3880  case 318:
3881  // Entregas a cuenta de proveedor
3882  lcDetalle += ConstruirTextoDetalle(tdtDatos, "cuenta", "PROVEED", "GESTION");
3883  break;
3884 
3885  case 217:
3886  // Facturas de compra
3887 
3888  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "cuenta", "numfra");
3889  break;
3890  }
3891 
3892  break;
3893 
3894  case "IVA_EXEN":
3895 
3896  switch (registro._ID)
3897  {
3898  case 276: // Facturas de venta
3899  case 308: // TPV con arqueo
3900  case 333: // TPV sin arqueo
3901 
3902  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "factura");
3903  break;
3904 
3905  case 113:
3906  // Entregas a cuenta de cliente
3907  lcDetalle += ConstruirTextoDetalle(tdtDatos, "cuenta", "CLIENTES", "GESTION");
3908  break;
3909 
3910  case 318:
3911  // Entregas a cuenta de proveedor
3912  lcDetalle += ConstruirTextoDetalle(tdtDatos, "cuenta", "PROVEED", "GESTION");
3913  break;
3914 
3915  case 277:
3916  // Facturas de compra
3917 
3918  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "cuenta", "factura");
3919  break;
3920  }
3921 
3922  break;
3923 
3924  case "RETREPER":
3925 
3926  // Facturas de compra
3927  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numfra");
3928  break;
3929 
3930  case "RETSOPOR":
3931 
3932  switch (registro._ID)
3933  {
3934  case 393: // Facturas de venta
3935  case 395: // TPV con arqueo
3936  case 396: // TPV sin arqueo
3937 
3938  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numfra");
3939  break;
3940  }
3941 
3942  break;
3943 
3944  case "PREVI_CL":
3945  case "CTRL_PREVV":
3946 
3947  switch (registro._ID)
3948  {
3949  case 67: // Facturas de venta
3950  case 300: // TPV con arqueo
3951  case 325: // TPV sin arqueo
3952 
3953  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "factura");
3954  break;
3955 
3956  case 360:
3957  // Entregas a cuenta de cliente
3958  lcDetalle += ConstruirTextoDetalle(tdtDatos, "cliente", "CLIENTES", "GESTION");
3959  break;
3960  }
3961 
3962  break;
3963 
3964  case "PREVIS":
3965  case "CTRL_PREVC":
3966 
3967  switch (registro._ID)
3968  {
3969  case 361:
3970  // Entregas a cuenta de proveedor
3971  lcDetalle += ConstruirTextoDetalle(tdtDatos, "proveedor", "PROVEED", "GESTION");
3972  break;
3973 
3974  case 245:
3975  // Facturas de compra
3976 
3977  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "proveedor", "factura");
3978  break;
3979  }
3980 
3981  break;
3982 
3983  case "CTRL_ASIEN":
3984 
3985  lcDetalle += tdtDatos.Rows.Count.ToString() + " registros.";
3986  break;
3987 
3988  case "ASIENTOS":
3989  case "OTRASIEN":
3990  //case "CTRL_ASIEN":
3991 
3992  switch (registro._ID)
3993  {
3994  case 336:
3995  // Presupuestos de venta
3996  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
3997  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
3998  break;
3999 
4000  case 72:
4001  // Pedidos de venta
4002  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4003  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
4004  break;
4005 
4006  case 5:
4007  // Albaranes de venta
4008  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4009  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
4010  break;
4011 
4012  case 67:
4013  case 68:
4014  case 222:
4015  case 348:
4016  // Facturas de venta
4017  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4018  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
4019  break;
4020 
4021  case 216:
4022  case 245:
4023  case 221:
4024  // Facturas de compra
4025  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4026  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
4027  break;
4028 
4029 
4030  case 360:
4031  // Clientes
4032  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4033  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "CLIENTES", "GESTION");
4034  break;
4035 
4036  case 361:
4037  // Proveedores
4038  lcCampo = (tcTaulaLocal == "OTRASIEN" ? "codcuen" : "cuenta");
4039  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo, "PROVEED", "GESTION");
4040  break;
4041  }
4042  break;
4043 
4044  case "C_FACTUVEN":
4045 
4046  switch (registro._ID)
4047  {
4048  case 288: // Facturas de venta
4049  case 310: // TPV con arqueo
4050  case 335: // TPV sin arqueo
4051 
4052  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numero");
4053 
4054  break;
4055  }
4056  break;
4057 
4058  case "C_FACTUCOM":
4059 
4060  switch (registro._ID)
4061  {
4062  case 289: // Facturas de compra
4063 
4064  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "proveedor", "numero");
4065 
4066  break;
4067  }
4068  break;
4069 
4070  case "FINTECHFAC":
4071 
4072  switch (registro._ID)
4073  {
4074  case 293: // Facturas de venta
4075  case 311: // TPV con arqueo
4076  case 252: // TPV sin arqueo
4077 
4078  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numfra");
4079 
4080  break;
4081  }
4082  break;
4083 
4084  case "FCFACTUVEN":
4085 
4086  switch (registro._ID)
4087  {
4088  case 400: // Facturas de venta
4089  case 408: // TPV con arqueo
4090  case 407: // TPV sin arqueo
4091 
4092  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "borrador");
4093 
4094  break;
4095  }
4096  break;
4097 
4098  case "FCREGCERT":
4099 
4100  switch (registro._ID)
4101  {
4102  case 403: // Facturas de venta
4103  case 405: // TPV con arqueo
4104  case 404: // TPV sin arqueo
4105 
4106  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "borrador");
4107 
4108  break;
4109  }
4110  break;
4111 
4112  case "FPAG_GIR":
4113 
4114  lcDetalle += ConstruirTextoDetalle(tdtDatos, "fpag", "FPAG", "GESTION");
4115  break;
4116 
4117  case "LIN_DESC":
4118 
4119  lcDetalle += ConstruirTextoDetalle(tdtDatos, "codigo", "LINEAS", "GESTION");
4120  break;
4121 
4122  case "ZONAS":
4123 
4124  lcDetalle += ConstruirTextoDetalle(tdtDatos, "ruta", "RUTAS", "GESTION");
4125  break;
4126 
4127  case "ART_COMI":
4128 
4129  lcDetalle += ConstruirTextoDetalle(tdtDatos, "vendedor", "VENDEDOR", "GESTION");
4130  break;
4131 
4132  case "CONIRPF":
4133 
4134  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "conirpf", "nombre");
4135 
4136  break;
4137 
4138  case "FCLETRAS":
4139 
4140  lcDetalle += ConstruirTextoDetalle(tdtDatos, "letra", "LETRAS", "COMUNES");
4141  break;
4142 
4143  case "CAJ_FCOB":
4144 
4145  lcDetalle += ConstruirTextoDetalle(tdtDatos, "caja", "CAJAS", "TPV");
4146  break;
4147 
4148  case "PLAN_D":
4149 
4150  lcDetalle += ConstruirTextoDetalle(tdtDatos, "plancont", "PLANS", "GESTION");
4151  break;
4152 
4153  case "MODCONFI":
4154  case "CFGFACT":
4155  case "CODIGOS":
4156  case "FACTUCNF":
4157  case "FLAGS":
4158  case "OPCEMP":
4159  case "CONTACNF":
4160  case "ESCALADO":
4161  case "CONTADOR":
4162  case "SERIES":
4163  case "ACCESOS":
4164  case "MENUS":
4165  case "CONFIGURA":
4166  case "CONFTPV":
4167  case "CONFVAL":
4168  case "CONFTICK":
4169  case "MODCCAN":
4170  case "OTROSCFG":
4171 
4172  lcDetalle += ConstruirTextoDetalle(tdtDatos, "empresa", "EMPRESA", "GESTION");
4173  break;
4174 
4175  case "OPC_USER":
4176 
4177  lcDetalle += ConstruirTextoDetalle(tdtDatos, "operario", "OPERARIO", "COMUNES");
4178  break;
4179 
4180  case "ACCE_MON":
4181  case "OPCESPUS":
4182 
4183  lcDetalle += ConstruirTextoDetalle(tdtDatos, "usuario", "USUARIOS", "COMUNES");
4184  break;
4185 
4186 
4187  case "OPCFLAG":
4188  case "CASH":
4189  case "PERFILES":
4190 
4191  foreach (DataRow item in tdtDatos.Rows)
4192  {
4193  if (!lista.Contains(item.Field<int>("codigo").ToString().TrimEnd()))
4194  {
4195  lcDetalle += item.Field<int>("codigo").ToString().TrimEnd() + " - " + item.Field<string>("nombre").TrimEnd() + Environment.NewLine;
4196  lista.Add(item.Field<int>("codigo").ToString().TrimEnd());
4197  }
4198  }
4199 
4200  break;
4201 
4202  case "ARQUEOS":
4203  case "D_ARQUEO":
4204  case "CTRL_ARQUE":
4205 
4206  lcCampo = (tcTaulaLocal == "D_ARQUEO" ? "arqueo" : "numero");
4207 
4208  foreach (DataRow item in tdtDatos.Rows)
4209  {
4210  if (!lista.Contains(item.Field<string>("empresa").ToString().TrimEnd() + " - " + item.Field<int>(lcCampo).ToString().TrimEnd()))
4211  {
4212  lcDetalle += item.Field<string>("empresa").ToString().TrimEnd() + " - " + item.Field<int>(lcCampo).ToString().TrimEnd() + Environment.NewLine;
4213  lista.Add(item.Field<string>("empresa").ToString().TrimEnd() + " - " + item.Field<int>(lcCampo).ToString().TrimEnd());
4214  }
4215  }
4216  //lcDetalle += ConstruirTextoDetalleEspecial(ldtDatos, "empresa", lcCampo);
4217 
4218  break;
4219 
4220  case "C_ALBATR":
4221  case "D_ALBATR":
4222  case "LTALBTR":
4223  case "TRASPSER":
4224  case "CTRL_ALBTR":
4225 
4226  case "C_ALBARE":
4227  case "D_ALBARE":
4228  case "LTALBRE":
4229  case "REGUSER":
4230  case "CTRL_ALBRE":
4231 
4232  case "PEDINT_C":
4233  case "PEDINT_D":
4234  case "PEDINT_LIN":
4235  case "PEDINT_REG":
4236  case "CTRL_PEDIN":
4237 
4238  case "CTRL_FACV":
4239 
4240  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "numero");
4241  break;
4242 
4243  case "CCAAFAC":
4244 
4245  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "factura");
4246  break;
4247 
4248  case "MULTICA2":
4249 
4250  switch (registro._Clave)
4251  {
4252  case "C_PRESUV":
4253  case "C_PEDIVE":
4254  case "C_ALBDEP":
4255  case "C_ALBVEN":
4256  case "FACTURAS":
4257  case "TPVCONARQUEO":
4258  case "TPVSINARQUEO":
4259 
4260  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "letra", "numero" );
4261 
4262  break;
4263  }
4264  break;
4265 
4266  case "MULTICA3":
4267 
4268  switch (registro._Clave)
4269  {
4270  case "C_PEDICO":
4271  case "C_DEPCOM":
4272  case "C_ALBCOM":
4273  case "FACTURAC":
4274 
4275  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "proveedor", "numero");
4276  break;
4277  }
4278  break;
4279 
4280  case "CONTADO":
4281 
4282  switch (registro._Clave)
4283  {
4284  case "C_PEDIVE":
4285  case "C_ALBDEP":
4286  case "C_ALBVEN":
4287  case "CONTADO":
4288 
4289  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "letra", "numero");
4290  break;
4291  }
4292  break;
4293 
4294  case "C_PRESUV":
4295  case "D_PRESUV":
4296  case "PORTES_PRV":
4297  case "ENTRE_PR":
4298  case "PRES_ADI":
4299 
4300  case "C_PEDIVE":
4301  case "D_PEDIVE":
4302  case "D_PEDIVEES":
4303  case "PORTES_PDV":
4304  case "ENTRE_PV":
4305  case "PEDV_ADI":
4306 
4307  case "C_ALBDEP":
4308  case "D_ALBDEP":
4309  case "LTDEPVE":
4310  case "DEPSER":
4311  case "PORTES_DPV":
4312  case "DEPV_ADI":
4313 
4314  case "C_ALBVEN":
4315  case "D_ALBVEN":
4316  case "LTALBVE":
4317  case "VENSER":
4318  case "PORTES":
4319  case "ENTREGAS":
4320  case "ALBV_ADI":
4321  case "REFALBCLI":
4322  case "CAB_AV":
4323  case "LIN_AV":
4324  case "ALB_FPAG":
4325  case "VALES":
4326 
4327  case "CTRL_PRESV":
4328  case "CTRL_PEDV":
4329  case "CTRL_DEPV":
4330  case "CTRL_ALBV":
4331 
4332  lcCampo = (tcTaulaLocal == "PORTES" || tcTaulaLocal == "ENTREGAS" ? "albaran" : (tcTaulaLocal == "VALES" ? "ticket" : "numero"));
4333  if (registro._Clave == "FACTURAS")
4334  {
4335  lcCampo = (tcTaulaLocal == "C_ALBVEN" && tcDb == "GESTION" ? "factura" : lcCampo);
4336  }
4337 
4338  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "letra", lcCampo);
4339  break;
4340 
4341 
4342  case "C_PEDICO":
4343  case "D_PEDICO":
4344  case "D_PEDICOES":
4345 
4346  case "C_DEPCOM":
4347  case "D_DEPCOM":
4348  case "LTDEPCO":
4349  case "DEPCSER":
4350 
4351  case "C_PROD":
4352  case "D_PROD":
4353  case "LTCPROD":
4354  case "LTDPROD":
4355  case "PRODUSER":
4356  case "PRODUSERC":
4357 
4358  case "C_TRANS":
4359  case "D_TRANS":
4360  case "LTCTRAN":
4361  case "LTDTRAN":
4362  case "TRANSER":
4363  case "TRANSSER":
4364 
4365  case "C_PARTES":
4366 
4367  case "CTRL_PEDC":
4368  case "CTRL_DEPC":
4369  case "CTRL_PROD":
4370  case "CTRL_TRANS":
4371 
4372  lcCampo = (tcTaulaLocal == "PRODUSER" || tcTaulaLocal == "PRODUSERC" || tcTaulaLocal == "TRANSER" || tcTaulaLocal == "TRANSSER" ? "albaran" : "numero");
4373 
4374  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", lcCampo);
4375  break;
4376 
4377  case "C_ALBCOM":
4378  case "D_ALBCOM":
4379  case "LTALBCO":
4380  case "COMSER":
4381  case "PORTESC":
4382  case "ALB_FPA2":
4383  case "C_TRANSDUA":
4384  case "D_TRANSDUA":
4385 
4386  case "CTRL_ALBC":
4387  case "CTRL_FACC":
4388 
4389  lcCampo = (tcTaulaLocal == "PORTESC" ? "albaran" : "numero");
4390  if (registro._Clave == "FACTURAC")
4391  {
4392  lcCampo = (tcTaulaLocal == "C_ALBCOM" ? "factura" : lcCampo);
4393  }
4394 
4395  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "empresa", "proveedor", lcCampo);
4396  break;
4397 
4398  case "TIKETS":
4399  case "REPOSI":
4400  case "COB_PAGO":
4401  case "CTRL_REPOS":
4402  case "CODPOS":
4403 
4404  lcDetalle += tdtDatos.Rows.Count.ToString() + " registros.";
4405  break;
4406 
4407  case "ESTILOS":
4408  case "PERF_OBLIG":
4409  case "PERF_USERS":
4410  case "UNIUSERS":
4411 
4412  // No hacer nada, de momento
4413  break;
4414 
4415  case "PLEFACT_D":
4416 
4417  lcDetalle += ConstruirTextoDetalle(tdtDatos, "codigo", "PLEFACT_C", "COMUNES");
4418  break;
4419 
4420  case "COTIZA":
4421 
4422  lcDetalle += ConstruirTextoDetalle(tdtDatos, "codigo", "MONEDA", "GESTION");
4423  break;
4424 
4425  default:
4426 
4427  if (tcTaulaLocal.Contains("CTRL_"))
4428  {
4429  string[] loDatos = _offlineConfig.ObtenerTablaOriginalRelacionada(tcTaulaLocal).Split('!');
4430 
4431  if (loDatos.Length == 2)
4432  {
4433  switch (tcTaulaLocal)
4434  {
4435  case "CTRL_FORMU":
4436 
4437  lcCampo = "ARTICULO";
4438  break;
4439 
4440  case "CTRL_STINI":
4441 
4442  lcCampo = "ALMACEN";
4443  break;
4444 
4445  case "CTRL_CIRPF":
4446 
4447  lcCampo = "CONIRPF";
4448  break;
4449 
4450  case "CTRL_OFER":
4451 
4452  lcCampo = "CODIGO";
4453  loDatos[1] = "ARTICULO";
4454  break;
4455 
4456  default:
4457 
4458  lcCampo = "CODIGO";
4459  break;
4460 
4461  }
4462 
4463  if (tcTaulaLocal == "CTRL_PRCLI")
4464  {
4465  lcDetalle += ConstruirTextoDetalleEntero(tdtDatos, lcCampo.ToLower(), "PRCLIENT", "GESTION", lcCampo);
4466  }
4467  else
4468  {
4469  lcDetalle += ConstruirTextoDetalle(tdtDatos, lcCampo.ToLower(), loDatos[1], loDatos[0], lcCampo);
4470  }
4471  }
4472  }
4473  else
4474  {
4475  if (tcTaulaLocal == "PRCLIENT")
4476  {
4477  lcDetalle += ConstruirTextoDetalleEntero(tdtDatos, lcCampo.ToLower(), "PRCLIENT", "GESTION", lcCampo);
4478  }
4479  else
4480  {
4481  if (tdtDatos.Columns.Contains("codigo") && tdtDatos.Columns.Contains("nombre"))
4482  {
4483  lcDetalle += ConstruirTextoDetalleEspecial(tdtDatos, "codigo", "nombre");
4484  }
4485  else
4486  {
4487  ;
4488  }
4489  }
4490  }
4491  break;
4492  }
4493 
4494  Log_comoffDto logDto = logRepository.GetDto(datos);
4495  logDto.TipoDato = clsOfflineUtils.ObtenerTipoDato(registro._Clave);
4496  logDto.Resultado = lnResultado;
4497  logDto.Detalle = lcDetalle;
4498  logRepository.Insert(logDto);
4499 
4500  }
4501 
4502  private static string ObtenerCamposSelect(string tcDBLocal, string tcTablaLocal, string tcAlias = "", bool tlForzar = false)
4503  {
4504  // tcDBLocal->Nombre de la base de datos a la cual pertenece la tabla tcTablaLocal
4505  // tcTablaLocal->nombre de la tabla de la cual se debe comparar
4506 
4507  string lcSelect = string.Empty;
4508  string lcComa = string.Empty;
4509  int lnContador = 0;
4510  DataTable ldtCampos = new DataTable();
4511 
4512  DB.SQLExec("SELECT column_name, data_type FROM " + _cRaizDataBaseTemporal + tcDBLocal + ".INFORMATION_SCHEMA.COLUMNS WHERE table_name = '" + tcTablaLocal + "' ", ref ldtCampos);
4513 
4514  //Creamos estructura vacia
4515  foreach (DataRow item in ldtCampos.Rows)
4516  {
4517  lnContador++;
4518  if (tlForzar && !string.IsNullOrWhiteSpace(tcAlias) && lnContador > 40)
4519  {
4520  continue;
4521  }
4522 
4523 
4524  switch (item["column_name"].ToString().ToLower())
4525  {
4526  case "com_estado":
4527  case "com_fecha":
4528  case "com_ini":
4529  case "sucursal":
4530  case "created":
4531  case "modified":
4532  case "vista":
4533 
4534  break;
4535 
4536  default:
4537 
4538  switch (item["data_type"].ToString().ToLower())
4539  {
4540  case "text":
4541  case "ntext":
4542 
4543  if (!string.IsNullOrWhiteSpace(tcAlias))
4544  {
4545  lcSelect += lcComa + "cast(" + tcAlias + "[" + item["column_name"].ToString().ToLower() + "] as varchar(8000)) as [" + item["column_name"].ToString().ToLower() + "] ";
4546  }
4547  else
4548  {
4549  //lcSelect += lcComa + "CONVERT(VARCHAR(8000), [" + item["column_name"].ToString().ToLower() + "]) as [" + item["column_name"].ToString().ToLower() + "] ";
4550  lcSelect += lcComa + tcAlias + "[" + item["column_name"].ToString().ToLower() + "]";
4551  }
4552  break;
4553 
4554  default:
4555 
4556  lcSelect += lcComa + tcAlias + "[" + item["column_name"].ToString().ToLower() + "]";
4557 
4558  break;
4559  }
4560 
4561  lcComa = ", ";
4562 
4563  break;
4564  }
4565  }
4566 
4567  return lcSelect;
4568  }
4569 
4570  private static string ObtenerCamposSet(string tcDBLocal, string tcTablaLocal)
4571  {
4572  // tcDBLocal->Nombre de la base de datos a la cual pertenece la tabla tcTablaLocal
4573  // tcTablaLocal->nombre de la tabla de la cual se debe comparar
4574 
4575  string lcSet = string.Empty;
4576  string lcComa = string.Empty;
4577  DataTable ldtCampos = new DataTable();
4578 
4579  DB.SQLExec("SELECT * FROM " + _cRaizDataBaseTemporal + tcDBLocal + ".dbo." + tcTablaLocal + " WHERE 1 = 2", ref ldtCampos);
4580 
4581  //Creamos estructura vacia
4582  for (int i = 0; i < ldtCampos.Columns.Count; i++)
4583  {
4584  switch (ldtCampos.Columns[i].ColumnName.ToLower())
4585  {
4586  case "com_estado":
4587  case "com_fecha":
4588  case "com_ini":
4589  case "sucursal":
4590  case "created":
4591 
4592  break;
4593 
4594  case "modified":
4595 
4596  lcSet += lcComa + " [" + ldtCampos.Columns[i].ColumnName.ToLower() + "] = " + DB.SQLString(DateTime.Now);
4597 
4598  lcComa = ", ";
4599  break;
4600 
4601  default:
4602 
4603  lcSet += lcComa + " [" + ldtCampos.Columns[i].ColumnName.ToLower() + "] = b.[" + ldtCampos.Columns[i].ColumnName.ToLower() + "] ";
4604 
4605  lcComa = ", ";
4606  break;
4607  }
4608  }
4609 
4610  return lcSet;
4611  }
4612 
4613  private static void CrearDataBaseTemporal(string tcSucursal)
4614  {
4615  _cRaizDataBaseTemporal = ObtenerDataBaseName(tcSucursal);
4616 
4617  // Carregar les dades de la gestió a una base de dades temporal dins del SQLSERVER
4618  CrearDataTable("COMUNES", _cRaizDataBaseTemporal);
4619 
4620  CrearDataTable("GESTION", _cRaizDataBaseTemporal);
4621 
4622  //* *Faig un recorregut per tots els móduls que tinc
4623  foreach (KeyValuePair<string, DB._ModuloSchema> entry in DB._dicCacheModulos)
4624  {
4625  CrearDataTable(entry.Value._Nombre, _cRaizDataBaseTemporal);
4626  }
4627 
4628  CrearDataTable("EUROWINSYS", _cRaizDataBaseTemporal);
4629  }
4630 
4631 
4632 
4633  private static void CrearDataTable(string tcDB, string tcArrelDB)
4634  {
4635  string lcDataBaseTemp = tcArrelDB + tcDB;
4636  string lcRutaTemp = Path.Combine(TempFolderName, tcDB);
4637 
4638  // tinc que comprovar si existeix
4639  if (Directory.Exists(lcRutaTemp))
4640  {
4641  // Recorrer todos los ficheros de la carpeta
4642  string[] files = Directory.GetFiles(lcRutaTemp, "*.xml");
4643 
4644 
4645  if (files.Length > 0)
4646  {
4647  DB._DBCreate(lcDataBaseTemp);
4648  }
4649 
4650  foreach (var file in files)
4651  {
4652  DataTable table = ConvertFileToDatatable(file, FormatoExportacion.XML);
4653  string lcTabla = Path.GetFileNameWithoutExtension(file);
4654 
4655  InsertarTablaBaseDatosBulk(table, tcDB, lcTabla, lcDataBaseTemp);
4656  }
4657 
4658  // Caso especial para el riesgo
4659  if (tcDB == "GESTION")
4660  {
4661  string fichero = Path.Combine(TempFolderName, "RIESGO.XML");
4662 
4663  // Tenemos que leer el fichero
4664  if (File.Exists(fichero))
4665  {
4666  DataTable table = ConvertFileToDatatable(fichero, FormatoExportacion.XML);
4667  string lcTabla = Path.GetFileNameWithoutExtension(fichero);
4668 
4669  InsertarTablaBaseDatosBulk(table, tcDB, lcTabla, lcDataBaseTemp);
4670  }
4671  }
4672  }
4673  }
4674 
4675  private static DataTable ObtenerDatosRecepcion(int tnIdConf)
4676  {
4677  string lcSql = string.Empty;
4678  string lcWhereCentral = string.Empty;
4679  string lcWhereSucur = string.Empty;
4680  string lcOrCentral = string.Empty;
4681  string lcOrSucur = string.Empty;
4682  string lcComa = string.Empty;
4683 
4684  DataTable TabTmp = new DataTable();
4685 
4686  // Reviso quines son les dades que he de rebre
4687 
4688 
4689  if (ficheroInfoConfig != null)
4690  {
4691  lcSql = " Select A.CLAVE, A.NOMBRE, cast(1 as bit) as SELRECIBIR, " +
4692  " A.VISIBLE, A.ID, A.PRINCIPAL, A.SECUNDARIA, A.IDGRUPO, A.VISICOND, A.RELACION, A.EMPRESA, A.EMPRESECUN, A.TIPOTABLA, 1 as PRIORIDAD, " +
4693  " A.asientos, A.otrasien, A.eos, A.iva_exen, A.ivasopor, A.ivareper, A.retsopor, A.retreper, A.compras " +
4694  " From " + DB.SQLDatabase("OFFLINE", "TABRELNET") + " a ";
4695 
4696  if (ficheroInfoConfig._PrioridadesCentral.Count == 0)
4697  {
4698  lcSql += " Where 1 = 2 ";
4699  }
4700  else
4701  {
4702  lcComa = "";
4703  lcSql += " Where A.ID IN (";
4704  foreach (int item in ficheroInfoConfig._PrioridadesCentral)
4705  {
4706  lcSql += lcComa + DB.SQLString(item);
4707  lcComa = ", ";
4708  }
4709 
4710  lcSql += ")";
4711  }
4712 
4713  lcSql += " UNION ALL ";
4714 
4715  lcSql += " Select A.CLAVE, A.NOMBRE, cast(1 as bit) as SELRECIBIR, " +
4716  " A.VISIBLE, A.ID, A.PRINCIPAL, A.SECUNDARIA, A.IDGRUPO, A.VISICOND, A.RELACION, A.EMPRESA, A.EMPRESECUN, A.TIPOTABLA, 2 as PRIORIDAD, " +
4717  " A.asientos, A.otrasien, A.eos, A.iva_exen, A.ivasopor, A.ivareper, A.retsopor, A.retreper, A.compras " +
4718  " From " + DB.SQLDatabase("OFFLINE", "TABRELNET") + " a ";
4719 
4720  if (ficheroInfoConfig._PrioridadesSucursal.Count == 0)
4721  {
4722  lcSql += " Where 1 = 2 ";
4723  }
4724  else
4725  {
4726  lcComa = "";
4727  lcSql += " Where A.ID IN (";
4728  foreach (int item in ficheroInfoConfig._PrioridadesSucursal)
4729  {
4730  lcSql += lcComa + DB.SQLString(item);
4731  lcComa = ", ";
4732  }
4733 
4734  lcSql += ")";
4735  }
4736  }
4737  else
4738  {
4739  // Si no encontramos el fichero de prioridades, vamos a obtener todas las tablas relacionadas
4740  lcSql = " Select A.CLAVE, A.NOMBRE, cast(1 as bit) as SELRECIBIR, " +
4741  " A.VISIBLE, A.ID, A.PRINCIPAL, A.SECUNDARIA, A.IDGRUPO, A.VISICOND, A.RELACION, A.EMPRESA, A.EMPRESECUN, A.TIPOTABLA, 1 as PRIORIDAD, " +
4742  " A.asientos, A.otrasien, A.eos, A.iva_exen, A.ivasopor, A.ivareper, A.retsopor, A.retreper, A.compras " +
4743  " From " + DB.SQLDatabase("OFFLINE", "TABRELNET") + " a " +
4744  " Where 1 = 1 ";
4745  }
4746 
4747 
4748  DB.SQLExec(lcSql, ref TabTmp);
4749 
4750  TabTmp.DefaultView.Sort = " CLAVE ASC, PRINCIPAL ASC, VISIBLE DESC, SECUNDARIA ASC ";
4751  TabTmp = TabTmp.DefaultView.ToTable();
4752 
4753  return TabTmp;
4754  }
4755 
4756  private static int Validaciones_Previas(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
4757  {
4758  string ficheroConfiguracion = Path.Combine(TempFolderName, "InfoConfig.xml");
4759  int lnValor = 0;
4760  string lcError = string.Empty;
4761 
4762  // Tenemos que leer el fichero
4763  if (!File.Exists(ficheroConfiguracion))
4764  return -1;
4765 
4766  string lcAllText = string.Empty;
4767 
4768  try
4769  {
4770  lcAllText = File.ReadAllText(ficheroConfiguracion);
4771  ficheroInfoConfig = _DeserializeOfflineInfoConfig(lcAllText);
4772  }
4773  catch
4774  {
4775  ficheroInfoConfig = new OfflineInfoConfig();
4776  }
4777 
4778  // Versión de Sage 50: Se revisará la versión de Sage 50 destino de los datos y se comparará con la versión incluida en el fichero de configuración de comunicaciones que se ha recibido.
4779  string[] lcVersionActual = InfoConfig._Version.Split('.');
4780  string[] lcVersionFichero = ficheroInfoConfig._Version.Split('.');
4781 
4782  if (lcVersionActual.Length > 2 && lcVersionFichero.Length > 2)
4783  {
4784  lnValor = 0;
4785 
4786  for (int i = 0; i < 3; i++)
4787  {
4788  if (lnValor == 0 && lcVersionActual[i] != lcVersionFichero[i])
4789  {
4790  lnValor = -1;
4791  }
4792  }
4793  }
4794 
4795  if (lnValor < 0)
4796  {
4797  lcError = "Los datos recibidos de la central son de la versión " + ficheroInfoConfig._Version + " de Sage 50, " +
4798  "la versión de su instalación es " + InfoConfig._Version + " ." + Environment.NewLine +
4799  "Para poder realizar la recepción de los datos es necesario que la versión de Sage 50 sea la misma.";
4800 
4801  Log_comoffDto logDto = logRepository.GetDto(datos);
4802  logDto.TipoDato = "01";
4803  logDto.Resultado = 3;
4804  logDto.Detalle = lcError;
4805 
4806  logRepository.Insert(logDto);
4807 
4808  FUNCTIONS._MessageBox(lcError, "Validaciones previas", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
4809  return lnValor;
4810  }
4811 
4812  // Año y Fecha inicial y final de ejercicio desde el cual se ejecuta envío:
4813  // Se comprobará que la fecha inicial y final del ejercicio en el cual se reciben datos son las mismas que las incluidas en el fichero de configuración de comunicaciones.
4814  _ejercicioActual = _ejercicioNew = InfoConfig._Ejercicio;
4815  if (InfoConfig._FechaInicial != ficheroInfoConfig._FechaInicial || InfoConfig._FechaFinal != ficheroInfoConfig._FechaFinal || InfoConfig._Ejercicio != ficheroInfoConfig._Ejercicio)
4816  {
4817  if (!DB._oAliasDBEjer.ContainsKey(ficheroInfoConfig._Ejercicio.Trim()))
4818  {
4819  lcError = "Se ha incluido información en el fichero de datos para el ejercicio " + ficheroInfoConfig._Ejercicio + ", pero dicho ejercicio no existe en el grupo de empresa en el cual está recibiendo los datos." + Environment.NewLine + Environment.NewLine +
4820  "Debe crear el ejercicio y volver a ejecutar una recepción de datos.";
4821 
4822  Actualizar_Tabla(datos, "OFFLINE", "EJERCICIOS", "EJERCICIOS.XML", logRepository);
4823 
4824  Log_comoffDto logDto = logRepository.GetDto(datos);
4825  logDto.TipoDato = "01";
4826  logDto.Resultado = 3;
4827  logDto.Detalle = lcError;
4828  logRepository.Insert(logDto);
4829 
4830  return 1;
4831  }
4832 
4833  _ejercicioNew = ficheroInfoConfig._Ejercicio;
4834  }
4835 
4836  // Tamaño de campos en la instalación que recibe los datos
4837  // Comprobar que la longitud de los campos de la instalación que recibe los datos es la misma que vendrá informada en el fichero de configuración de comunicaciones.
4838  if (!datos._IsCentral)
4839  {
4840  string ficheroAmplitud = Path.Combine(TempFolderName, "Config.xml");
4841 
4842  // Tenemos que leer el fichero
4843  if (!File.Exists(ficheroAmplitud))
4844  {
4845  lcError = "No existe la configuración de la longitud de campos en del fichero recibido.";
4846 
4847  Log_comoffDto logDto = logRepository.GetDto(datos);
4848  logDto.TipoDato = "01";
4849  logDto.Resultado = 3;
4850  logDto.Detalle = lcError;
4851  logRepository.Insert(logDto);
4852 
4853  FUNCTIONS._MessageBox(lcError, "Validaciones previas", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
4854  return -1;
4855  }
4856 
4857  //Crear fichero CONFIG.DBF
4858  DataTable configActual = clsOfflineUtils.AmplitudCampos();
4859 
4860  DataTable ldtConfigFichero = new DataTable();
4861  FUNCTIONS._Xml2Datatable(ficheroAmplitud, ref ldtConfigFichero);
4862 
4863  foreach (DataRow item in configActual.Rows)
4864  {
4865  DataRow[] rows = ldtConfigFichero.Select("clave = '" + item["clave"].ToString() + "' and db = '" + item["db"].ToString() + "'");
4866 
4867  if (rows.Length > 0)
4868  {
4869  if (Convert.ToInt32(item["ancho"]) != Convert.ToInt32(rows[0]["ancho"]))
4870  {
4871  lcError += item["clave"].ToString() + " Longitud en el fichero: " + Convert.ToInt32(rows[0]["ancho"]) + " , Longitud en la instalación: " + Convert.ToInt32(item["ancho"]) + Environment.NewLine;
4872  }
4873  }
4874  }
4875 
4876  if (!string.IsNullOrWhiteSpace(lcError))
4877  {
4878  lcError = "Existen diferencias en la longitud de algunos campos en la instalación en la que está recibiendo los datos, respecto a longitud de campos en la instalación que ha enviado los datos." +
4879  Environment.NewLine + Environment.NewLine + lcError;
4880 
4881  Log_comoffDto logDto = logRepository.GetDto(datos);
4882  logDto.TipoDato = "01";
4883  logDto.Resultado = 3;
4884  logDto.Detalle = lcError;
4885  logRepository.Insert(logDto);
4886 
4887  FUNCTIONS._MessageBox(lcError, "Validaciones previas. Recepción de datos Offline", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
4888  return -1;
4889  }
4890  }
4891 
4892  return lnValor;
4893  }
4894 
4895  private static int ObtenerResultadoComunicacion(string tdIdLog)
4896  {
4897  DataTable table = new DataTable();
4898  string lcSql = "Select MAX(resultado) AS resultado " +
4899  " From " + DB.SQLDatabase("OFFLINE", "LOG_COMOFF") +
4900  " WHERE idlog = " + DB.SQLString(tdIdLog);
4901 
4902  DB.SQLExec(lcSql, ref table);
4903 
4904  if (table != null && table.Rows.Count > 0)
4905  {
4906  return Convert.ToInt32(table.Rows[0]["resultado"]);
4907  }
4908 
4909  return 1;
4910  }
4911 
4915  private static void EnvioEmailNotificacion(string tcFicheroZip, OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
4916  {
4917  if (datos._NotificacionRecepcion && !string.IsNullOrEmpty(datos._EmailNotificacionRecepcion))
4918  {
4919  _TextStepDetalle = "Enviado email de notificación";
4920  _TextStepProgreso = _TextStepDetalle;
4921  _PorcenProgreso = IncrementarBarraProgreso();
4922 
4923  SendMail loSendMail = new SendMail("SUPERVISOR");
4924 
4925  int lnResultadoComunicacion = ObtenerResultadoComunicacion(datos._Log_ComoffID);
4926 
4927  if (string.IsNullOrWhiteSpace(tcFicheroZip))
4928  {
4929  loSendMail._Subject = "Sage 50 – Error en la recepción de datos";
4930  loSendMail._Body = " Grupo de empresa: " + GrupoEmpresa._CodigoGrupoActual() + " - " + DB.SQLValor("gruposemp", "codigo", GrupoEmpresa._CodigoGrupoActual(), "nombre", "eurowinsys").ToString() + "<br>" +
4931  " Sucursal Origen: " + datos._Sucursal + " - " + DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "NOMBRE", "OFFLINE").ToString() + "<br><br>" +
4932  " No existen ficheros de datos en la carpeta de FTP o OneDrive de la sucursal." + "<br><br>" +
4933  " Revise el documento adjunto donde se incluye detalle del registro de comunicaciones, en el cual podrá ver los errores que se han producido durante el proceso de recepción de datos. ";
4934  }
4935  else
4936  {
4937  switch (lnResultadoComunicacion)
4938  {
4939  case 3:
4940  loSendMail._Subject = "Sage 50 – Error en la recepción de datos";
4941  loSendMail._Body = " Grupo de empresa: " + GrupoEmpresa._CodigoGrupoActual() + " - " + DB.SQLValor("gruposemp", "codigo", GrupoEmpresa._CodigoGrupoActual(), "nombre", "eurowinsys").ToString() + "<br>" +
4942  " Sucursal Origen: " + datos._Sucursal + " - " + DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "NOMBRE", "OFFLINE").ToString() + "<br><br>" +
4943  " Se han producido errores en el proceso de recepción de datos de fecha " + clsOfflineUtils.ObtenerFechaFicheroDatos(tcFicheroZip) + ", fichero " + tcFicheroZip + ". " + "<br><br>" +
4944  " Revise el documento adjunto donde se incluye detalle del registro de comunicaciones, en el cual podrá ver los errores que se han producido durante el proceso de recepción de datos. ";
4945  break;
4946 
4947  case 2:
4948  loSendMail._Subject = "Sage 50 – Incidencias en la recepción de datos";
4949  loSendMail._Body = " Grupo de empresa: " + GrupoEmpresa._CodigoGrupoActual() + " - " + DB.SQLValor("gruposemp", "codigo", GrupoEmpresa._CodigoGrupoActual(), "nombre", "eurowinsys").ToString() + "<br>" +
4950  " Sucursal Origen: " + datos._Sucursal + " - " + DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "NOMBRE", "OFFLINE").ToString() + "<br><br>" +
4951  " Ha finalizado la recepción de datos de fecha " + clsOfflineUtils.ObtenerFechaFicheroDatos(tcFicheroZip) + ", fichero " + tcFicheroZip + " con incidencias." + "<br><br>" +
4952  " Revise el documento adjunto donde se incluye detalle del registro de comunicaciones, en el cual podrá ver las incidencias detectadas durante el proceso de recepción de datos.";
4953 
4954  break;
4955 
4956  default:
4957 
4958  loSendMail._Subject = "Sage 50 – Recepción de datos";
4959  loSendMail._Body = " Grupo de empresa: " + GrupoEmpresa._CodigoGrupoActual() + " - " + DB.SQLValor("gruposemp", "codigo", GrupoEmpresa._CodigoGrupoActual(), "nombre", "eurowinsys").ToString() + "<br>" +
4960  " Sucursal Origen: " + datos._Sucursal + " - " + DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "NOMBRE", "OFFLINE").ToString() + "<br><br>" +
4961  " Ha finalizado la recepción de datos de fecha " + clsOfflineUtils.ObtenerFechaFicheroDatos(tcFicheroZip) + ", fichero " + tcFicheroZip + " correctamente." + "<br><br>" +
4962  " Revise documento adjunto donde se incluye detalle del registro de comunicaciones en el cual podrá ver los datos recibidos.";
4963  break;
4964  }
4965  }
4966 
4967  loSendMail._Emails = datos._EmailNotificacionRecepcion.Split(';').ToList();
4968  loSendMail._EnvioDirecto = true;
4969  loSendMail._ShowEmailForm = false;
4970  loSendMail._CCOUsuarioActivo = false;
4971 
4972  _ObtenerConfiguracionEmail(loSendMail); //Task 202603
4973 
4974  // Adjuntar fichero Comunicaciones
4975  string cRuta = TempFolderName;
4976 
4977  Log_comoffDto logDto = logRepository.GetDto(datos);
4978  logDto.TipoDato = "01";
4979 
4980  try
4981  {
4982  using (RegistroComunicaciones loLogCom = new RegistroComunicaciones(datos._Log_ComoffID))
4983  {
4984 
4985  cRuta = Path.Combine(cRuta, loLogCom._NombreFicheroExportar);
4986 
4987  loLogCom._Exportar(ew.listados.Clases.Listados.ExportType.pdf, cRuta, false, "REG_COMU");
4988 
4989  loSendMail._AddAttachment(cRuta + ".pdf");
4990  }
4991  }
4992  catch (Exception)
4993  {
4994  logDto.Resultado = 2;
4995  logDto.Detalle = "No se ha podido adjuntar el fichero PDF.";
4996  logRepository.Insert(logDto);
4997  }
4998 
4999  if (!loSendMail._Send() && !string.IsNullOrWhiteSpace(loSendMail._Error_Message))
5000  {
5001  //En caso de que haya dado un error en el envío del email y estemos en modo de tarea programada, guardamos una notificación de Sage 50
5002  //FUNCTIONS._Notificacion("Sage 50 – Recepción de datos", "Incidencia en envío de email de la recepción de datos.",
5003  //"No se ha enviado correctamente el email de la recepción de datos. del grupo " + GrupoEmpresa._CodigoGrupoActual(), tcIcono: "warning");
5004  logDto.Resultado = 3;
5005  logDto.Detalle = "Fallo al realizar envío de mail de notificación de recepción de datos. Revise en el mantenimiento de grupos de empresa, los datos de configuración en pestaña Configuración notificaciones del Add-on Comunicaciones offline.";
5006  }
5007  else
5008  {
5009  logDto.Resultado = 1;
5010  logDto.Detalle = "Enviado email de notificación de recepción correctamente.";
5011  }
5012  logRepository.Insert(logDto);
5013 
5014  if (loSendMail._EnvioDirecto && File.Exists(cRuta + ".pdf"))
5015  {
5016  File.Delete(cRuta + ".pdf");
5017  }
5018 
5019  loSendMail = null;
5020  }
5021  }
5022 
5027  private static void Actualizar_Fecha_Recepcion_Multiconf(OfflineDatosComunicaciones datos)
5028  {
5029  string lcCampo = "ULTFECREC";
5030 
5031  DB.SQLExec("UPDATE " + DB.SQLDatabase("OFFLINE", "MULTCONF") +
5032  " SET " + lcCampo + " = " + DB.SQLString(DateTime.Now) + ", MODIFIED = MODIFIED " +
5033  " WHERE IDCONF = " + DB.SQLString(datos._IdConf));
5034  }
5035 
5036  private static void Actualizar_Fecha_Recepcion_Sucursales(OfflineDatosComunicaciones datos, string cTipoRecepcion, ILog_comoffRepository logRepository)
5037  {
5038  // i -> Carga Inicial
5039  // e -> Envío de datos
5040  string lcCampo = (cTipoRecepcion == "i" ? ", CARGAINI = " + DB.SQLString(DateTime.Now) : "");
5041  string lcTipoRecepcion = (cTipoRecepcion == "i" ? "la carga inicial" : "datos");
5042 
5043  DB.SQLExec("UPDATE " + DB.SQLDatabase("OFFLINE", "SUCURSALES") +
5044  " SET ULTFECREC = " + DB.SQLString(DateTime.Now) +
5045  lcCampo + ", MODIFIED = MODIFIED " +
5046  " WHERE CODIGO = " + DB.SQLString(datos._Sucursal));
5047 
5048 
5049  Log_comoffDto logDto = logRepository.GetDto(datos);
5050  logDto.TipoDato = "01";
5051  logDto.Resultado = 1;
5052  logDto.Detalle = "Recepción de " + lcTipoRecepcion + " finalizado correctamente.";
5053  logRepository.Insert(logDto);
5054  }
5055 
5056  private static bool Actualizar_Datos_Sucursales(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
5057  {
5058  // Actualizar configuraciones de sucursales:
5059  Actualizar_Tabla(datos, "OFFLINE", "SUCURSALES", "SUCURSALES.XML", logRepository);
5060  Actualizar_Tabla(datos, "OFFLINE", "SUCURALM", "SUCURALM.XML", logRepository);
5061  Actualizar_Tabla(datos, "OFFLINE", "SUCURLET", "SUCURLET.XML", logRepository);
5062  Actualizar_Tabla(datos, "OFFLINE", "SUCURCAJA", "SUCURCAJA.XML", logRepository);
5063  Actualizar_Tabla(datos, "OFFLINE", "PRIORIDAD", "PRIORIDAD.XML", logRepository);
5064 
5065  // Actualizar variables del grupo de empresa(configuración de grupo de empresa Sucursal):
5066  if (!string.IsNullOrWhiteSpace(datos._Sucursal))
5067  {
5068  bool llValor = Convert.ToBoolean(DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "ENV_FOTO", "OFFLINE"));
5069  _offlineConfig.InsertOrUpdateVariable(EnumVariables.ENVIARIMAGENES, (llValor ? ".T." : ".F."), "L");
5070 
5071  llValor = Convert.ToBoolean(DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "DELMANTES", "OFFLINE"));
5072  _offlineConfig.InsertOrUpdateVariable(EnumVariables.DELETE_SUC_MANT, (llValor ? ".T." : ".F."), "L");
5073 
5074  llValor = Convert.ToBoolean(DB.SQLValor("SUCURSALES", "CODIGO", datos._Sucursal, "DELDOCS", "OFFLINE"));
5075  _offlineConfig.InsertOrUpdateVariable(EnumVariables.DELETE_SUC_DOC, (llValor ? ".T." : ".F."), "L");
5076  }
5077 
5078  Log_comoffDto logDto = logRepository.GetDto(datos);
5079  logDto.TipoDato = "01";
5080  logDto.Resultado = 1;
5081  logDto.Detalle = "Actualizada configuración de sucursales y grupos de empresa.";
5082  logRepository.Insert(logDto);
5083 
5084  // Se deberán actualizar o crear las configuraciones modificando o añadiendo registros en tablas MULTCONF, TABNETCONF, SUCURCONF según datos recibidos en ficheros XML con el mismo nombre.
5085  Actualizar_Tabla(datos, "OFFLINE", "MULTCONF", "MULTCONF.XML", logRepository);
5086  Actualizar_Tabla(datos, "OFFLINE", "TABNETCONF", "TABNETCONF.XML", logRepository);
5087  Actualizar_Tabla(datos, "OFFLINE", "SUCURCONF", "SUCURCONF.XML", logRepository);
5088 
5089  Actualizar_Tabla(datos, "OFFLINE", "EJERCICIOS", "EJERCICIOS.XML", logRepository);
5090 
5091  return true;
5092  }
5093 
5094  private static bool Actualizar_Datos_Servidor(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
5095  {
5096  Log_comoffDto logDto = logRepository.GetDto(datos);
5097 
5098  bool lbExiste = true;
5099 
5100  lbExiste = Actualizar_Tabla(datos, "OFFLINE", "SUCURSALES", "SUCURSALES.XML", logRepository);
5101  if (lbExiste)
5102  {
5103  logDto.TipoDato = "01";
5104  logDto.Resultado = 1;
5105  logDto.Detalle = "Actualizada configuración de la sucursal " + datos._Sucursal + ". Revise mantenimiento de sucursales para ver los cambios realizados.";
5106  logRepository.Insert(logDto);
5107  }
5108 
5109  // Actualizar configuraciones de sucursales:
5110  lbExiste = Actualizar_Tabla(datos, "GESTION", "SERIES", "SERIES.XML", logRepository);
5111  if (lbExiste)
5112  {
5113  logDto.TipoDato = "01";
5114  logDto.Resultado = 1;
5115  logDto.Detalle = "Actualizados contadores de series de documentos de la sucursal " + datos._Sucursal;
5116  logRepository.Insert(logDto);
5117  }
5118 
5119  Actualizar_Tabla(datos, "OFFLINE", "EJERCICIOS", "EJERCICIOS.XML", logRepository);
5120 
5121  Actualizar_Tabla(datos, "OFFLINE", "ACTRIESGO", "ACTRIESGO.XML", logRepository);
5122 
5123  return true;
5124  }
5125 
5126  private static bool Actualizar_Tabla(OfflineDatosComunicaciones datos, string tcNombreBD, string tcNombreTabla, string tcFicheroXML, ILog_comoffRepository logRepository)
5127  {
5128  string lcSql = string.Empty;
5129  string lcWhere = string.Empty;
5130  string lcTablaSql = string.Empty;
5131 
5132  string fichero = Path.Combine(TempFolderName, tcFicheroXML);
5133 
5134  // Tenemos que leer el fichero
5135  if (!File.Exists(fichero))
5136  return false;
5137 
5138  DataTable ldtFichero = new DataTable();
5139  FUNCTIONS._Xml2Datatable(fichero, ref ldtFichero);
5140 
5141  tcNombreTabla = tcNombreTabla.Trim();
5142  lcTablaSql = DB.SQLDatabase(tcNombreBD, tcNombreTabla);
5143 
5144  Log_comoffDto logDto = logRepository.GetDto(datos);
5145 
5146  switch (tcNombreTabla)
5147  {
5148  case "SUCURSALES":
5149 
5150  foreach (DataRow item in ldtFichero.Rows)
5151  {
5152  lcWhere = " WHERE codigo = " + DB.SQLString(item["CODIGO"]);
5153 
5154  lcSql = " IF EXISTS " + Environment.NewLine +
5155  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5156  " BEGIN " + Environment.NewLine +
5157  " Update " + lcTablaSql +
5158  " Set NOMBRE = " + DB.SQLString(item["NOMBRE"]) +
5159  " , LICENCIA = " + DB.SQLString(item["NOMBRE"]) +
5160  " , ACTIVA = " + DB.SQLString(item["ACTIVA"]) +
5161  " , DELDOCS = " + DB.SQLString(item["DELDOCS"]) +
5162  " , ENV_FOTO = " + DB.SQLString(item["ENV_FOTO"]) +
5163  " , DELMANTES = " + DB.SQLString(item["DELMANTES"]) +
5164  lcWhere + Environment.NewLine +
5165  " END " + Environment.NewLine +
5166  " ELSE " + Environment.NewLine +
5167  " BEGIN" + Environment.NewLine +
5168  " INSERT INTO " + lcTablaSql + " " +
5169  " (CODIGO,NOMBRE,LICENCIA,ACTIVA,DELDOCS,ENV_FOTO,DELMANTES) " +
5170  "VALUES (" +
5171  DB.SQLString(item["CODIGO"]) + ", " +
5172  DB.SQLString(item["NOMBRE"]) + ", " +
5173  DB.SQLString(item["LICENCIA"]) + ", " +
5174  DB.SQLString(item["ACTIVA"]) + ", " +
5175  DB.SQLString(item["DELDOCS"]) + ", " +
5176  DB.SQLString(item["ENV_FOTO"]) + ", " +
5177  DB.SQLString(item["DELMANTES"]) + ") " +
5178  " END ";
5179 
5180 
5181  DB.SQLExec(lcSql);
5182  }
5183 
5184  break;
5185 
5186  case "SUCURALM":
5187 
5188  foreach (DataRow item in ldtFichero.Rows)
5189  {
5190  lcWhere = " WHERE SUCURSAL = " + DB.SQLString(item["SUCURSAL"]) + " AND LINIA = " + DB.SQLString(item["LINIA"]);
5191 
5192  lcSql = " IF EXISTS " + Environment.NewLine +
5193  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5194  " BEGIN " + Environment.NewLine +
5195  " Update " + lcTablaSql +
5196  " Set ALMACEN = " + DB.SQLString(item["ALMACEN"]) +
5197  lcWhere + Environment.NewLine +
5198  " END " + Environment.NewLine +
5199  " ELSE " + Environment.NewLine +
5200  " BEGIN" + Environment.NewLine +
5201  " INSERT INTO " + lcTablaSql + " " +
5202  " (LINIA,SUCURSAL,ALMACEN) " +
5203  " VALUES (" +
5204  DB.SQLString(item["LINIA"]) + ", " +
5205  DB.SQLString(item["SUCURSAL"]) + ", " +
5206  DB.SQLString(item["ALMACEN"]) + ") " +
5207  " END ";
5208 
5209  DB.SQLExec(lcSql);
5210  }
5211 
5212  break;
5213 
5214  case "SUCURLET":
5215 
5216  foreach (DataRow item in ldtFichero.Rows)
5217  {
5218  lcWhere = " WHERE SUCURSAL = " + DB.SQLString(item["SUCURSAL"]) + " AND LINIA = " + DB.SQLString(item["LINIA"]);
5219 
5220  lcSql = " IF EXISTS " + Environment.NewLine +
5221  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5222  " BEGIN " + Environment.NewLine +
5223  " Update " + lcTablaSql +
5224  " Set LETRA = " + DB.SQLString(item["LETRA"]) +
5225  lcWhere + Environment.NewLine +
5226  " END " + Environment.NewLine +
5227  " ELSE " + Environment.NewLine +
5228  " BEGIN" + Environment.NewLine +
5229  " INSERT INTO " + lcTablaSql + " " +
5230  " (LINIA,SUCURSAL,LETRA) " +
5231  " VALUES (" +
5232  DB.SQLString(item["LINIA"]) + ", " +
5233  DB.SQLString(item["SUCURSAL"]) + ", " +
5234  DB.SQLString(item["LETRA"]) + ") " +
5235  " END ";
5236 
5237  DB.SQLExec(lcSql);
5238  }
5239 
5240  break;
5241 
5242  case "SUCURCAJA":
5243 
5244  foreach (DataRow item in ldtFichero.Rows)
5245  {
5246  lcWhere = " WHERE SUCURSAL = " + DB.SQLString(item["SUCURSAL"]) + " AND LINIA = " + DB.SQLString(item["LINIA"]);
5247 
5248  lcSql = " IF EXISTS " + Environment.NewLine +
5249  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5250  " BEGIN " + Environment.NewLine +
5251  " Update " + lcTablaSql +
5252  " Set CAJA = " + DB.SQLString(item["CAJA"]) +
5253  lcWhere + Environment.NewLine +
5254  " END " + Environment.NewLine +
5255  " ELSE " + Environment.NewLine +
5256  " BEGIN" + Environment.NewLine +
5257  " INSERT INTO " + lcTablaSql + " " +
5258  " (LINIA,SUCURSAL,CAJA) " +
5259  " VALUES (" +
5260  DB.SQLString(item["LINIA"]) + ", " +
5261  DB.SQLString(item["SUCURSAL"]) + ", " +
5262  DB.SQLString(item["CAJA"]) + ") " +
5263  " END ";
5264 
5265  DB.SQLExec(lcSql);
5266  }
5267 
5268  break;
5269 
5270  case "SUCURCONF":
5271 
5272  foreach (DataRow item in ldtFichero.Rows)
5273  {
5274  lcWhere = " WHERE SUCURSAL = " + DB.SQLString(item["SUCURSAL"]) + " AND IDCONF = " + DB.SQLString(item["IDCONF"]);
5275 
5276  lcSql = " IF EXISTS " + Environment.NewLine +
5277  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5278  " BEGIN " + Environment.NewLine +
5279  " Update " + lcTablaSql +
5280  " Set VALOR = " + DB.SQLString(item["VALOR"]) +
5281  lcWhere + Environment.NewLine +
5282  " END " + Environment.NewLine +
5283  " ELSE " + Environment.NewLine +
5284  " BEGIN" + Environment.NewLine +
5285  " INSERT INTO " + lcTablaSql + " " +
5286  " (SUCURSAL,IDCONF,VALOR) " +
5287  " VALUES (" +
5288  DB.SQLString(item["SUCURSAL"]) + ", " +
5289  DB.SQLString(item["IDCONF"]) + ", " +
5290  DB.SQLString(item["VALOR"]) + ") " +
5291  " END ";
5292 
5293  DB.SQLExec(lcSql);
5294  }
5295 
5296  break;
5297 
5298  case "PRIORIDAD":
5299 
5300  bool lbMsj = false;
5301  foreach (DataRow item in ldtFichero.Rows)
5302  {
5303  // Comprobamos si existe el registro con los mismos valores en campos prioridad y control para mostrar mensaje
5304  if (!lbMsj)
5305  {
5306  lcWhere = " WHERE IDTABREL = " + DB.SQLString(item["IDTABREL"]) + " AND PRIO_DATOS = " + DB.SQLString(item["PRIO_DATOS"]) + " AND CTRL_DATOS = " + DB.SQLString(item["CTRL_DATOS"]);
5307 
5308  DataTable dt = new DataTable();
5309  DB.SQLExec("SELECT * FROM " + lcTablaSql + lcWhere, ref dt);
5310  if (dt != null && dt.Rows.Count == 0)
5311  {
5312  logDto.TipoDato = "01";
5313  logDto.Resultado = 1;
5314  logDto.Detalle = "Actualizada configuración de control de datos. Revise el mantenimiento de grupos de empresa para comprobar los cambios realizados.";
5315  logRepository.Insert(logDto);
5316  lbMsj = true;
5317  }
5318  }
5319 
5320 
5321  lcWhere = " WHERE IDTABREL = " + DB.SQLString(item["IDTABREL"]);
5322 
5323  lcSql = " IF EXISTS " + Environment.NewLine +
5324  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5325  " BEGIN " + Environment.NewLine +
5326  " Update " + lcTablaSql +
5327  " Set PRIO_DATOS = " + DB.SQLString(item["PRIO_DATOS"]) +
5328  " , CTRL_DATOS = " + DB.SQLString(item["CTRL_DATOS"]) +
5329  lcWhere + Environment.NewLine +
5330  " END " + Environment.NewLine +
5331  " ELSE " + Environment.NewLine +
5332  " BEGIN" + Environment.NewLine +
5333  " INSERT INTO " + lcTablaSql + " " +
5334  " (IDTABREL,PRIO_DATOS,CTRL_DATOS) " +
5335  " VALUES (" +
5336  DB.SQLString(item["IDTABREL"]) + ", " +
5337  DB.SQLString(item["PRIO_DATOS"]) + ", " +
5338  DB.SQLString(item["CTRL_DATOS"]) + ") " +
5339  " END ";
5340 
5341  DB.SQLExec(lcSql);
5342 
5343  try
5344  {
5345 
5346  }
5347  catch (Exception)
5348  {
5349  logDto.TipoDato = "01";
5350  logDto.Resultado = 2;
5351  logDto.Detalle = "Se ha producido un error que ha impedido realizar actualización de configuración de control de datos. Revise la configuración de control de datos en el mantenimiento de grupos de empresa por si fuera necesario realizar algún cambio de forma manual.";
5352  logRepository.Insert(logDto);
5353 
5354  break;
5355  }
5356  }
5357 
5358  break;
5359 
5360  case "MULTCONF":
5361  List<string> lstInsert = new List<string>();
5362  List<string> lstUpdate = new List<string>();
5363 
5364  string lcCodigo = "";
5365  bool llHayCambios = false;
5366  ConfComOffline configura = new ConfComOffline();
5367 
5368  foreach (DataRow item in ldtFichero.Rows)
5369  {
5370  // Elimino todas las tareas programas que tenemos creada de esta configuración si existe para después crear de nuevo con valores actualizados
5371  lcCodigo = item["CODIGO"].ToString();
5372 
5373  configura = new ConfComOffline(lcCodigo);
5374  configura._Load();
5375  llHayCambios = false;
5376 
5377  lcWhere = " WHERE CODIGO = " + DB.SQLString(item["CODIGO"]);
5378 
5379  string lcHora_Rec = FUNCTIONS.Modificar_Hora(item["HORA_REC"].ToString(), -15);
5380  string lcHora_Env = FUNCTIONS.Modificar_Hora(item["HORA_ENV"].ToString(), 15);
5381 
5382  var tipo = Convert.ToInt16(item["TIPO"]);
5383 
5384  lcSql = " Update " + lcTablaSql +
5385  " Set IDCONF = " + DB.SQLString(item["IDCONF"]) +
5386  " , NOMBRE = " + DB.SQLString(item["NOMBRE"]) +
5387  " , TIPO = " + DB.SQLString((tipo == 0 ? 0 : Convert.ToInt16(item["TIPO"]) == 1 ? 2 : 1)) +
5388  (tipo == 1 ? (tipo == 0 ? "" : ", FREC_ENV = ''") : " , FREC_ENV = " + DB.SQLString(item["FREC_REC"])) + // Se giran los valores
5389  (tipo == 2 ? (tipo == 0 ? "" : ", FREC_REC = ''") : " , FREC_REC = " + DB.SQLString(item["FREC_ENV"])) + // Se giran los valores
5390  (tipo == 1 ? (tipo == 0 ? "" : ", HORA_ENV = ''") : " , HORA_ENV = " + DB.SQLString(lcHora_Rec)) + // Se giran los valores
5391  (tipo == 2 ? (tipo == 0 ? "" : ", HORA_REC = ''") : " , HORA_REC = " + DB.SQLString(lcHora_Env)) + // Se giran los valores
5392  " , REC_STOCK = " + DB.SQLString(item["REC_STOCK"]) +
5393  lcWhere + Environment.NewLine;
5394 
5395  DB.SQLExec(lcSql, out int lnFilasAfectadas);
5396 
5397  if (lnFilasAfectadas == 0)
5398  {
5399  DB.SQLExec("DELETE FROM " + lcTablaSql + " WHERE IDCONF = " + DB.SQLString(item["IDCONF"]));
5400 
5401  lcSql = " INSERT INTO " + lcTablaSql + " " +
5402  " (IDCONF,NOMBRE,CODIGO,TIPO,FREC_ENV,FREC_REC,HORA_ENV,HORA_REC,REC_STOCK,CONEXION,CFG_FTP,ONEDRVUSER,ONEDRVFOLD,REFRESHTOKEN,RESOURCEIDS,CLIENTID) " +
5403  " VALUES (" +
5404  DB.SQLString(item["IDCONF"]) + ", " +
5405  DB.SQLString(item["NOMBRE"]) + ", " +
5406  DB.SQLString(item["CODIGO"]) + ", " +
5407  DB.SQLString((Convert.ToInt16(item["TIPO"]) == 0 ? 0 : Convert.ToInt16(item["TIPO"]) == 1 ? 2 : 1)) + ", " +
5408  (Convert.ToInt16(item["TIPO"]) == 1 ? DB.SQLString(0) : DB.SQLString(item["FREC_REC"])) + ", " + // Se giran los valores
5409  (Convert.ToInt16(item["TIPO"]) == 2 ? DB.SQLString(0) : DB.SQLString(item["FREC_ENV"])) + ", " + // Se giran los valores
5410  (Convert.ToInt16(item["TIPO"]) == 1 ? DB.SQLString("") : DB.SQLString(lcHora_Rec)) + ", " + // Se giran los valores
5411  (Convert.ToInt16(item["TIPO"]) == 2 ? DB.SQLString("") : DB.SQLString(lcHora_Env)) + ", " + // Se giran los valores
5412  DB.SQLString(item["REC_STOCK"]) + ", " +
5413  DB.SQLString(item["CONEXION"]) + ", " +
5414  DB.SQLString(item["CFG_FTP"]) + ", " +
5415  DB.SQLString(item["ONEDRVUSER"]) + ", " +
5416  DB.SQLString(item["ONEDRVFOLD"]) + ", " +
5417  DB.SQLString(item["REFRESHTOKEN"]) + ", " +
5418  DB.SQLString(item["RESOURCEIDS"]) + ", " +
5419  DB.SQLString(item["CLIENTID"]) +
5420  ") ";
5421 
5422  DB.SQLExec(lcSql);
5423 
5424  lstInsert.Add(Convert.ToString(item["CODIGO"]) + " - " + Convert.ToString(item["NOMBRE"]));
5425 
5426  llHayCambios = true;
5427  }
5428  else
5429  {
5430  lstUpdate.Add(Convert.ToString(item["CODIGO"]) + " - " + Convert.ToString(item["NOMBRE"]));
5431  }
5432 
5434  configura._Codigo = Convert.ToString(item["CODIGO"]);
5435  configura._IdConf = Convert.ToInt32(item["IDCONF"]);
5436  configura._Conexion = Convert.ToInt32(item["CONEXION"]);
5437  configura._ConfiguracionFtp = Convert.ToString(item["CFG_FTP"]);
5438  configura._OneDriveUser = Convert.ToString(item["ONEDRVUSER"]);
5439  configura._OneDriveFolder = Convert.ToString(item["ONEDRVFOLD"]);
5440  configura._RefreshToken = Convert.ToString(item["REFRESHTOKEN"]);
5441  configura._ResourceIds = Convert.ToString(item["RESOURCEIDS"]);
5442  configura._ClientId = Convert.ToString(item["CLIENTID"]);
5443  configura._Nombre = Convert.ToString(item["NOMBRE"]);
5444 
5445  // Comprobamos si hay cambio de tipo (envío, recepción o ambas) o si se ha modificado la hora de envío o recepción
5446  switch (Convert.ToInt16(item["TIPO"]))
5447  {
5448  case 0: // Envío/Recepción
5449  llHayCambios = llHayCambios || (configura.Envio != true);
5450  llHayCambios = llHayCambios || (configura.Recepcion != true);
5451  break;
5452  case 1: // Envío
5453  llHayCambios = llHayCambios || (configura.Envio != false);
5454  llHayCambios = llHayCambios || (configura.Recepcion != true);
5455  break;
5456  case 2: // Recepción
5457  llHayCambios = llHayCambios || (configura.Envio != true);
5458  llHayCambios = llHayCambios || (configura.Recepcion != false);
5459  break;
5460  }
5461  llHayCambios = llHayCambios || (configura._HoraEnvio != (Convert.ToInt16(item["TIPO"]) == 1 ? "" : Convert.ToString(lcHora_Rec)));
5462  llHayCambios = llHayCambios || (configura._HoraRecepcion != (Convert.ToInt16(item["TIPO"]) == 2 ? "" : Convert.ToString(lcHora_Env)));
5463 
5464  if (llHayCambios)
5465  {
5466  TareasProgramadasOffline tareap = new TareasProgramadasOffline(configura);
5467  tareap.Delete();
5468  }
5469 
5470  // ---------------- IMPORTANTE ----------------
5471  // Estas propiedades hay que cambiar después de la posible eliminación de tareas programadas si hay cambio en la configuración,
5472  // porque si cambiamos antes de eliminar las posibles tareas, no encuentra las tareas programadas de esta configuración que ya existen
5473  // ---------------- IMPORTANTE ----------------
5474 
5475  // Debemos de cambiar los valores y si la configuración que viene es envío debemos marcar recepción o viceversa
5476  // la propiedad _Tipo le asignamos valor con las propiedades Envío y Recepción
5477  switch (Convert.ToInt16(item["TIPO"]))
5478  {
5479  case 0: // Envío/Recepción
5480  configura.Envio = true;
5481  configura.Recepcion = true;
5482  break;
5483  case 1: // Envío
5484  configura.Envio = false;
5485  configura.Recepcion = true;
5486  break;
5487  case 2: // Recepción
5488  configura.Envio = true;
5489  configura.Recepcion = false;
5490  break;
5491  }
5492 
5493  configura._FrecuenciaEnvio = Convert.ToInt16(item["TIPO"]) == 1 ? 0 : Convert.ToInt16(item["FREC_REC"]);
5494  configura._FrecuenciaRecepcion = Convert.ToInt16(item["TIPO"]) == 2 ? 0 : Convert.ToInt16(item["FREC_ENV"]);
5495  configura._HoraEnvio = Convert.ToInt16(item["TIPO"]) == 1 ? "" : Convert.ToString(lcHora_Rec);
5496  configura._HoraRecepcion = Convert.ToInt16(item["TIPO"]) == 2 ? "" : Convert.ToString(lcHora_Env);
5497  configura._RecalcularStock = Convert.ToBoolean(item["REC_STOCK"]);
5498 
5499  if (llHayCambios)
5500  {
5501  TareasProgramadasOffline tareap = new TareasProgramadasOffline(configura);
5502  tareap.Save();
5503  }
5504  }
5505 
5506  logDto.TipoDato = "01";
5507  logDto.Resultado = 1;
5508  if (lstInsert.Count > 0)
5509  {
5510  List<string> lstMsjInsert = new List<string>();
5511  lstMsjInsert.Add("Creadas las siguientes configuraciones de comunicaciones: ");
5512  lstMsjInsert.Add("Creadas las siguientes tareas programadas de configuraciones de comunicaciones: ");
5513  foreach (string valorMsj in lstMsjInsert)
5514  {
5515  logDto.Detalle = valorMsj;
5516  foreach (string valor in lstInsert)
5517  {
5518  logDto.Detalle += Environment.NewLine + valor;
5519  }
5520  logRepository.Insert(logDto);
5521  }
5522  }
5523 
5524 
5525  if (lstUpdate.Count > 0)
5526  {
5527  List<string> lstMsjUpdate = new List<string>();
5528  lstMsjUpdate.Add("Actualizadas las siguientes configuraciones de comunicaciones: ");
5529  lstMsjUpdate.Add("Actualizadas las siguientes tareas programadas de configuraciones de comunicaciones: ");
5530 
5531  foreach (string valorMsj in lstMsjUpdate)
5532  {
5533  logDto.Detalle = valorMsj;
5534  foreach (string valor in lstUpdate)
5535  {
5536  logDto.Detalle += Environment.NewLine + valor;
5537  }
5538  logRepository.Insert(logDto);
5539  }
5540  }
5541 
5542  break;
5543 
5544  case "TABNETCONF":
5545 
5546  foreach (DataRow item in ldtFichero.Rows)
5547  {
5548  lcWhere = " WHERE CODIGO = " + DB.SQLString(item["CODIGO"]) + " AND IDTABREL = " + DB.SQLString(item["IDTABREL"]);
5549 
5550  lcSql = " Update " + lcTablaSql +
5551  " Set IDCONF = " + DB.SQLString(item["IDCONF"]) +
5552  " , SELENVIAR = " + DB.SQLString(item["SELRECIBIR"]) +
5553  " , SELRECIBIR = " + DB.SQLString(item["SELENVIAR"]) +
5554  lcWhere;
5555 
5556  DB.SQLExec(lcSql, out int lnFilasAfectadas);
5557 
5558  if (lnFilasAfectadas == 0)
5559  {
5560  DB.SQLExec("DELETE FROM " + lcTablaSql + " WHERE IDCONF = " + DB.SQLString(item["IDCONF"]) + " AND IDTABREL = " + DB.SQLString(item["IDTABREL"]));
5561 
5562  lcSql = " INSERT INTO " + lcTablaSql + " " +
5563  " (CODIGO,IDCONF,IDTABREL,SELENVIAR,SELRECIBIR) " +
5564  " VALUES (" +
5565  DB.SQLString(item["CODIGO"]) + ", " +
5566  DB.SQLString(item["IDCONF"]) + ", " +
5567  DB.SQLString(item["IDTABREL"]) + ", " +
5568  DB.SQLString(item["SELRECIBIR"]) + ", " +
5569  DB.SQLString(item["SELENVIAR"]) + ") ";
5570 
5571  DB.SQLExec(lcSql);
5572  }
5573  }
5574 
5575  break;
5576 
5577  case "SERIES":
5578 
5579  foreach (DataRow item in ldtFichero.Rows)
5580  {
5581  lcWhere = " WHERE EMPRESA = " + DB.SQLString(item["EMPRESA"]) + " AND SERIE = " + DB.SQLString(item["SERIE"]) + " AND TIPODOC = " + DB.SQLString(item["TIPODOC"]);
5582 
5583  lcSql = " IF EXISTS " + Environment.NewLine +
5584  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5585  " BEGIN " + Environment.NewLine +
5586  " Update " + lcTablaSql +
5587  " Set CONTADOR = " + DB.SQLString(item["CONTADOR"]) +
5588  lcWhere + Environment.NewLine +
5589  " END " + Environment.NewLine +
5590  " ELSE " + Environment.NewLine +
5591  " BEGIN" + Environment.NewLine +
5592  " INSERT INTO " + lcTablaSql + " " +
5593  " (EMPRESA, SERIE, TIPODOC, CONTADOR) " +
5594  " VALUES (" +
5595  DB.SQLString(item["EMPRESA"]) + ", " +
5596  DB.SQLString(item["SERIE"]) + ", " +
5597  DB.SQLString(item["TIPODOC"]) + ", " +
5598  DB.SQLString(item["CONTADOR"]) + ") " +
5599  " END ";
5600 
5601  DB.SQLExec(lcSql);
5602  }
5603 
5604  break;
5605 
5606  case "EJERCICIOS":
5607 
5608  foreach (DataRow item in ldtFichero.Rows)
5609  {
5610  lcWhere = " WHERE TIPOOFF = " + DB.SQLString(item["TIPOOFF"]) + " AND EJERCICIO = " + DB.SQLString(item["EJERCICIO"]);
5611 
5612  lcSql = " IF EXISTS " + Environment.NewLine +
5613  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5614  " BEGIN " + Environment.NewLine +
5615  " Update " + lcTablaSql +
5616  " Set TRASPEJER = " + DB.SQLString(item["TRASPEJER"]) +
5617  lcWhere + Environment.NewLine +
5618  " END " + Environment.NewLine +
5619  " ELSE " + Environment.NewLine +
5620  " BEGIN" + Environment.NewLine +
5621  " INSERT INTO " + lcTablaSql + " " +
5622  " (TIPOOFF,EJERCICIO,TRASPEJER) " +
5623  " VALUES (" +
5624  DB.SQLString(item["TIPOOFF"]) + ", " +
5625  DB.SQLString(item["EJERCICIO"]) + ", " +
5626  DB.SQLString(item["TRASPEJER"]) + ") " +
5627  " END ";
5628 
5629  DB.SQLExec(lcSql);
5630  }
5631 
5632  break;
5633 
5634  case "ACTRIESGO":
5635 
5636  foreach (DataRow item in ldtFichero.Rows)
5637  {
5638  lcWhere = " WHERE EMPRESA = " + DB.SQLString(item["EMPRESA"]) + " AND CODIGO = " + DB.SQLString(item["CODIGO"]);
5639 
5640  lcSql = " IF EXISTS " + Environment.NewLine +
5641  " ( SELECT * FROM " + lcTablaSql + lcWhere + " ) " + Environment.NewLine +
5642  " BEGIN " + Environment.NewLine +
5643  " Update " + lcTablaSql +
5644  " Set MODIFIED = GETDATE() " +
5645  lcWhere + Environment.NewLine +
5646  " END " + Environment.NewLine +
5647  " ELSE " + Environment.NewLine +
5648  " BEGIN" + Environment.NewLine +
5649  " INSERT INTO " + lcTablaSql + " " +
5650  " (EMPRESA,CODIGO) " +
5651  " VALUES (" +
5652  DB.SQLString(item["EMPRESA"]) + ", " +
5653  DB.SQLString(item["CODIGO"]) + ") " +
5654  " END ";
5655 
5656  DB.SQLExec(lcSql);
5657  }
5658 
5659  break;
5660  }
5661 
5662  return true;
5663  }
5664 
5665  private static string Tratamiento_Deletenet_Tabla_Control(string tcTabla, string tcWhere, string tcEjercicio, string tcId, string tcChecksum)
5666  {
5667  //Task 190035: Control de que el checksum de deletenet no esté modificado o manipulado desde la tabla en el campo sql
5668  if (tcChecksum != _offlineConfig.GenerarChecksumDeleteNet(tcId, tcWhere, tcTabla))
5669  {
5670  throw new ChecksumDeleteNetException("Error en la comprobación del checksum de la tabla Deletenet");
5671  }
5672 
5673  string lcSql = string.Empty;
5674  string lcTablaControl = _offlineConfig.ObtenerTablaControlRelacionada(tcTabla);
5675 
5676  if (string.IsNullOrWhiteSpace(lcTablaControl))
5677  {
5678  return "";
5679  }
5680 
5681  switch (lcTablaControl)
5682  {
5683  case "CTRL_CLI":
5684  case "CTRL_CUE":
5685  case "CTRL_FPAG":
5686  case "CTRL_LINEA":
5687  case "CTRL_RUTAS":
5688  case "CTRL_VEN":
5689  case "CTRL_AGEN":
5690  case "CTRL_TPFAC":
5691  case "CTRL_ACTI":
5692  case "CTRL_PRO":
5693  case "CTRL_ART":
5694  case "CTRL_FAM":
5695  case "CTRL_SUBFA":
5696  case "CTRL_MARCA":
5697  case "CTRL_CARAC":
5698  case "CTRL_MCAM":
5699  case "CTRL_TARIF":
5700  case "CTRL_MON":
5701  case "CTRL_TPIVA":
5702  case "CTRL_ALM":
5703  case "CTRL_BANC":
5704  case "CTRL_ENTI":
5705  case "CTRL_IDIOM":
5706  case "CTRL_TPRET":
5707  case "CTRL_NIV1":
5708  case "CTRL_NIV2":
5709  case "CTRL_NIV3":
5710  case "CTRL_NIV4":
5711  case "CTRL_PLAN":
5712  case "CTRL_SECUN":
5713  case "CTRL_CONGA":
5714  case "CTRL_CIRPF":
5715  case "CTRL_SEC":
5716  case "CTRL_TPCOS":
5717  case "CTRL_TPOPE":
5718  case "CTRL_OPERA":
5719  case "CTRL_CONC":
5720  case "CTRL_COLO":
5721  case "CTRL_TALL":
5722  case "CTRL_GTALL":
5723  case "CTRL_GCOLO":
5724  case "CTRL_TCP":
5725  case "CTRL_CLASI":
5726  case "CTRL_EMPL":
5727  case "CTRL_LET":
5728  case "CTRL_OBRA":
5729  case "CTRL_SUPLI":
5730  case "CTRL_MCONC":
5731  case "CTRL_FCOB":
5732  case "CTRL_CAJAS":
5733  case "CTRL_DEFVA":
5734  case "CTRL_CAN":
5735  case "CTRL_REPOS":
5736  case "CTRL_RETIR":
5737  case "CTRL_FORMU":
5738  case "CTRL_MCAML":
5739  case "CTRL_TPREG":
5740  case "CTRL_ARQUE":
5741  case "CTRL_PEDIN":
5742  case "CTRL_FPTOS":
5743 
5744  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + tcWhere + "; ";
5745  break;
5746 
5747  case "CTRL_PARCO":
5748 
5749  tcWhere = tcWhere.Replace("linea", "linia");
5750  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + tcWhere + " AND EJERCICIO = " + DB.SQLString(tcEjercicio) + "; ";
5751 
5752  break;
5753 
5754  case "CTRL_ASIEN":
5755 
5756  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) +
5757  " FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + " a " +
5758  " INNER JOIN (SELECT empresa, numero, linea FROM " + DB.SQLDatabase("GESTION","ASIENTOS") + tcWhere + " ) b " +
5759  " ON a.empresa = b.EMPRESA and a.NUMERO = b.NUMERO and a.LINEA = b.LINEA " +
5760  " WHERE a.EJERCICIO = " + DB.SQLString(tcEjercicio) + "; ";
5761 
5762  break;
5763 
5764  case "CTRL_PREVV":
5765 
5766  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + tcWhere + " AND PERIODO = " + DB.SQLString(tcEjercicio) + "; ";
5767  break;
5768 
5769  case "CTRL_PREVC":
5770 
5771  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + tcWhere + " AND YEAR(EMISION) = " + DB.SQLString(tcEjercicio) + "; ";
5772  break;
5773 
5774  default:
5775 
5776  lcSql = " DELETE FROM " + DB.SQLDatabase("OFFLINE", lcTablaControl) + tcWhere + " AND EJERCICIO = " + DB.SQLString(tcEjercicio) + "; ";
5777  break;
5778  }
5779 
5780  return lcSql;
5781  }
5782 
5783 
5784 
5785  private static bool Tratamiento_Deletenet(OfflineDatosComunicaciones datos, ILog_comoffRepository logRepository)
5786  {
5787  string lcFile = Path.Combine(TempFolderName, "DELETENET.xml");
5788  if (!File.Exists(lcFile))
5789  {
5790  return false;
5791  }
5792 
5793  DataTable table = ConvertFileToDatatable(lcFile, FormatoExportacion.XML);
5794 
5795  string lcDb = string.Empty;
5796  string lcTabla = string.Empty;
5797  string lcEjercicio = string.Empty;
5798  string lcWhere = string.Empty;
5799  string lcTipoDato = string.Empty;
5800  string lcChecksum = string.Empty;
5801  string lcId = string.Empty;
5802 
5803  string lcSql = string.Empty;
5804  DataTable tablaConsulta = new DataTable();
5805 
5806  List<string> lstTareasProg = new List<string>();
5807  ConfComOffline configura = new ConfComOffline();
5808 
5809  foreach (DataRow item in table.Rows)
5810  {
5811  string lcCodigo = "";
5812 
5813  lcTipoDato = clsOfflineUtils.ObtenerTipoDato(item.Field<string>("clavetab").TrimEnd());
5814 
5815  lcDb = item.Field<string>("db").TrimEnd();
5816  lcTabla = item.Field<string>("tabla").TrimEnd();
5817  lcEjercicio = item.Field<string>("ejercicio").TrimEnd();
5818  lcWhere = item.Field<string>("sql").TrimEnd();
5819  lcId = item.Field<string>("id").TrimEnd();
5820  lcChecksum = item.Field<string>("checksum").TrimEnd();
5821 
5822  try
5823  {
5824  lcSql = Tratamiento_Deletenet_Tabla_Control(lcDb + "!" + lcTabla, lcWhere, lcEjercicio, lcId, lcChecksum);
5825  lcSql += " DELETE FROM " + DB.SQLDatabase(lcDb, lcTabla) + lcWhere + ";";
5826 
5827 
5828  switch (lcTabla)
5829  {
5830  case "C_PLANT":
5831 
5832  lcWhere = lcWhere.Replace("codigo", "plantilla");
5833  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "D_PLANTCLI") + lcWhere + ";";
5834  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "D_PLANTLIN") + lcWhere + ";";
5835  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "D_PLANTPLA") + lcWhere + ";";
5836  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PLANTHDOC") + lcWhere + ";";
5837  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PLANCLIART") + lcWhere + ";";
5838 
5839  break;
5840 
5841  case "ARTICULO":
5842 
5843  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICAM") + lcWhere + " AND FICHERO = 'ARTICULO' ;";
5844 
5845  lcWhere = lcWhere.Replace("codigo", "articulo");
5846  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PVPCOL") + lcWhere + ";";
5847  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PVP") + lcWhere + ";";
5848  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OFERTAS") + lcWhere + ";";
5849  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "BARRAS") + lcWhere + ";";
5850  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "EAN_PESO") + lcWhere + ";";
5851  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ESCANDAL") + lcWhere + ";";
5852  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "REFERPRO") + lcWhere + ";";
5853  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "IDI_ART") + lcWhere + ";";
5854  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ART_FOTO") + lcWhere + ";";
5855  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "STOALMMM") + lcWhere + ";";
5856  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CMBPVP") + lcWhere + ";";
5857 
5858  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "ART_CLASIF") + lcWhere + ";";
5859  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "ART_COLO") + lcWhere + ";";
5860  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "ART_TALL") + lcWhere + ";";
5861 
5862  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ART_ULTCOS") + lcWhere + ";";
5863 
5864 
5865  if (EW_GLOBAL._ModuloActivo("TPV"))
5866  {
5867  lcSql += " DELETE FROM " + DB.SQLDatabase("TPV", "ART_REST") + lcWhere + ";";
5868  }
5869 
5870  if (EW_GLOBAL._ModuloActivo("TUEFID"))
5871  {
5872  lcSql += " DELETE FROM " + DB.SQLDatabase("TUEFID", "ART_REG") + lcWhere + ";";
5873  lcSql += " DELETE FROM " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + lcWhere + ";";
5874  }
5875  if (EW_GLOBAL._ModuloActivo("LOTES"))
5876  {
5877  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "ARTLOT") + lcWhere + ";";
5878  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "BAREAN") + lcWhere + ";";
5879  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "COSTELOT") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
5880 
5881  lcWhere = item.Field<string>("sql").TrimEnd();
5882  lcWhere = lcWhere.Replace("codigo", "LEFT(codigo," + EW_GLOBAL._GetLenCampo(ew.global.Diccionarios.KeyDiccionarioLenCampos.wn_articulo) + ")");
5883  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "MULTICAM") + lcWhere + " AND FICHERO = 'ARTLOTES' ;";
5884  }
5885 
5886  break;
5887 
5888  case "PROVEED":
5889 
5890  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICAM") + lcWhere + " AND FICHERO = 'PROVEEDO' ;";
5891 
5892  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OTRAS") + lcWhere + ";";
5893 
5894  lcWhere = lcWhere.Replace("codigo", "proveed");
5895  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "DESC_PRO") + lcWhere + ";";
5896 
5897  lcWhere = item.Field<string>("sql").TrimEnd();
5898  lcWhere = lcWhere.Replace("codigo", "proveedor");
5899  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ACTI_PRO") + lcWhere + ";";
5900  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "BANC_PRO") + lcWhere + ";";
5901  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONT_PRO") + lcWhere + ";";
5902  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENV_PRO") + lcWhere + ";";
5903  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "GIRO_PRO") + lcWhere + ";";
5904  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "TELF_PRO") + lcWhere + ";";
5905  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONTLF_PRO") + lcWhere + ";";
5906  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "VACA_PRO") + lcWhere + ";";
5907 
5908  lcWhere = item.Field<string>("sql").TrimEnd();
5909  lcWhere = lcWhere.Replace("codigo", "cliente");
5910  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENTRE_CL") + lcWhere + ";";
5911 
5912  break;
5913 
5914  case "CLIENTES":
5915 
5916  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICAM") + lcWhere + " AND FICHERO = 'CLIENTES' ;";
5917 
5918  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OTRAS") + lcWhere + ";";
5919  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "RIESGO") + lcWhere + ";";
5920 
5921  lcWhere = lcWhere.Replace("codigo", "cliente");
5922  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "DESCUEN") + lcWhere + ";";
5923  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ACTI_CLI") + lcWhere + ";";
5924  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "BANC_CLI") + lcWhere + ";";
5925  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONT_CLI") + lcWhere + ";";
5926  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENV_CLI") + lcWhere + ";";
5927  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "GIRO_CLI") + lcWhere + ";";
5928  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "TELF_CLI") + lcWhere + ";";
5929  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONTLF_CLI") + lcWhere + ";";
5930  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "VACA_CLI") + lcWhere + ";";
5931  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENTRE_CL") + lcWhere + ";";
5932 
5933  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "CUOTAS") + lcWhere + ";";
5934  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "CUO_MES") + lcWhere + ";";
5935  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "MANDATOS") + lcWhere + ";";
5936 
5937  if (EW_GLOBAL._ModuloActivo("TUEFID"))
5938  {
5939  lcSql += " DELETE FROM " + DB.SQLDatabase("TUEFID", "CLITARJFID") + lcWhere + ";";
5940  }
5941 
5942  break;
5943 
5944  case "ASIENTOS":
5945 
5946  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OTRASIEN") + lcWhere + ";";
5947  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "EOS") + lcWhere + ";";
5948  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "RETREPER") + lcWhere + ";";
5949  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "RETSOPOR") + lcWhere + ";";
5950  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "IVAREPER") + lcWhere + ";";
5951  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "IVASOPOR") + lcWhere + ";";
5952  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "IVA_EXEN") + lcWhere + ";";
5953  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MOD347I") + lcWhere + ";";
5954  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "IVACJREPER") + lcWhere + ";";
5955  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "IVACJSOPOR") + lcWhere + ";";
5956 
5957  string lcWhereObserasi = " where " + lcWhere.Substring(lcWhere.IndexOf("asi"));
5958  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OBSERASI") + lcWhereObserasi + ";";
5959  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONCILIA") + lcWhere + ";";
5960  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONCIASI") + lcWhere + ";";
5961  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ASIMEM") + lcWhere + ";";
5962  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "FACTURAE") + lcWhere + ";";
5963 
5964  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MOD347M") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
5965  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MOD349R") + lcWhere + " AND EJERCICIOA = '" + lcEjercicio + "' ;";
5966 
5967  break;
5968 
5969  case "ENTREGAS":
5970  case "ENTRE_PV":
5971  case "ENTRE_PR":
5972 
5973  //Obtener primero número del asiento de la entrega para localizar el resto de ASIs del asiento
5974  var query = $"SELECT ASIENTOS.EMPRESA, ASIENTOS.NUMERO, ASIENTOS.ASI FROM {DB.SQLDatabase("GESTION", "ASIENTOS")} ASIENTOS " +
5975  $"INNER JOIN " +
5976  $" (SELECT EMPRESA, NUMERO FROM {DB.SQLDatabase("GESTION", "ASIENTOS")} {lcWhere}) AS DATOS " +
5977  $"ON ASIENTOS.EMPRESA = DATOS.EMPRESA and ASIENTOS.NUMERO = DATOS.NUMERO ";
5978  var datosAsiento = new DataTable();
5979 
5980  if(DB.SQLExec(query, ref datosAsiento))
5981  {
5982  foreach (DataRow row in datosAsiento.Rows)
5983  {
5984  var empresa = Convert.ToString(row["EMPRESA"]).TrimEnd();
5985  var asi = Convert.ToString(row["ASI"]).TrimEnd();
5986  var whereLineaAsientoEntrega = $" WHERE empresa = '{empresa}' and asi = '{asi}' ";
5987 
5988  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "OTRASIEN") + whereLineaAsientoEntrega + ";";
5989  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ASIENTOS") + whereLineaAsientoEntrega + ";";
5990 
5991  var numero = Convert.ToString(row["numero"]).TrimEnd();
5992  var whereControlAsientoEntrega = $" WHERE empresa = '{empresa}' and numero = '{numero}' ";
5993  lcSql += " DELETE FROM " + DB.SQLDatabase("OFFLINE", "CTRL_ASIEN") + whereControlAsientoEntrega + ";";
5994  }
5995  }
5996 
5997 
5998  break;
5999 
6000  case "MONEDA":
6001 
6002  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "COTIZA") + lcWhere + ";";
6003 
6004  break;
6005 
6006  case "ENTIDAD":
6007 
6008  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "OFICINAS") + lcWhere + ";";
6009 
6010  break;
6011 
6012  case "FAMILIAS":
6013 
6014  lcWhere = lcWhere.Replace("codigo", "familia");
6015  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "DESC_FAM") + lcWhere + ";";
6016 
6017  break;
6018 
6019  case "F_PAG":
6020 
6021  lcWhere = lcWhere.Replace("codigo", "fpag");
6022  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "FPAG_GIR") + lcWhere + ";";
6023 
6024  break;
6025 
6026  case "GRUPCOLO":
6027 
6028  lcWhere = lcWhere.Replace("codigo", "grupo");
6029  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COLOGRUP") + lcWhere + ";";
6030 
6031  break;
6032 
6033  case "GRUPTALL":
6034 
6035  lcWhere = lcWhere.Replace("codigo", "grupo");
6036  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "TALLGRUP") + lcWhere + ";";
6037 
6038  break;
6039 
6040  case "LINEAS":
6041 
6042  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "LIN_DESC") + lcWhere + ";";
6043 
6044  break;
6045 
6046  case "PLANS":
6047 
6048  lcWhere = lcWhere.Replace("codigo", "plancont");
6049  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PLAN_D") + lcWhere + ";";
6050 
6051  break;
6052 
6053  case "RUTAS":
6054 
6055  lcWhere = lcWhere.Replace("codigo", "ruta");
6056  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "ZONAS") + lcWhere + ";";
6057 
6058  break;
6059 
6060  case "VENDEDOR":
6061 
6062  lcWhere = lcWhere.Replace("codigo", "vendedor");
6063  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "ART_COMI") + lcWhere + ";";
6064 
6065  break;
6066 
6067  case "ALMACEN":
6068 
6069  lcWhere = lcWhere.Replace("codigo", "almacen");
6070  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ART_ULTCOS") + lcWhere + ";";
6071  break;
6072 
6073  case "TALLAS":
6074 
6075  lcWhere = lcWhere.Replace("codigo", "talla");
6076  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ART_ULTCOS") + lcWhere + ";";
6077  break;
6078 
6079  case "COLORES":
6080 
6081  lcWhere = lcWhere.Replace("codigo", "color");
6082  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ART_ULTCOS") + lcWhere + ";";
6083  break;
6084 
6085  case "C_PRESUV":
6086 
6087  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA2") + lcWhere + " AND FICHERO = 4 ;";
6088  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENTRE_PR") + lcWhere + " ;";
6089  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PRES_ADI") + lcWhere + " ;";
6090  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PORTES_PRV") + lcWhere + " ;"; //Bug 195879
6091 
6092  break;
6093 
6094  case "C_PEDIVE":
6095 
6096  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA2") + lcWhere + " AND FICHERO = 2 ;";
6097  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONTADO") + lcWhere + " AND TIPO = 2 ;";
6098  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENTRE_PV") + lcWhere + " ;";
6099  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PEDV_ADI") + lcWhere + " ;";
6100  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PORTES_PDV") + lcWhere + " ;"; //Bug 195879
6101 
6102  if (EW_GLOBAL._ModuloActivo("GAPED"))
6103  {
6104  lcSql += " DELETE FROM " + DB.SQLDatabase("GAPED", "D_PEDIVEES") + lcWhere + " AND EJERCICI = '" + lcEjercicio + "' ;";
6105  }
6106 
6107  break;
6108 
6109  case "D_PEDIVE":
6110 
6111  if (EW_GLOBAL._ModuloActivo("GAPED"))
6112  {
6113  lcSql += " DELETE FROM " + DB.SQLDatabase("GAPED", "D_PEDIVEES") + lcWhere + " AND EJERCICI = '" + lcEjercicio + "' ;";
6114  }
6115  break;
6116 
6117  case "C_ALBVEN":
6118 
6119  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA2") + lcWhere + " AND FICHERO = 1 ;";
6120  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONTADO") + lcWhere + " AND TIPO = 1 ;";
6121 
6122  //Bug 195567 => Borrado por empresa+numero+letra
6123  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "REFALBCLI") + lcWhere + " ;";
6124  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ALB_FPAG") + lcWhere + " ;";
6125 
6126  //Borrado por empresa+albaran+letra
6127  lcWhere = lcWhere.Replace("numero", "albaran");
6128  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ENTREGAS") + lcWhere + " ;";
6129  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PORTES") + lcWhere + " ;"; //Bug 195879
6130 
6131  lcWhere = lcWhere.Replace("albaran", "numero");
6132  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "ALBV_ADI") + lcWhere + " ;";
6133 
6134  if (EW_GLOBAL._ModuloActivo("TPV"))
6135  {
6136  lcSql += " DELETE FROM " + DB.SQLDatabase("TPV", "TIKETS") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
6137  lcSql += " DELETE FROM " + DB.SQLDatabase("TPV", "C_ALBVEN") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
6138  }
6139 
6140  break;
6141 
6142  case "D_ALBVEN":
6143 
6144  if (EW_GLOBAL._ModuloActivo("TUEFID"))
6145  {
6146  lcSql += " DELETE FROM " + DB.SQLDatabase("TUEFID", "LIN_AV") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
6147  }
6148 
6149  if (EW_GLOBAL._ModuloActivo("LOTES"))
6150  {
6151  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBVE") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6152  }
6153 
6154  lcWhere = lcWhere.Replace("linia", "linea");
6155  if (EW_GLOBAL._ModuloActivo("TPV"))
6156  {
6157  lcSql += " DELETE FROM " + DB.SQLDatabase("TPV", "D_ALBVEN") + lcWhere + " AND EJERCICIO = '" + lcEjercicio + "' ;";
6158  }
6159 
6160  lcWhere = lcWhere.Replace("numero", "albaran");
6161  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "VENSER") + lcWhere + " ;";
6162 
6163  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "VENSER") + lcWhere, ref tablaConsulta);
6164  foreach (DataRow itemSerie in tablaConsulta.Rows)
6165  {
6166  lcSql += " UPDATE " + DB.SQLDatabase("COMUNES", "COMPRAS") + " SET BAJA = '', CODEMP = '', FBAJA = NULL " +
6167  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6168  }
6169 
6170  break;
6171 
6172  case "C_ALBDEP":
6173 
6174  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA2") + lcWhere + " AND FICHERO = 5 ;";
6175  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "CONTADO") + lcWhere + " AND TIPO = 4 ;";
6176  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "DEPV_ADI") + lcWhere + " ;";
6177  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PORTES_DPV") + lcWhere + " ;"; //Bug 195879
6178 
6179  break;
6180 
6181  case "D_ALBDEP":
6182 
6183  if (EW_GLOBAL._ModuloActivo("LOTES"))
6184  {
6185  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTDEPVE") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6186  }
6187 
6188  lcWhere = lcWhere.Replace("linia", "linea");
6189  lcWhere = lcWhere.Replace("numero", "deposito");
6190  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "DEPSER") + lcWhere + " ;";
6191 
6192  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "DEPSER") + lcWhere, ref tablaConsulta);
6193  foreach (DataRow itemSerie in tablaConsulta.Rows)
6194  {
6195  lcSql += " UPDATE " + DB.SQLDatabase("COMUNES", "COMPRAS") + " SET BAJA = '', CODEMP = '', FBAJA = NULL " +
6196  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6197  }
6198 
6199  break;
6200 
6201  case "C_PRECOM":
6202 
6203  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA3") + lcWhere + " AND FICHERO = 3 ;";
6204 
6205  break;
6206 
6207  case "C_PEDICO":
6208 
6209  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA3") + lcWhere + " AND FICHERO = 2 ;";
6210  if (EW_GLOBAL._ModuloActivo("GAPED"))
6211  {
6212  lcSql += " DELETE FROM " + DB.SQLDatabase("GAPED", "D_PEDICOES") + lcWhere + " AND EJERCICI = '" + lcEjercicio + "' ;";
6213  }
6214 
6215  break;
6216 
6217  case "D_PEDICO":
6218 
6219  if (EW_GLOBAL._ModuloActivo("GAPED"))
6220  {
6221  lcSql += " DELETE FROM " + DB.SQLDatabase("GAPED", "D_PEDICOES") + lcWhere + " AND EJERCICI = '" + lcEjercicio + "' ;";
6222  }
6223  break;
6224 
6225  case "C_ALBCOM":
6226 
6227  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA3") + lcWhere + " AND FICHERO = 1 ;";
6228 
6229  break;
6230 
6231  case "D_ALBCOM":
6232 
6233  if (EW_GLOBAL._ModuloActivo("LOTES"))
6234  {
6235  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBCO") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6236  }
6237 
6238  lcWhere = lcWhere.Replace("linia", "linea");
6239  lcWhere = lcWhere.Replace("numero", "albaran");
6240  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "COMSER") + lcWhere + " ;";
6241 
6242  lcWhere = lcWhere.Replace("empresa", "codempcom");
6243  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COMPRAS") + lcWhere + " AND [ANY] = '" + lcEjercicio + "' ";
6244 
6245  break;
6246 
6247  case "C_DEPCOM":
6248 
6249  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "MULTICA3") + lcWhere + " AND FICHERO = 4 ;";
6250 
6251  break;
6252 
6253  case "D_DEPCOM":
6254 
6255  if (EW_GLOBAL._ModuloActivo("LOTES"))
6256  {
6257  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTDEPCO") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6258  }
6259 
6260  lcWhere = lcWhere.Replace("linia", "linea");
6261  lcWhere = lcWhere.Replace("numero", "albaran");
6262  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "DEPCSER") + lcWhere + " ;";
6263 
6264  lcWhere = lcWhere.Replace("empresa", "codempcom");
6265  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COMPRAS") + lcWhere + " AND [ANY] = '" + lcEjercicio + "' ";
6266 
6267  break;
6268 
6269  case "C_ALBARE":
6270 
6271  if (EW_GLOBAL._ModuloActivo("LOTES"))
6272  {
6273  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBRE") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6274  }
6275 
6276  lcWhere = lcWhere.Replace("numero", "albaran");
6277  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "REGUSER") + lcWhere + " ;";
6278 
6279  break;
6280 
6281  case "D_ALBARE":
6282 
6283  if (EW_GLOBAL._ModuloActivo("LOTES"))
6284  {
6285  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBRE") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6286  }
6287 
6288  lcWhere = lcWhere.Replace("linia", "linea");
6289  lcWhere = lcWhere.Replace("numero", "albaran");
6290  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "REGUSER") + lcWhere + " ;";
6291 
6292  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "REGUSER") + lcWhere, ref tablaConsulta);
6293  foreach (DataRow itemSerie in tablaConsulta.Rows)
6294  {
6295  lcSql += " UPDATE " + DB.SQLDatabase("COMUNES", "COMPRAS") + " SET BAJA = '', CODEMP = '', FBAJA = NULL " +
6296  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6297  }
6298 
6299  break;
6300 
6301  case "C_ALBATR":
6302 
6303  if (EW_GLOBAL._ModuloActivo("LOTES"))
6304  {
6305  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBTR") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6306  }
6307 
6308  lcWhere = lcWhere.Replace("numero", "albaran");
6309  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "TRASPSER") + lcWhere + " ;";
6310 
6311  break;
6312 
6313  case "D_ALBATR":
6314 
6315  if (EW_GLOBAL._ModuloActivo("LOTES"))
6316  {
6317  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTALBTR") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6318  }
6319 
6320  lcWhere = lcWhere.Replace("linia", "linea");
6321  lcWhere = lcWhere.Replace("numero", "albaran");
6322  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "TRASPSER") + lcWhere + " ;";
6323 
6324  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "TRASPSER") + lcWhere, ref tablaConsulta);
6325  foreach (DataRow itemSerie in tablaConsulta.Rows)
6326  {
6327  lcSql += " UPDATE " + DB.SQLDatabase("COMUNES", "COMPRAS") + " SET BAJA = '', CODEMP = '', FBAJA = NULL " +
6328  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6329  }
6330 
6331  break;
6332 
6333  case "STOCKINI":
6334 
6335  if (EW_GLOBAL._ModuloActivo("LOTES"))
6336  {
6337  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTSTINI") + lcWhere + " ;";
6338  }
6339 
6340  lcWhere = lcWhere.Replace("linia", "linea");
6341  lcWhere = lcWhere.Replace("numero", "albaran");
6342  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "INICIALSER") + lcWhere + " ;";
6343 
6344  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "INICIALSER") + lcWhere, ref tablaConsulta);
6345  foreach (DataRow itemSerie in tablaConsulta.Rows)
6346  {
6347  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COMPRAS") +
6348  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6349  }
6350 
6351  break;
6352 
6353  case "REGULARI":
6354 
6355  if (EW_GLOBAL._ModuloActivo("LOTES"))
6356  {
6357  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTREGUL") + lcWhere + " ;";
6358  }
6359 
6360  lcWhere = lcWhere.Replace("linia", "linea");
6361  lcWhere = lcWhere.Replace("numero", "albaran");
6362  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "REGULARISER") + lcWhere + " ;";
6363 
6364  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "REGULARISER") + lcWhere, ref tablaConsulta);
6365  foreach (DataRow itemSerie in tablaConsulta.Rows)
6366  {
6367  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COMPRAS") +
6368  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6369  }
6370 
6371  break;
6372 
6373  case "C_PROD":
6374 
6375  if (EW_GLOBAL._ModuloActivo("LOTES"))
6376  {
6377  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTCPROD") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6378  }
6379 
6380  lcWhere = lcWhere.Replace("numero", "albaran");
6381  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PRODUSERC") + lcWhere + " ;";
6382 
6383  lcWhere = lcWhere.Replace("empresa", "codempcom");
6384  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "COMPRAS") + lcWhere + " AND [ANY] = '" + lcEjercicio + "' ";
6385 
6386  break;
6387 
6388  case "D_PROD":
6389 
6390  if (EW_GLOBAL._ModuloActivo("LOTES"))
6391  {
6392  lcWhere = lcWhere.Replace("linea", "linia");
6393  lcSql += " DELETE FROM " + DB.SQLDatabase("LOTES", "LTDPROD") + lcWhere + " AND PERIODO = '" + lcEjercicio + "' ;";
6394  }
6395 
6396  lcWhere = lcWhere.Replace("linia", "linea");
6397  lcWhere = lcWhere.Replace("numero", "albaran");
6398  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "PRODUSER") + lcWhere + " ;";
6399 
6400  DB.SQLExec(" SELECT SERIE FROM " + DB.SQLDatabase("GESTION", "PRODUSER") + lcWhere, ref tablaConsulta);
6401  foreach (DataRow itemSerie in tablaConsulta.Rows)
6402  {
6403  lcSql += " UPDATE " + DB.SQLDatabase("COMUNES", "COMPRAS") + " SET BAJA = '', CODEMP = '', FBAJA = NULL " +
6404  " WHERE SERIE = " + DB.SQLString(itemSerie["SERIE"]) + " AND [ANY] = '" + lcEjercicio + "' ";
6405  }
6406 
6407  break;
6408 
6409  case "MULTCONF":
6410 
6411  string[] subPos = lcWhere.Split('=');
6412  if (subPos.Length == 2)
6413  lcCodigo = subPos[1].TrimEnd();
6414 
6415  DB.SQLExec(" SELECT codigo FROM " + DB.SQLDatabase("OFFLINE", "MULTCONF") + lcWhere, ref tablaConsulta);
6416  if (tablaConsulta != null && tablaConsulta.Rows.Count > 0)
6417  lcCodigo = tablaConsulta.Rows[0]["codigo"].ToString();
6418 
6419  configura = new ConfComOffline(lcCodigo);
6420  configura._Load();
6421 
6422  lcSql += " DELETE FROM " + DB.SQLDatabase("OFFLINE", "TABNETCONF") + lcWhere + " ;";
6423  lcSql += " DELETE FROM " + DB.SQLDatabase("OFFLINE", "SUCURCONF") + lcWhere + " ;";
6424  lcSql += " DELETE FROM " + DB.SQLDatabase("OFFLINE", "USERCONF") + lcWhere + " ;";
6425 
6426  break;
6427 
6428  case "ARQUEOS":
6429 
6430  lcWhere = lcWhere.Replace("numero", "arqueo");
6431  lcSql += " DELETE FROM " + DB.SQLDatabase("TPV", "D_ARQUEO") + lcWhere + " ;";
6432 
6433  lcSql += " UPDATE " + DB.SQLDatabase("TPV", "C_ALBVEN") + " SET ARQUEO = 0 " + lcWhere + " ;";
6434  lcSql += " UPDATE " + DB.SQLDatabase("TPV", "TIKETS") + " SET ARQUEO = 0 " + lcWhere + " ;";
6435 
6436  lcSql += " UPDATE " + DB.SQLDatabase("TPV", "REPOSI") + " SET ARQUEO = 0 " + lcWhere + " ;";
6437  lcSql += " UPDATE " + DB.SQLDatabase("TPV", "COB_PAGO") + " SET ARQUEO = 0 " + lcWhere + " ;";
6438 
6439  int lnPosInicio = lcWhere.IndexOf("and ejercicio");
6440  int lnPosFinal = lcWhere.IndexOf("and arqueo");
6441  lcWhere = lcWhere.Substring(0, lnPosInicio - 1) + " " + lcWhere.Substring(lnPosFinal);
6442 
6443  lcSql += " UPDATE " + DB.SQLDatabase("OFFLINE", "CTRL_REPOS") + " SET ARQUEO = 0 " + lcWhere + " ;";
6444  lcSql += " UPDATE " + DB.SQLDatabase("OFFLINE", "CTRL_REPOS") + " SET ARQUEO = 0 " + lcWhere + " ;";
6445 
6446  break;
6447 
6448  case "PEDINT_C":
6449 
6450  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "PEDINT_D") + lcWhere + " ;";
6451  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "PEDINT_LIN") + lcWhere + " ;";
6452  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "PEDINT_REG") + lcWhere + " ;";
6453 
6454  break;
6455 
6456  case "PEDINT_D":
6457 
6458  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "PEDINT_LIN") + lcWhere + " ;";
6459  lcSql += " DELETE FROM " + DB.SQLDatabase("COMUNES", "PEDINT_REG") + lcWhere + " ;";
6460 
6461  break;
6462  }
6463 
6464  try
6465  {
6466  DB.SQLExec(lcSql, out int lnFilasAfectadas);
6467  Log_comoffDto logDto = logRepository.GetDto(datos);
6468  logDto.TipoDato = lcTipoDato;
6469  if (lnFilasAfectadas > 0)
6470  {
6471  logDto.Resultado = 1;
6472  logDto.Detalle = "Se han eliminado " + lnFilasAfectadas + " registros en la tabla " + lcTabla + " en el grupo destino. " + Environment.NewLine +
6473  "Dichas eliminaciones se corresponden con datos eliminados en el grupo de empresa origen de los datos recibidos.";
6474  logRepository.Insert(logDto);
6475  }
6476  else
6477  {
6478  logDto.Resultado = 3;
6479  logDto.Detalle = "No se han podido eliminar registros en la tabla " + lcTabla + " porque no existían los datos a eliminar en el grupo de empresa destino de la recepción de datos. " + Environment.NewLine +
6480  "Dichas eliminaciones se corresponden con datos eliminados en el grupo de empresa origen de los datos recibidos.";
6481  logRepository.Insert(logDto);
6482  }
6483  }
6484  catch (Exception e)
6485  {
6486  Log_comoffDto logDto = logRepository.GetDto(datos);
6487  logDto.TipoDato = lcTipoDato;
6488  logDto.Resultado = 2;
6489  logDto.Detalle = "Se ha producido un error en la gestión de la tabla Deletenet. Se descartará este registro. Excepción: " + e.Message;
6490  logRepository.Insert(logDto);
6491  }
6492 
6493  if (lcTabla == "MULTCONF")
6494  {
6495  TareasProgramadasOffline tareap = new TareasProgramadasOffline(configura);
6496  tareap.Delete();
6497 
6498  lstTareasProg.Add(configura._Codigo + " - " + configura._Nombre);
6499  }
6500 
6501 
6502  }
6503  catch (ChecksumDeleteNetException e)
6504  {
6505  Log_comoffDto logDto = logRepository.GetDto(datos);
6506  logDto.TipoDato = lcTipoDato;
6507  logDto.Resultado = 2;
6508  logDto.Detalle = "Se ha producido un error de validación de checksum de seguridad en la tabla Deletenet. Se descartará este registro. Excepción: " + e.Message;
6509  logRepository.Insert(logDto);
6510  }
6511  }
6512 
6513 
6514  if (lstTareasProg.Count > 0)
6515  {
6516  Log_comoffDto logDto = logRepository.GetDto(datos);
6517  logDto.TipoDato = lcTipoDato;
6518  logDto.Resultado = 1;
6519  logDto.Detalle = "Eliminadas las siguientes tareas programadas de configuraciones de comunicaciones: ";
6520 
6521  foreach (string valor in lstTareasProg)
6522  {
6523  logDto.Detalle += Environment.NewLine + valor;
6524  }
6525 
6526  logRepository.Insert(logDto);
6527  }
6528 
6529  return true;
6530  }
6531 
6538  internal static bool Download_UnZip_File(clsOfflineUtils.ReportProgress progressReporter, Action<string> callback)
6539  {
6540  bool llOk = true;
6541 
6542  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
6543  _Mostrar_Progreso_Async += OfflineDownloader__Mostrar_Progreso_Async;
6544 
6545  _cTempFolderName = string.Empty;
6546 
6547  if (!Directory.Exists(TempFolderName))
6548  {
6549  Directory.CreateDirectory(TempFolderName);
6550  }
6551 
6552  string cFile = "configura_offline.zip";
6553 
6554  llOk = UnZip_File(cFile);
6555 
6556  if (!ExistsFile(TempFolderName, cFile, callback))
6557  {
6558  return false;
6559  }
6560 
6561 
6562  _Mostrar_Progreso_Async -= OfflineDownloader__Mostrar_Progreso_Async;
6563 
6564  return llOk;
6565 
6566  }
6567 
6568  private static bool UnZip_File(string cFile)
6569  {
6571  ILog_comoffRepository logRepository = offlineUnitOfWork.Log_comoffRepository;
6572 
6573  if (!UploadManager.Descargar_Fichero(TempFolderName, cFile, "", 0, false))
6574  return false;
6575 
6576  return true;
6577  }
6578 
6586  private static bool ExistsFile(string path, string fileName, Action<string> callback)
6587  {
6588  string lcFileFtp = Path.Combine(path, fileName);
6589 
6590  if (!File.Exists(lcFileFtp))
6591  {
6592  callback?.Invoke("No se ha encontrado el fichero de configuración en el FTP o OneDrive configurado.Revise que haya configurado correctamente los datos de conexión o bien asegurese que se ha realizado una Carga inicial o Envío de datos desde la Central.");
6593 
6594  //_TextStepDetalle = "ERROR: ######################################################## ";
6595  //_TextStepDetalle = "ERROR: No se puede continuar con la configuración del grupo de empresa porque no se ha encontrado fichero de configuración inicial en la carpeta FTP o OneDrive configurada, seleccione otra carpeta o realice una carga inicial o envío de datos desde la Central’.";
6596  //_TextStepDetalle = "ERROR: ######################################################## ";
6597 
6598  return false;
6599  }
6600 
6601  return true;
6602  }
6603 
6604  }
6605 }
bool _Send(string tcCliente="", string tcProveedor="", string tcResumen="")
Envia el correo
Definition: SendMail.cs:198
Clase para el envío de emails
Definition: SendMail.cs:21
Classe empresa basada en sage.ew.ewmante
Definition: clsEmpresa.cs:48
int _IdConf
Código de identificación de la configuración
Log_comoffDto GetDto(OfflineDatosComunicaciones datos)
Obtiene un dto a partir de DAtos de comunicaciones
override void _Load()
Override del método Load
Mantenimiento de configuración de comunicaciones
bool _RecalcularStock
Indica si al recibir datos de las sucursales en la central se debe ejecutar recálculo de stock ...
static bool ReCargarDiccionarios()
Método para volver a realizar la carga de diccionarios, por si hay que actualizar algun valor (PE-908...
bool _EnvioDirecto
Utilizar el correo predeterminado de Windows o el envío directo de Sage50 false : envio mediante clie...
Definition: SendMail.cs:37
string _ClientId
Campo interno de conexión OneDrive
object Retrieve(Type T)
Resuelve objeto de tipo T
Es como el tipo de entrada asientos pero por negocio, sin formulario, pq quiero que me haga las propu...
override string _NombreFicheroExportar
Sobreescribir la propiedad de _NombreFicheroExportar para que tenga el valor del nombre de fichero se...
string _OneDriveFolder
Carpeta de OneDrive seleccioanda por el usuario
Clase Singleton para la carga de los diccionarios
string _Error_Message
Mensaje de error
Definition: SendMail.cs:167
static bool CargarDiccionarios(string tcempresa, string tcCajaTpv)
A partir de un código de empresa y un código de caja nos carga las variables de empresa, mascaras, anchuras de campos standar y de TPV
string _RefreshToken
Campo interno de conexión OneDrive
string _HoraRecepcion
Hora de recepción para tarea programada de recepción automática de datos
virtual string _Nombre
Campo nombre del mantenimiento. En este hay que basar los demás campos en las clases heredadas ...
Definition: clsEwBase.cs:2655
virtual string _Codigo
Valor del campo clave que
Definition: clsEwBase.cs:2513
Albaranes pendientes de facturar
int _Conexion
Tipo de conexión 0 FTP, 1 OneDrive
void _AddAttachment(string tcFileName)
Añade un fichero adjunto
Definition: SendMail.cs:332
string _Subject
Asunto del correo
Definition: SendMail.cs:94
List< string > _Emails
Dirección de correo electrónico a la que se enviará el correo
Definition: SendMail.cs:79
ILog_comoffRepository Log_comoffRepository
Repositorio de log_comoff
int _FrecuenciaEnvio
Frecuencia de envío de datos 0 Diario, 1 Frecuente. En primera fase solo se usará valor 0...
static string _CodigoGrupoActual()
Obtención del código de grupo actual
Definition: GruposEmp.cs:1744
Facturas en negociación de cobro
Clase para el control de grupos de empresa (nuevo enfoque en Sage50, desaparece el multiempresa...
Definition: GruposEmp.cs:40
string _OneDriveUser
Datos de usuario OneDrive
Facturas pendientes de contabilizar
bool _CCOUsuarioActivo
India si tenemos que añadir CCO a los emails definidos en el usuario
Definition: SendMail.cs:104
string _ConfiguracionFtp
Datos de configuración de conexión FTP
string _HoraEnvio
Hora de envío para tarea programada de envío automático de datos
string _ResourceIds
Campo interno de conexión OneDrive
Dto para inserciones en log log_comoff
string _Body
Cuerpo del mensaje
Definition: SendMail.cs:99
bool _ShowEmailForm
Para mostrar el formulario del correo en envío directo true : presenta el formulario false : envia si...
Definition: SendMail.cs:30
Clase Inyector de dependencias para resolver las dependencias
bool _Exportar(ExportType toTipoDocumento, string tcRutaFichero, bool tlAbrirFichero=false, string tcPantalla="")
Nos exportará el listado hacia una ruta especificada. Se podra abrir tras su exportación.
int _FrecuenciaRecepcion
Frecuencia de recepción de datos 0 Diario, 1 Frecuente. En primera fase solo se usará valor 0...