Beispiel #1
0
        /// <summary>
        /// Exporta los campos binarios de una tabla en archivos.
        /// </summary>
        public void ExportBlobs(qGen.Select ComandoSelect, string Carpeta)
        {
            if (char.Parse(Carpeta.Substring(Carpeta.Length - 1, 1)) != System.IO.Path.DirectorySeparatorChar)
            {
                Carpeta += System.Convert.ToString(System.IO.Path.DirectorySeparatorChar);
            }

            using (System.Data.DataTable Tabla = Lfx.Workspace.Master.MasterConnection.Select(ComandoSelect.ToString())) {
                foreach (System.Data.DataRow Registro in Tabla.Rows)
                {
                    foreach (System.Data.DataColumn Campo in Tabla.Columns)
                    {
                        if (Campo.DataType.Name == "Byte[]" && Registro[Campo.ColumnName] != null && ((byte[])(Registro[Campo.ColumnName])).Length > 5)
                        {
                            byte[] Contenido     = ((byte[])(Registro[Campo.ColumnName]));
                            string NombreArchivo = ComandoSelect.Tables + "_" + Campo.ColumnName + "_" + Registro[0].ToString() + ".blb";
                            using (System.IO.FileStream Archivo = new System.IO.FileStream(Carpeta + NombreArchivo, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)) {
                                Archivo.Write(Contenido, 0, Contenido.Length);
                                Archivo.Close();
                            }

                            using (System.IO.FileStream Archivo = new System.IO.FileStream(Carpeta + "blobs.lst", System.IO.FileMode.Append, System.IO.FileAccess.Write)) {
                                System.IO.StreamWriter Escribidor = new System.IO.StreamWriter(Archivo);
                                Escribidor.WriteLine(ComandoSelect.Tables + "," + Campo.ColumnName + "," + Tabla.Columns[0].ColumnName + "='" + Registro[0].ToString() + "'," + NombreArchivo);
                                Escribidor.Close();
                                Archivo.Close();
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public override void ActualizarControl()
        {
            ListaComentarios.BeginUpdate();
            ListaComentarios.Items.Clear();
            qGen.Select SelectComentarios = new qGen.Select("sys_log");
            SelectComentarios.WhereClause = new qGen.Where();
            SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("comando", "Comment"));
            SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("tabla", this.Elemento.TablaDatos));
            SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("item_id", this.Elemento.Id));
            SelectComentarios.Order = "id_log DESC";

            System.Data.DataTable Comentarios = Elemento.Connection.Select(SelectComentarios);
            foreach (System.Data.DataRow Com in Comentarios.Rows)
            {
                Lbl.Sys.Log.Entrada Log = new Lbl.Sys.Log.Entrada(this.Connection, (Lfx.Data.Row)Com);
                ListViewItem        Itm = ListaComentarios.Items.Add(Log.Id.ToString());
                Itm.SubItems.Add(Lfx.Types.Formatting.FormatShortSmartDateAndTime(Log.Fecha));
                Itm.SubItems.Add(Lfx.Workspace.Master.Tables["personas"].FastRows[Log.IdUsuario].Fields["nombre_visible"].Value.ToString());
                Itm.SubItems.Add(Log.Carga);
            }

            ListaComentarios.EndUpdate();

            EntradaComentario.Enabled = this.Elemento.Existe;
            BotonAgregar.Enabled      = EntradaComentario.Enabled;

            base.ActualizarControl();
        }
Beispiel #3
0
        /// <summary>
        /// Finds a single entity by it's primary key.
        /// </summary>
        /// <typeparam name="T">The entity type.</typeparam>
        /// <param name="primaryKeyId">The primary key value.</param>
        /// <returns>An entity or null.</returns>
        public T Find <T>(object primaryKeyId) where T : new()
        {
            // Get class metadata
            var EntityType    = typeof(T);
            var ClassName     = EntityType.FullName;
            var ClassMetadata = this.MetadataFactory.GetMetadataForClass(EntityType);

            // Construct select
            var IdCols = ClassMetadata.Columns.GetIdColumns();
            var Select = new qGen.Select(ClassMetadata.TableName);

            if (IdCols.Count == 1)
            {
                Select.WhereClause = new qGen.Where(IdCols[0].Name, primaryKeyId);
            }
            else
            {
                throw new ApplicationException("Can not use Find(scalar): " + ClassMetadata.Name + " has multiple primary keys.");
            }

            // Execute query
            var DataTable = this.Connection.Select(Select);

            if (DataTable.Rows.Count == 0)
            {
                return(default(T));
            }
            else if (DataTable.Rows.Count > 1)
            {
                throw new ApplicationException("Find(scalar): " + ClassMetadata.Name + " returned more than one row.");
            }

            // Convert row to entity
            return(this.HydrateEntity <T>(ClassMetadata, DataTable.Rows[0]));
        }
Beispiel #4
0
                public override void ActualizarControl()
                {
                        ListaComentarios.BeginUpdate();
                        ListaComentarios.Items.Clear();
                        qGen.Select SelectComentarios = new qGen.Select("sys_log");
                        SelectComentarios.WhereClause = new qGen.Where();
                        SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("comando", "Comment"));
                        SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("tabla", this.Elemento.TablaDatos));
                        SelectComentarios.WhereClause.Add(new qGen.ComparisonCondition("item_id", this.Elemento.Id));
                        SelectComentarios.Order = "id_log DESC";

                        System.Data.DataTable Comentarios = Elemento.Connection.Select(SelectComentarios);
                        foreach (System.Data.DataRow Com in Comentarios.Rows) {
                                Lbl.Sys.Log.Entrada Log = new Lbl.Sys.Log.Entrada(this.Connection, (Lfx.Data.Row)Com);
                                ListViewItem Itm = ListaComentarios.Items.Add(Log.Id.ToString());
                                Itm.SubItems.Add(Lfx.Types.Formatting.FormatShortSmartDateAndTime(Log.Fecha));
                                Itm.SubItems.Add(this.Elemento.Connection.Tables["personas"].FastRows[Log.IdUsuario].Fields["nombre_visible"].Value.ToString());
                                Itm.SubItems.Add(Log.Carga);
                        }

                        ListaComentarios.EndUpdate();

                        EntradaComentario.Enabled = this.Elemento.Existe;
                        BotonAgregar.Enabled = EntradaComentario.Enabled;

                        base.ActualizarControl();
                }
Beispiel #5
0
        /// <summary>
        /// Finds all entities using a search crtieria.
        /// </summary>
        /// <typeparam name="T">The entity type.</typeparam>
        /// <param name="where">The search crtieria.</param>
        /// <param name="orderBy">The order of the resulting set.</param>
        /// <returns>An EntityRepository with zero or more entities.</returns>
        public List <T> FindBy <T>(qGen.Where where, string orderBy) where T : new()
        {
            // Get class metadata
            var EntityType    = typeof(T);
            var ClassName     = EntityType.FullName;
            var ClassMetadata = this.MetadataFactory.GetMetadataForClass(EntityType);

            // Construct select
            var IdCols = ClassMetadata.Columns.GetIdColumns();
            var Select = new qGen.Select(ClassMetadata.TableName);

            Select.WhereClause = where;
            Select.Order       = orderBy;

            // Execute query
            var DataTable = this.Connection.Select(Select);
            var Res       = new List <T>();

            // Fill the list
            if (DataTable.Rows.Count > 0)
            {
                foreach (DataRow Row in DataTable.Rows)
                {
                    Res.Add(this.HydrateEntity <T>(ClassMetadata, Row));
                }
            }

            return(Res);
        }
Beispiel #6
0
                /// <summary>
                /// Calcula el saldo actual de la cuenta corriente.
                /// </summary>
                /// <returns>El monto adeudado (puede ser positivo o negativo) en la cuenta corriente.</returns>
                public decimal ObtenerSaldo(bool forUpdate)
                {
                        qGen.Select SelSaldo = new qGen.Select(this.TablaDatos, forUpdate);
                        SelSaldo.Fields = "saldo";
                        SelSaldo.WhereClause = new qGen.Where("id_cliente", this.Persona.Id);
                        SelSaldo.Order = this.CampoId + " DESC";
                        SelSaldo.Window = new qGen.Window(1);

                        return this.Connection.FieldDecimal(SelSaldo);
                }
Beispiel #7
0
        /// <summary>
        /// Calcula el saldo actual de la cuenta corriente.
        /// </summary>
        /// <returns>El monto adeudado (puede ser positivo o negativo) en la cuenta corriente.</returns>
        public decimal ObtenerSaldo(bool forUpdate)
        {
            qGen.Select SelSaldo = new qGen.Select(this.TablaDatos, forUpdate);
            SelSaldo.Fields      = "saldo";
            SelSaldo.WhereClause = new qGen.Where("id_cliente", this.Persona.Id);
            SelSaldo.Order       = this.CampoId + " DESC";
            SelSaldo.Window      = new qGen.Window(1);

            return(this.Connection.FieldDecimal(SelSaldo));
        }
Beispiel #8
0
                public virtual decimal ObtenerSaldo(bool forUpdate)
		{
                        qGen.Select SelSaldo = new qGen.Select("cajas_movim", forUpdate);
                        SelSaldo.Fields = "saldo";
                        SelSaldo.WhereClause = new qGen.Where("id_caja", this.Id);
                        SelSaldo.Order = "id_movim DESC";
                        SelSaldo.Window = new qGen.Window(1);

                        return this.Connection.FieldDecimal(SelSaldo);
		}
Beispiel #9
0
        public virtual decimal ObtenerSaldo(bool forUpdate)
        {
            qGen.Select SelSaldo = new qGen.Select("cajas_movim", forUpdate);
            SelSaldo.Fields      = "saldo";
            SelSaldo.WhereClause = new qGen.Where("id_caja", this.Id);
            SelSaldo.Order       = "id_movim DESC";
            SelSaldo.Window      = new qGen.Window(1);

            return(this.Connection.FieldDecimal(SelSaldo));
        }
Beispiel #10
0
        public decimal ObtenerSaldoAFecha(DateTime date)
        {
            qGen.Select SelSaldo = new qGen.Select(this.TablaDatos, false);
            SelSaldo.Fields      = "saldo";
            SelSaldo.WhereClause = new qGen.Where("id_cliente", this.Persona.Id);
            SelSaldo.WhereClause.AddWithValue("fecha", qGen.ComparisonOperators.LessOrEqual, date);
            SelSaldo.Order  = this.CampoId + " DESC";
            SelSaldo.Window = new qGen.Window(1);

            return(this.Connection.FieldDecimal(SelSaldo));
        }
Beispiel #11
0
 /// <summary>
 /// Obtiene una lista de todos los elementos de esta tabla
 /// </summary>
 /// <returns>Una colección con los id y nombre de todos los elementos de la tabla</returns>
 public ColeccionCodigoDetalle ObtenerTodos(qGen.Where filter)
 {
     qGen.Select Sel = new qGen.Select(this.TablaDatos);
     Sel.Fields = this.CampoId + ", " + this.CampoNombre;
     if (filter != null)
     {
         Sel.WhereClause = filter;
     }
     System.Data.DataTable Tabla = this.Connection.Select(Sel);
     return(new ColeccionCodigoDetalle(Tabla));
 }
Beispiel #12
0
 public override Lfx.Types.OperationResult ValidarControl()
 {
         qGen.Select SelMismoNumero = new qGen.Select("sucursales");
         SelMismoNumero.Fields = "id_sucursal";
         SelMismoNumero.WhereClause = new qGen.Where();
         SelMismoNumero.WhereClause.AddWithValue("id_sucursal", EntradaNumero.ValueInt);
         if (this.Elemento.Existe)
                 SelMismoNumero.WhereClause.AddWithValue("id_sucursal", qGen.ComparisonOperators.NotEqual, this.Elemento.Id);
         if (this.Connection.FieldInt(SelMismoNumero) != 0)
                 return new Lfx.Types.FailureOperationResult("Ya existe una sucursal con ese número.");
         
         return base.ValidarControl();
 }
Beispiel #13
0
        /// <summary>
        /// Obtiene el último movimiento de la caja.
        /// </summary>
        /// <returns>El último movimiento registrado en la caja.</returns>
        public Movimiento ObtenerUltimoMovimiento()
        {
            qGen.Select SelUltimoMovim = new qGen.Select("cajas_movim");
            SelUltimoMovim.Columns = new qGen.SqlIdentifierCollection()
            {
                "*"
            };
            SelUltimoMovim.WhereClause = new qGen.Where("id_caja", this.Id);
            SelUltimoMovim.Order       = "id_movim DESC";
            SelUltimoMovim.Window      = new qGen.Window(1);

            return(new Movimiento(this.Connection, this.Connection.FirstRowFromSelect(SelUltimoMovim)));
        }
Beispiel #14
0
 /// <summary>
 /// Obtiene una lista de todos los elementos de esta tabla
 /// </summary>
 /// <returns>Una colección con los id y nombre de todos los elementos de la tabla</returns>
 public ColeccionCodigoDetalle ObtenerTodos(qGen.Where filter)
 {
     qGen.Select Sel = new qGen.Select(this.TablaDatos);
     Sel.Columns = new qGen.SqlIdentifierCollection()
     {
         this.CampoId, this.CampoNombre
     };
     if (filter != null)
     {
         Sel.WhereClause = filter;
     }
     System.Data.DataTable Tabla = this.Connection.Select(Sel);
     return(new ColeccionCodigoDetalle(Tabla));
 }
Beispiel #15
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (this.Connection != null)
            {
                if (Parametros == "efectivo")
                {
                    this.Caja = Lbl.Sys.Config.Empresa.SucursalActual.CajaDiaria;
                }
                else
                {
                    int NumeroCaja = Lfx.Types.Parsing.ParseInt(Parametros);
                    if (NumeroCaja > 0)
                    {
                        this.Caja = new Lbl.Cajas.Caja(this.Connection, NumeroCaja);
                    }
                    else
                    {
                        this.Caja = new Lbl.Cajas.Caja(this.Connection, 999);
                    }
                }

                if (this.Caja != null)
                {
                    // Busco un rango de fechas en el cual haya movimientos
                    string[] FechasAProbar = new string[] { "dia-0", "semana-0", "mes-0", "mes-1", "mes-2", "mes-3", "mes-4" };
                    foreach (string FechaAProbar in FechasAProbar)
                    {
                        Lfx.Types.DateRange Rango   = new Lfx.Types.DateRange(FechaAProbar);
                        qGen.Select         SelMovs = new qGen.Select("cajas_movim");
                        SelMovs.Columns = new qGen.SqlIdentifierCollection()
                        {
                            "COUNT(id_movim)"
                        };
                        SelMovs.WhereClause = new qGen.Where("id_caja", this.Caja.Id);
                        SelMovs.WhereClause.AddWithValue("fecha", Rango.From, Rango.To);
                        int Movs = this.Connection.FieldInt(SelMovs);

                        if (Movs > 0)
                        {
                            this.Fechas = new Lfx.Types.DateRange(Rango.From, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));
                            break;
                        }
                    }
                }
            }
        }
Beispiel #16
0
        protected override void OnEndRefreshList()
        {
            qGen.Select SelTotalFac = this.SelectCommand("SUM", "comprob.total");
            SelTotalFac.WhereClause.AddWithValue("comprob.anulada", 0);
            SelTotalFac.WhereClause.AddWithValue("comprob.tipo_fac", qGen.ComparisonOperators.NotIn, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });
            decimal TotalFac = this.Connection.FieldDecimal(SelTotalFac);

            qGen.Select SelTotalCred = this.SelectCommand("SUM", "comprob.total");
            SelTotalCred.WhereClause.AddWithValue("comprob.anulada", 0);
            SelTotalCred.WhereClause.AddWithValue("comprob.tipo_fac", qGen.ComparisonOperators.In, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });
            decimal TotalCred = this.Connection.FieldDecimal(SelTotalCred);

            this.Contadores[0].SetValue(TotalFac - TotalCred);

            base.OnEndRefreshList();
        }
Beispiel #17
0
        public void CheckTable(Lfx.Types.OperationProgress progreso, Lfx.Data.Table table)
        {
            Lfx.Data.TableStructure CurrentTableDef = this.Connection.GetTableStructure(table.Name, true);
            progreso.ChangeStatus("Verificando tabla " + table.Name);

            foreach (Lfx.Data.ConstraintDefinition Cons in CurrentTableDef.Constraints.Values)
            {
                // Elimino valores 0 (los pongo en NULL)
                qGen.Update PonerNullablesEnNull = new qGen.Update(table.Name);
                PonerNullablesEnNull.ColumnValues.AddWithValue(Cons.Column, null);
                PonerNullablesEnNull.WhereClause = new qGen.Where(Cons.Column, 0);
                this.Connection.ExecuteNonQuery(PonerNullablesEnNull);

                // Busco problemas de integridad referencial
                if (Cons.TableName != Cons.ReferenceTable)
                {
                    qGen.Select RefValidas = new qGen.Select(Cons.ReferenceTable);
                    RefValidas.Columns = new qGen.SqlIdentifierCollection()
                    {
                        Cons.ReferenceColumn
                    };

                    qGen.Update ElimRefInvalidas = new qGen.Update(table.Name);
                    switch (Cons.ReferenceTable)
                    {
                    case "bancos":
                        // Los bancos inexistentes los remplazo por "otro banco"
                        ElimRefInvalidas.ColumnValues.AddWithValue(Cons.Column, 99);
                        break;

                    case "personas":
                        // Las personas inexistentes las paso a Administrador
                        ElimRefInvalidas.ColumnValues.AddWithValue(Cons.Column, 1);
                        break;

                    default:
                        // El resto lo pongo en null
                        ElimRefInvalidas.ColumnValues.AddWithValue(Cons.Column, null);
                        break;
                    }
                    ElimRefInvalidas.WhereClause = new qGen.Where(Cons.Column, qGen.ComparisonOperators.NotIn, RefValidas);

                    System.Console.WriteLine(ElimRefInvalidas.ToString());
                    this.Connection.ExecuteNonQuery(ElimRefInvalidas);
                }
            }
        }
Beispiel #18
0
        public int UltimoNumero()
        {
            qGen.Select SelDesde = new qGen.Select("comprob");
            SelDesde.Columns = new qGen.SqlIdentifierCollection()
            {
                "IFNULL(MAX(numero),0)"
            };
            SelDesde.WhereClause = new qGen.Where();
            SelDesde.WhereClause.AddWithValue("compra", 1);
            SelDesde.WhereClause.AddWithValue("anulada", 0);
            SelDesde.WhereClause.AddWithValue("id_cliente", EntradaProveedor.ValueInt);
            SelDesde.WhereClause.AddWithValue("tipo_fac", EntradaTipo.TextKey);
            SelDesde.WhereClause.AddWithValue("pv", EntradaPV.ValueInt);
            int lastNumber = this.Connection.FieldInt(SelDesde);

            return(lastNumber + 1);
        }
Beispiel #19
0
        public override Lfx.Types.OperationResult ValidarControl()
        {
            Lfx.Types.OperationResult Res = base.ValidarControl();
            EntradaNumero.ValueInt = UltimoNumero();
            if (EntradaHaciaSituacion.Visible && EntradaHaciaSituacion.ValueInt == 0)
            {
                Res.Success  = false;
                Res.Message += "Por favor seleccione un depósito de destino." + Environment.NewLine;
            }

            if (EntradaProveedor.ValueInt == 0)
            {
                Res.Success  = false;
                Res.Message += "Por favor seleccione el proveedor." + Environment.NewLine;
            }
            else if (this.Elemento.Existe == false)
            {
                qGen.Select SelDesde = new qGen.Select("comprob");
                SelDesde.Columns = new qGen.SqlIdentifierCollection()
                {
                    "id_comprob"
                };
                SelDesde.WhereClause = new qGen.Where();
                SelDesde.WhereClause.AddWithValue("compra", 1);
                SelDesde.WhereClause.AddWithValue("anulada", 0);
                SelDesde.WhereClause.AddWithValue("id_cliente", EntradaProveedor.ValueInt);
                SelDesde.WhereClause.AddWithValue("tipo_fac", EntradaTipo.TextKey);
                SelDesde.WhereClause.AddWithValue("pv", EntradaPV.ValueInt);
                SelDesde.WhereClause.AddWithValue("numero", EntradaNumero.ValueInt);

                int IdFactura = this.Connection.FieldInt(SelDesde);
                if (IdFactura > 0)
                {
                    Res.Success  = false;
                    Res.Message += "Ya existe un comprobante con ese número. Por favor verifique los datos e intente nuevamente. Si el comprobante cargado anteriormente tiene un error de carga, deberá anularlo antes de cargarlo nuevamente." + Environment.NewLine;
                }
            }

            if (EntradaPercepcionIIBB.ValueDecimal > 0 && EntradaLocalidad.ValueInt == 0)
            {
                Res.Success = false;
                Res.Message = "Por favor seleccione lugar de IIBB.";
            }

            return(Res);
        }
Beispiel #20
0
        public override Lfx.Types.OperationResult ValidarControl()
        {
            qGen.Select SelMismoNumero = new qGen.Select("sucursales");
            SelMismoNumero.Fields      = "id_sucursal";
            SelMismoNumero.WhereClause = new qGen.Where();
            SelMismoNumero.WhereClause.AddWithValue("id_sucursal", EntradaNumero.ValueInt);
            if (this.Elemento.Existe)
            {
                SelMismoNumero.WhereClause.AddWithValue("id_sucursal", qGen.ComparisonOperators.NotEqual, this.Elemento.Id);
            }
            if (this.Connection.FieldInt(SelMismoNumero) != 0)
            {
                return(new Lfx.Types.FailureOperationResult("Ya existe una sucursal con ese número."));
            }

            return(base.ValidarControl());
        }
Beispiel #21
0
                public void Iniciar()
                {
                        try {
                                qGen.Select SelUltimoId = new qGen.Select("sys_mensajeria");
                                SelUltimoId.Fields = "MAX(id_ultimomensaje)";
                                SelUltimoId.WhereClause = new qGen.Where();
                                SelUltimoId.WhereClause.AddWithValue("id_usuario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);

                                this.LastMessageId = this.Connection.FieldInt(SelUltimoId);

                                this.PollTimer = new System.Timers.Timer();
                                this.PollTimer.Interval = Lfx.Workspace.Master.SlowLink ? 7000 : 3000;
                                this.PollTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.PollTimer_Elapsed);
                                this.PollTimer.Start();
                        } catch {
                                //if (Lfx.Environment.SystemInformation.DesignMode)
                                        //throw;
                        }
                }
Beispiel #22
0
        public override Lfx.Types.OperationResult ValidarControl()
        {
            if (EntradaCodigoPersonalizado.Text == string.Empty)
            {
                return(new Lfx.Types.FailureOperationResult("Debe escribir el código de la plantilla o seleccionar uno de la lista 'Se utiliza para'."));
            }

            if (EntradaNombre.Text == string.Empty)
            {
                return(new Lfx.Types.FailureOperationResult("Debe escribir el nombre de la plantilla."));
            }

            string Codigo;

            if (EntradaCodigo.TextKey == "*")
            {
                Codigo = EntradaCodigoPersonalizado.Text;
            }
            else
            {
                Codigo = EntradaCodigo.TextKey;
            }

            qGen.Select SelCodDupl = new qGen.Select("sys_plantillas");
            SelCodDupl.Columns = new qGen.SqlIdentifierCollection()
            {
                "id_plantilla"
            };
            SelCodDupl.WhereClause = new qGen.Where();
            SelCodDupl.WhereClause.AddWithValue("codigo", Codigo);
            if (this.Elemento.Existe)
            {
                SelCodDupl.WhereClause.AddWithValue("id_plantilla", qGen.ComparisonOperators.NotEqual, this.Elemento.Id);
            }
            int OtroId = this.Connection.FieldInt(SelCodDupl);

            if (OtroId > 0)
            {
                return(new Lfx.Types.FailureOperationResult("Ya existe otra plantilla para este tipo de comprobante. No se permite tener más de una plantilla para el mismo tipo de comprobante. Si lo desea puede editar la plantilla existente."));
            }

            return(base.ValidarControl());
        }
Beispiel #23
0
        public void Iniciar()
        {
            try {
                qGen.Select SelUltimoId = new qGen.Select("sys_mensajeria");
                SelUltimoId.Fields      = "MAX(id_ultimomensaje)";
                SelUltimoId.WhereClause = new qGen.Where();
                SelUltimoId.WhereClause.AddWithValue("id_usuario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);

                this.LastMessageId = this.Connection.FieldInt(SelUltimoId);

                this.PollTimer          = new System.Timers.Timer();
                this.PollTimer.Interval = Lfx.Workspace.Master.SlowLink ? 7000 : 3000;
                this.PollTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.PollTimer_Elapsed);
                this.PollTimer.Start();
            } catch {
                //if (Lfx.Environment.SystemInformation.DesignMode)
                //throw;
            }
        }
Beispiel #24
0
        public void ActualizarUsuariosConectados()
        {
            Lbl.Notificaciones.ColeccionUsuarioConectado Res = new Lbl.Notificaciones.ColeccionUsuarioConectado();

            qGen.Select SelUsuarios = new qGen.Select("sys_mensajeria");
            //SelUsuarios.WhereClause = new qGen.Where();
            //SelUsuarios.WhereClause.AddWithValue("fecha", qGen.ComparisonOperators.GreaterOrEqual, new qGen.SqlExpression("DATE_SUB(fecha, INTERVAL 20 SECOND)"));
            DateTime Ahora = Lfx.Workspace.Master.MasterConnection.ServerDateTime;

            try {
                System.Data.DataTable TablaUsuarios = this.Connection.Select(SelUsuarios);
                foreach (System.Data.DataRow Usuario in TablaUsuarios.Rows)
                {
                    UsuarioConectado Usu = new UsuarioConectado((Lfx.Data.Row)(Usuario));
                    Res.Add(Usu);

                    TimeSpan Dif = Ahora - Usu.Fecha;
                    Usu.Estado = Dif.TotalSeconds < 30 ? 1 : 0;
                }
            } catch {
            }


            // Agrego o actualizo la lista
            foreach (UsuarioConectado Usu in Res.Values)
            {
                if (Usuarios.ContainsKey(Usu.Id))
                {
                    Usuarios[Usu.Id] = Usu;
                }
                else
                {
                    Usuarios.Add(Usu);
                }
            }
        }
Beispiel #25
0
        /// <summary>
        /// Finds the first entity using a search crtieria.
        /// </summary>
        /// <typeparam name="T">The entity type.</typeparam>
        /// <param name="where">The search crtieria.</param>
        /// <param name="orderBy">The order of the resulting set.</param>
        /// <returns>An entity or null.</returns>
        public T FindOneBy <T>(qGen.Where where, string orderBy = null, qGen.Window window = null) where T : new()
        {
            // Get class metadata
            var EntityType    = typeof(T);
            var ClassName     = EntityType.FullName;
            var ClassMetadata = this.MetadataFactory.GetMetadataForClass(EntityType);

            // Construct select
            var IdCols = ClassMetadata.Columns.GetIdColumns();
            var Select = new qGen.Select(ClassMetadata.TableName);

            Select.WhereClause = where;

            if (orderBy != null)
            {
                Select.Order = orderBy;
            }
            if (window != null)
            {
                Select.Window = window;
            }

            // Execute query
            var DataTable = this.Connection.Select(Select);
            var Res       = new EntityCollection <T>();

            // Fill the list
            if (DataTable.Rows.Count > 0)
            {
                return(this.HydrateEntity <T>(ClassMetadata, DataTable.Rows[0]));
            }
            else
            {
                return(default(T));
            }
        }
Beispiel #26
0
                public Task GetNextTask(string component)
                {
                        if (Workspace == null)
                                return null;

                        if (this.DataBase.State != System.Data.ConnectionState.Open)
                                this.DataBase.Open();

                        qGen.Where WhereEstacion = new qGen.Where(qGen.AndOr.Or);
                        WhereEstacion.AddWithValue("estacion", this.DataBase.EscapeString(Lfx.Environment.SystemInformation.MachineName));
                        WhereEstacion.AddWithValue("estacion", "*");

                        qGen.Where WhereFecha = new qGen.Where(qGen.AndOr.Or);
                        WhereFecha.AddWithValue("fechaejecutar", qGen.ComparisonOperators.LessOrEqual, qGen.SqlFunctions.Now);
                        WhereFecha.AddWithValue("fechaejecutar", null);

                        m_LastGetTask = DateTime.Now;
                        qGen.Select NextTask = new qGen.Select("sys_programador");
                        NextTask.WhereClause = new qGen.Where("estado", 0);
                        NextTask.WhereClause.AddWithValue("componente", component);
                        NextTask.WhereClause.AddWithValue(WhereEstacion);
                        NextTask.WhereClause.AddWithValue(WhereFecha);

                        NextTask.Order = "id_evento";

                        Lfx.Data.Row TaskRow;
                        try {
                                TaskRow = this.DataBase.FirstRowFromSelect(NextTask);
                        } catch {
                                TaskRow = null;
                        }
                        if (TaskRow != null) {
                                Task Result = new Task();

                                Result.Id = System.Convert.ToInt32(TaskRow["id_evento"]);
                                Result.Command = TaskRow["comando"].ToString();
                                Result.Component = TaskRow["componente"].ToString();
                                Result.Creator = TaskRow["crea_usuario"].ToString();
                                Result.CreatorComputerName = TaskRow["crea_estacion"].ToString();
                                Result.ComputerName = TaskRow["estacion"].ToString();
                                Result.Schedule = System.Convert.ToDateTime(TaskRow["fecha"]);
                                Result.Status = System.Convert.ToInt32(TaskRow["estado"]);

                                //Elimino tareas viejas
                                qGen.Update Actualizar = new qGen.Update("sys_programador", new qGen.Where("id_evento", Result.Id));
                                Actualizar.Fields.AddWithValue("estado", 1);

                                using (System.Data.IDbTransaction Trans = this.DataBase.BeginTransaction()) {
                                        this.DataBase.Execute(Actualizar);
                                        this.DataBase.Execute(new qGen.Delete("sys_programador", new qGen.Where("fecha", qGen.ComparisonOperators.LessThan, System.DateTime.Now.AddDays(-7))));
                                        Trans.Commit();
                                }

                                return Result;
                        } else
                                return null;
                }
Beispiel #27
0
                private void MostrarVistaPrevia()
                {
                        int PV = EntradaPV.ValueInt;
                        int Desde = EntradaDesde.ValueInt;

                        if (EntradaHasta.ValueInt < Desde && this.ActiveControl != EntradaHasta)
                                EntradaHasta.ValueInt = Desde;

                        int Hasta = EntradaHasta.ValueInt;
                        int Cantidad = Hasta - Desde + 1;

                        string[] IncluyeTipos;

                        switch (EntradaTipo.TextKey) {
                                case "A":
                                        IncluyeTipos = new string[] { "FA", "NCA", "NDA" };
                                        break;

                                case "B":
                                        IncluyeTipos = new string[] { "FB", "NCB", "NDB" };
                                        break;

                                case "C":
                                        IncluyeTipos = new string[] { "FC", "NCC", "NDC" };
                                        break;

                                case "E":
                                        IncluyeTipos = new string[] { "FE", "NCE", "NDE" };
                                        break;

                                case "M":
                                        IncluyeTipos = new string[] { "FM", "NCM", "NDM" };
                                        break;

                                case "T":
                                        IncluyeTipos = new string[] { "T" };
                                        break;

                                default:
                                        IncluyeTipos = new string[] { EntradaTipo.TextKey };
                                        break;
                        }

                        qGen.Where WhereAnular = new qGen.Where();
                        WhereAnular.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                        WhereAnular.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, IncluyeTipos);
                        WhereAnular.AddWithValue("pv", PV);

                        if (ProximosNumeros.ContainsKey(PV) == false) {
                                qGen.Select SelProxNum = new qGen.Select("comprob");
                                SelProxNum.Fields = "MAX(numero)";
                                SelProxNum.WhereClause = WhereAnular;
                                ProximosNumeros[PV] = this.Connection.FieldInt(SelProxNum) + 1;
                        }

                        if (PV <= 0 || Desde <= 0 || Cantidad <= 0) {
                                EtiquetaAviso.Text = "El rango seleccionado no es válido.";
                                ComprobanteVistaPrevia.Visible = false;
                                ListadoFacturas.Visible = false;
                                OkButton.Visible = false;
                                return;
                        }

                        if (Desde > ProximosNumeros[PV]) {
                                EtiquetaAviso.Text = "No se puede anular el rango seleccionado porque todavía no se utilizaron los comprobantes desde el " + ProximosNumeros[PV].ToString() + " al " + (Desde - 1).ToString();
                                ComprobanteVistaPrevia.Visible = false;
                                ListadoFacturas.Visible = false;
                                OkButton.Visible = false;
                                return;
                        }

                        ComprobanteVistaPrevia.Visible = Cantidad == 1;
                        ListadoFacturas.Visible = Cantidad > 1;

                        if (Cantidad == 1) {
                                qGen.Select SelDesde = new qGen.Select("comprob");
                                SelDesde.Fields = "id_comprob";
                                SelDesde.WhereClause = WhereAnular.Clone();
                                SelDesde.WhereClause.AddWithValue("numero", Desde);

                                int IdFactura = this.Connection.FieldInt(SelDesde);

                                Lbl.Comprobantes.ComprobanteConArticulos FacturaInicial = null;
                                if (IdFactura > 0)
                                        FacturaInicial = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, IdFactura);

                                if (FacturaInicial != null && FacturaInicial.Existe) {
                                        ComprobanteVistaPrevia.Elemento = FacturaInicial;
                                        ComprobanteVistaPrevia.ActualizarControl();
                                        ComprobanteVistaPrevia.TemporaryReadOnly = true;
                                        ComprobanteVistaPrevia.Visible = true;

                                        if (FacturaInicial.Anulado) {
                                                EtiquetaAviso.Text = "El comprobante ya fue anulado y no puede anularse nuevamente.";
                                                OkButton.Visible = false;
                                        } else {
                                                EtiquetaAviso.Text = "Recuerde que necesitar archivar todas las copias del comprobante anulado.";
                                                OkButton.Visible = true;
                                                if (FacturaInicial.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) {
                                                        EntradaAnularPagos.TextKey = "1";
                                                } else {
                                                        EntradaAnularPagos.TextKey = "0";
                                                }
                                        }
                                } else {
                                        ComprobanteVistaPrevia.Visible = false;

                                        if (Desde == ProximosNumeros[PV]) {
                                                EtiquetaAviso.Text = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Desde.ToString("00000000") + " aun no fue impreso, pero es el próximo en el talonario. Si lo anula, el sistema salteará dicho comprobante.";
                                                EntradaAnularPagos.TextKey = "0";
                                                OkButton.Visible = true;
                                        } else {
                                                EtiquetaAviso.Text = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Lfx.Types.Parsing.ParseInt(EntradaDesde.Text).ToString("00000000") + " aun no fue impreso y no puede anularse.";
                                                EntradaAnularPagos.TextKey = "0";
                                                OkButton.Visible = false;
                                        }
                                }
                        } else if (Cantidad > 1) {
                                EntradaAnularPagos.TextKey = "1";

                                qGen.Select SelComprobs = new qGen.Select("comprob");
                                SelComprobs.Fields = "*";
                                SelComprobs.WhereClause = WhereAnular.Clone();
                                SelComprobs.WhereClause.AddWithValue("numero", Desde, Hasta);

                                System.Data.DataTable TablaFacturas = this.Connection.Select(SelComprobs);
                                Lbl.Comprobantes.ColeccionComprobanteConArticulos Facturas = new Lbl.Comprobantes.ColeccionComprobanteConArticulos(this.Connection, TablaFacturas);
                                ListadoFacturas.BeginUpdate();
                                ListadoFacturas.Items.Clear();
                                foreach (Lbl.Comprobantes.ComprobanteConArticulos Fac in Facturas) {
                                        ListViewItem Itm = ListadoFacturas.Items.Add(Fac.Tipo.ToString());
                                        Itm.SubItems.Add(Fac.PV.ToString("0000") + "-" + Fac.Numero.ToString("00000000"));
                                        Itm.SubItems.Add(Fac.Fecha.ToString(Lfx.Types.Formatting.DateTime.ShortDatePattern));
                                        Itm.SubItems.Add(Fac.Cliente.ToString());
                                        Itm.SubItems.Add(Lfx.Types.Formatting.FormatCurrency(Fac.Total));
                                }
                                ListadoFacturas.EndUpdate();
                                EtiquetaAviso.Text = "Se van a anular " + Cantidad.ToString() + " comprobantes, incluyendo los que se detallan a continuación.";
                                this.OkButton.Visible = true;
                        } else {
                                EtiquetaAviso.Text = "Debe seleccionar un rango que inlcuya al menos 1 comprobante.";
                                ListadoFacturas.Items.Clear();
                                this.OkButton.Visible = false;
                        }
                }
Beispiel #28
0
        /// <summary>
        /// Exporta una tabla a un archivo de texto con una secuencia de comandos SQL.
        /// </summary>
        public void ExportTable(qGen.Select Comando, bool ExportarBlobs, System.IO.StreamWriter writer)
        {
            System.Data.DataTable Tabla = Lfx.Workspace.Master.MasterConnection.Select(Comando);

            string NombresCampos = null;

            // Hago un dump de los campos
            foreach (System.Data.DataColumn Campo in Tabla.Columns)
            {
                if (NombresCampos == null)
                {
                    NombresCampos = Campo.ColumnName;
                }
                else
                {
                    NombresCampos += ", " + Campo.ColumnName;
                }
            }

            foreach (System.Data.DataRow Registro in Tabla.Rows)
            {
                string Valores = "";
                foreach (System.Data.DataColumn Campo in Tabla.Columns)
                {
                    string Valor = "";
                    if (Registro[Campo.ColumnName] == DBNull.Value || Registro[Campo.ColumnName] == null)
                    {
                        Valor = "NULL";
                    }
                    else
                    {
                        switch (Campo.DataType.Name)
                        {
                        case "Byte[]":
                            if (ExportarBlobs)
                            {
                                // FIXME: exportar BLOBS
                            }
                            else
                            {
                                Valor = "NULL";
                            }
                            break;

                        case "SByte":
                        case "Byte":
                        case "Int16":
                        case "Int32":
                        case "Int64":
                            Valor = Registro[Campo.ColumnName].ToString();
                            break;

                        case "Single":
                        case "Double":
                            Valor = System.Convert.ToDouble(Registro[Campo.ColumnName]).ToString(System.Globalization.CultureInfo.InvariantCulture);
                            break;

                        case "Decimal":
                            Valor = System.Convert.ToDecimal(Registro[Campo.ColumnName]).ToString(System.Globalization.CultureInfo.InvariantCulture);
                            break;

                        case "DateTime":
                            Valor = "'" + Lfx.Types.Formatting.FormatDateTimeSql(System.Convert.ToDateTime(Registro[Campo.ColumnName])) + "'";
                            break;

                        case "String":
                            Valor = "'" + Lfx.Workspace.Master.MasterConnection.EscapeString(System.Convert.ToString(Registro[Campo.ColumnName])).Replace("\r", @"\r").Replace("\n", @"\n") + "'";
                            break;

                        default:
                            Lfx.Workspace.Master.RunTime.Toast("No se puede restaurar campo tipo " + Campo.DataType.Name, "Error");
                            Valor = "'" + Lfx.Workspace.Master.MasterConnection.EscapeString(Registro[Campo.ColumnName].ToString()) + "'";
                            break;
                        }
                    }
                    //Quito el primer ", "
                    Valores += ", " + Valor;
                }
                Valores = Valores.Substring(2, Valores.Length - 2);
                writer.WriteLine("$INSERTORREPLACE$ " + Comando.Tables + " (" + NombresCampos + ") VALUES (" + Valores + ")" + ";");
            }
            writer.WriteLine("");
            writer.WriteLine("");
            return;
        }
Beispiel #29
0
                /// <summary>
                /// Cancela el importe impago de los comprobantes en listaComprob y si sobra continúa cancelando en los comprobantes
                /// más viejos que tengan saldo pendiente. Si continúa sobrando, deja el saldo a favor en cta. cte.
                /// </summary>
                /// <param name="cliente">El cliente.</param>
                /// <param name="listaComprob">La lista de comprobantes en los cuales cancelar saldo impago.</param>
                /// <param name="comprob">El comprobante que está cancelando saldos. Puede ser un recibo o una NC.</param>
                /// <param name="importe">El importe total a cancelar. Puede ser negativo para hacerlo en contra del cliente.</param>
                public static decimal CancelarImpagos(Lbl.Personas.Persona cliente, ColeccionComprobanteImporte listaComprob, Lbl.Comprobantes.Comprobante comprob, decimal importe)
                {
                        decimal TotalACancelar = Math.Abs(importe);

                        if (listaComprob != null && listaComprob.Count > 0) {
                                // Si hay una lista de facturas, las cancelo
                                foreach (ComprobanteImporte CompImp in listaComprob) {
                                        // Calculo cuanto queda por cancelar en esta factura
                                        decimal ImportePendiente = CompImp.Comprobante.Total - CompImp.Comprobante.ImporteCancelado;

                                        // Intento cancelar todo
                                        decimal Cancelando = ImportePendiente;

                                        // Si se acabó la plata, hago un pago parcial
                                        if (Cancelando > TotalACancelar)
                                                Cancelando = TotalACancelar;

                                        // Si alcanzo a cancelar algo, lo asiento
                                        if (Cancelando > 0)
                                                CompImp.Comprobante.CancelarImporte(Cancelando, comprob);
                                        
                                        CompImp.Importe = Cancelando;

                                        TotalACancelar -= Cancelando;
                                        if (TotalACancelar <= 0)
                                                break;
                                }
                        }

                        if (TotalACancelar > 0) {
                                // Si queda más saldo, sigo buscando facturas a cancelar
                                qGen.Select SelFacConSaldo = new qGen.Select("comprob");
                                SelFacConSaldo.WhereClause = new qGen.Where();
                                SelFacConSaldo.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                                SelFacConSaldo.WhereClause.AddWithValue("anulada", 0);
                                SelFacConSaldo.WhereClause.AddWithValue("numero", qGen.ComparisonOperators.GreaterThan, 0);
                                SelFacConSaldo.WhereClause.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
                                SelFacConSaldo.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));
                                SelFacConSaldo.WhereClause.AddWithValue("id_cliente", cliente.Id);
                                SelFacConSaldo.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM" });
                                if (importe > 0) {
                                        // Cancelo facturas y ND regulares
                                        SelFacConSaldo.WhereClause.AddWithValue("compra", 0);
                                } else {
                                        // Cancelo facturas y de compra
                                        SelFacConSaldo.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
                                }
                                SelFacConSaldo.Order = "id_comprob";
                                using (System.Data.DataTable FacturasConSaldo = cliente.Connection.Select(SelFacConSaldo)) {
                                        foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows) {
                                                Lbl.Comprobantes.ComprobanteConArticulos Fact = new ComprobanteConArticulos(cliente.Connection, (Lfx.Data.Row)Factura);

                                                decimal SaldoFactura = Fact.ImporteImpago;
                                                decimal ImporteASaldar = SaldoFactura;

                                                if (ImporteASaldar > TotalACancelar)
                                                        ImporteASaldar = TotalACancelar;

                                                listaComprob.AddWithValue(Fact, ImporteASaldar);
                                                Fact.CancelarImporte(ImporteASaldar, comprob);

                                                TotalACancelar -= ImporteASaldar;

                                                if (TotalACancelar <= 0)
                                                        break;
                                        }
                                }
                        }

                        /* if (TotalACancelar > 0) {
                                Lbl.Cajas.Concepto Conc;
                                if (comprob is Recibo)
                                        Conc = ((Recibo)comprob).Concepto;
                                else
                                        Conc = Lbl.Cajas.Concepto.IngresosPorFacturacion;
                                cliente.CuentaCorriente.Movimiento(true, Conc, "Saldo s/" + comprob.ToString(), TotalACancelar * DireccionCtaCte, comprob.Obs, comprob as Lbl.Comprobantes.ComprobanteConArticulos, comprob as Lbl.Comprobantes.Recibo, null);
                                cliente.CuentaCorriente.CancelarComprobantesConSaldo(TotalACancelar * -DireccionCtaCte, true);
                                TotalACancelar = 0;
                        } */

                        // Devuelvo el sobrante
                        return TotalACancelar;
                }
Beispiel #30
0
        private string ReadGlobalSettingString(string settingName, string defaultValue, string terminalName, int sucursal)
        {
            //Si el caché es muy viejo, lo vacío
            if (SysConfigCache != null && System.DateTime.Now > SysConfigCacheLastRefresh.AddMinutes(10))
            {
                this.ClearCache();
            }

            if (SysConfigCache == null)
            {
                SysConfigCache = new Dictionary <string, string>();

                qGen.Select SelectConfig = new qGen.Select("sys_config");
                SelectConfig.Columns = new List <string> {
                    "nombre", "valor", "estacion", "id_sucursal"
                };
                System.Data.DataTable TablaSysConfig = null;
                int Intentos = 3;
                while (true)
                {
                    try {
                        TablaSysConfig = this.Connection.Select(SelectConfig);
                        break;
                    }
                    catch (Exception ex) {
                        Intentos--;
                        System.Threading.Thread.Sleep(1000);
                        if (Intentos <= 0)
                        {
                            throw ex;
                        }
                    }
                }

                foreach (System.Data.DataRow CfgRow in TablaSysConfig.Rows)
                {
                    string Sucu;
                    if (CfgRow["id_sucursal"] == null)
                    {
                        Sucu = "0";
                    }
                    else
                    {
                        Sucu = CfgRow["id_sucursal"].ToString();
                    }
                    string VarName = CfgRow["estacion"].ToString() + "/" + Sucu + "/" + CfgRow["nombre"].ToString();
                    SysConfigCache.Add(VarName, CfgRow["valor"].ToString());
                }
                SysConfigCacheLastRefresh = System.DateTime.Now;
            }

            string Busco;

            //Busco una variable para la estación
            Busco = (terminalName == null ? Lfx.Environment.SystemInformation.MachineName : terminalName) + "/0/" + settingName;
            if (sucursal == 0 && SysConfigCache.ContainsKey(Busco))
            {
                string Res = (string)SysConfigCache[Busco];
                return(Res);
            }

            //Busco una variable para la sucursal
            Busco = "*/" + Lfx.Workspace.Master.CurrentConfig.Empresa.SucursalActual.ToString() + "/" + Connection.EscapeString(settingName);
            if (terminalName == null && SysConfigCache.ContainsKey(Busco))
            {
                string Res = (string)SysConfigCache[Busco];
                return(Res);
            }

            if (sucursal == 0 && terminalName == null)
            {
                //Busco una variable global
                Busco = "*/0/" + Connection.EscapeString(settingName);
                if (SysConfigCache.ContainsKey(Busco))
                {
                    string Res = (string)SysConfigCache[Busco];
                    return(Res);
                }
            }

            return(defaultValue);
        }
Beispiel #31
0
        public Task GetNextTask(string component)
        {
            if (Workspace == null)
            {
                return(null);
            }

            if (this.DataBase.State != System.Data.ConnectionState.Open)
            {
                this.DataBase.Open();
            }

            qGen.Where WhereEstacion = new qGen.Where(qGen.AndOr.Or);
            WhereEstacion.AddWithValue("estacion", this.DataBase.EscapeString(Lfx.Environment.SystemInformation.MachineName));
            WhereEstacion.AddWithValue("estacion", "*");

            qGen.Where WhereFecha = new qGen.Where(qGen.AndOr.Or);
            WhereFecha.AddWithValue("fechaejecutar", qGen.ComparisonOperators.LessOrEqual, new qGen.SqlExpression("NOW()"));
            WhereFecha.AddWithValue("fechaejecutar", null);

            m_LastGetTask = DateTime.Now;
            qGen.Select NextTask = new qGen.Select("sys_programador");
            NextTask.WhereClause = new qGen.Where("estado", 0);
            NextTask.WhereClause.AddWithValue("componente", component);
            NextTask.WhereClause.AddWithValue(WhereEstacion);
            NextTask.WhereClause.AddWithValue(WhereFecha);

            NextTask.Order = "id_evento";

            Lfx.Data.Row TaskRow;
            try {
                TaskRow = this.DataBase.FirstRowFromSelect(NextTask);
            } catch {
                TaskRow = null;
            }
            if (TaskRow != null)
            {
                Task Result = new Task();

                Result.Id                  = System.Convert.ToInt32(TaskRow["id_evento"]);
                Result.Command             = TaskRow["comando"].ToString();
                Result.Component           = TaskRow["componente"].ToString();
                Result.Creator             = TaskRow["crea_usuario"].ToString();
                Result.CreatorComputerName = TaskRow["crea_estacion"].ToString();
                Result.ComputerName        = TaskRow["estacion"].ToString();
                Result.Schedule            = System.Convert.ToDateTime(TaskRow["fecha"]);
                Result.Status              = System.Convert.ToInt32(TaskRow["estado"]);

                //Elimino tareas viejas
                qGen.Update Actualizar = new qGen.Update("sys_programador", new qGen.Where("id_evento", Result.Id));
                Actualizar.ColumnValues.AddWithValue("estado", 1);

                using (System.Data.IDbTransaction Trans = this.DataBase.BeginTransaction()) {
                    this.DataBase.ExecuteNonQuery(Actualizar);
                    this.DataBase.ExecuteNonQuery(new qGen.Delete("sys_programador", new qGen.Where("fecha", qGen.ComparisonOperators.LessThan, System.DateTime.Now.AddDays(-7))));
                    Trans.Commit();
                }

                return(Result);
            }
            else
            {
                return(null);
            }
        }
Beispiel #32
0
                private void EntradaVendedorClienteTipoPVNumero_TextChanged(System.Object sender, System.EventArgs e)
                {
                        qGen.Select SelFac = new qGen.Select("comprob");
                        SelFac.WhereClause = new qGen.Where();

                        if (EntradaVendedor.ValueInt > 0)
                                SelFac.WhereClause.AddWithValue("id_vendedor", EntradaVendedor.ValueInt);

                        if (EntradaCliente.ValueInt > 0)
                                SelFac.WhereClause.AddWithValue("id_cliente", EntradaCliente.ValueInt);

                        if (this.AceptarCanceladas == false)
                                SelFac.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));

                        if (this.DeCompra) {
                                SelFac.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
                        } else {
                                SelFac.WhereClause.AddWithValue("compra", 0);
                                if (this.AceptarNoImpresas == false)
                                        SelFac.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                        }

                        if (this.AceptarAnuladas == false)
                                SelFac.WhereClause.AddWithValue("anulada", 0);

                        switch (EntradaTipo.TextKey) {
                                case "A":
                                case "B":
                                case "C":
                                case "E":
                                case "M":
                                        SelFac.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "F" + EntradaTipo.TextKey, "NC" + EntradaTipo.TextKey, "ND" + EntradaTipo.TextKey });
                                        break;
                                case "*":
                                        SelFac.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FM", "FE", "NCA", "NCB", "NCC", "NCM", "NCE", "NDA", "NDB", "NDC", "NDM", "NDE" });
                                        break;
                                case "PS":
                                        SelFac.WhereClause.AddWithValue("tipo_fac", "PS");
                                        break;
                                case "R":
                                        SelFac.WhereClause.AddWithValue("tipo_fac", "R");
                                        break;
                        }

                        if (EntradaPv.ValueInt > 0)
                                SelFac.WhereClause.AddWithValue("pv", EntradaPv.ValueInt);

                        if (EntradaNumero.ValueInt > 0)
                                SelFac.WhereClause.AddWithValue("numero", EntradaNumero.ValueInt);

                        SelFac.Order = "fecha DESC";
                        DataTable Facturas = this.Connection.Select(SelFac);

                        Listado.BeginUpdate();
                        Listado.Items.Clear();
                        foreach (System.Data.DataRow Factura in Facturas.Rows) {
                                ListViewItem Itm = Listado.Items.Add(System.Convert.ToString(Factura["id_comprob"]));
                                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatDate(Factura["fecha"])));
                                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, System.Convert.ToString(Factura["tipo_fac"])));
                                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, System.Convert.ToInt32(Factura["pv"]).ToString("0000") + "-" + System.Convert.ToInt32(Factura["numero"]).ToString("00000000")));
                                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, this.Connection.FieldString("SELECT nombre_visible FROM personas WHERE id_persona=" + Factura["id_cliente"].ToString())));
                                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatCurrency(System.Convert.ToDecimal(Factura["total"]), Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
                                if (System.Convert.ToDouble(Factura["cancelado"]) >= System.Convert.ToDouble(Factura["total"]))
                                        Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, "Sí"));
                                else
                                        Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatCurrency(System.Convert.ToDecimal(Factura["cancelado"]), Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
                        }
                        if (Listado.Items.Count > 0) {
                                Listado.Items[0].Selected = true;
                                Listado.Items[0].Focused = true;
                        }
                        Listado.EndUpdate();
                }
Beispiel #33
0
        protected void CargoDatos()
        {
            qGen.Select SelectConfig = new qGen.Select("sys_config");
            SelectConfig.Columns = new qGen.SqlIdentifierCollection()
            {
                "nombre", "valor", "estacion", "id_sucursal"
            };
            SelectConfig.WhereClause = new qGen.Where("Grupo='L'");
            System.Data.DataTable TablaSysConfig = null;
            int Intentos = 3;

            while (true)
            {
                try
                {
                    TablaSysConfig = this.Connection.Select(SelectConfig);
                    break;
                }
                catch (Exception ex)
                {
                    Intentos--;
                    System.Threading.Thread.Sleep(1000);
                    if (Intentos <= 0)
                    {
                        throw ex;
                    }
                }
            }

            if (TablaSysConfig.Rows.Count > 0)
            {
                TieneRegistro = true;
                foreach (System.Data.DataRow CfgRow in TablaSysConfig.Rows)
                {
                    string Sucu;
                    if (CfgRow["id_sucursal"] == null)
                    {
                        Sucu = "0";
                    }
                    else
                    {
                        Sucu = CfgRow["id_sucursal"].ToString();
                    }

                    if (Sucu == "0" || (Sucu == sucursalActual))
                    {
                        string estacion = CfgRow["estacion"].ToString();
                        if (estacion == "*" || estacion == terminalName)
                        {
                            switch (CfgRow["nombre"].ToString())
                            {
                            case "CodBar.Impresora":
                                codigobarra.Impresora = CfgRow["valor"].ToString();
                                break;

                            case "CodBar.Nombre":
                                codigobarra.Nombre = CfgRow["valor"].ToString() == "1" ? true : false;
                                break;

                            case "CodBar.Width":
                                codigobarra.Width = int.Parse(CfgRow["valor"].ToString());
                                break;

                            case "CodBar.Height":
                                codigobarra.Height = int.Parse(CfgRow["valor"].ToString());
                                break;

                            case "CodBar.Cantidad":
                                codigobarra.Cantidad = int.Parse(CfgRow["valor"].ToString());
                                break;

                            case "CodBar.Hoja":
                                codigobarra.Hoja = int.Parse(CfgRow["valor"].ToString());
                                break;

                            case "CodBar.TipoCodBar":
                                codigobarra.TipoCodBar = int.Parse(CfgRow["valor"].ToString());
                                break;
                            }
                        }
                    }
                }
            }
        }
Beispiel #34
0
                /// <summary>
                /// Exporta una tabla en un formato binario propietario, incluyendo BLOBs.
                /// </summary>
                public void ExportTableBin(string nombreTabla, BackupWriter writer)
                {
                        qGen.Select Comando = new qGen.Select(nombreTabla);
                        System.Data.DataTable TablaBackup = Lfx.Workspace.Master.MasterConnection.Select(Comando);

                        bool EmitiTabla = false;
                        string[] Fields = null;
                        foreach (System.Data.DataRow RegistroBackup in TablaBackup.Rows) {
                                if (EmitiTabla == false) {
                                        Fields = new string[TablaBackup.Columns.Count];
                                        for (int i = 0; i < TablaBackup.Columns.Count; i++) {
                                                Fields[i] = TablaBackup.Columns[i].ColumnName;
                                        }
                                        string FieldList = string.Join(",", Fields);
                                        writer.Write(":TBL" + Comando.Tables.Length.ToString("0000") + Comando.Tables);
                                        writer.Write(":FDL" + FieldList.Length.ToString("0000") + FieldList);
                                        EmitiTabla = true;
                                }
                                writer.Write(":ROW");

                                for (int i = 0; i < TablaBackup.Columns.Count; i++) {
                                        object ValorOrigen = RegistroBackup[Fields[i]];
                                        string TipoCampoOrigen = ValorOrigen.GetType().ToString().Replace("System.", "");
                                        string TipoCampoDestino;
                                        switch (TipoCampoOrigen) {
                                                case "Byte[]":
                                                        TipoCampoDestino = "B";
                                                        break;
                                                case "SByte":
                                                case "Byte":
                                                case "Int16":
                                                case "Int32":
                                                case "Int64":
                                                        ValorOrigen = ValorOrigen.ToString();
                                                        TipoCampoDestino = "I";
                                                        break;
                                                case "Single":
                                                case "Double":
                                                        double ValDouble = System.Convert.ToDouble(ValorOrigen);
                                                        ValorOrigen = ValDouble.ToString(System.Globalization.CultureInfo.InvariantCulture);
                                                        TipoCampoDestino = "N";
                                                        break;
                                                case "Decimal":
                                                        decimal ValDecimal = System.Convert.ToDecimal(ValorOrigen);
                                                        ValorOrigen = ValDecimal.ToString(System.Globalization.CultureInfo.InvariantCulture);
                                                        TipoCampoDestino = "N";
                                                        break;
                                                case "DateTime":
                                                        ValorOrigen = ((DateTime)ValorOrigen).ToString(Lfx.Types.Formatting.DateTime.SqlDateTimeFormat);
                                                        TipoCampoDestino = "D";
                                                        break;
                                                case "String":
                                                        TipoCampoDestino = "S";
                                                        break;
                                                case "DBNull":
                                                        TipoCampoDestino = "U";
                                                        ValorOrigen = "";
                                                        break;
                                                default:
                                                        TipoCampoDestino = "S";
                                                        ValorOrigen = ValorOrigen.ToString();
                                                        break;
                                        }

                                        byte[] ValorDestino;

                                        if (ValorOrigen is byte[])
                                                ValorDestino = (byte[])ValorOrigen;
                                        else if (ValorOrigen is string)
                                                ValorDestino = System.Text.Encoding.UTF8.GetBytes((string)ValorOrigen);
                                        else
                                                throw new NotImplementedException();

                                        writer.Write(":FLD" + TipoCampoDestino + ValorDestino.Length.ToString("00000000"));
                                        if (ValorDestino.Length > 0)
                                                writer.Write(ValorDestino);
                                }
                                writer.Write(".ROW");
                                //writer.Write(":REM0002" + Lfx.Types.ControlChars.CrLf);
                        }

                        writer.Write(".TBL");
                }
Beispiel #35
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);
                }
                public virtual Lfx.Types.OperationResult DesactivarRegistros(Lbl.ListaIds codigos)
                {
                        System.Data.IDbTransaction Trans = this.Connection.BeginTransaction();

                        qGen.Select SelElementos = new qGen.Select(this.AtributoDatos.TablaDatos);
                        SelElementos.WhereClause = new qGen.Where(this.AtributoDatos.CampoId, qGen.ComparisonOperators.In, codigos.ToArray());

                        System.Data.DataTable TablaElementos = this.Connection.Select(SelElementos);
                        foreach (System.Data.DataRow RegElem in TablaElementos.Rows) {
                                Lbl.IElementoDeDatos Elem = Lbl.Instanciador.Instanciar(this.ElementoTipo, this.Connection, (Lfx.Data.Row)RegElem);
                                if (Elem is Lbl.IEstadosEstandar)
                                        ((Lbl.IEstadosEstandar)(Elem)).Activar(false);
                        }
                        Trans.Commit();

                        return new Lfx.Types.SuccessOperationResult();
                }
Beispiel #37
0
                public override Lfx.Types.OperationResult ValidarControl()
                {
                        if (EntradaCodigoPersonalizado.Text == string.Empty)
                                return new Lfx.Types.FailureOperationResult("Debe escribir el código de la plantilla o seleccionar uno de la lista 'Se utiliza para'.");

                        if (EntradaNombre.Text == string.Empty)
                                return new Lfx.Types.FailureOperationResult("Debe escribir el nombre de la plantilla.");

                        string Codigo;
                        if (EntradaCodigo.TextKey == "*")
                                Codigo = EntradaCodigoPersonalizado.Text;
                        else
                                Codigo = EntradaCodigo.TextKey;

                        qGen.Select SelCodDupl = new qGen.Select("sys_plantillas");
                        SelCodDupl.Fields = "id_plantilla";
                        SelCodDupl.WhereClause = new qGen.Where();
                        SelCodDupl.WhereClause.AddWithValue("codigo", Codigo);
                        if (this.Elemento.Existe)
                                SelCodDupl.WhereClause.AddWithValue("id_plantilla", qGen.ComparisonOperators.NotEqual, this.Elemento.Id);
                        int OtroId = this.Connection.FieldInt(SelCodDupl);
                        if (OtroId > 0)
                                return new Lfx.Types.FailureOperationResult("Ya existe otra plantilla para este tipo de comprobante. No se permite tener más de una plantilla para el mismo tipo de comprobante. Si lo desea puede editar la plantilla existente.");

                        return base.ValidarControl();
                }
Beispiel #38
0
        private void EntradaVendedorClienteTipoPVNumero_TextChanged(System.Object sender, System.EventArgs e)
        {
            qGen.Select SelFac = new qGen.Select("comprob");
            SelFac.WhereClause = new qGen.Where();

            if (EntradaVendedor.ValueInt > 0)
            {
                SelFac.WhereClause.AddWithValue("id_vendedor", EntradaVendedor.ValueInt);
            }

            if (EntradaCliente.ValueInt > 0)
            {
                SelFac.WhereClause.AddWithValue("id_cliente", EntradaCliente.ValueInt);
            }

            if (this.AceptarCanceladas == false)
            {
                SelFac.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));
            }

            if (this.DeCompra)
            {
                SelFac.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
            }
            else
            {
                SelFac.WhereClause.AddWithValue("compra", 0);
                if (this.AceptarNoImpresas == false)
                {
                    SelFac.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                }
            }

            if (this.AceptarAnuladas == false)
            {
                SelFac.WhereClause.AddWithValue("anulada", 0);
            }

            switch (EntradaTipo.TextKey)
            {
            case "A":
            case "B":
            case "C":
            case "E":
            case "M":
                SelFac.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "F" + EntradaTipo.TextKey, "NC" + EntradaTipo.TextKey, "ND" + EntradaTipo.TextKey });
                break;

            case "*":
                SelFac.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FM", "FE", "NCA", "NCB", "NCC", "NCM", "NCE", "NDA", "NDB", "NDC", "NDM", "NDE" });
                break;

            case "PS":
                SelFac.WhereClause.AddWithValue("tipo_fac", "PS");
                break;

            case "R":
                SelFac.WhereClause.AddWithValue("tipo_fac", "R");
                break;
            }

            if (EntradaPv.ValueInt > 0)
            {
                SelFac.WhereClause.AddWithValue("pv", EntradaPv.ValueInt);
            }

            if (EntradaNumero.ValueInt > 0)
            {
                SelFac.WhereClause.AddWithValue("numero", EntradaNumero.ValueInt);
            }

            SelFac.Order = "fecha DESC";
            DataTable Facturas = this.Connection.Select(SelFac);

            Listado.BeginUpdate();
            Listado.Items.Clear();
            foreach (System.Data.DataRow Factura in Facturas.Rows)
            {
                ListViewItem Itm = Listado.Items.Add(System.Convert.ToString(Factura["id_comprob"]));
                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatDate(Factura["fecha"])));
                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, System.Convert.ToString(Factura["tipo_fac"])));
                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, System.Convert.ToInt32(Factura["pv"]).ToString("0000") + "-" + System.Convert.ToInt32(Factura["numero"]).ToString("00000000")));
                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, this.Connection.FieldString("SELECT nombre_visible FROM personas WHERE id_persona=" + Factura["id_cliente"].ToString())));
                Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatCurrency(System.Convert.ToDecimal(Factura["total"]), Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
                if (System.Convert.ToDouble(Factura["cancelado"]) >= System.Convert.ToDouble(Factura["total"]))
                {
                    Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, "Sí"));
                }
                else
                {
                    Itm.SubItems.Add(new ListViewItem.ListViewSubItem(Itm, Lfx.Types.Formatting.FormatCurrency(System.Convert.ToDecimal(Factura["cancelado"]), Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
                }
            }
            if (Listado.Items.Count > 0)
            {
                Listado.Items[0].Selected = true;
                Listado.Items[0].Focused  = true;
            }
            Listado.EndUpdate();
        }
Beispiel #39
0
                public void ActualizarUsuariosConectados()
                {
                        Lbl.Notificaciones.ColeccionUsuarioConectado Res = new Lbl.Notificaciones.ColeccionUsuarioConectado();

                        qGen.Select SelUsuarios = new qGen.Select("sys_mensajeria");
                        //SelUsuarios.WhereClause = new qGen.Where();
                        //SelUsuarios.WhereClause.AddWithValue("fecha", qGen.ComparisonOperators.GreaterOrEqual, new qGen.SqlExpression("DATE_SUB(fecha, INTERVAL 20 SECOND)"));
                        DateTime Ahora = Lfx.Workspace.Master.MasterConnection.ServerDateTime;

                        try {
                                System.Data.DataTable TablaUsuarios = this.Connection.Select(SelUsuarios);
                                foreach (System.Data.DataRow Usuario in TablaUsuarios.Rows) {
                                        UsuarioConectado Usu = new UsuarioConectado((Lfx.Data.Row)(Usuario));
                                        Res.Add(Usu);

                                        TimeSpan Dif = Ahora - Usu.Fecha;
                                        Usu.Estado = Dif.TotalSeconds < 30 ? 1 : 0;
                                }
                        } catch {
                        }


                        // Agrego o actualizo la lista
                        foreach (UsuarioConectado Usu in Res.Values) {
                                if (Usuarios.ContainsKey(Usu.Id))
                                        Usuarios[Usu.Id] = Usu;
                                else
                                        Usuarios.Add(Usu);
                        }
                }
Beispiel #40
0
        private void MostrarVistaPrevia()
        {
            int PV    = EntradaPV.ValueInt;
            int Desde = EntradaDesde.ValueInt;

            if (EntradaHasta.ValueInt < Desde && this.ActiveControl != EntradaHasta)
            {
                EntradaHasta.ValueInt = Desde;
            }

            int Hasta    = EntradaHasta.ValueInt;
            int Cantidad = Hasta - Desde + 1;

            string[] IncluyeTipos;

            switch (EntradaTipo.TextKey)
            {
            case "A":
                IncluyeTipos = new string[] { "FA", "NCA", "NDA" };
                break;

            case "B":
                IncluyeTipos = new string[] { "FB", "NCB", "NDB" };
                break;

            case "C":
                IncluyeTipos = new string[] { "FC", "NCC", "NDC" };
                break;

            case "E":
                IncluyeTipos = new string[] { "FE", "NCE", "NDE" };
                break;

            case "M":
                IncluyeTipos = new string[] { "FM", "NCM", "NDM" };
                break;

            case "T":
                IncluyeTipos = new string[] { "T" };
                break;

            default:
                IncluyeTipos = new string[] { EntradaTipo.TextKey };
                break;
            }

            qGen.Where WhereAnular = new qGen.Where();
            WhereAnular.AddWithValue("compra", m_DeCompra ? 1 : 0);
            WhereAnular.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
            WhereAnular.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, IncluyeTipos);
            WhereAnular.AddWithValue("pv", PV);

            if (ProximosNumeros.ContainsKey(PV) == false)
            {
                qGen.Select SelProxNum = new qGen.Select("comprob");
                SelProxNum.Columns = new List <string> {
                    "MAX(numero)"
                };
                SelProxNum.WhereClause = WhereAnular;
                ProximosNumeros[PV]    = this.Connection.FieldInt(SelProxNum) + 1;
            }

            if (PV <= 0 || Desde <= 0 || Cantidad <= 0)
            {
                EtiquetaAviso.Text             = "El rango seleccionado no es válido.";
                ComprobanteVistaPrevia.Visible = false;
                ListadoFacturas.Visible        = false;
                OkButton.Visible = false;
                return;
            }

            if (Desde > ProximosNumeros[PV])
            {
                EtiquetaAviso.Text             = "No se puede anular el rango seleccionado porque todavía no se utilizaron los comprobantes desde el " + ProximosNumeros[PV].ToString() + " al " + (Desde - 1).ToString();
                ComprobanteVistaPrevia.Visible = false;
                ListadoFacturas.Visible        = false;
                OkButton.Visible = false;
                return;
            }

            ComprobanteVistaPrevia.Visible = Cantidad == 1;
            ListadoFacturas.Visible        = Cantidad > 1;

            if (Cantidad == 1)
            {
                qGen.Select SelDesde = new qGen.Select("comprob");
                SelDesde.Columns = new List <string> {
                    "id_comprob"
                };
                SelDesde.WhereClause = WhereAnular.Clone();
                SelDesde.WhereClause.AddWithValue("numero", Desde);
                SelDesde.Order = "anulada";

                int IdFactura = this.Connection.FieldInt(SelDesde);

                Lbl.Comprobantes.ComprobanteConArticulos FacturaInicial = null;
                if (IdFactura > 0)
                {
                    FacturaInicial = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, IdFactura);
                }

                if (FacturaInicial != null && FacturaInicial.Existe)
                {
                    ComprobanteVistaPrevia.Elemento = FacturaInicial;
                    ComprobanteVistaPrevia.ActualizarControl();
                    ComprobanteVistaPrevia.TemporaryReadOnly = true;
                    ComprobanteVistaPrevia.Visible           = true;

                    if (FacturaInicial.Anulado)
                    {
                        EtiquetaAviso.Text = "El comprobante ya fue anulado y no puede anularse nuevamente.";
                        OkButton.Visible   = false;
                    }
                    else
                    {
                        if (this.DeCompra)
                        {
                            EtiquetaAviso.Text = "Al anular comprobantes de compra, estos serán excluidos de los listados.";
                        }
                        else
                        {
                            EtiquetaAviso.Text = "Recuerde que necesitar archivar todas las copias del comprobante anulado.";
                        }
                        OkButton.Visible = true;
                        if (FacturaInicial.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente)
                        {
                            EntradaAnularPagos.TextKey = "1";
                        }
                        else
                        {
                            EntradaAnularPagos.TextKey = "0";
                        }
                    }
                }
                else
                {
                    ComprobanteVistaPrevia.Visible = false;

                    if (Desde == ProximosNumeros[PV])
                    {
                        EtiquetaAviso.Text         = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Desde.ToString("00000000") + " aun no fue impreso, pero es el próximo en el talonario. Si lo anula, el sistema salteará dicho comprobante.";
                        EntradaAnularPagos.TextKey = "0";
                        OkButton.Visible           = true;
                    }
                    else
                    {
                        EtiquetaAviso.Text         = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Lfx.Types.Parsing.ParseInt(EntradaDesde.Text).ToString("00000000") + " aun no fue impreso y no puede anularse.";
                        EntradaAnularPagos.TextKey = "0";
                        OkButton.Visible           = false;
                    }
                }
            }
            else if (Cantidad > 1)
            {
                EntradaAnularPagos.TextKey = "1";

                qGen.Select SelComprobs = new qGen.Select("comprob");
                SelComprobs.Columns = new List <string> {
                    "*"
                };
                SelComprobs.WhereClause = WhereAnular.Clone();
                SelComprobs.WhereClause.AddWithValue("numero", Desde, Hasta);

                System.Data.DataTable TablaFacturas = this.Connection.Select(SelComprobs);
                Lbl.Comprobantes.ColeccionComprobanteConArticulos Facturas = new Lbl.Comprobantes.ColeccionComprobanteConArticulos(this.Connection, TablaFacturas);
                ListadoFacturas.BeginUpdate();
                ListadoFacturas.Items.Clear();
                foreach (Lbl.Comprobantes.ComprobanteConArticulos Fac in Facturas)
                {
                    ListViewItem Itm = ListadoFacturas.Items.Add(Fac.Tipo.ToString());
                    Itm.SubItems.Add(Fac.PV.ToString("0000") + "-" + Fac.Numero.ToString("00000000"));
                    Itm.SubItems.Add(Fac.Fecha.ToString(Lfx.Types.Formatting.DateTime.ShortDatePattern));
                    Itm.SubItems.Add(Fac.Cliente.ToString());
                    Itm.SubItems.Add(Lfx.Types.Formatting.FormatCurrency(Fac.Total));
                }
                ListadoFacturas.EndUpdate();
                EtiquetaAviso.Text    = "Se van a anular " + Cantidad.ToString() + " comprobantes, incluyendo los que se detallan a continuación.";
                this.OkButton.Visible = true;
            }
            else
            {
                EtiquetaAviso.Text = "Debe seleccionar un rango que inlcuya al menos 1 comprobante.";
                ListadoFacturas.Items.Clear();
                this.OkButton.Visible = false;
            }
        }
Beispiel #41
0
                public void Poll()
                {
                        if (this.Connection.State != System.Data.ConnectionState.Open)
                                this.Connection.Open();

                        qGen.Where WhereUsuario = new qGen.Where(qGen.AndOr.Or);
                        WhereUsuario.AddWithValue("id_destinatario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                        WhereUsuario.AddWithValue("id_destinatario", null);
                        if (Lbl.Sys.Config.Actual.UsuarioConectado.Persona.Grupo != null)
                                WhereUsuario.AddWithValue("id_grupo", Lbl.Sys.Config.Actual.UsuarioConectado.Persona.Grupo.Id);
                        if (Lbl.Sys.Config.Actual.UsuarioConectado.Persona.SubGrupo != null)
                                WhereUsuario.AddWithValue("id_grupo", Lbl.Sys.Config.Actual.UsuarioConectado.Persona.SubGrupo.Id);


                        qGen.Select SelMensajesSinLeer = new qGen.Select("sys_mensajes");

                        SelMensajesSinLeer.WhereClause = new qGen.Where();
                        //SelMensajesSinLeer.WhereClause.AddWithValue("estacion_recibe", Lfx.Environment.SystemInformation.MachineName);
                        SelMensajesSinLeer.WhereClause.AddWithValue("id_mensaje", qGen.ComparisonOperators.GreaterThan, this.LastMessageId);
                        SelMensajesSinLeer.WhereClause.AddWithValue(WhereUsuario);
                        SelMensajesSinLeer.Order = "id_mensaje";

                        System.Data.DataTable TablaMensajes;
                        try {
                                TablaMensajes = this.Connection.Select(SelMensajesSinLeer);
                                foreach (System.Data.DataRow Mensaje in TablaMensajes.Rows) {
                                        INotificacion Res = new NotificacionRegistro(this.Connection, (Lfx.Data.Row)(Mensaje));
                                        this.LastMessageId = System.Convert.ToInt32(Mensaje["id_mensaje"]);
                                        string Destino = System.Convert.ToString(Mensaje["destino"]);
                                        if (Lfx.Components.Manager.ComponentesCargados.ContainsKey(Destino)) {
                                                // Lo notifico via IPC
                                                Lfx.Workspace.Master.RunTime.Notify(Destino, Res);

                                                // Se lo notifico directamente al componente
                                                if (Lfx.Components.Manager.ComponentesCargados[Destino].Funciones.ContainsKey("Notify")) {
                                                        Lfx.Components.Manager.ComponentesCargados[Destino].Funciones["Notify"].Instancia.Arguments = new object[] { Res };
                                                        Lfx.Components.Manager.ComponentesCargados[Destino].Funciones["Notify"].Run();
                                                }
                                        } else {
                                                Lfx.Workspace.Master.RunTime.Notify(Destino, Res);
                                        }
                                }

                                qGen.Insert ActualizarEstado = new qGen.Insert("sys_mensajeria");
                                ActualizarEstado.OnDuplicateKeyUpdate = true;
                                ActualizarEstado.Fields.AddWithValue("id_usuario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                                ActualizarEstado.Fields.AddWithValue("estacion", Lfx.Environment.SystemInformation.MachineName);
                                ActualizarEstado.Fields.AddWithValue("nombre", Lbl.Sys.Config.Actual.UsuarioConectado.Nombre);
                                ActualizarEstado.Fields.AddWithValue("fecha", qGen.SqlFunctions.Now);
                                if (this.LastMessageId > 0)
                                        ActualizarEstado.Fields.AddWithValue("id_ultimomensaje", this.LastMessageId);

                                this.Connection.Execute(ActualizarEstado);
                        } catch (Exception ex) {
                                System.Console.WriteLine(ex.Message);
                                if (Lfx.Environment.SystemInformation.DesignMode)
                                        throw;
                                else
                                        return;
                        }
                }
Beispiel #42
0
        public static decimal DescancelarImpagos(Lbl.Personas.Persona cliente, Lbl.Comprobantes.ColeccionComprobanteImporte listaComprob, Lbl.Comprobantes.Comprobante comprob, decimal importe)
        {
            // Doy los comprob por cancelados
            decimal TotalACancelar = Math.Abs(importe);

            //"Descancelo" comprob
            if (listaComprob != null && listaComprob.Count > 0)
            {
                // Si hay una lista de comprob, los descancelo
                foreach (ComprobanteImporte CompImp in listaComprob)
                {
                    // Intento descancelar todo
                    decimal Cancelando = CompImp.Importe;

                    // Si mes demasiado, hago un pago parcial
                    if (Cancelando > CompImp.Comprobante.ImporteCancelado)
                    {
                        Cancelando = CompImp.Comprobante.ImporteCancelado;
                    }

                    // Si se acabó la plata, hago un pago parcial
                    if (Cancelando > TotalACancelar)
                    {
                        Cancelando = TotalACancelar;
                    }

                    // Si alcanzo a cancelar algo, lo asiento
                    if (Cancelando > 0)
                    {
                        CompImp.Comprobante.DescancelarImporte(Cancelando, comprob);
                    }

                    TotalACancelar = TotalACancelar - Cancelando;
                    if (TotalACancelar == 0)
                    {
                        break;
                    }
                }
            }

            if (TotalACancelar > 0)
            {
                // Si queda más saldo, sigo buscando facturas a descancelar
                qGen.Select SelFacConSaldo = new qGen.Select("comprob");
                SelFacConSaldo.WhereClause = new qGen.Where();
                SelFacConSaldo.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                SelFacConSaldo.WhereClause.AddWithValue("anulada", 0);
                SelFacConSaldo.WhereClause.AddWithValue("numero", qGen.ComparisonOperators.GreaterThan, 0);
                SelFacConSaldo.WhereClause.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
                SelFacConSaldo.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.GreaterThan, 0);
                SelFacConSaldo.WhereClause.AddWithValue("id_cliente", cliente.Id);
                SelFacConSaldo.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM" });
                if (importe > 0)
                {
                    // Cancelo facturas y ND regulares
                    SelFacConSaldo.WhereClause.AddWithValue("compra", 0);
                }
                else
                {
                    // Cancelo facturas y de compra
                    SelFacConSaldo.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
                }
                SelFacConSaldo.Order = "id_comprob DESC";
                using (System.Data.DataTable FacturasConSaldo = cliente.Connection.Select(SelFacConSaldo)) {
                    foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows)
                    {
                        Lbl.Comprobantes.ComprobanteConArticulos Fact = new ComprobanteConArticulos(cliente.Connection, (Lfx.Data.Row)Factura);

                        decimal SaldoFactura   = Fact.ImporteCancelado;
                        decimal ImporteASaldar = SaldoFactura;

                        if (ImporteASaldar > TotalACancelar)
                        {
                            ImporteASaldar = TotalACancelar;
                        }

                        Fact.DescancelarImporte(ImporteASaldar, comprob);

                        TotalACancelar -= ImporteASaldar;

                        if (TotalACancelar <= 0)
                        {
                            break;
                        }
                    }
                }
            }

            /* if (TotalACancelar > 0) {
             *      Lbl.Cajas.Concepto Conc;
             *      if (comprob is Recibo)
             *              Conc = ((Recibo)comprob).Concepto;
             *      else
             *              Conc = Lbl.Cajas.Concepto.AjustesYMovimientos;
             *      cliente.CuentaCorriente.Movimiento(true, Conc, "Anulación de " + comprob.ToString(), TotalACancelar * DireccionCtaCte, comprob.Obs, comprob as Lbl.Comprobantes.ComprobanteConArticulos, comprob as Lbl.Comprobantes.Recibo, null);
             *      TotalACancelar = 0;
             * } */

            // Devuelvo el sobrante
            return(TotalACancelar);
        }
Beispiel #43
0
        /// <summary>
        /// Cancela saldos en comprobantes hasta el importe solicitado.
        /// </summary>
        /// <param name="importe">El importe a cancelar.</param>
        /// <returns>El importe cancelado. Puede ser igual o menor al importe solicitado.</returns>
        private decimal CancelarComprobantes(decimal importe)
        {
            qGen.Where WhereConSaldo = new qGen.Where();
            WhereConSaldo.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
            WhereConSaldo.AddWithValue("anulada", 0);
            WhereConSaldo.AddWithValue("numero", qGen.ComparisonOperators.NotEqual, 0);
            WhereConSaldo.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
            WhereConSaldo.AddWithValue("id_cliente", this.Persona.Id);
            WhereConSaldo.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));
            // impresa>0 AND anulada=0 AND numero>0 AND id_formapago IN (1, 3, 99) AND cancelado<total AND id_cliente=this.Persona.Id

            if (importe > 0)
            {
                // Es un crédito, cancelo Facturas y Notas de Débito de venta y Notas de Crédito de compra
                qGen.Where WhereTipoCredVenta = new qGen.Where();
                WhereTipoCredVenta.AddWithValue("compra", 0);
                WhereTipoCredVenta.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM", "T" });

                qGen.Where WhereTipoCredCompra = new qGen.Where();
                WhereTipoCredCompra.AddWithValue("compra", 1);
                WhereTipoCredCompra.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });

                qGen.Where WhereTipoCred = new qGen.Where(qGen.AndOr.Or);
                WhereTipoCred.AddWithValue(WhereTipoCredVenta);
                WhereTipoCred.AddWithValue(WhereTipoCredCompra);

                WhereConSaldo.AddWithValue(WhereTipoCred);

                /*  AND (compra=0 AND tipo_fac IN ('FA', 'FB', 'FC', 'FE', 'FM', 'NDA', 'NDB', 'NDC', 'NDE', 'NDM')
                 *  OR (compra=1 AND tipo_fac IN ('NCA', 'NCB', 'NCC', 'NCE', 'NCM') */
            }
            else
            {
                // Es un débito. Cancelo Notas de Crédito de venta y Facturas y Notas de Débito de compra
                qGen.Where WhereTipoCredVenta = new qGen.Where();
                WhereTipoCredVenta.AddWithValue("compra", 1);
                WhereTipoCredVenta.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM", "T" });

                qGen.Where WhereTipoCredCompra = new qGen.Where();
                WhereTipoCredCompra.AddWithValue("compra", 0);
                WhereTipoCredCompra.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });

                qGen.Where WhereTipoCred = new qGen.Where(qGen.AndOr.Or);
                WhereTipoCred.AddWithValue(WhereTipoCredVenta);
                WhereTipoCred.AddWithValue(WhereTipoCredCompra);

                WhereConSaldo.AddWithValue(WhereTipoCred);

                /*  AND (compra=1 AND tipo_fac IN ('FA', 'FB', 'FC', 'FE', 'FM', 'NDA', 'NDB', 'NDC', 'NDE', 'NDM')
                 *  OR (compra=0 AND tipo_fac IN ('NCA', 'NCB', 'NCC', 'NCE', 'NCM') */
            }

            qGen.Select SelFacturasConSaldo = new qGen.Select("comprob", true);
            SelFacturasConSaldo.Fields      = "id_comprob,total,cancelado";
            SelFacturasConSaldo.WhereClause = WhereConSaldo;
            SelFacturasConSaldo.Order       = "id_comprob";
            System.Data.DataTable FacturasConSaldo = this.Connection.Select(SelFacturasConSaldo);

            decimal ImporteCancelar  = Math.Abs(importe);
            decimal ImporteCancelado = 0;

            foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows)
            {
                decimal SaldoComprob           = System.Convert.ToDecimal(Factura["total"]) - System.Convert.ToDecimal(Factura["cancelado"]);
                decimal ImporteCancelarComprob = SaldoComprob;

                if (ImporteCancelarComprob > ImporteCancelar)
                {
                    ImporteCancelarComprob = ImporteCancelar;
                }

                qGen.Update ActCancelarComprob = new qGen.Update("comprob");
                ActCancelarComprob.Fields.AddWithValue("cancelado", System.Convert.ToDecimal(Factura["cancelado"]) + ImporteCancelarComprob);
                ActCancelarComprob.WhereClause = new qGen.Where("id_comprob", System.Convert.ToInt32(Factura["id_comprob"]));
                this.Connection.Execute(ActCancelarComprob);
                ImporteCancelar  -= ImporteCancelarComprob;
                ImporteCancelado += ImporteCancelarComprob;

                if (ImporteCancelar <= 0)
                {
                    break;
                }
            }

            return(ImporteCancelado);
        }
Beispiel #44
0
 public Reporte2(Lfx.Data.Connection dataBase, qGen.Select selectCommand)
 {
         this.DataBase = dataBase;
         this.SelectCommand = selectCommand;
 }
Beispiel #45
0
                /// <summary>
                /// Cancela saldos en comprobantes hasta el importe solicitado.
                /// </summary>
                /// <param name="importe">El importe a cancelar.</param>
                /// <returns>El importe cancelado. Puede ser igual o menor al importe solicitado.</returns>
                private decimal CancelarComprobantes(decimal importe)
                {
                        qGen.Where WhereConSaldo = new qGen.Where();
                        WhereConSaldo.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                        WhereConSaldo.AddWithValue("anulada", 0);
                        WhereConSaldo.AddWithValue("numero", qGen.ComparisonOperators.NotEqual, 0);
                        WhereConSaldo.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
                        WhereConSaldo.AddWithValue("id_cliente", this.Persona.Id);
                        WhereConSaldo.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));
                        // impresa>0 AND anulada=0 AND numero>0 AND id_formapago IN (1, 3, 99) AND cancelado<total AND id_cliente=this.Persona.Id

                        if (importe > 0) {
                                // Es un crédito, cancelo Facturas y Notas de Débito de venta y Notas de Crédito de compra
                                qGen.Where WhereTipoCredVenta = new qGen.Where();
                                WhereTipoCredVenta.AddWithValue("compra", 0);
                                WhereTipoCredVenta.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM", "T" });

                                qGen.Where WhereTipoCredCompra = new qGen.Where();
                                WhereTipoCredCompra.AddWithValue("compra", 1);
                                WhereTipoCredCompra.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });

                                qGen.Where WhereTipoCred = new qGen.Where(qGen.AndOr.Or);
                                WhereTipoCred.AddWithValue(WhereTipoCredVenta);
                                WhereTipoCred.AddWithValue(WhereTipoCredCompra);

                                WhereConSaldo.AddWithValue(WhereTipoCred);

                                /*  AND (compra=0 AND tipo_fac IN ('FA', 'FB', 'FC', 'FE', 'FM', 'NDA', 'NDB', 'NDC', 'NDE', 'NDM')
                                    OR (compra=1 AND tipo_fac IN ('NCA', 'NCB', 'NCC', 'NCE', 'NCM') */

                        } else {
                                // Es un débito. Cancelo Notas de Crédito de venta y Facturas y Notas de Débito de compra
                                qGen.Where WhereTipoCredVenta = new qGen.Where();
                                WhereTipoCredVenta.AddWithValue("compra", 1);
                                WhereTipoCredVenta.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM", "T" });

                                qGen.Where WhereTipoCredCompra = new qGen.Where();
                                WhereTipoCredCompra.AddWithValue("compra", 0);
                                WhereTipoCredCompra.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "NCA", "NCB", "NCC", "NCE", "NCM" });

                                qGen.Where WhereTipoCred = new qGen.Where(qGen.AndOr.Or);
                                WhereTipoCred.AddWithValue(WhereTipoCredVenta);
                                WhereTipoCred.AddWithValue(WhereTipoCredCompra);

                                WhereConSaldo.AddWithValue(WhereTipoCred);

                                /*  AND (compra=1 AND tipo_fac IN ('FA', 'FB', 'FC', 'FE', 'FM', 'NDA', 'NDB', 'NDC', 'NDE', 'NDM')
                                    OR (compra=0 AND tipo_fac IN ('NCA', 'NCB', 'NCC', 'NCE', 'NCM') */
                        }

                        qGen.Select SelFacturasConSaldo = new qGen.Select("comprob", true);
                        SelFacturasConSaldo.Fields = "id_comprob,total,cancelado";
                        SelFacturasConSaldo.WhereClause = WhereConSaldo;
                        SelFacturasConSaldo.Order = "id_comprob";
                        System.Data.DataTable FacturasConSaldo = this.Connection.Select(SelFacturasConSaldo);

                        decimal ImporteCancelar = Math.Abs(importe);
                        decimal ImporteCancelado = 0;

                        foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows) {
                                decimal SaldoComprob = System.Convert.ToDecimal(Factura["total"]) - System.Convert.ToDecimal(Factura["cancelado"]);
                                decimal ImporteCancelarComprob = SaldoComprob;

                                if (ImporteCancelarComprob > ImporteCancelar)
                                        ImporteCancelarComprob = ImporteCancelar;

                                qGen.Update ActCancelarComprob = new qGen.Update("comprob");
                                ActCancelarComprob.Fields.AddWithValue("cancelado", System.Convert.ToDecimal(Factura["cancelado"]) + ImporteCancelarComprob);
                                ActCancelarComprob.WhereClause = new qGen.Where("id_comprob", System.Convert.ToInt32(Factura["id_comprob"]));
                                this.Connection.Execute(ActCancelarComprob);
                                ImporteCancelar -= ImporteCancelarComprob;
                                ImporteCancelado += ImporteCancelarComprob;

                                if (ImporteCancelar <= 0)
                                        break;
                        }

                        return ImporteCancelado;
                }
Beispiel #46
0
        public void Poll()
        {
            if (this.Connection.State != System.Data.ConnectionState.Open)
            {
                this.Connection.Open();
            }

            qGen.Where WhereUsuario = new qGen.Where(qGen.AndOr.Or);
            WhereUsuario.AddWithValue("id_destinatario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
            WhereUsuario.AddWithValue("id_destinatario", null);
            if (Lbl.Sys.Config.Actual.UsuarioConectado.Persona.Grupo != null)
            {
                WhereUsuario.AddWithValue("id_grupo", Lbl.Sys.Config.Actual.UsuarioConectado.Persona.Grupo.Id);
            }
            if (Lbl.Sys.Config.Actual.UsuarioConectado.Persona.SubGrupo != null)
            {
                WhereUsuario.AddWithValue("id_grupo", Lbl.Sys.Config.Actual.UsuarioConectado.Persona.SubGrupo.Id);
            }


            qGen.Select SelMensajesSinLeer = new qGen.Select("sys_mensajes");

            SelMensajesSinLeer.WhereClause = new qGen.Where();
            //SelMensajesSinLeer.WhereClause.AddWithValue("estacion_recibe", Lfx.Environment.SystemInformation.MachineName);
            SelMensajesSinLeer.WhereClause.AddWithValue("id_mensaje", qGen.ComparisonOperators.GreaterThan, this.LastMessageId);
            SelMensajesSinLeer.WhereClause.AddWithValue(WhereUsuario);
            SelMensajesSinLeer.Order = "id_mensaje";

            System.Data.DataTable TablaMensajes;
            try {
                TablaMensajes = this.Connection.Select(SelMensajesSinLeer);
                foreach (System.Data.DataRow Mensaje in TablaMensajes.Rows)
                {
                    INotificacion Res = new NotificacionRegistro(this.Connection, (Lfx.Data.Row)(Mensaje));
                    this.LastMessageId = System.Convert.ToInt32(Mensaje["id_mensaje"]);
                    string Destino = System.Convert.ToString(Mensaje["destino"]);
                    if (Lfx.Components.Manager.ComponentesCargados.ContainsKey(Destino))
                    {
                        // Lo notifico via IPC
                        Lfx.Workspace.Master.RunTime.Notify(Destino, Res);

                        // Se lo notifico directamente al componente
                        Lfx.Components.Manager.ComponentesCargados[Destino].ComponentInstance.Do("Notify", new object[] { Res });
                    }
                    else
                    {
                        Lfx.Workspace.Master.RunTime.Notify(Destino, Res);
                    }
                }

                qGen.Insert ActualizarEstado = new qGen.Insert("sys_mensajeria");
                ActualizarEstado.OnDuplicateKeyUpdate = true;
                ActualizarEstado.ColumnValues.AddWithValue("id_usuario", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                ActualizarEstado.ColumnValues.AddWithValue("estacion", Lfx.Environment.SystemInformation.MachineName);
                ActualizarEstado.ColumnValues.AddWithValue("nombre", Lbl.Sys.Config.Actual.UsuarioConectado.Nombre);
                ActualizarEstado.ColumnValues.AddWithValue("fecha", new qGen.SqlExpression("NOW()"));
                if (this.LastMessageId > 0)
                {
                    ActualizarEstado.ColumnValues.AddWithValue("id_ultimomensaje", this.LastMessageId);
                }

                this.Connection.ExecuteNonQuery(ActualizarEstado);
            } catch (Exception ex) {
                System.Console.WriteLine(ex.Message);
                if (Lfx.Environment.SystemInformation.DesignMode)
                {
                    throw;
                }
                else
                {
                    return;
                }
            }
        }
Beispiel #47
0
                public static decimal DescancelarImpagos(Lbl.Personas.Persona cliente, Lbl.Comprobantes.ColeccionComprobanteImporte listaComprob, Lbl.Comprobantes.Comprobante comprob, decimal importe)
                {
                        // Doy los comprob por cancelados
                        decimal TotalACancelar = Math.Abs(importe);

                        //"Descancelo" comprob
                        if (listaComprob != null && listaComprob.Count > 0) {
                                // Si hay una lista de comprob, los descancelo
                                foreach (ComprobanteImporte CompImp in listaComprob) {
                                        // Intento descancelar todo
                                        decimal Cancelando = CompImp.Importe;

                                        // Si mes demasiado, hago un pago parcial
                                        if (Cancelando > CompImp.Comprobante.ImporteCancelado)
                                                Cancelando = CompImp.Comprobante.ImporteCancelado;

                                        // Si se acabó la plata, hago un pago parcial
                                        if (Cancelando > TotalACancelar)
                                                Cancelando = TotalACancelar;

                                        // Si alcanzo a cancelar algo, lo asiento
                                        if (Cancelando > 0)
                                                CompImp.Comprobante.DescancelarImporte(Cancelando, comprob);

                                        TotalACancelar = TotalACancelar - Cancelando;
                                        if (TotalACancelar == 0)
                                                break;
                                }
                        }

                        if (TotalACancelar > 0) {
                                // Si queda más saldo, sigo buscando facturas a descancelar
                                qGen.Select SelFacConSaldo = new qGen.Select("comprob");
                                SelFacConSaldo.WhereClause = new qGen.Where();
                                SelFacConSaldo.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                                SelFacConSaldo.WhereClause.AddWithValue("anulada", 0);
                                SelFacConSaldo.WhereClause.AddWithValue("numero", qGen.ComparisonOperators.GreaterThan, 0);
                                SelFacConSaldo.WhereClause.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
                                SelFacConSaldo.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.GreaterThan, 0);
                                SelFacConSaldo.WhereClause.AddWithValue("id_cliente", cliente.Id);
                                SelFacConSaldo.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM" });
                                if (importe > 0) {
                                        // Cancelo facturas y ND regulares
                                        SelFacConSaldo.WhereClause.AddWithValue("compra", 0);
                                } else {
                                        // Cancelo facturas y de compra
                                        SelFacConSaldo.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
                                }
                                SelFacConSaldo.Order = "id_comprob DESC";
                                using (System.Data.DataTable FacturasConSaldo = cliente.Connection.Select(SelFacConSaldo)) {
                                        foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows) {
                                                Lbl.Comprobantes.ComprobanteConArticulos Fact = new ComprobanteConArticulos(cliente.Connection, (Lfx.Data.Row)Factura);

                                                decimal SaldoFactura = Fact.ImporteCancelado;
                                                decimal ImporteASaldar = SaldoFactura;

                                                if (ImporteASaldar > TotalACancelar)
                                                        ImporteASaldar = TotalACancelar;

                                                Fact.DescancelarImporte(ImporteASaldar, comprob);

                                                TotalACancelar -= ImporteASaldar;

                                                if (TotalACancelar <= 0)
                                                        break;
                                        }
                                }
                        }

                        /* if (TotalACancelar > 0) {
                                Lbl.Cajas.Concepto Conc;
                                if (comprob is Recibo)
                                        Conc = ((Recibo)comprob).Concepto;
                                else
                                        Conc = Lbl.Cajas.Concepto.AjustesYMovimientos;
                                cliente.CuentaCorriente.Movimiento(true, Conc, "Anulación de " + comprob.ToString(), TotalACancelar * DireccionCtaCte, comprob.Obs, comprob as Lbl.Comprobantes.ComprobanteConArticulos, comprob as Lbl.Comprobantes.Recibo, null);
                                TotalACancelar = 0;
                        } */

                        // Devuelvo el sobrante
                        return TotalACancelar;
                }
Beispiel #48
0
                public decimal ObtenerSaldoAFecha(DateTime date)
                {
                        qGen.Select SelSaldo = new qGen.Select(this.TablaDatos, false);
                        SelSaldo.Fields = "saldo";
                        SelSaldo.WhereClause = new qGen.Where("id_cliente", this.Persona.Id);
                        SelSaldo.WhereClause.AddWithValue("fecha", qGen.ComparisonOperators.LessOrEqual, date);
                        SelSaldo.Order = this.CampoId + " DESC";
                        SelSaldo.Window = new qGen.Window(1);

                        return this.Connection.FieldDecimal(SelSaldo);
                }
Beispiel #49
0
                protected override void OnLoad(EventArgs e)
                {
                        base.OnLoad(e);

                        if (this.Connection != null) {
                                if (Parametros == "efectivo") {
                                        this.Caja = Lbl.Sys.Config.Empresa.SucursalActual.CajaDiaria;
                                } else {
                                        int NumeroCaja = Lfx.Types.Parsing.ParseInt(Parametros);
                                        if (NumeroCaja > 0)
                                                this.Caja = new Lbl.Cajas.Caja(this.Connection, NumeroCaja);
                                        else
                                                this.Caja = new Lbl.Cajas.Caja(this.Connection, 999);
                                }

                                if (this.Caja != null) {
                                        // Busco un rango de fechas en el cual haya movimientos
                                        string[] FechasAProbar = new string[] { "dia-0", "semana-0", "mes-0", "mes-1", "mes-2", "mes-3", "mes-4" };
                                        foreach (string FechaAProbar in FechasAProbar) {
                                                Lfx.Types.DateRange Rango = new Lfx.Types.DateRange(FechaAProbar);
                                                qGen.Select SelMovs = new qGen.Select("cajas_movim");
                                                SelMovs.Fields = "COUNT(id_movim)";
                                                SelMovs.WhereClause = new qGen.Where("id_caja", this.Caja.Id);
                                                SelMovs.WhereClause.AddWithValue("fecha", Rango.From, Rango.To);
                                                int Movs = this.Connection.FieldInt(SelMovs);

                                                if (Movs > 0) {
                                                        this.Fechas = new Lfx.Types.DateRange(Rango.From, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));
                                                        break;
                                                }
                                        }
                                }
                        }
                }
                protected qGen.Select SelectCommand(string agrFunction, string onField, qGen.Where additionalFilters)
                {
                        if (this.Connection != null && this.Definicion != null && this.Definicion.TableName != null) {
                                qGen.Select ComandoSelect = new qGen.Select(this.Connection.SqlMode);

                                // Genero la lista de tablas, con JOIN y todo
                                string ListaTablas = null;
                                ListaTablas = this.Definicion.TableName;

                                if (this.Definicion.Joins != null && this.Definicion.Joins.Count > 0)
                                        ComandoSelect.Joins = this.Definicion.Joins;

                                foreach (Lazaro.Pres.Field Fld in this.Definicion.Columns) {
                                        if (Fld.DataType == Lfx.Data.InputFieldTypes.Relation && Fld.Relation != null) {
                                                qGen.Join RelJoin = new qGen.Join(Fld.Relation);
                                                if (ComandoSelect.Joins.Contains(RelJoin) == false)
                                                        ComandoSelect.Joins.Add(RelJoin);
                                        }
                                }

                                string ListaCampos;
                                if (agrFunction != null) {
                                        if (onField == null)
                                                onField = this.Definicion.KeyColumn.Name;
                                        string Alias = agrFunction + "_" + onField.Replace(".", "_");
                                        ListaCampos = agrFunction + "(" + onField + ") AS " + Alias;
                                } else {
                                        // Genero la lista de campos
                                        ListaCampos = this.Definicion.KeyColumn.Name;
                                        foreach (Lazaro.Pres.Field CurField in this.Definicion.Columns)
                                                ListaCampos += "," + CurField.Name;
                                }

                                // Genero las condiciones del WHERE
                                qGen.Where WhereBuscarTexto = new qGen.Where();
                                WhereBuscarTexto.Operator = qGen.AndOr.Or;

                                if (this.SearchText != string.Empty) {
                                        bool EsNumero = this.SearchText.IsNumericInt() || this.SearchText.IsNumericFloat();
                                        if (this.SearchText.IsNumericInt())
                                                WhereBuscarTexto.AddWithValue(this.Definicion.KeyColumn.Name, Lfx.Types.Parsing.ParseInt(this.SearchText).ToString());

                                        if (this.Definicion.Columns != null) {
                                                
                                                
                                                foreach (Lazaro.Pres.Field CurField in this.Definicion.Columns) {
                                                        if (CurField.Name.IndexOf(" AS ") == -1 && CurField.Name.IndexOf("(") == -1) {
                                                                switch (CurField.DataType) {
                                                                        case Lfx.Data.InputFieldTypes.Binary:
                                                                        case Lfx.Data.InputFieldTypes.Image:
                                                                        case Lfx.Data.InputFieldTypes.Bool:
                                                                        case Lfx.Data.InputFieldTypes.Set:
                                                                                // En estos tipos de campos no se busca
                                                                                break;
                                                                        case Lfx.Data.InputFieldTypes.Date:
                                                                        case Lfx.Data.InputFieldTypes.DateTime:
                                                                                // En estos campos, busco atento a que se trata de una fecha
                                                                                NullableDateTime Fecha = SearchText.ParseDateTime();    // TODO: cachear el valor para que no lo parsee en cada iteración
                                                                                if (Fecha != null) {
                                                                                        DateTime SearchDate = Fecha.Value;
                                                                                        DateTime FromDate = new DateTime(SearchDate.Year, SearchDate.Month, SearchDate.Day, 0, 0, 0);
                                                                                        DateTime ToDate = new DateTime(SearchDate.Year, SearchDate.Month, SearchDate.Day, 23, 59, 59);
                                                                                        WhereBuscarTexto.AddWithValue(CurField.Name, FromDate, ToDate);
                                                                                }
                                                                                break;
                                                                        case Lfx.Data.InputFieldTypes.Currency:
                                                                        case Lfx.Data.InputFieldTypes.Integer:
                                                                        case Lfx.Data.InputFieldTypes.Numeric:
                                                                        case Lfx.Data.InputFieldTypes.NumericSet:
                                                                        case Lfx.Data.InputFieldTypes.Serial:
                                                                                // En estos tipos de campos busco sólo números
                                                                                if (EsNumero)
                                                                                        WhereBuscarTexto.AddWithValue(CurField.Name, qGen.ComparisonOperators.InsensitiveLike, "%" + this.SearchText + "%");
                                                                                break;
                                                                        case Lfx.Data.InputFieldTypes.Relation:
                                                                        default:
                                                                                WhereBuscarTexto.AddWithValue(CurField.Name, qGen.ComparisonOperators.InsensitiveLike, "%" + this.SearchText + "%");
                                                                                break;
                                                                }

                                                        }
                                                }
                                        }
                                        if (this.Definicion.ExtraSearchColumns != null) {
                                                foreach (Lazaro.Pres.Field CurField in this.Definicion.ExtraSearchColumns) {
                                                        switch (CurField.DataType) {
                                                                case Lfx.Data.InputFieldTypes.Binary:
                                                                case Lfx.Data.InputFieldTypes.Image:
                                                                        // En estos tipos de campos no se busca
                                                                        break;
                                                                case Lfx.Data.InputFieldTypes.Currency:
                                                                case Lfx.Data.InputFieldTypes.Integer:
                                                                case Lfx.Data.InputFieldTypes.Numeric:
                                                                case Lfx.Data.InputFieldTypes.NumericSet:
                                                                case Lfx.Data.InputFieldTypes.Serial:
                                                                        // En estos tipos de campos busco sólo números
                                                                        if (EsNumero)
                                                                                WhereBuscarTexto.AddWithValue(CurField.Name, qGen.ComparisonOperators.InsensitiveLike, "%" + this.SearchText + "%");
                                                                        break;
                                                                case Lfx.Data.InputFieldTypes.Relation:
                                                                default:
                                                                        WhereBuscarTexto.AddWithValue(CurField.Name, qGen.ComparisonOperators.InsensitiveLike, "%" + this.SearchText + "%");
                                                                        break;
                                                        }
                                                }
                                        }
                                }

                                qGen.Where WhereCompleto = new qGen.Where();
                                WhereCompleto.Operator = qGen.AndOr.And;

                                if (m_Labels != null) {
                                        if (m_LabelField == null || m_LabelField.Length == 0)
                                                m_LabelField = this.Definicion.KeyColumn.Name;
                                        if (m_Labels.Count == 1) {
                                                // Ids negativos sólo cuando hay una sola etiqueta
                                                if (m_Labels[0] > 0)
                                                        WhereCompleto.AddWithValue(m_LabelField, qGen.ComparisonOperators.In, new qGen.SqlExpression("(SELECT item_id FROM sys_labels_values WHERE id_label=" + m_Labels[0].ToString() + ")"));
                                                else
                                                        WhereCompleto.AddWithValue(m_LabelField, qGen.ComparisonOperators.NotIn, new qGen.SqlExpression("(SELECT item_id FROM sys_labels_values WHERE id_label=" + (-m_Labels[0]).ToString() + ")"));
                                        } else if (m_Labels.Count > 1) {
                                                string[] LabelsString = Array.ConvertAll<int, string>(m_Labels.ToArray(), new Converter<int, string>(Convert.ToString));
                                                WhereCompleto.AddWithValue(m_LabelField, qGen.ComparisonOperators.In, new qGen.SqlExpression("(SELECT item_id FROM sys_labels_values WHERE id_label IN (" + string.Join(",", LabelsString) + "))"));
                                        }
                                }

                                if (WhereBuscarTexto.Count > 0)
                                        WhereCompleto.AddWithValue(WhereBuscarTexto);

                                if (m_CustomFilters != null && m_CustomFilters.Count > 0)
                                        WhereCompleto.AddWithValue(m_CustomFilters);

                                if (m_FixedFilters != null && m_FixedFilters.Count > 0)
                                        WhereCompleto.AddWithValue(m_FixedFilters);

                                if (additionalFilters != null && additionalFilters.Count > 0)
                                        WhereCompleto.AddWithValue(additionalFilters);

                                ComandoSelect.Tables = ListaTablas;
                                ComandoSelect.Fields = ListaCampos;
                                ComandoSelect.WhereClause = WhereCompleto;

                                if (this.Definicion.GroupBy != null && agrFunction == null)
                                        ComandoSelect.Group = this.Definicion.GroupBy.Name;

                                if (this.Definicion.Having != null)
                                        ComandoSelect.HavingClause = this.Definicion.Having;

                                if (agrFunction == null)
                                        ComandoSelect.Order = this.Definicion.OrderBy;

                                return ComandoSelect;
                        } else {
                                return null;
                        }
                }
Beispiel #51
0
                public void CheckTable(Lfx.Types.OperationProgress progreso, Lfx.Data.Table table)
                {
                        Lfx.Data.TableStructure CurrentTableDef = this.DataBase.GetTableStructure(table.Name, true);
                        progreso.ChangeStatus("Verificando tabla " + table.Name);

                        foreach (Lfx.Data.ConstraintDefinition Cons in CurrentTableDef.Constraints.Values) {
                                // Elimino valores 0 (los pongo en NULL)
                                qGen.Update PonerNullablesEnNull = new qGen.Update(table.Name);
                                PonerNullablesEnNull.Fields.AddWithValue(Cons.Column, null);
                                PonerNullablesEnNull.WhereClause = new qGen.Where(Cons.Column, 0);
                                this.DataBase.Execute(PonerNullablesEnNull);

                                // Busco problemas de integridad referencial
                                if (Cons.TableName != Cons.ReferenceTable) {
                                        qGen.Select RefValidas = new qGen.Select(Cons.ReferenceTable);
                                        RefValidas.Fields = Cons.ReferenceColumn;

                                        qGen.Update ElimRefInvalidas = new qGen.Update(table.Name);
                                        switch(Cons.ReferenceTable) {
                                                case "bancos":
                                                        // Los bancos inexistentes los remplazo por "otro banco"
                                                        ElimRefInvalidas.Fields.AddWithValue(Cons.Column, 99);
                                                        break;
                                                case "personas":
                                                        // Las personas inexistentes las paso a Administrador
                                                        ElimRefInvalidas.Fields.AddWithValue(Cons.Column, 1);
                                                        break;
                                                default:
                                                        // El resto lo pongo en null
                                                        ElimRefInvalidas.Fields.AddWithValue(Cons.Column, null);
                                                        break;
                                        }
                                        ElimRefInvalidas.WhereClause = new qGen.Where(Cons.Column, qGen.ComparisonOperators.NotIn, RefValidas);

                                        System.Console.WriteLine(ElimRefInvalidas.ToString());
                                        this.DataBase.Execute(ElimRefInvalidas);
                                }
                        }
                }