/// <summary> /// Convierte un registro en un elemento de datos. /// </summary> /// <param name="mapa">El mapa del cual proviene el registro.</param> /// <param name="externalRow">El registro externo (importado).</param> /// <param name="internalRow">El registro interno (de Lázaro) o null si se está importando un elemento nuevo.</param> /// <returns>Un elemento de datos</returns> public virtual Lbl.IElementoDeDatos ConvertirRegistroEnElemento(MapaDeTabla mapa, Lfx.Data.Row externalRow, Lfx.Data.Row internalRow) { Lbl.IElementoDeDatos Elem; object ImportIdValue = externalRow.Fields[mapa.ColumnaIdLazaro].Value; if (internalRow == null) { Elem = this.CrearElemento(mapa, externalRow); Elem.Registro[mapa.ColumnaIdLazaro] = ImportIdValue; } else if (this.Opciones.ActualizarRegistros && mapa.ActualizaRegistros) { Elem = this.CargarElemento(mapa, internalRow); foreach (MapaDeColumna mapaCol in mapa.MapaDeColumnas) { Elem.Registro[mapaCol.ColumnaLazaro] = externalRow.Fields[mapaCol.ColumnaLazaro].Value; } } else { Elem = null; } return(Elem); }
/// <summary> /// Realiza los reemplazos de la lista de reemplazos definidos para este filtro. /// </summary> public void ProcesarRemplazos(MapaDeTabla mapa, ref Lfx.Data.Row row) { foreach (Lazaro.Orm.Data.ColumnValue Fld in row.Fields) { foreach (Reemplazo Rmp in this.Reemplazos) { if (Fld.DataType == Rmp.Tipo && (Rmp.NombreCampo == null || Rmp.NombreCampo == Fld.ColumnName || Rmp.NombreCampo == mapa.TablaExterna + ":" + Fld.ColumnName)) { Fld.Value = Rmp.Reemplazar(Fld.Value); } } } }
public virtual void ImportarRegistro(MapaDeTabla mapa, Lfx.Data.Row importedRow) { object ImportIdValue = importedRow.Fields[mapa.ColumnaIdLazaro].Value; string ImportIdSqlValue; if (ImportIdValue is string) { ImportIdSqlValue = "'" + ImportIdValue.ToString() + "'"; } else if (ImportIdValue is decimal || ImportIdValue is double) { ImportIdSqlValue = Lfx.Types.Formatting.FormatNumberSql(System.Convert.ToDecimal(ImportIdValue)); } else if (ImportIdValue is DateTime) { ImportIdSqlValue = "'" + Lfx.Types.Formatting.FormatDateTimeSql(System.Convert.ToDateTime(ImportIdValue)) + "'"; } else { ImportIdSqlValue = ImportIdValue.ToString(); } Lfx.Data.Row CurrentRow = this.Connection.FirstRowFromSelect("SELECT * FROM " + mapa.TablaLazaro + " WHERE " + mapa.ColumnaIdLazaro + "=" + ImportIdSqlValue); Lbl.IElementoDeDatos Elem = ConvertirRegistroEnElemento(mapa, importedRow, CurrentRow); if (Elem != null) { this.GuardarElemento(mapa, Elem); if (this.Opciones.ImportarStock && Elem is Lbl.Articulos.Articulo && importedRow.Fields.Contains("stock_actual")) { // Actualizo el stock Lbl.Articulos.Articulo Art = Elem as Lbl.Articulos.Articulo; decimal StockActual = Art.ObtenerExistencias(); decimal NuevoStock = System.Convert.ToDecimal(importedRow["stock_actual"]); decimal Diferencia = NuevoStock - StockActual; if (Diferencia != 0) { Art.MoverExistencias(null, Diferencia, "Stock importado desde " + this.Nombre, null, new Articulos.Situacion(this.Connection, Lfx.Workspace.Master.CurrentConfig.Productos.DepositoPredeterminado), null); } } } }
/// <summary> /// Carga un elemento existente desde la base de datos. /// </summary> /// <param name="mapa"></param> /// <param name="row"></param> /// <returns></returns> protected Lbl.IElementoDeDatos CargarElemento(MapaDeTabla mapa, Lfx.Data.Row row) { return(Lbl.Instanciador.Instanciar(mapa.TipoElemento, this.Connection, row.Fields[Lfx.Workspace.Master.Tables[mapa.TablaLazaro].PrimaryKey].ValueInt)); }
/// <summary> /// Crea un derivado de ElementoDeDatos del tipo correspondiente para el mapa de tabla actual a partir de un Lfx.Data.Row. /// </summary> /// <param name="mapa">El mapa de la tabla a la cual corresponde el registro.</param> /// <param name="row">El registro a partir del cual crear un ElementoDeDatos.</param> /// <returns>Un objeto de alguna clase derivada de ElementoDeDatos.</returns> protected Lbl.IElementoDeDatos CrearElemento(MapaDeTabla mapa, Lfx.Data.Row row) { return(Lbl.Instanciador.Instanciar(mapa.TipoElemento, this.Connection, row)); }
/// <summary> /// Procesa un registro según el mapa de columnas correspondiente a la tabla y devuelve un Lfx.Data.Row /// </summary> public Lfx.Data.Row ProcesarRegistro(MapaDeTabla mapa, System.Data.DataRow externalRow) { Lfx.Data.Row internalRow = new Lfx.Data.Row(); internalRow.IsNew = true; internalRow.Table = Lfx.Workspace.Master.Tables[mapa.TablaLazaro]; foreach (MapaDeColumna Col in mapa.MapaDeColumnas) { object FieldValue = null; switch (Col.Conversion) { case ConversionDeColumna.ConvertirAMinusculas: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToLowerInvariant(); break; case ConversionDeColumna.ConvertirAMayusculasYMinusculas: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToTitleCase(); break; case ConversionDeColumna.InterpretarNombreYApellido: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToTitleCase(); string Nombre = FieldValue.ToString(); string Apellido = Lfx.Types.Strings.GetNextToken(ref Nombre, " "); internalRow["nombre"] = Nombre.Trim(); internalRow["apellido"] = Apellido.Trim(); if (Nombre.Length > 0 && Apellido.Length > 0) { FieldValue = Apellido + ", " + Nombre; } break; case ConversionDeColumna.InterpretarSql: string Sql = Col.ParametroConversion.ToString(); string ClaveBuscada = externalRow[Col.ColumnaExterna].ToString(); if (this.CacheConversiones.ContainsKey(Sql) && this.CacheConversiones[Sql].ContainsKey(ClaveBuscada)) { FieldValue = this.CacheConversiones[Sql][ClaveBuscada]; } else { Lfx.Data.Row Result = this.Connection.FirstRowFromSelect(Sql.Replace("$VALOR$", ClaveBuscada)); if (Result == null || Result[0] == null) { FieldValue = null; } else { FieldValue = Result[0]; } if (this.CacheConversiones.ContainsKey(Sql) == false) { // Agrego esta conversión a la cache this.CacheConversiones.Add(Sql, new Dictionary <string, object>()); } this.CacheConversiones[Sql].Add(ClaveBuscada, FieldValue); } break; case ConversionDeColumna.Ninguna: if (Col.ColumnaExterna != null) { FieldValue = externalRow[Col.ColumnaExterna]; } else { FieldValue = Col.ValorPredeterminado; } break; default: throw new NotImplementedException("Lbl.Servicios.Importar.Filtro: no implementa ConversionDeColumna." + Col.Conversion.ToString()); } internalRow.Fields.AddWithValue(Col.ColumnaLazaro, FieldValue); if (Col.ColumnaExterna != null) { internalRow.Fields.AddWithValue("original_" + Col.ColumnaExterna, externalRow[Col.ColumnaExterna]); } } // El id de seguimiento de importación string[] ColumnasExternas = mapa.ColumnaIdExterna.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (ColumnasExternas.Length == 1) { internalRow[mapa.ColumnaIdLazaro] = externalRow[mapa.ColumnaIdExterna]; internalRow.Fields.AddWithValue("original_" + mapa.ColumnaIdExterna, externalRow[mapa.ColumnaIdExterna]); } else { string Valor = null; foreach (string ColumnaExterna in ColumnasExternas) { if (Valor == null) { Valor = externalRow[ColumnaExterna].ToString(); } else { Valor += "--" + externalRow[ColumnaExterna].ToString(); } internalRow.Fields.AddWithValue("original_" + ColumnaExterna, externalRow[ColumnaExterna]); } internalRow[mapa.ColumnaIdLazaro] = Valor; } this.ProcesarRemplazos(mapa, ref internalRow); return(internalRow); }
/// <summary> /// Convierte un registro en un elemento de datos. /// </summary> /// <param name="mapa">El mapa del cual proviene el registro.</param> /// <param name="externalRow">El registro externo (importado).</param> /// <param name="internalRow">El registro interno (de Lázaro) o null si se está importando un elemento nuevo.</param> /// <returns>Un elemento de datos</returns> public virtual Lbl.IElementoDeDatos ConvertirRegistroEnElemento(MapaDeTabla mapa, Lfx.Data.Row externalRow, Lfx.Data.Row internalRow) { Lbl.IElementoDeDatos Elem; object ImportIdValue = externalRow.Fields[mapa.ColumnaIdLazaro].Value; if (internalRow == null) { Elem = this.CrearElemento(mapa, externalRow); Elem.Registro[mapa.ColumnaIdLazaro] = ImportIdValue; } else if (this.Opciones.ActualizarRegistros && mapa.ActualizaRegistros) { Elem = this.CargarElemento(mapa, internalRow); foreach (MapaDeColumna mapaCol in mapa.MapaDeColumnas) { Elem.Registro[mapaCol.ColumnaLazaro] = externalRow.Fields[mapaCol.ColumnaLazaro].Value; } } else { Elem = null; } return Elem; }
public virtual void ImportarTabla(MapaDeTabla mapa) { Progreso.Value = 0; Progreso.ChangeStatus("Leyendo la tabla " + mapa.ToString()); string SqlSelect = @"SELECT * FROM " + mapa.TablaExterna; if (mapa.Where != null) SqlSelect += " WHERE " + mapa.Where; // Hago un SELECT de la tabla System.Data.IDbCommand TableCommand = ConexionExterna.CreateCommand(); TableCommand.CommandText = SqlSelect; System.Data.DataTable ReadTable = new System.Data.DataTable(); ReadTable.Locale = System.Globalization.CultureInfo.CurrentCulture; ReadTable.Load(TableCommand.ExecuteReader()); if (mapa.AutoSaltear) { mapa.Saltear = Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<int>("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, 0); if (mapa.Saltear > 1) mapa.Saltear--; } System.Data.IDbTransaction Trans = this.Connection.BeginTransaction(); // Navegar todos los registros Progreso.ChangeStatus("Incorporando " + ReadTable.Rows.Count.ToString() + " registros de la tabla " + mapa.ToString()); Progreso.Max = ReadTable.Rows.Count; int RowNumber = 0; foreach (System.Data.DataRow OriginalRow in ReadTable.Rows) { ++RowNumber; if (mapa.Saltear == 0 || RowNumber > mapa.Saltear) { Lfx.Data.Row ProcessedRow = this.ProcesarRegistro(mapa, OriginalRow); this.ImportarRegistro(mapa, ProcessedRow); } if ((RowNumber % 200) == 0) { Progreso.Advance(200); Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, RowNumber); Trans.Commit(); Trans.Dispose(); Trans = this.Connection.BeginTransaction(); } if (mapa.Limite > 0 && RowNumber > mapa.Limite) break; } Trans.Commit(); Trans.Dispose(); Trans = null; Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, RowNumber); }
public override IElementoDeDatos ConvertirRegistroEnElemento(MapaDeTabla mapa, Lfx.Data.Row externalRow, Lfx.Data.Row internalRow) { switch (mapa.TablaGestion) { case "ctacte": Lbl.IElementoDeDatos ElemMovim = base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow); Lbl.CuentasCorrientes.Movimiento Movim = ElemMovim as Lbl.CuentasCorrientes.Movimiento; if (Movim != null) { if (Movim.IdCliente == 0) { return(null); } Movim.Auto = true; string TipoComprobVentre = externalRow["original_TIPO"].ToString(); if (TipoComprobVentre == "FCB") { TipoComprobVentre = "Factura"; } else if (TipoComprobVentre == "RCB") { TipoComprobVentre = "Recibo"; Movim.Importe = -Movim.Importe; } else if (TipoComprobVentre == "NCB") { TipoComprobVentre = "Nota de Crédito"; Movim.Importe = -Movim.Importe; } Movim.Nombre = TipoComprobVentre + " 0001-" + System.Convert.ToInt32(externalRow["original_NROCOM"]).ToString("00000000"); } return(ElemMovim); case "comprob_detalle": // Busco una factura a la cual adosar este detalle string Tipo = externalRow["TIPO"].ToString(), TipoGestion = null; bool Compra = false; int Numero = Lfx.Types.Parsing.ParseInt(externalRow["NROCOM"].ToString()); switch (Tipo) { case "FCA": TipoGestion = "FA"; break; case "FCB": TipoGestion = "FB"; break; case "ING": TipoGestion = "FA"; Compra = true; break; case "DEV": TipoGestion = "NCB"; break; } if (Numero > 0 && TipoGestion != null) { // Es una factura válida Lbl.Comprobantes.Factura Fac; qGen.Select SelFac = new qGen.Select("comprob"); SelFac.WhereClause = new qGen.Where(); SelFac.WhereClause.AddWithValue("tipo_fac", TipoGestion); SelFac.WhereClause.AddWithValue("compra", Compra ? 1 : 0); SelFac.WhereClause.AddWithValue("numero", Numero); Lfx.Data.Row FacRow = this.Connection.FirstRowFromSelect(SelFac); if (FacRow == null) { int Cliente = System.Convert.ToInt32(externalRow["CLIENTE"]); if (Cliente <= 0) { Cliente = 999; } qGen.Insert NewFac = new qGen.Insert("comprob"); NewFac.ColumnValues.AddWithValue("id_formapago", 1); NewFac.ColumnValues.AddWithValue("tipo_fac", TipoGestion); NewFac.ColumnValues.AddWithValue("pv", 1); NewFac.ColumnValues.AddWithValue("numero", Numero); NewFac.ColumnValues.AddWithValue("situacionorigen", 1); NewFac.ColumnValues.AddWithValue("situaciondestino", 999); NewFac.ColumnValues.AddWithValue("fecha", System.Convert.ToDateTime(externalRow["FECHA"])); NewFac.ColumnValues.AddWithValue("id_vendedor", 1); NewFac.ColumnValues.AddWithValue("id_cliente", Cliente); NewFac.ColumnValues.AddWithValue("impresa", 1); NewFac.ColumnValues.AddWithValue("id_sucursal", 1); NewFac.ColumnValues.AddWithValue("estado", 1); this.Connection.ExecuteNonQuery(NewFac); FacRow = this.Connection.FirstRowFromSelect(SelFac); } Fac = new Comprobantes.Factura(this.Connection, FacRow); if (internalRow != null) { internalRow.Fields.AddWithValue("id_comprob", Fac.Id); } Lbl.IElementoDeDatos Elem = base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow); Lbl.Comprobantes.DetalleArticulo DetArt = Elem as Lbl.Comprobantes.DetalleArticulo; if (DetArt != null) { if (DetArt.Articulo == null) { DetArt.Nombre = externalRow["original_CODIGO"].ToString(); } DetArt.IdComprobante = Fac.Id; } return(Elem); } break; } return(base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow)); }
/// <summary> /// Carga un elemento existente desde la base de datos. /// </summary> /// <param name="mapa"></param> /// <param name="row"></param> /// <returns></returns> protected Lbl.IElementoDeDatos CargarElemento(MapaDeTabla mapa, Lfx.Data.Row row) { return Lbl.Instanciador.Instanciar(mapa.TipoElemento, this.Connection, row.Fields[this.Connection.Tables[mapa.TablaLazaro].PrimaryKey].ValueInt); }
/// <summary> /// Guarda un elemento. /// </summary> /// <param name="mapa"></param> /// <param name="elemento"></param> protected virtual void GuardarElemento(MapaDeTabla mapa, Lbl.IElementoDeDatos elemento) { elemento.Guardar(); }
/// <summary> /// Crea un derivado de ElementoDeDatos del tipo correspondiente para el mapa de tabla actual a partir de un Lfx.Data.Row. /// </summary> /// <param name="mapa">El mapa de la tabla a la cual corresponde el registro.</param> /// <param name="row">El registro a partir del cual crear un ElementoDeDatos.</param> /// <returns>Un objeto de alguna clase derivada de ElementoDeDatos.</returns> protected Lbl.IElementoDeDatos CrearElemento(MapaDeTabla mapa, Lfx.Data.Row row) { return Lbl.Instanciador.Instanciar(mapa.TipoElemento, this.Connection, row); }
/// <summary> /// Realiza los reemplazos de la lista de reemplazos definidos para este filtro. /// </summary> public void ProcesarRemplazos(MapaDeTabla mapa, ref Lfx.Data.Row row) { foreach (Lfx.Data.Field Fld in row.Fields) { foreach (Reemplazo Rmp in this.Reemplazos) { if (Fld.DataType == Rmp.Tipo && (Rmp.NombreCampo == null || Rmp.NombreCampo == Fld.ColumnName || Rmp.NombreCampo == mapa.TablaExterna + ":" + Fld.ColumnName)) Fld.Value = Rmp.Reemplazar(Fld.Value); } } }
/// <summary> /// Procesa un registro según el mapa de columnas correspondiente a la tabla y devuelve un Lfx.Data.Row /// </summary> public Lfx.Data.Row ProcesarRegistro(MapaDeTabla mapa, System.Data.DataRow externalRow) { Lfx.Data.Row internalRow = new Lfx.Data.Row(); internalRow.IsNew = true; internalRow.Table = this.Connection.Tables[mapa.TablaLazaro]; foreach (MapaDeColumna Col in mapa.MapaDeColumnas) { object FieldValue = null; switch (Col.Conversion) { case ConversionDeColumna.ConvertirAMinusculas: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToLowerInvariant(); break; case ConversionDeColumna.ConvertirAMayusculasYMinusculas: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToTitleCase(); break; case ConversionDeColumna.InterpretarNombreYApellido: FieldValue = externalRow[Col.ColumnaExterna].ToString().ToTitleCase(); string Nombre = FieldValue.ToString(); string Apellido = Lfx.Types.Strings.GetNextToken(ref Nombre, " "); internalRow["nombre"] = Nombre.Trim(); internalRow["apellido"] = Apellido.Trim(); if (Nombre.Length > 0 && Apellido.Length > 0) FieldValue = Apellido + ", " + Nombre; break; case ConversionDeColumna.InterpretarSql: string Sql = Col.ParametroConversion.ToString(); string ClaveBuscada = externalRow[Col.ColumnaExterna].ToString(); if (this.CacheConversiones.ContainsKey(Sql) && this.CacheConversiones[Sql].ContainsKey(ClaveBuscada)){ FieldValue = this.CacheConversiones[Sql][ClaveBuscada]; } else { Lfx.Data.Row Result = this.Connection.FirstRowFromSelect(Sql.Replace("$VALOR$", ClaveBuscada)); if (Result == null || Result[0] == null) FieldValue = null; else FieldValue = Result[0]; if (this.CacheConversiones.ContainsKey(Sql) == false) // Agrego esta conversión a la cache this.CacheConversiones.Add(Sql, new Dictionary<string, object>()); this.CacheConversiones[Sql].Add(ClaveBuscada, FieldValue); } break; case ConversionDeColumna.Ninguna: if (Col.ColumnaExterna != null) { FieldValue = externalRow[Col.ColumnaExterna]; } else { FieldValue = Col.ValorPredeterminado; } break; default: throw new NotImplementedException("Lbl.Servicios.Importar.Filtro: no implementa ConversionDeColumna." + Col.Conversion.ToString()); } internalRow.Fields.AddWithValue(Col.ColumnaLazaro, FieldValue); if (Col.ColumnaExterna != null) internalRow.Fields.AddWithValue("original_" + Col.ColumnaExterna, externalRow[Col.ColumnaExterna]); } // El id de seguimiento de importación string[] ColumnasExternas = mapa.ColumnaIdExterna.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (ColumnasExternas.Length == 1) { internalRow[mapa.ColumnaIdLazaro] = externalRow[mapa.ColumnaIdExterna]; internalRow.Fields.AddWithValue("original_" + mapa.ColumnaIdExterna, externalRow[mapa.ColumnaIdExterna]); } else { string Valor = null; foreach (string ColumnaExterna in ColumnasExternas) { if (Valor == null) Valor = externalRow[ColumnaExterna].ToString(); else Valor += "--" + externalRow[ColumnaExterna].ToString(); internalRow.Fields.AddWithValue("original_" + ColumnaExterna, externalRow[ColumnaExterna]); } internalRow[mapa.ColumnaIdLazaro] = Valor; } this.ProcesarRemplazos(mapa, ref internalRow); return internalRow; }
public override IElementoDeDatos ConvertirRegistroEnElemento(MapaDeTabla mapa, Lfx.Data.Row externalRow, Lfx.Data.Row internalRow) { switch (mapa.TablaLazaro) { case "ctacte": Lbl.IElementoDeDatos ElemMovim = base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow); Lbl.CuentasCorrientes.Movimiento Movim = ElemMovim as Lbl.CuentasCorrientes.Movimiento; if (Movim != null) { if (Movim.IdCliente == 0) return null; Movim.Auto = true; string TipoComprobVentre = externalRow["original_TIPO"].ToString(); if (TipoComprobVentre == "FCB") { TipoComprobVentre = "Factura"; } else if (TipoComprobVentre == "RCB") { TipoComprobVentre = "Recibo"; Movim.Importe = -Movim.Importe; } else if (TipoComprobVentre == "NCB") { TipoComprobVentre = "Nota de Crédito"; Movim.Importe = -Movim.Importe; } Movim.Nombre = TipoComprobVentre + " 0001-" + System.Convert.ToInt32(externalRow["original_NROCOM"]).ToString("00000000"); } return ElemMovim; case "comprob_detalle": // Busco una factura a la cual adosar este detalle string Tipo = externalRow["TIPO"].ToString(), TipoLazaro = null; bool Compra = false; int Numero = Lfx.Types.Parsing.ParseInt(externalRow["NROCOM"].ToString()); switch (Tipo) { case "FCA": TipoLazaro = "FA"; break; case "FCB": TipoLazaro = "FB"; break; case "ING": TipoLazaro = "FA"; Compra = true; break; case "DEV": TipoLazaro = "NCB"; break; } if (Numero > 0 && TipoLazaro != null) { // Es una factura válida Lbl.Comprobantes.Factura Fac; qGen.Select SelFac = new qGen.Select("comprob"); SelFac.WhereClause = new qGen.Where(); SelFac.WhereClause.AddWithValue("tipo_fac", TipoLazaro); SelFac.WhereClause.AddWithValue("compra", Compra ? 1 : 0); SelFac.WhereClause.AddWithValue("numero", Numero); Lfx.Data.Row FacRow = this.Connection.FirstRowFromSelect(SelFac); if (FacRow == null) { int Cliente = System.Convert.ToInt32(externalRow["CLIENTE"]); if (Cliente <= 0) Cliente = 999; qGen.Insert NewFac = new qGen.Insert("comprob"); NewFac.Fields.AddWithValue("id_formapago", 1); NewFac.Fields.AddWithValue("tipo_fac", TipoLazaro); NewFac.Fields.AddWithValue("pv", 1); NewFac.Fields.AddWithValue("numero", Numero); NewFac.Fields.AddWithValue("situacionorigen", 1); NewFac.Fields.AddWithValue("situaciondestino", 999); NewFac.Fields.AddWithValue("fecha", System.Convert.ToDateTime(externalRow["FECHA"])); NewFac.Fields.AddWithValue("id_vendedor", 1); NewFac.Fields.AddWithValue("id_cliente", Cliente); NewFac.Fields.AddWithValue("impresa", 1); NewFac.Fields.AddWithValue("id_sucursal", 1); NewFac.Fields.AddWithValue("estado", 1); this.Connection.Execute(NewFac); FacRow = this.Connection.FirstRowFromSelect(SelFac); } Fac = new Comprobantes.Factura(this.Connection, FacRow); if (internalRow != null) internalRow.Fields.AddWithValue("id_comprob", Fac.Id); Lbl.IElementoDeDatos Elem = base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow); Lbl.Comprobantes.DetalleArticulo DetArt = Elem as Lbl.Comprobantes.DetalleArticulo; if (DetArt != null) { if (DetArt.Articulo == null) DetArt.Nombre = externalRow["original_CODIGO"].ToString(); DetArt.IdComprobante = Fac.Id; } return Elem; } break; } return base.ConvertirRegistroEnElemento(mapa, externalRow, internalRow); }
public virtual void ImportarTabla(MapaDeTabla mapa) { Progreso.Value = 0; Progreso.ChangeStatus("Leyendo la tabla " + mapa.ToString()); string SqlSelect = @"SELECT * FROM " + mapa.TablaExterna; if (mapa.Where != null) { SqlSelect += " WHERE " + mapa.Where; } // Hago un SELECT de la tabla System.Data.IDbCommand TableCommand = ConexionExterna.CreateCommand(); TableCommand.CommandText = SqlSelect; System.Data.DataTable ReadTable = new System.Data.DataTable(); ReadTable.Locale = System.Globalization.CultureInfo.CurrentCulture; ReadTable.Load(TableCommand.ExecuteReader()); if (mapa.AutoSaltear) { mapa.Saltear = Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting <int>("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, 0); if (mapa.Saltear > 1) { mapa.Saltear--; } } System.Data.IDbTransaction Trans = this.Connection.BeginTransaction(); // Navegar todos los registros Progreso.ChangeStatus("Incorporando " + ReadTable.Rows.Count.ToString() + " registros de la tabla " + mapa.ToString()); Progreso.Max = ReadTable.Rows.Count; int RowNumber = 0; foreach (System.Data.DataRow OriginalRow in ReadTable.Rows) { ++RowNumber; if (mapa.Saltear == 0 || RowNumber > mapa.Saltear) { Lfx.Data.Row ProcessedRow = this.ProcesarRegistro(mapa, OriginalRow); this.ImportarRegistro(mapa, ProcessedRow); } if ((RowNumber % 200) == 0) { Progreso.Advance(200); Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, RowNumber); Trans.Commit(); Trans.Dispose(); Trans = this.Connection.BeginTransaction(); } if (mapa.Limite > 0 && RowNumber > mapa.Limite) { break; } } Trans.Commit(); Trans.Dispose(); Trans = null; Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("Importar.RegistrosImportados." + this.Nombre + "." + mapa.Nombre, RowNumber); }
public virtual void ImportarRegistro(MapaDeTabla mapa, Lfx.Data.Row importedRow) { object ImportIdValue = importedRow.Fields[mapa.ColumnaIdLazaro].Value; string ImportIdSqlValue; if (ImportIdValue is string) { ImportIdSqlValue = "'" + ImportIdValue.ToString() + "'"; } else if (ImportIdValue is decimal || ImportIdValue is double) { ImportIdSqlValue = Lfx.Types.Formatting.FormatNumberSql(System.Convert.ToDecimal(ImportIdValue)); } else if (ImportIdValue is DateTime) { ImportIdSqlValue = "'" + Lfx.Types.Formatting.FormatDateTimeSql(System.Convert.ToDateTime(ImportIdValue)) + "'"; } else { ImportIdSqlValue = ImportIdValue.ToString(); } Lfx.Data.Row CurrentRow = this.Connection.FirstRowFromSelect("SELECT * FROM " + mapa.TablaLazaro + " WHERE " + mapa.ColumnaIdLazaro + "=" + ImportIdSqlValue); Lbl.IElementoDeDatos Elem = ConvertirRegistroEnElemento(mapa, importedRow, CurrentRow); if (Elem != null) { this.GuardarElemento(mapa, Elem); if (this.Opciones.ImportarStock && Elem is Lbl.Articulos.Articulo && importedRow.Fields.Contains("stock_actual")) { // Actualizo el stock Lbl.Articulos.Articulo Art = Elem as Lbl.Articulos.Articulo; decimal StockActual = Art.ObtenerExistencias(); decimal NuevoStock = System.Convert.ToDecimal(importedRow["stock_actual"]); decimal Diferencia = NuevoStock - StockActual; if (Diferencia != 0) Art.MoverExistencias(null, Diferencia, "Stock importado desde " + this.Nombre, null, new Articulos.Situacion(this.Connection, Lfx.Workspace.Master.CurrentConfig.Productos.DepositoPredeterminado), null); } } }