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; } } }
/// <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; } }
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") )); } }
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)); } } }
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); }
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); }
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; } } }
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); }
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); } } }
/// <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); } } }