示例#1
0
文件: Filtro.cs 项目: njmube/lazaro
        /// <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);
        }
示例#2
0
文件: Filtro.cs 项目: njmube/lazaro
 /// <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);
             }
         }
     }
 }
示例#3
0
文件: Filtro.cs 项目: njmube/lazaro
        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);
                    }
                }
            }
        }
示例#4
0
文件: Filtro.cs 项目: njmube/lazaro
 /// <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));
 }
示例#5
0
文件: Filtro.cs 项目: njmube/lazaro
 /// <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));
 }
示例#6
0
文件: Filtro.cs 项目: njmube/lazaro
        /// <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);
        }
示例#7
0
                /// <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;
                }
示例#8
0
                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);
                }
示例#9
0
        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));
        }
示例#10
0
 /// <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);
 }
示例#11
0
 /// <summary>
 /// Guarda un elemento.
 /// </summary>
 /// <param name="mapa"></param>
 /// <param name="elemento"></param>
 protected virtual void GuardarElemento(MapaDeTabla mapa, Lbl.IElementoDeDatos elemento)
 {
         elemento.Guardar();
 }
示例#12
0
 /// <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);
 }
示例#13
0
 /// <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);
                 }
         }
 }
示例#14
0
                /// <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;
                }
示例#15
0
文件: Filtro.cs 项目: njmube/lazaro
 /// <summary>
 /// Guarda un elemento.
 /// </summary>
 /// <param name="mapa"></param>
 /// <param name="elemento"></param>
 protected virtual void GuardarElemento(MapaDeTabla mapa, Lbl.IElementoDeDatos elemento)
 {
     elemento.Guardar();
 }
示例#16
0
                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);
                }
示例#17
0
文件: Filtro.cs 项目: njmube/lazaro
        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);
        }
示例#18
0
                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);
                                }
                        }
                }