示例#1
0
        public Transaccion Insert(Transaccion transaccion, decimal idAsiento, int userId)
        {
            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable)) {
                try {
                    var sql = "INSERT INTO transactions_accounting " +
                              "(account_id,accounting_entry_id,reference,detail,balance, balance_type,money_type, money_chance,bill_date, updated_by) " +
                              "VALUES (@account_id,@accounting_entry_id,@reference,@detail,@balance,@balance_type,@money_type,@money_chance,@bill_date,@updated_by); SELECT LAST_INSERT_ID();";
                    using (MySqlCommand cmd = new MySqlCommand(sql, tr.Connection, tr)) {
                        List <Parametro> lst = new List <Parametro> ();
                        cmd.Parameters.AddWithValue("@account_id", transaccion.CuentaDeAsiento.Id);
                        cmd.Parameters.AddWithValue("@accounting_entry_id", idAsiento);
                        cmd.Parameters.AddWithValue("@reference", transaccion.Referencia);
                        cmd.Parameters.AddWithValue("@detail", transaccion.Detalle);
                        cmd.Parameters.AddWithValue("@balance", transaccion.Monto);
                        cmd.Parameters.AddWithValue("@balance_type", Convert.ToInt16(transaccion.ComportamientoCuenta));
                        cmd.Parameters.AddWithValue("@money_type", Convert.ToInt16(transaccion.TipoCambio));
                        cmd.Parameters.AddWithValue("@money_chance", transaccion.MontoTipoCambio);
                        cmd.Parameters.AddWithValue("@bill_date", transaccion.FechaFactura);
                        cmd.Parameters.AddWithValue("@updated_by", userId);

                        var id = cmd.ExecuteScalar();
                        transaccion.Id = Convert.ToInt32(id);
                    }
                    tr.Commit();
                    return(transaccion);
                } catch (Exception) {
                    tr.Rollback();
                    throw;
                }
            }
        }
示例#2
0
        /// <summary>
        /// Retorna true si el nombre existe ya en la base de datos
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public Boolean VerificarNombre(String userName)
        {
            var retorno = false;

            try
            {
                var sql = "SELECT COUNT(*) FROM users WHERE user_name = @user_name";

                using (MySqlCommand cmd = new MySqlCommand(sql, manejador.GetConnection()))
                {
                    MySqlDataAdapter da = new MySqlDataAdapter
                    {
                        SelectCommand = cmd
                    };

                    cmd.Parameters.AddWithValue("@user_name", userName);


                    retorno = Convert.ToBoolean(cmd.ExecuteScalar());
                }


                return(retorno);
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#3
0
        public string NuevoCodigo()
        {
            String sql = "SELECT c.company_id FROM companies c ORDER BY c.company_id DESC LIMIT 1";

            using (MySqlCommand cmd = new MySqlCommand(sql, manejador.GetConnection()))
            {
                MySqlDataAdapter da = new MySqlDataAdapter
                {
                    SelectCommand = cmd
                };
                var cfd = "";
                if (cmd.ExecuteScalar() != null)
                {
                    cfd = cmd.ExecuteScalar().ToString();
                }
                else
                {
                    cfd = "C000";
                }
                return("C" + (
                           (
                               (int.Parse(cfd
                                          .Substring(1, 3)
                                          )) + 1
                           )
                           .ToString("000")
                           ));
            }
        }
示例#4
0
        public int GetConsecutivo(string companyId, DateTime mesCurso)
        {
            var sql = "SELECT AC.entry_id+1 FROM accounting_months AS AM " +
                      "JOIN accounting_entries AS AC ON AM.accounting_months_id = AC.accounting_months_id AND AC.convalidated = false " +
                      "AND MONTH(AM.month_report) = @month_report AND YEAR(AM.month_report) = @year_report AND AM.company_id = @company_id GROUP BY AC.entry_id ORDER BY AC.entry_id DESC LIMIT 1";

            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                using (MySqlCommand cmd = new MySqlCommand(sql, tr.Connection, tr))
                {
                    cmd.Parameters.AddWithValue("@company_id", companyId);
                    cmd.Parameters.AddWithValue("@month_report", mesCurso.Month);
                    cmd.Parameters.AddWithValue("@year_report", mesCurso.Year);
                    MySqlDataAdapter da = new MySqlDataAdapter
                    {
                        SelectCommand = cmd
                    };
                    //el siguiente codigo ayuda cuando es el primer registro
                    //al ser el primero la bbdd ratorna vacio y el programa interpreta como nulo
                    //si es nulo cre uno nuevo
                    var retorno = "";
                    if (cmd.ExecuteScalar() != null)
                    {
                        retorno = cmd.ExecuteScalar().ToString();
                    }
                    else
                    {
                        retorno = "1";
                    }
                    return(Convert.ToInt32(retorno));
                }
            }
        }
示例#5
0
        public Compañia GetCompañia(String id, TipoID tipoID)
        {
            if (tipoID == TipoID.CEDULA_NACIONAL)
            {
                //tratar de hacerlo mas eficiente
                var comdando = "SELECT * FROM maestro_compania m, personas p WHERE M.codigo = P.IDCompania AND p.cedula = @p1 ";


                using (MySqlCommand cmd = new MySqlCommand(comdando, manejador.GetConnection()))
                {
                    cmd.Parameters.AddWithValue("@p1", id);
                    MySqlDataAdapter da = new MySqlDataAdapter();
                    da.SelectCommand = cmd;
                    DataTable dt = new DataTable();
                    da.Fill(dt);

                    foreach (DataRow item in dt.Rows)
                    {
                        Object[] vn = item.ItemArray;

                        var c = new PersonaFisica();
                        c.Codigo            = Convert.ToString(vn[0]);
                        c.TipoId            = (TipoID)Convert.ToInt32(vn[1]);
                        c.Direccion         = Convert.ToString(vn[2]);
                        c.Web               = Convert.ToString(vn[3]);
                        c.Correo            = Convert.ToString(vn[4]);
                        c.Observaciones     = Convert.ToString(vn[6]);
                        c.NumeroCedula      = Convert.ToString(vn[10]);
                        c.Nombre            = Convert.ToString(vn[11]);
                        c.MyApellidoPaterno = Convert.ToString(vn[12]);
                        c.MyApellidoMaterno = Convert.ToString(vn[13]);
                        return(c);
                    }
                }
            }
            else
            {
                //DataTable dt = Listado("sp_buscar_fisicasID", new ClsParametros("@id", id), CommandType.Text);
                //foreach (DataRow item in dt.Rows)
                //{
                //    return SetinComp.CrearPersonaFisica(item.ItemArray);
                //}
            }

            return(null);
        }
示例#6
0
        public Cuenta Insert(string companyId, Cuenta cuenta, Cuenta cuentaPadre, int userId)
        {
            InsertName(cuenta.Nombre);
            using var connection      = new MySqlConnection(Manejador.GetConnectionString());
            using MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable);

            using MySqlCommand cmd = new MySqlCommand(SqlStringInsertAccount, tr.Connection, tr);
            cmd.CommandType        = CommandType.Text;
            cmd.Parameters.AddWithValue("@name", cuenta.Nombre);
            cmd.Parameters.AddWithValue("@father_account", cuenta.Padre);
            cmd.Parameters.AddWithValue("@previous_balance_c", cuenta.SaldoAnteriorColones);
            cmd.Parameters.AddWithValue("@previous_balance_d", cuenta.SaldoAnteriorDolares);
            cmd.Parameters.AddWithValue("@company_id", companyId);
            cmd.Parameters.AddWithValue("@account_type", cuenta.TipoCuenta.TipoCuenta.ToString().Replace('_', ' ').ToUpper());
            cmd.Parameters.AddWithValue("@editable", cuenta.Editable);
            cmd.Parameters.AddWithValue("@detail", cuenta.Detalle);
            cmd.Parameters.AddWithValue("@updated_by", userId);

            var newAccId = cmd.ExecuteScalar().ToString();

            if (cuentaPadre.Indicador == IndicadorCuenta.Cuenta_Auxiliar)
            {
                ///Actualizamos todas las transacciones que se hayan hecho con esa cuenta
                ///pero solo en caso de la cuenta ser un auxiliar
                ///si la cuenta no es un auxiliar no tiene sentido
                ///las cuentas de mayor pueden heredar cuentas cuentas quieras
                ///sin tener que pasar el saldo

                var sqlForUpdateTransactions = SqlStringReplaceIdIntransactions + SqlStringUpdateAccountGuide;

                cmd.CommandText = sqlForUpdateTransactions;

                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@account_id", newAccId);
                cmd.Parameters.AddWithValue("@account_id_old", cuenta.Padre);
                cuentaPadre.Indicador = IndicadorCuenta.Cuenta_De_Mayor;

                cmd.ExecuteNonQuery();
            }
            cuenta.Id = Convert.ToInt32(newAccId);
            tr.Commit();
            return(cuenta);
        }
示例#7
0
        public Asiento Insert(Asiento t, Usuario user, out String mensaje)
        {
            if (!Guachi.Consultar(user, VentanaInfo.FormAsientos, CRUDName.Insertar))
            {
                mensaje = "Acceso denegado!!!";
                return(t);
            }

            var numeroAsiento = GetConsecutivo(t.Compania, t.FechaAsiento.Fecha);

            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    //si el consecutivo generado no es igual al que tenemos entonces ya alguien mas genero uno
                    //se lanza un excepcion para que el usuario refresque la ventana
                    if (t.NumeroAsiento != numeroAsiento)
                    {
                        throw new Exception("¡Este asiento ya fue asignado por otro usuario, refresque esta ventana!");
                    }

                    var sqlAsiento = "INSERT INTO accounting_entries(entry_id,accounting_months_id,updated_by) " +
                                     "VALUES(@entry_id,@accounting_months_id,@updated_by); SELECT LAST_INSERT_ID();";
                    using (MySqlCommand cmd = new MySqlCommand(sqlAsiento, tr.Connection, tr))
                    {
                        cmd.Parameters.AddWithValue("@entry_id", t.NumeroAsiento);
                        cmd.Parameters.AddWithValue("@accounting_months_id", t.FechaAsiento.Id);
                        cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                        var numeroId = cmd.ExecuteScalar();
                        t.Id = Convert.ToInt32(numeroId);
                    }

                    tr.Commit();
                    mensaje = "El asiento se guardó correctamente"; ///TODO
                    return(t);
                }
                catch (Exception)
                {
                    tr.Rollback();
                    throw;
                }
            }
        }
示例#8
0
        public bool UpdatePermisos(List <Modulo> lst, Usuario actualizante, Usuario actualizador)
        {
            ///Actualizar por partes
            ///Primero la ventana
            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    foreach (var item in lst)
                    {
                        foreach (var ventana in item.LstVentanas)
                        {
                            var sql = "INSERT INTO windows_permission(user_id, module_id, window_id, u_insert, u_update, u_remove,u_list, updated_by) " +
                                      "VALUES(@user_id, @module_id, @window_id, @u_insert, @u_update, @u_remove, @u_list, @updated_by) " +
                                      "ON DUPLICATE KEY UPDATE " +
                                      "u_insert = @u_insert , " +
                                      "u_update = @u_update ," +
                                      "u_remove = @u_remove, " +
                                      "u_list = @u_list, " +
                                      "updated_by = @updated_by, " +
                                      "updated_at = NOW() ";

                            using (MySqlCommand cmd = new MySqlCommand(sql, tr.Connection, tr))
                            {
                                //primero se actualiza el mes y se pone como cerrado.
                                cmd.Parameters.Clear();
                                cmd.Parameters.AddWithValue("@user_id", actualizante.UsuarioId);
                                cmd.Parameters.AddWithValue("@module_id", item.Codigo);
                                cmd.Parameters.AddWithValue("@window_id", ventana.Code);
                                cmd.Parameters.AddWithValue("@u_insert", ventana.CRUDInsert.TienePermiso);
                                cmd.Parameters.AddWithValue("@u_update", ventana.CRUDUpdate.TienePermiso);
                                cmd.Parameters.AddWithValue("@u_remove", ventana.CRUDDeleted.TienePermiso);
                                cmd.Parameters.AddWithValue("@u_list", ventana.CRUDLIst.TienePermiso);
                                cmd.Parameters.AddWithValue("@updated_by", actualizador.UsuarioId);

                                cmd.ExecuteNonQuery();
                            }
                        }
                    }
                    tr.Commit();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            return(true);
        }
示例#9
0
        public Boolean Insert(ref Cuenta t, Cuenta padre, Usuario user, out String mensaje)
        {
            if (!Guachi.Consultar(user, VentanaInfo.FormMaestroCuenta, CRUDName.Insertar))
            {
                mensaje = "Acceso denegado!!!";
                return(false);
            }
            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    ///Agregamos el nombre a la base de datos
                    ///Si el nombre no exite no se crea
                    var sql1 = "INSERT IGNORE INTO accounts_names(name) VALUES(@name);";
                    using (MySqlCommand cmd = new MySqlCommand(sql1, tr.Connection, tr))
                    {
                        MySqlDataAdapter da = new MySqlDataAdapter
                        {
                            SelectCommand = cmd
                        };

                        cmd.Parameters.AddWithValue("@name", t.Nombre);
                        cmd.ExecuteNonQuery();
                    }


                    ///Insertamos la cuenta en  la base de datos
                    ///este query nos devuelve el id de la nueva cuenta
                    var sql2 = "INSERT INTO accounts (account_name_id,previous_balance_c,previous_balance_d,father_account,company_id,account_type,detail,editable,updated_by) " +
                               "VALUES((SELECT account_name_id FROM accounts_names WHERE name = @name LIMIT 1)," +
                               "@previous_balance_c," +
                               "@previous_balance_d," +
                               "@father_account," +
                               "@company_id," +
                               "@account_type," +
                               "@detail," +
                               "@editable," +
                               "@updated_by);" +
                               "SELECT LAST_INSERT_ID();";
                    using (MySqlCommand cmd = new MySqlCommand(sql2, tr.Connection, tr))
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.AddWithValue("@name", t.Nombre);
                        cmd.Parameters.AddWithValue("@father_account", padre.Id);
                        cmd.Parameters.AddWithValue("@previous_balance_c", t.SaldoAnteriorColones);
                        cmd.Parameters.AddWithValue("@previous_balance_d", t.SaldoAnteriorDolares);
                        cmd.Parameters.AddWithValue("@company_id", t.MyCompania.Codigo);
                        cmd.Parameters.AddWithValue("@account_type", t.TipoCuenta.TipoCuenta.ToString().Replace('_', ' ').ToUpper());
                        cmd.Parameters.AddWithValue("@detail", t.Detalle);
                        cmd.Parameters.AddWithValue("@editable", t.Editable);
                        cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                        MySqlDataAdapter da = new MySqlDataAdapter
                        {
                            SelectCommand = cmd
                        };
                        var rer = cmd.ExecuteScalar().ToString();


                        if (padre.Indicador == IndicadorCuenta.Cuenta_Auxiliar)
                        {
                            ///Actualizamos todas las transacciones que se hayan hecho con esa cuenta
                            ///pero solo en caso de la cuenta ser un auxiliar
                            ///si la cuenta no es un auxiliar no tiene sentido
                            ///las cuentas de mayor pueden heredar cuentas cuentas quieras
                            ///sin tener que pasar el saldo
                            cmd.CommandText = "UPDATE transactions_accounting SET account_id = @account_id WHERE account_id = @account_id_old;" +
                                              "UPDATE accounts SET account_guide = 2 WHERE account_id = @account_id_old LIMIT 1";
                            cmd.Parameters.Clear();

                            cmd.Parameters.AddWithValue("@account_id", rer);
                            cmd.Parameters.AddWithValue("@account_id_old", t.Padre);

                            padre.Indicador = IndicadorCuenta.Cuenta_De_Mayor;
                            cmd.ExecuteNonQuery();
                        }

                        t.Id = Convert.ToInt32(rer);
                        tr.Commit();
                        mensaje = "Asiento guardado correctamente";
                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    tr.Rollback();
                    mensaje = ex.Message;
                    return(false);
                }
            }
        }
        public bool CerrarMes(FechaTransaccion t, Compañia compañia, Usuario user, List <Cuenta> lstCuentas, out String mensaje)
        {
            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    var sql = "UPDATE accounting_months SET closed = @closed, updated_by = @updated_by " +
                              "WHERE company_id = @company_id AND accounting_months_id = @accounting_months_id ";

                    using (MySqlCommand cmd = new MySqlCommand(sql, tr.Connection, tr))
                    {
                        //primero se actualiza el mes y se pone como cerrado.

                        cmd.Parameters.AddWithValue("@closed", Convert.ToByte(t.Cerrada));
                        cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                        cmd.Parameters.AddWithValue("@company_id", compañia.Codigo);
                        cmd.Parameters.AddWithValue("@accounting_months_id", t.Id);

                        if (cmd.ExecuteNonQuery() == 0)
                        {
                            mensaje = "No se pudo cerrar el mes";
                            return(false);
                        }
                    }

                    var sql2 = "UPDATE accounts SET previous_balance_c = @previous_balance_c," +
                               "previous_balance_d = @previous_balance_d, updated_by = @updated_by " +
                               "WHERE account_id = @account_id AND company_id = @company_id;";

                    using (MySqlCommand cmd = new MySqlCommand(sql2, tr.Connection, tr))
                    {
                        /**
                         * usamos la lista de cuentas pasadas por parametro, estas cuentas son
                         * todas las que tienen que ser actualizadas
                         */

                        foreach (var item in lstCuentas)
                        {
                            cmd.Parameters.Clear();

                            cmd.Parameters.AddWithValue("@previous_balance_c", item.SaldoActualColones);
                            cmd.Parameters.AddWithValue("@previous_balance_d", item.SaldoActualDolares);
                            cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                            cmd.Parameters.AddWithValue("@account_id", item.Id);
                            cmd.Parameters.AddWithValue("@company_id", compañia.Codigo);
                            cmd.ExecuteNonQuery();
                        }
                    }

                    tr.Commit();
                    mensaje = "Datos actualizados correctamente";
                    return(true);
                }
                catch (Exception ex)
                {
                    tr.Rollback();

                    mensaje = ex.Message;
                    return(false);
                }
            }
        }
示例#11
0
        /// <summary>
        /// Se hace todo en un metodo porque debemos de asegurarnos que el mes quede cerrado y los datos quedeb tambien guardados
        /// primero se intenta cerrar el mes
        ///
        /// </summary>
        /// <param name="t"></param>
        /// <param name="compañia"></param>
        /// <param name="user"></param>
        /// <param name="lstCuentas"></param>
        /// <param name="mensaje"></param>
        /// <returns></returns>
        public Boolean CerrarMes(FechaTransaccion t, Compañia compañia, Usuario user, List <Cuenta> lstCuentas, out String mensaje)
        {
            /**
             * Primero se consulta si el usuario tiene permisos para hacer la accción
             *
             */

            if (!Guachi.Consultar(user, VentanaInfo.FormAsientos, CRUDName.Actualizar))
            {
                mensaje = "Acceso denegado!!!";
                return(false);
            }


            /**
             * Se abre una transacción que sera la encargada de insertar los datos
             *
             * primero cerramos el mes y nos aseguramos que de verdad se haya cerrado
             */

            using (MySqlTransaction tr = manejador.GetConnection().BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    var sql = "UPDATE accounting_months SET closed = @closed, updated_by = @updated_by " +
                              "WHERE company_id = @company_id AND accounting_months_id = @accounting_months_id ";

                    using (MySqlCommand cmd = new MySqlCommand(sql, tr.Connection, tr))
                    {
                        //primero se actualiza el mes y se pone como cerrado.

                        cmd.Parameters.AddWithValue("@closed", Convert.ToByte(t.Cerrada));
                        cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                        cmd.Parameters.AddWithValue("@company_id", compañia.Codigo);
                        cmd.Parameters.AddWithValue("@accounting_months_id", t.Id);

                        if (cmd.ExecuteNonQuery() == 0)
                        {
                            mensaje = "No se pudo cerrar el mes";
                            return(false);
                        }
                    }

                    var sql2 = "UPDATE accounts SET previous_balance_c = @previous_balance_c," +
                               "previous_balance_d = @previous_balance_d, updated_by = @updated_by " +
                               "WHERE account_id = @account_id AND company_id = @company_id;";

                    using (MySqlCommand cmd = new MySqlCommand(sql2, tr.Connection, tr))
                    {
                        /**
                         * usamos la lista de cuentas pasadas por parametro, estas cuentas son
                         * todas las que tienen que ser actualizadas
                         */

                        foreach (var item in lstCuentas)
                        {
                            cmd.Parameters.Clear();

                            cmd.Parameters.AddWithValue("@previous_balance_c", item.SaldoActualColones);
                            cmd.Parameters.AddWithValue("@previous_balance_d", item.SaldoActualDolares);
                            cmd.Parameters.AddWithValue("@updated_by", user.UsuarioId);
                            cmd.Parameters.AddWithValue("@account_id", item.Id);
                            cmd.Parameters.AddWithValue("@company_id", compañia.Codigo);
                            cmd.ExecuteNonQuery();
                        }
                    }

                    tr.Commit();
                    mensaje = "Datos actualizados correctamente";
                    return(true);
                }
                catch (Exception ex)
                {
                    tr.Rollback();

                    mensaje = ex.Message;
                    return(false);
                }
            }
        }