private void BtnCerrarMes_Click(object sender, EventArgs e) { try { if ((lstCerrarMes.Items.Count > 0) && MessageBox.Show("¿Desea cerrar este mes?", TextoGeneral.NombreApp, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { FechaTransaccion fechaTransaccion = (FechaTransaccion)lstCerrarMes.SelectedItem; fechaTransaccion.Cerrada = true; if (fechaCL.CerrarMes(fechaTransaccion, GlobalConfig.Compañia, GlobalConfig.Usuario, out string mensaje)) { MessageBox.Show(mensaje, TextoGeneral.NombreApp, MessageBoxButtons.OK, MessageBoxIcon.Information); CargarDatos(); } else { MessageBox.Show(mensaje, TextoGeneral.NombreApp, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } catch (Exception ex) { MessageBox.Show(ex.Message, TextoGeneral.NombreApp, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
public Asiento GetPreEntry(string companyId, FechaTransaccion dateParams) { var asiento = new Asiento(); asiento.NumeroAsiento = asientoDao.GetConsecutivo(companyId, dateParams.Fecha); asiento.FechaAsiento = dateParams; return(asiento); }
public DataTable ListadoAsientosDescuadrados(Compañia compañia, FechaTransaccion fechaTransaccion) { var parametros = new List <Parametro> { new Parametro("@company_id", compañia.Codigo), new Parametro("@fecha_contable", $"{fechaTransaccion.Fecha.Year}{String.Format("{0, 0:D2}", fechaTransaccion.Fecha.Month)}") }; var sql = "SELECT fecha_contable, entry_id, debito, credito, status FROM estado_asientos WHERE company_id = @company_id AND fecha_contable = @fecha_contable AND debito <> credito; "; return(manejador.Listado(sql, parametros, CommandType.Text)); }
public IActionResult Post(string companyid, [FromBody] FechaTransaccion fechaTransaccion) { var userId = 1; var newEntity = _fechaTransaccionCL.Insert(companyid, userId, fechaTransaccion); fechaTransaccion.Id = 67; return(CreatedAtRoute( routeName: "Get", routeValues: new { id = newEntity.Id, companyid = companyid }, value: newEntity)); }
public static void GenerarReporte(List <Cuenta> list, String direccion, Compañia compañia, Usuario usuario, FechaTransaccion mesFinal, Boolean GenerarSaldo = false) { using (var workbook = new XLWorkbook()) { var worksheet = workbook.Worksheets.Add("Sample Sheet"); ///Creamos el encabezado var column = 1; var row = 1; var tpmda = (compañia.TipoMoneda == TipoMonedaCompañia.Solo_Dolares) ? "Dolares y Colones" : "Colones"; worksheet.Cell(row++, column).Value = $"{compañia}"; worksheet.Cell(row++, column).Value = $"Maestro de Cuentas en {tpmda}, a {mesFinal}"; worksheet.Cell(row++, column).Value = $"usuario {usuario.ToString()}"; LLenarNombreCuentas(ref worksheet, row, ref column, list); if (GenerarSaldo) { switch (compañia.TipoMoneda) { case TipoMonedaCompañia.Dolares_y_Colones: LlenarTitulosUnaDivisa(ref worksheet, row, column, list); LlenarSaldoCuentasColones(ref worksheet, row, column, list); break; case TipoMonedaCompañia.Solo_Colones: LlenarTitulosUnaDivisa(ref worksheet, row, column, list); LlenarSaldoCuentasColones(ref worksheet, row, column, list); break; case TipoMonedaCompañia.Solo_Dolares: LlenarTitulosAmbasDivisas(ref worksheet, row, column, list); LlenarSaldoCuentasColonesDolares(ref worksheet, row, column, list); break; default: break; } } workbook.SaveAs(direccion); ////Show report Process.Start(new ProcessStartInfo(direccion) { UseShellExecute = true }); } }
/// <summary> /// Esta funcion nos permite conocer si todos los asientos estas cuadrados /// o si hay alguno que este pendiente de cuadrar /// nos devovera los asientos pendientes de cuadrar /// </summary> /// <param name="fecha"></param> /// <param name="compania"></param> /// <returns></returns> public List <Asiento> GetMesesPendientes(FechaTransaccion fecha, Compañia compania) { var dummy = new List <Asiento>(); foreach (var item in GetPorFecha(fecha, compania, traerInfoCompleta: true)) { if (item.Estado == EstadoAsiento.Proceso) { dummy.Add(item); } } return(dummy); }
public FechaTransaccion Insert(string companyId, int userId, FechaTransaccion fechaTransaccion) { var sql = "INSERT INTO accounting_months(month_report,company_id,updated_by) VALUES(@month_report,@company_id,@updated_by);"; var parametros = new List <Parametro>() { new Parametro("@month_report", fechaTransaccion.Fecha), new Parametro("@company_id", companyId), new Parametro("@updated_by", userId) }; fechaTransaccion.Id = manejador.ExecuteAndReturnLastInsertId(sql, parametros); return(fechaTransaccion); }
public FrameReporteComprobacion(IEnumerable <Cuenta> cuentas, FechaTransaccion fechaTransaccion) { InitializeComponent(); _lstCuentas = cuentas.ToList(); lstMesesAbiertos.SelectedIndexChanged -= LstMesesAbiertos_SelectedIndexChanged; var lst = new List <FechaTransaccion>() { fechaTransaccion }; lstMesesAbiertos.DataSource = lst; CargarDatosFormulario(_lstCuentas); this.Text += $"- Cierre de periodo al mes { fechaTransaccion.ToString() }"; lstMesesAbiertos.Enabled = false; }
/// <summary> /// Mover al objeto maestro de cuentas /// </summary> /// <returns></returns> private void VerificarMesesPorCerrar() { /// verificar que no hayan meses atrar por cerrar /// var fechaCierre = (FechaTransaccion)lstAbrirMes.SelectedItem; var meses = from fch in fechaTransaccions where fch.Fecha.Date <= fechaCierre.Fecha.Date select fch; UltimoMes = meses.FirstOrDefault(); if (meses.Count() > 0) { if (MessageBox.Show($"Se realizara cierre de los siguientes meses: {String.Join(", ", meses)}, ¿Desea continuar?", TextoGeneral.NombreApp, MessageBoxButtons.YesNo) == DialogResult.Yes) { CerrarMesesPendientes(meses); } } }
/// <summary> /// Busca todos los asientos de una fecha y compañia especifica /// </summary> /// <param name="fecha"></param> /// <param name="compania"></param> /// <param name="traerInfoCompleta">True si quiere los asientos con todas las transacciones</param> /// <param name="traerNuevo">False si quiere que no venga con un nuevo(Esto se usa cuando se quiere regitrar nuevos y se necesita una nuevo(FrameAsiento))/param> /// <returns> /// <param name="List">Lista con todos los asientos encontrados en esa fecha /// y con esa compañia /// </param> /// </returns> public List <Asiento> GetPorFecha(FechaTransaccion fecha, Compañia compania, Boolean traerInfoCompleta = false, Boolean traerNuevo = true) { List <Asiento> lst = asientoDao.GetPorFecha(fecha, compania, traerInfoCompleta); //esto lo unico que hace es generar un nuevo asiento para que se posicione de primer lugar la lista if (traerNuevo) { var dummy = new Asiento( numeroAsiento: asientoDao.GetConsecutivo(compania, fecha.Fecha), compania: compania ) { FechaAsiento = fecha }; lst.Insert(0, dummy); } return(lst); }
/// <summary> /// Devuelve los meses disponibles para abrir. /// 1. solo devolvera dos meses, el ultimo pasado y el primero presente /// 2. /// </summary> /// <param name="t"></param> /// <param name="user"></param> /// <param name="lst"></param> /// <returns></returns> public List <FechaTransaccion> FechaAbrirMes(Compañia t, Usuario user) { List <FechaTransaccion> lst = _fechaDao.GetAll(t, user); List <FechaTransaccion> retorno = new List <FechaTransaccion>(); if (lst.Count == 0) { //si la cuenta es cero, quiere decir que no hay meses entonces se pone a disposicion //el mes actual para partir de ahi. var mesActual = (DateTime.Today); retorno.Add(new FechaTransaccion( id: 332, fecha: mesActual, cerrada: false )); } else { var ultimoprente = (from c in lst orderby c.Fecha descending select c).ToArray <FechaTransaccion>()[0]; var ultimopasado = (from c in lst orderby c.Fecha ascending select c).ToArray <FechaTransaccion>()[0]; FechaTransaccion pasado = new FechaTransaccion( fecha: ultimopasado.Fecha.AddMonths(-1) ); FechaTransaccion presente = new FechaTransaccion( fecha: ultimoprente.Fecha.AddMonths(1) ); retorno.Add(pasado); retorno.Add(presente); } return(retorno); }
public DataTable ReporteAsientos(Compañia compañia, FechaTransaccion fecha, Boolean traerTodos) { var sql = ""; var parametros = new List <Parametro>(); if (traerTodos) { sql = "SET lc_time_names = 'es_MX'; " + "SELECT DATE_FORMAT(month_report, '%M %y') AS month_report,entry_id,account_name,reference,detail,bill_date,debit,credit,money_type, money_chance,balance_usd FROM accounting_entries_info WHERE " + "company_id = @company_id "; parametros.Add(new Parametro("@company_id", compañia.Codigo)); } else { sql = "SET lc_time_names = 'es_MX'; " + "SELECT DATE_FORMAT(month_report, '%M %y') AS month_report,entry_id,account_name,reference,detail,bill_date,debit,credit,money_type, money_chance,balance_usd FROM accounting_entries_info WHERE " + "company_id = @company_id AND DATE_FORMAT(month_report, '%Y%m') = @month_report "; parametros.Add(new Parametro("@company_id", compañia.Codigo)); parametros.Add(new Parametro("@month_report", $"{fecha.Fecha.Year}{String.Format("{0, 0:D2}", fecha.Fecha.Month)}")); } return(manejador.Listado(sql, parametros, CommandType.Text)); }
public Boolean CerrarMes(FechaTransaccion t, Compañia compañia, Usuario user, out String mensaje) { ///Primero verificamos que este mes sea apto para cerrarse var meses = this.FechaCerrarMes(compañia, user); if (meses[0].Fecha == t.Fecha) { var cuentaCL = new CuentaCL(); if (!BuscarAsientosDescuadrados(compañia, t, out mensaje)) { var lstCuentas = cuentaCL.GetAll(compañia).ToList <Cuenta>(); cuentaCL.LLenarConSaldos(t.Fecha, t.Fecha, lstCuentas, compañia); if (_fechaDao.CerrarMes(t, compañia, user, lstCuentas, out mensaje)) { mensaje = "Se cerro correctamente el mes!!!"; return(true); } else { mensaje = "No se pudo cerrar el mes!!!"; return(false); } } else { return(false); } } else { mensaje = "Este mes no se puede cerrar"; return(false); } }
/// <summary> /// Lista los asientos por fecha y compañia /// </summary> /// <param name="fecha"></param> /// <param name="compania"></param> /// <param name="traerInfoCompleta"></param> /// <returns></returns> public List <Asiento> GetPorFecha(FechaTransaccion fecha, Compañia compania, Boolean traerInfoCompleta = false) { List <Asiento> retorno = new List <Asiento>(); var sql = "SELECT AC.accounting_entry_id, AC.entry_id, AC.created_at, AM.month_report, AC.status+0, AC.convalidated_at, AM.closed FROM accounting_months AS AM " + "JOIN accounting_entries AS AC ON AM.accounting_months_id = AC.accounting_months_id AND AM.closed = false AND AC.convalidated = false AND AM.active = true AND AC.active = true " + "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"; DataTable dt = manejador.Listado(sql, new List <Parametro> { new Parametro("@month_report", fecha.Fecha.Month), new Parametro("@year_report", fecha.Fecha.Year), new Parametro("@company_id", compania.Codigo) }, CommandType.Text ); foreach (DataRow item in dt.Rows) { Object[] vs = item.ItemArray; var asiento = new Asiento(); asiento.Id = Convert.ToInt32(vs[0]); asiento.NumeroAsiento = Convert.ToInt32(vs[1]); asiento.FechaRegistro = Convert.ToDateTime(vs[2]); asiento.FechaAsiento = new FechaTransaccion(fecha: Convert.ToDateTime(vs[3]));//agregar el resto de parametros //asiento.Convalidado = Convert.ToBoolean(); asiento.Estado = (EstadoAsiento)Convert.ToInt32(vs[4]); asiento.Compania = compania; asiento.FechaAsiento = fecha; if (traerInfoCompleta) { asiento.Transaccions = new TransaccionDao().GetCompleto(asiento); } retorno.Add(asiento); } return(retorno); }
public Boolean Insert(FechaTransaccion t, Compañia compañia, Usuario user, out String mensaje) { if (!Guachi.Consultar(user, VentanaInfo.FormAdminMeses, CRUDName.Insertar)) { mensaje = "Acceso denegado!!!"; return(false); } try { var sql = "INSERT INTO accounting_months(month_report,company_id,updated_by) VALUES(@month_report,@company_id,@updated_by);"; var parametros = new List <Parametro>() { new Parametro("@month_report", t.Fecha), new Parametro("@company_id", compañia.Codigo), new Parametro("@updated_by", user.UsuarioId) }; if (manejador.Ejecutar(sql, parametros, CommandType.Text) == 0) { mensaje = "No se guardaron datos"; return(false); } else { mensaje = "Datos guardados correctamente"; return(true); } } catch (Exception ex) { mensaje = ex.Message; return(false); } }
/// <summary> /// Devulve true si encontro asientos descuadrados y falso si todo esta bien /// </summary> /// <param name="compañia"></param> /// <param name="fechaTransaccion"></param> /// <param name="mensaje"></param> /// <returns></returns> public Boolean BuscarAsientosDescuadrados(Compañia compañia, FechaTransaccion fechaTransaccion, out String mensaje) { var asientCL = new AsientoCL(); var lstCuentasPedientes = asientCL.ListadoAsientosDescuadrados(compañia, fechaTransaccion); if (lstCuentasPedientes.Rows.Count > 0) { mensaje = "Faltan asientos por cuadrar: \n"; mensaje += $"Mes contable: {fechaTransaccion.ToString()} \n"; foreach (DataRow item in lstCuentasPedientes.Rows) { object[] vs = item.ItemArray; mensaje += $"Asiento: {vs[1]}- Debitos: {vs[2]} Creditos: {vs[3]} \n"; } return(true); } else { mensaje = "tbd"; return(false); } }
public Boolean Insert(FechaTransaccion t, Compañia compañia, Usuario user, out String mensaje) { var lstTodosMeses = this.GetAll(compañia, user); ///Se va a hacer un indice unico en la base de datos para evitar esto ///quita----- if (lstTodosMeses.Find(ms => ms.Fecha == t.Fecha) != null) { mensaje = $"Este mes ya se encuentra registrado"; return(false); } else { if (_fechaDao.Insert(t, compañia, user, out mensaje)) { return(true); } else { return(false); } } }
/// <summary> /// Esta funcion devuelve una tabla con los asientos /// que tengan desigual cantidad de debitos y creditos /// </summary> /// <returns></returns> public DataTable ListadoAsientosDescuadrados(Compañia compañia, FechaTransaccion fechaTransaccion) { return(asientoDao.ListadoAsientosDescuadrados(compañia, fechaTransaccion)); }
public FechaTransaccion Insert(string companyId, int userId, FechaTransaccion fechaTransaccion) { return(FechaDao.Insert(companyId, userId, fechaTransaccion)); }
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); } } }
public DataTable ReporteAsientos(Compañia compañia, FechaTransaccion fecha, Boolean traerTodos) { return(asientoDao.ReporteAsientos(compañia, fecha, traerTodos)); }
public Asiento(int numeroAsiento, List <Transaccion> transaccions, DateTime fechaRegistro, FechaTransaccion fechaAiento, Compañia compania, EstadoAsiento estado = EstadoAsiento.Proceso, int Id = 0) { this.NumeroAsiento = numeroAsiento; this.Transaccions = transaccions; this.FechaRegistro = fechaRegistro; this.FechaAsiento = fechaAiento; this.Convalidado = Convalidado; this.Compania = compania; this.Id = Id; }
/// <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); } } }