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);
            }
        }
Beispiel #2
0
        public Asiento GetPreEntry(string companyId, FechaTransaccion dateParams)
        {
            var asiento = new Asiento();

            asiento.NumeroAsiento = asientoDao.GetConsecutivo(companyId, dateParams.Fecha);
            asiento.FechaAsiento  = dateParams;
            return(asiento);
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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
                });
            }
        }
Beispiel #6
0
        /// <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);
                }
            }
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #12
0
        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));
        }
Beispiel #13
0
        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);
            }
        }
Beispiel #14
0
        /// <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);
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
0
        /// <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);
            }
        }
Beispiel #17
0
        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);
                }
            }
        }
Beispiel #18
0
 /// <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));
 }
Beispiel #19
0
 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);
                }
            }
        }
Beispiel #21
0
 public DataTable ReporteAsientos(Compañia compañia, FechaTransaccion fecha, Boolean traerTodos)
 {
     return(asientoDao.ReporteAsientos(compañia, fecha, traerTodos));
 }
Beispiel #22
0
 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;
 }
Beispiel #23
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);
                }
            }
        }