public static void addRecargo(recargos r)
        {
            try
            {
                admEntities db = Datos.getDB();
                var recargo = db.recargos.Where(x => x.dir_edificio == r.dir_edificio && x.periodo == r.periodo).SingleOrDefault();
                if (recargo == null)
                    db.recargos.Add(r);
                else
                {
                    recargo.importe += r.importe;
                    db.Entry(recargo).State = System.Data.EntityState.Modified;
                }

                db.SaveChanges();
            }
            catch (Exception e)
            {
                Logger.Log.write(e.InnerException == null ? e.Message : e.InnerException.Message);
                throw e;
            }
        }
        void CargarRecargos()
        {
            List<recargos> recargos = Business.ControladorRecargos.getAllRecargos(dateFechaDesde.Value);

            Double acum = 0;
            foreach(recargos rec in recargos)
            {
                acum += (Double)rec.importe;
            }

            recargos r = new recargos();
            if (recargos.Count > 0)
            {
                r.dir_edificio = "Total";
                r.importe = acum;
                r.periodo = recargos.First().periodo;
                recargos.Add(r);
            }

            dgvLista.DataSource = recargos;

            dgvLista.Columns["dir_edificio"].HeaderText = "Edificio";
            dgvLista.Columns["periodo"].HeaderText = "Periodo";
            dgvLista.Columns["importe"].HeaderText = "Importe";
            dgvLista.Columns["edificio"].Visible = false;

            var d = dgvLista.Columns["periodo"].DefaultCellStyle;
            d.Format = "MM/yy";
            dgvLista.Columns["periodo"].DefaultCellStyle = d;

            d = dgvLista.Columns["importe"].DefaultCellStyle;
            d.Format = "n2";
            dgvLista.Columns["importe"].DefaultCellStyle = d;

            if (dgvLista.Rows.Count > 0)
                dgvLista.Rows[dgvLista.Rows.Count-1].DefaultCellStyle.BackColor = Color.Coral;

            dgvLista.ClearSelection();
        }
        public static List<CatalogoExpensas.Pagos> registrarPagosAutomaticos(DateTime periodo, List<Pagos> pagos)
        {
            try
            {
                admEntities db = new admEntities();

                //Si alguien paga por automatico, queda totalmente al dia. Sumar recargos cobrados de meses anteriores o si pago en 2 vto
                List<expensas> expensas = new List<expensas>();
                List<Recargo> gastosExclusivos = new List<Recargo>();
                List<recargos> recargos = new List<recargos>();

                foreach (var p in pagos)
                {
                    var exp = db.expensas.Where(x => x.nro_referencia == p.nroReferencia).OrderByDescending(x => x.fecha).First();
                    var uni = new unidad();
                    uni.dir_edificio = exp.dir_edificio;
                    uni.id_unidad = exp.id_unidad;
                    p.Edificio = uni.dir_edificio;
                    p.Unidad = uni.id_unidad;
                    p.Periodo = exp.fecha.Month + "/" + exp.fecha.Year;

                    var expensasMismaUnidad = db.expensas.Where(x => x.dir_edificio == uni.dir_edificio && x.id_unidad == uni.id_unidad && x.pagado == 0).ToList();
                    var exclusivosMismaUnidad = CatalogoGastosExclusivos.getAllRecargos(uni);

                    expensas.AddRange(expensasMismaUnidad);
                    gastosExclusivos.AddRange(exclusivosMismaUnidad);
                }

                var expGrouped = expensas.GroupBy(x => new { x.dir_edificio, x.id_unidad })
                                        .Select(x => new expensas { dir_edificio = x.Key.dir_edificio, id_unidad = x.Key.id_unidad })
                                        .Cast<expensas>()
                                        .ToList();

                foreach (expensas e in expensas)
                {
                    e.pagado = 1;
                    db.Entry(e).State = System.Data.EntityState.Modified;
                }

                foreach (expensas e in expGrouped)
                {
                    recargos r = new recargos();
                    var uni = new unidad();
                    uni.dir_edificio = e.dir_edificio;
                    uni.id_unidad = e.id_unidad;
                    r.dir_edificio = e.dir_edificio;
                    r.periodo = DateTime.Parse("1/" + DateTime.Now.Month + "/" + DateTime.Now.Year);
                    var detalles = CatalogoDeudores.getDetalleDeudaUnidad(uni);
                    r.importe = detalles.Sum(x => x.Recargo);

                    var rExistente = recargos.Where(x => x.dir_edificio == r.dir_edificio && x.periodo == r.periodo).SingleOrDefault();

                    if (rExistente != null)
                        rExistente.importe += r.importe;
                    else
                        recargos.Add(r);
                }

                db.SaveChanges();

                foreach (var excl in gastosExclusivos)
                {
                    switch (excl.Tipo)
                    {
                        case "Exclusivos":
                            CatalogoGastosExclusivos.pagarRecargoExclusivo(excl.Edificio, excl.Unidad, excl.Concepto, excl.Fecha);
                            break;
                        case "Legales":
                            CatalogoGastosExclusivos.pagarRecargoLegales(excl.Edificio, excl.Unidad, excl.Concepto, excl.Fecha);
                            break;
                        case "Varios":
                            CatalogoGastosExclusivos.pagarRecargoVarios(excl.Edificio, excl.Unidad, excl.Concepto, excl.Fecha);
                            break;
                    }
                }

                CatalogoRecargos.addRecargos(recargos);

                return pagos;

            }
            catch (Exception e)
            {
                Logger.Log.write(e.InnerException == null ? e.Message : e.InnerException.Message);
                var str = "";
                str = e.InnerException?.InnerException?.Message;
                Logger.Log.write("Otro error: " + str);
                throw e;
            }
        }
 public static void registrarPago(CatalogoDeudores.DetalleDeuda detalleDeuda, double descuento = 0)
 {
     if (detalleDeuda.Tipo == "Ordinaria")
     {
         List<CatalogoExpensas.Pagos> pagos = new List<CatalogoExpensas.Pagos>();
         CatalogoExpensas.Pagos pago = new CatalogoExpensas.Pagos();
         pago.nroReferencia = detalleDeuda.NroReferencia;
         pago.nroFactura = detalleDeuda.NroFactura;
         pago.importe = detalleDeuda.Importe;
         pagos.Add(pago);
         unidad unidad = new unidad();
         unidad.dir_edificio = detalleDeuda.Edificio;
         unidad.id_unidad = detalleDeuda.Unidad;
         CatalogoExpensas.registrarPagos(detalleDeuda.Periodo, pagos, unidad);
     }
     else if (detalleDeuda.Tipo == "Exclusivo")
     {
         CatalogoGastosExclusivos.pagarRecargoExclusivo(detalleDeuda.Edificio, detalleDeuda.Unidad, detalleDeuda.NroFactura, detalleDeuda.Periodo);
     }
     else if (detalleDeuda.Tipo == "Legales")
     {
         CatalogoGastosExclusivos.pagarRecargoLegales(detalleDeuda.Edificio, detalleDeuda.Unidad, detalleDeuda.NroFactura, detalleDeuda.Periodo);
     }
     else if (detalleDeuda.Tipo == "Varios")
     {
         CatalogoGastosExclusivos.pagarRecargoVarios(detalleDeuda.Edificio, detalleDeuda.Unidad, detalleDeuda.NroFactura, detalleDeuda.Periodo);
     }
     recargos r = new recargos();
     r.dir_edificio = detalleDeuda.Edificio;
     r.periodo = DateTime.Parse("1/" + DateTime.Now.Month + "/" + DateTime.Now.Year);
     r.importe = detalleDeuda.Recargo - ((descuento / 100) * detalleDeuda.Recargo) ;
     CatalogoRecargos.addRecargo(r);
 }