/**
         * Realizamos el calculo del salario diario y la fecha de entrada
         */
        private void accionesAdicionalesAsegurados(Asegurado asegurado)
        {
            int aseguradoId = asegurado.id;
            DateTime ahora = DateTime.Now;

            //obtenemos el ultimo reingreso, si existe.
            var movTemp = (from s in db.MovimientosAseguradoes
                                  .Where(s => s.aseguradoId.Equals(aseguradoId)
                                   && s.catalogoMovimiento.tipo.Equals("08"))
                                  .OrderByDescending(s => s.fechaInicio)
                           select s).FirstOrDefault();

            if (movTemp != null)
            {
                asegurado.fechaAlta = movTemp.fechaInicio;
            }

            if (asegurado.salarioDiario == null)
            {
                asegurado.salarioDiario = 0;
            }

            var movTemp2 = (from s in db.MovimientosAseguradoes
                            where s.aseguradoId.Equals(aseguradoId) &&
                                 (s.catalogoMovimiento.tipo.Equals("01") || s.catalogoMovimiento.tipo.Equals("02") ||
                                  s.catalogoMovimiento.tipo.Equals("07") || s.catalogoMovimiento.tipo.Equals("08") ||
                                  s.catalogoMovimiento.tipo.Equals("13"))
                            orderby s.fechaInicio descending
                            select s).ToList();

            MovimientosAsegurado movto = new MovimientosAsegurado();
            if (movTemp2 != null && movTemp2.Count() > 0)
            {
                foreach (var movItem in movTemp2)
                {
                    movto = movItem;
                    break;
                }

                if (movto.catalogoMovimiento.tipo.Trim().Equals("08"))
                {
                    asegurado.salarioDiario = Decimal.Parse(movto.sdi.ToString());
                    asegurado.salarioImss = Decimal.Parse(movto.sdi.ToString());
                }
                else if (movto.catalogoMovimiento.tipo.Trim().Equals("01") || movto.catalogoMovimiento.tipo.Trim().Equals("07") ||
                         movto.catalogoMovimiento.tipo.Trim().Equals("13"))
                {
                    long annos = DatesHelper.DateDiffInYears(asegurado.fechaAlta, ahora);
                    if (annos.Equals(0))
                    {
                        annos = 1;
                    }
                    Factore factor = (db.Factores.Where(x => x.anosTrabajados == annos).FirstOrDefault());
                    if (factor != null)
                    {
                        asegurado.salarioDiario = Decimal.Parse(movto.sdi.Trim()) / factor.factorIntegracion;
                        asegurado.salarioImss = Decimal.Parse(movto.sdi.ToString());
                    }
                    else
                    {
                        asegurado.salarioDiario = 0;
                    }
                }
                else if (movto.catalogoMovimiento.tipo.Trim().Equals("02"))
                {
                    asegurado.salarioDiario = 0;
                    asegurado.salarioImss = 0;

                }
            }
            else
            {
                long annos = DatesHelper.DateDiffInYears(asegurado.fechaAlta, ahora);
                if (annos.Equals(0))
                {
                    annos = 1;
                }
                Factore factor = (db.Factores.Where(x => x.anosTrabajados == annos).FirstOrDefault());
                if (factor != null)
                {
                    asegurado.salarioDiario = asegurado.salarioImss / factor.factorIntegracion;
                }
                else
                {
                    asegurado.salarioDiario = 0;
                }
            }
            if (asegurado.fechaBaja.HasValue)
            {
                asegurado.salarioDiario = 0;
                asegurado.salarioImss = 0;
            }
            db.Entry(asegurado).State = EntityState.Modified;
            db.SaveChanges();

            Acreditado acreditado = (from s in db.Acreditados
                                     where s.PatroneId == asegurado.PatroneId
                                        && s.numeroAfiliacion.Equals(asegurado.numeroAfiliacion)
                                     select s).FirstOrDefault();

            if (acreditado != null)
            {
                acreditado.fechaAlta = asegurado.fechaAlta;
                acreditado.sd = Decimal.Parse(asegurado.salarioDiario.ToString());
                acreditado.sdi = Double.Parse(asegurado.salarioImss.ToString());

                //calcular el descuento tipo uno que ocupa sdi
                DateTime date = DateTime.Now;
                Decimal valueToCalculate = Decimal.Parse(asegurado.valorDescuento.ToString());
                Decimal newValue = Decimal.Parse("0.0");

                if (asegurado.tipoDescuento.Trim().Equals("1"))
                {

                    try
                    {
                        ParametrosHelper parameterHelper = new ParametrosHelper();

                        Parametro sinfonParameter = parameterHelper.getParameterByKey("SINFON");

                        decimal sinfon = decimal.Parse(sinfonParameter.valorMoneda.ToString());
                        // Descuento tipo porcentaje
                        acreditado.cuotaFija = 0;
                        acreditado.vsm = 0;
                        acreditado.porcentaje = valueToCalculate / 100;

                        newValue = (Decimal.Parse(acreditado.sdi.ToString()) * 60);
                        newValue = newValue * (valueToCalculate / 100);
                        newValue = newValue + sinfon;

                        acreditado.descuentoBimestral = newValue;

                        acreditado.descuentoMensual = Math.Round(acreditado.descuentoBimestral / 2, 3);
                        Decimal newValue2 = acreditado.descuentoMensual * Decimal.Parse((7 / 30.4).ToString());
                        newValue2 = Math.Round(newValue2, 3);
                        acreditado.descuentoSemanal = newValue2;

                        newValue2 = acreditado.descuentoMensual * Decimal.Parse((14 / 30.4).ToString());
                        newValue2 = Math.Round(newValue2, 3);
                        acreditado.descuentoCatorcenal = newValue2;
                        acreditado.descuentoQuincenal = Math.Round(acreditado.descuentoBimestral / 4, 3);
                        acreditado.descuentoVeintiochonal = Math.Round(acreditado.descuentoMensual * Decimal.Parse((28 / 30.4).ToString()), 3);
                        acreditado.descuentoDiario = Math.Round(acreditado.descuentoBimestral / Decimal.Parse("60.1"), 3);
                        acreditado.fechaUltimoCalculo = date.Date;
                    }
                    catch (OleDbException ex)
                    {
                        if (ex.Source != null)
                        {
                            Console.WriteLine(ex.Source);
                        }
                    }
                }

                db.Entry(acreditado).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
        public void uploadMovimientos(String registro, String numeroAfiliacion, int aseguradoId, String path)
        {
            SUAHelper sua = null;
            try
            {
                //Realizamos la conexión
                sua = new SUAHelper(path);

                String sSQL = "SELECT a.REG_PATR , a.NUM_AFIL , a.TIP_MOVS  , a.FEC_INIC , a.CON_SEC  , " +
                              "       a.NUM_DIAS , a.SAL_MOVT , a.SAL_MOVT2 , a.MES_ANO  , a.FEC_REAL , " +
                              "       a.FOL_INC  , a.CVE_MOVS , a.SAL_MOVT3 , a.TIP_INC  , a.EDO_MOV  , " +
                              "       a.FEC_EXT  , a.SAL_ANT1 , a.SAL_ANT2  , a.SAL_ANT3 , a.ART_33   , " +
                              "       a.TIP_SAL  , a.TIP_RIE  , a.TIP_REC   , a.NUM_CRE  , a.VAL_DES  , " +
                              "       a.TIP_DES  , a.TAB_DISM " +
                              "  FROM Movtos a  " +
                              "  WHERE a.REG_PATR = '" + registro + "'" +
                              "    AND a.NUM_AFIL = '" + numeroAfiliacion + "'" +
                              "  ORDER BY a.NUM_AFIL ";

                //Ejecutamos la consulta
                DataTable dt = sua.ejecutarSQL(sSQL);
                foreach (DataRow rows in dt.Rows)
                {

                    String folio = rows["FOL_INC"].ToString();
                    MovimientosAsegurado movimiento = new MovimientosAsegurado();

                    movimiento.fechaInicio = DateTime.Parse(rows["FEC_INIC"].ToString());
                    movimiento.aseguradoId = aseguradoId;
                    movimiento.sdi = rows["SAL_MOVT"].ToString();
                    String tipoMov = "01";
                    if (!string.IsNullOrEmpty(rows["TIP_MOVS"].ToString().Trim()))
                    {
                        tipoMov = rows["TIP_MOVS"].ToString().Trim();
                    }

                    //Validamos que ese movimiento no se haya guardado anteriormente
                    var movTemp = (from s in db.MovimientosAseguradoes
                                  .Where(s => s.aseguradoId.Equals(aseguradoId)
                                  && s.catalogoMovimiento.tipo.Equals(tipoMov.Trim())
                                  && s.fechaInicio.Equals(movimiento.fechaInicio))
                                   select s).FirstOrDefault();

                    if (movTemp == null)
                    {

                        if (rows["NUM_DIAS"].ToString() != null && !rows["NUM_DIAS"].ToString().Equals(""))
                        {
                            movimiento.numeroDias = int.Parse(rows["NUM_DIAS"].ToString());
                        }

                        if (folio != null && !folio.Equals(""))
                        {

                            var incapacidadTemp = from b in db.Incapacidades
                                                  where b.folioIncapacidad.Equals(folio.Trim())
                                                  select b;

                            if (incapacidadTemp != null && incapacidadTemp.Count() > 0)
                            {
                                foreach (var incapacidadItem in incapacidadTemp)
                                {
                                    movimiento.Incapacidade = incapacidadItem;
                                    movimiento.incapacidadId = incapacidadItem.id;
                                    break;
                                }//Definimos los valores para la plaza
                            }
                        }

                        var tipoTemp = db.catalogoMovimientos.Where(b => b.tipo == tipoMov).FirstOrDefault();

                        if (tipoTemp != null)
                        {
                            movimiento.catalogoMovimiento = (catalogoMovimiento)tipoTemp;
                        }
                        else
                        {
                            catalogoMovimiento catMov = new catalogoMovimiento();
                            catMov.id = 1;
                            catMov.tipo = "01";
                            movimiento.catalogoMovimiento = catMov;
                        }

                        movimiento.credito = rows["NUM_CRE"].ToString();
                        movimiento.estatus = rows["EDO_MOV"].ToString();

                        //Guardamos el movimiento
                        try
                        {

                            db.MovimientosAseguradoes.Add(movimiento);
                            db.SaveChanges();
                        }
                        catch (DbEntityValidationException ex)
                        {
                            StringBuilder sb = new StringBuilder();

                            foreach (var failure in ex.EntityValidationErrors)
                            {
                                sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
                                foreach (var error in failure.ValidationErrors)
                                {
                                    sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                                    sb.AppendLine();
                                }
                            }
                        }
                    }
                }//Ya existe ese movimiento for fecha y tipo?
            }
            catch (OleDbException ex)
            {
                if (ex.Source != null)
                {
                    Console.WriteLine(ex.Source);
                }
            }
            finally
            {
                if (sua != null)
                {
                    sua.cerrarConexion();
                }
            }
        }