public ActionResult Index()
 {
     using (var db = new NominaEntities())
     {
         LisTgrupo = (from grupo in db.Grupo
                      select new GrupoCLS
         {
             Id_grupo = grupo.Id_grupo,
             nomb_grupo = grupo.nomb_grupo,
             cod_grupo = grupo.cod_grupo
         }).ToList();
     }
     return(View(LisTgrupo));
 }
Exemple #2
0
        public ActionResult Index()
        {
            using (var db = new NominaEntities())
            {
                LisTempleado = (from empleado in db.Empleado
                                select new EmpleadoCLS
                {
                    Id_empleado = empleado.Id_empleado,
                    nombre = empleado.nombre,
                    apellido = empleado.apellido,
                    cod_empleado = empleado.cod_empleado,
                    area = empleado.area,
                    Id_grupo = empleado.Id_grupo
                }).ToList();
            }

            return(View(LisTempleado));
        }
 public ActionResult Agregar(GrupoCLS grupoCLS)
 {
     if (!ModelState.IsValid)
     {
         return(View(grupoCLS));
     }
     else
     {
         using (var bdUser = new NominaEntities())
         {
             Grupo oGrupo = new Grupo();
             oGrupo.Id_grupo   = oGrupo.Id_grupo;
             oGrupo.nomb_grupo = oGrupo.nomb_grupo;
             oGrupo.cod_grupo  = oGrupo.cod_grupo;
             bdUser.Grupo.Add(oGrupo);
             bdUser.SaveChanges();
         }
         return(RedirectToAction("Index"));
     }
 }
Exemple #4
0
        public ActionResult Agregar(EmpleadoCLS empleadoCLS)
        {
            if (!ModelState.IsValid)
            {
                return(View(empleadoCLS));
            }
            else
            {
                using (var bd = new NominaEntities())
                {
                    Empleado empleado = new Empleado();
                    empleado.nombre       = empleadoCLS.nombre;
                    empleado.apellido     = empleadoCLS.apellido;
                    empleado.cod_empleado = empleadoCLS.cod_empleado;
                    empleado.area         = empleadoCLS.area;
                    empleado.Id_grupo     = empleadoCLS.Id_grupo;
                    bd.Empleado.Add(empleado);
                    bd.SaveChanges();
                }
            }

            return(RedirectToAction("Index"));
        }
    protected void GenerarXMLFile_Button_Click(object sender, EventArgs e)
    {
        if (PeriodoSeleccion_TextBox.Text == "")
        {
            ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" +
                                        "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        if (PeriodoSeleccion_TextBox.Text.ToString().Length != 6)
        {
            ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" +
                                        "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        int nPeriodoSeleccion = 0;

        if (!int.TryParse(PeriodoSeleccion_TextBox.Text, out nPeriodoSeleccion))
        {
            ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" +
                                        "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        // si el combo no tiene registro seleccionado es porque no hay registros en la tabla
        if (CiaContab_DropDownList.SelectedIndex == -1)
        {
            ErrMessage_Span.InnerHtml = "No existe información para construir el archivo que Ud. ha requerido. <br /><br />" +
                                        "Probablemente Ud. no ha aplicado un filtro y seleccionado información aún.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        BancosEntities dbBancos = new BancosEntities();

        int ciaContab = Convert.ToInt32(CiaContab_DropDownList.SelectedValue);

        var Facturas = (from f in dbBancos.tTempWebReport_ConsultaFacturas
                        join c in dbBancos.Companias
                        on f.CiaContab equals c.Numero
                        where f.NombreUsuario == User.Identity.Name &&
                        f.CiaContab == ciaContab
                        select new
        {
            RifAgente = c.Rif,
            NombreCiaContab = c.NombreCorto,
            c.Abreviatura
        }).ToList();

        if (Facturas.Count == 0)
        {
            ErrMessage_Span.InnerHtml = "No existe información para construir el archivo que Ud. ha requerido. <br /><br /> " +
                                        "Probablemente Ud. no ha aplicado un filtro y seleccionado información aún.";
            ErrMessage_Span.Style["display"] = "block";

            dbBancos = null;
            return;
        }

        string sNombreCiaContab = Facturas[0].Abreviatura;
        string sRifCiaContab    = Facturas[0].RifAgente.ToString().Replace("-", "");

        int cantidadFacturas    = 0;
        int cantidadRetenciones = 0;

        Facturas = null;

        // nótese como seleccionamos solo los registros que corresponden a la cia contab seleccinada;
        // además, solo los que corresponden al usuario
        XDocument xmldoc = new XDocument(
            new XElement("RelacionRetencionesISLR",
                         new XAttribute("RifAgente", sRifCiaContab),
                         new XAttribute("Periodo", nPeriodoSeleccion.ToString())));

        xmldoc.Declaration = new XDeclaration("1.0", "ISO-8859-1", "true");



        var facturasQuery = from f in dbBancos.tTempWebReport_ConsultaFacturas
                            where f.NombreUsuario == User.Identity.Name &&
                            f.CiaContab == ciaContab
                            select f;

        foreach (var f in facturasQuery)
        {
            // nótese lo que hacemos aquí: si el Iva comienza con J (persona jurídica) grabamos el
            // monto sujeto a retención al archivo; si el rif comienza con otra letra (persona NO juridica)
            // grabamos el monto total de la factura (ie: imponible más no imponible)

            // dejamos de aplicar el criterio que sigue pues ahora los empleados vienen siempre desde la
            // nómina con el sueldo que registre el usuario como monto sujeto a retención para el xml file

            if (f.RifCompania == null)
            {
                ErrMessage_Span.InnerHtml = "Aparentemente, la compañía " + f.NombreCompania +
                                            " no tiene un número de rif definido en la Maestra de Proveedores. <br /><br />" +
                                            "Por favor revise esta situación; asigne un número de Rif a esta compañía y regrese a ejecutar nuevamente este proceso.";
                ErrMessage_Span.Style["display"] = "block";

                dbBancos = null;
                return;
            }

            // ----------------------------------------------------------------------------------------------------------------------------------------------
            // ahora los impuestos y las retenciones se registran en forma separada en la tabla Facturas_Impuestos; el objetivo principal de este cambio fue,
            // simplemente, poder registrar *más de una* retención de impuestos para una factura. Aunque no es un caso frecuente, existen proveedores que
            // hacen facturas en las cuales especifican dos retenciones (islr) diferentes ... ellos ya las indican, para que el cliente sepa que debe hacerlo
            // así ... por esa razón, ahora buscamos, para cada factura, la retención islr en la tabla Facturas_Impuestos; como dijimos antes, aunque no es
            // frecuente, puede haber más de una retención islr para una misma factura ...

            Factura factura = dbBancos.Facturas.Include("Facturas_Impuestos").
                              Include("Facturas_Impuestos.ImpuestosRetencionesDefinicion").
                              Where(x => x.ClaveUnica == f.ClaveUnicaFactura).
                              FirstOrDefault();

            if (factura == null)
            {
                continue;
            }

            foreach (Facturas_Impuestos retencion in factura.Facturas_Impuestos.Where(r => r.ImpuestosRetencionesDefinicion.Predefinido == 3))
            {
                // la factura debe tener un código de retención en el registro de ImpuestosRetenciones ...
                string codigoConceptoRetencion_islr = retencion.Codigo;

                if (string.IsNullOrEmpty(codigoConceptoRetencion_islr))
                {
                    ErrMessage_Span.InnerHtml = "Aparentemente, la compañía " + f.NombreCompania + " no tiene un 'código de concepto de retención de Islr' " +
                                                "en una (o varias) de sus facturas asociadas (ej: " + factura.NumeroFactura + "). " +
                                                "<br /><br /> Por favor revise esta situación; asigne un " +
                                                "'código de concepto de retención de Islr' a cada una de las facturas asociadas a esta compañía; " +
                                                "luego regrese y ejecute nuevamente este proceso.";
                    ErrMessage_Span.Style["display"] = "block";

                    dbBancos = null;
                    return;
                }

                // ------------------------------------------------------------------------------------------
                // número control - intentamos quitar caracteres especiales y dejar solo números ...
                string sNumeroControlDefinitivo = factura.NumeroControl;

                if (string.IsNullOrEmpty(sNumeroControlDefinitivo))
                {
                    sNumeroControlDefinitivo = "0";
                }

                Int64 numeroControl = 0;

                if (this.retencionISLR_NumeroControl_ConvertirNumeros_CheckBox.Checked)
                {
                    if (!Int64.TryParse(sNumeroControlDefinitivo, out numeroControl))
                    {
                        // excelente como quitamos letras y caracteres especiales del string (tomado de algún lado en la Web) ...
                        sNumeroControlDefinitivo = new String(sNumeroControlDefinitivo.Where(c => char.IsDigit(c)).ToArray());
                    }
                    else
                    {
                        sNumeroControlDefinitivo = factura.NumeroControl;
                    }
                }
                ;
                // ------------------------------------------------------------------------------------------

                decimal montoOperacion = retencion.MontoBase != null ? retencion.MontoBase.Value : 0;
                decimal porcentaje     = retencion.Porcentaje != null ? retencion.Porcentaje.Value : 0;

                montoOperacion = decimal.Round(montoOperacion, 2, MidpointRounding.AwayFromZero);
                porcentaje     = decimal.Round(porcentaje, 2, MidpointRounding.AwayFromZero);

                XElement x = new XElement("DetalleRetencion",
                                          new XElement("RifRetenido", f.RifCompania.ToString().Replace("-", "")),
                                          new XElement("NumeroFactura", factura.NumeroFactura),
                                          new XElement("NumeroControl", sNumeroControlDefinitivo),
                                          new XElement("FechaOperacion", factura.FechaRecepcion.ToString("dd/MM/yyyy").Replace("-", "/")),
                                          new XElement("CodigoConcepto", codigoConceptoRetencion_islr),
                                          // siempre nos aseguramos que el signo decimal en los montos sea '.' y no ','
                                          new XElement("MontoOperacion", montoOperacion.ToString().Replace(",", ".")),
                                          new XElement("PorcentajeRetencion", porcentaje.ToString().Replace(",", "."))
                                          );

                xmldoc.Element("RelacionRetencionesISLR").Add(x);

                cantidadRetenciones++;
            }

            cantidadFacturas++;
        }

        String fileName = @"ISLR_retenido_" + sNombreCiaContab + ".xml";
        String filePath = HttpContext.Current.Server.MapPath("~/Temp/" + fileName);

        // --------------------------------------------------------------------------------------------------
        // si el usuario así lo indica, leemos retenciones desde la nómina de pago
        if (!LeerNomina_CheckBox.Checked)
        {
            // Saving to a file, you can also save to streams
            xmldoc.Save(filePath);

            GeneralMessage_Span.InnerHtml = "<br />" +
                                            "Ok, el archivo xml ha sido generado en forma satisfactoria. <br />" +
                                            "Se han leído " + cantidadFacturas.ToString() + " facturas, en base al criterio de selección que Ud. indicó. <br />" +
                                            "Se han agregado " + cantidadRetenciones.ToString() + " retenciones (registros) al archivo de retenciones. <br />" +
                                            "El nombre del archivo es: " + filePath + ".<br /><br />";

            GeneralMessage_Span.Style["display"] = "block";

            DownloadFile_LinkButton.Visible = true;
            FileName_HiddenField.Value      = filePath;

            return;
        }

        // -----------------------------------------------------------------------------------------------
        // lo primero que hacemos es intentar generar fechas de inicio y fin usando el período indicado
        int ano = Convert.ToInt32(PeriodoSeleccion_TextBox.Text.ToString().Substring(0, 4));
        int mes = Convert.ToInt32(PeriodoSeleccion_TextBox.Text.ToString().Substring(4, 2));

        if (ano <= 1990 || ano >= 2050)
        {
            ErrMessage_Span.InnerHtml = "El período indicado no está correctamente formado. <br /><br />" +
                                        "Recuerde que el período debe formarse de la siguiente manera: aaaamm; ejemplo: 201006.";
            ErrMessage_Span.Style["display"] = "block";

            dbBancos = null;
            return;
        }

        if (mes <= 0 || mes >= 13)
        {
            ErrMessage_Span.InnerHtml = "El período indicado no está correctamente formado. <br /><br />" +
                                        "Recuerde que el período debe formarse de la siguiente manera: aaaamm; ejemplo: 201006.";
            ErrMessage_Span.Style["display"] = "block";

            dbBancos = null;
            return;
        }

        // intentamos leer el código de retención para empleados de nómina

        // declaramos el EF context ...
        NominaEntities nominaCtx = new NominaEntities();

        ContabSysNet_Web.ModelosDatos_EF.Nomina.ParametrosNomina parametrosNomina = (from c in nominaCtx.ParametrosNominas
                                                                                     where c.Cia == ciaContab
                                                                                     select c).FirstOrDefault();

        if (parametrosNomina == null || string.IsNullOrEmpty(parametrosNomina.CodigoConceptoRetencionISLREmpleados))
        {
            ErrMessage_Span.InnerHtml = "Aparentemente, no se ha definido un código de retención ISLR para empleados en la tabla Parámetros Nómina. <br /><br /> " +
                                        "Por favor abra la tabla mencionada y registre el código usado como concepto de retención para retención ISLR de empleados.";
            ErrMessage_Span.Style["display"] = "block";

            dbBancos = null;
            return;
        }

        // rubro que corresponde al ISLR
        var rubroIslr = nominaCtx.tMaestraRubros.Select(r => new { r.Rubro, r.TipoRubro }).Where(r => r.TipoRubro == 8).FirstOrDefault();

        if (rubroIslr == null)
        {
            ErrMessage_Span.InnerHtml = "No se ha definido el rubro ISLR en la maestra de rubros " +
                                        "(Catálogos --> Maestra de Rubros). <br /><br />" +
                                        "Ud. debe definir el rubro ISLR en la Maestra de Rubros.";
            ErrMessage_Span.Style["display"] = "block";

            nominaCtx = null;
            return;
        }

        // leemos la nómina de pago del mes y seleccionamos los rubros que corresponden a la retención de ISLR
        // recuérdese que arriba validamos que existan rubros marcados como ISLR en la maestra; sin embargo,
        // puede no haber de éstos en la nómina de pago ...

        // además, leemos solo los empleados cuya propiedad EscribirArchivoXMLRetencionesISLR es true ...
        var queryNominaPago = from n in nominaCtx.tNominas
                              where
                              n.tNominaHeader.FechaNomina.Month == mes &&
                              n.tNominaHeader.FechaNomina.Year == ano &&
                              (n.tEmpleado.EscribirArchivoXMLRetencionesISLR != null &&
                               n.tEmpleado.EscribirArchivoXMLRetencionesISLR == true) &&
                              n.tNominaHeader.tGruposEmpleado.Cia == ciaContab &&
                              n.Rubro == rubroIslr.Rubro                                              // maestraRubro.Rubro
                              group n by n.Empleado into g
                              select new
        {
            empleado    = g.Key,
            fechaNomina = g.Max(m => m.tNominaHeader.FechaNomina),
            montoISLR   = g.Sum(m => m.Monto),
            montoBase   = g.Sum(m => m.MontoBase)
        };

        int empleadosAgregadosISLRFile = 0;

        RegistroRetencionISLR        registroRetencionISLR;
        List <RegistroRetencionISLR> registroRetencionISLR_List = new List <RegistroRetencionISLR>();

        foreach (var n in queryNominaPago)
        {
            // leemos empleado

            ContabSysNet_Web.ModelosDatos_EF.Nomina.tEmpleado empleado = (from emp in nominaCtx.tEmpleados
                                                                          where emp.Empleado == n.empleado
                                                                          select emp).FirstOrDefault();

            if (String.IsNullOrEmpty(empleado.Rif))
            {
                ErrMessage_Span.InnerHtml = "Aunque se ha retenido ISLR al empleado " + empleado.Nombre +
                                            " en la nómina de pago, no se ha registrado su número de rif en la Maestra de Empleados. <br /><br />" +
                                            "Por favor abra la tabla mencionada y registre un número de rif para cada empleado que tenga retención de ISLR en la nómina de pago.";
                ErrMessage_Span.Style["display"] = "block";

                dbBancos = null;
                return;
            }

            decimal islrPorc  = 0;
            decimal montoBase = 0;
            decimal montoISLR = n.montoISLR;

            if (n.montoBase != null)
            {
                montoBase = n.montoBase.Value;
            }

            if (montoBase < 0)
            {
                // cómo la retención de islr en la nómina es una deducción, este monto viene negativo ...
                montoBase *= -1;
            }

            if (montoISLR < 0)
            {
                montoISLR *= -1;
            }

            if (montoBase != 0)
            {
                islrPorc = montoISLR * 100 / montoBase;
            }

            registroRetencionISLR = new RegistroRetencionISLR();

            registroRetencionISLR.RifRetenido    = empleado.Rif;
            registroRetencionISLR.NumeroFactura  = "0";
            registroRetencionISLR.NumeroControl  = "NA";
            registroRetencionISLR.FechaOperacion = n.fechaNomina;
            registroRetencionISLR.CodigoConcepto = parametrosNomina.CodigoConceptoRetencionISLREmpleados;

            // nos aseguramos que el monto tenga siempre 2 decimales
            decimal montoOperacion = decimal.Round(montoBase, 2, MidpointRounding.AwayFromZero);
            decimal porcentaje     = decimal.Round(islrPorc, 2, MidpointRounding.AwayFromZero);

            // al convertir el monto a string siempre queda así: 1500.35
            registroRetencionISLR.MontoOperacion      = montoOperacion.ToString();
            registroRetencionISLR.PorcentajeRetencion = porcentaje.ToString();

            registroRetencionISLR_List.Add(registroRetencionISLR);

            empleadosAgregadosISLRFile++;
        }

        // finalmente, agregamos cada item en la lista como un nodo al xml file
        foreach (RegistroRetencionISLR r in registroRetencionISLR_List)
        {
            XElement x = new XElement("DetalleRetencion",
                                      new XElement("RifRetenido", r.RifRetenido.ToString().Replace("-", "")),
                                      new XElement("NumeroFactura", r.NumeroFactura),
                                      new XElement("NumeroControl", r.NumeroControl),
                                      new XElement("FechaOperacion", r.FechaOperacion.ToString("dd/MM/yyyy")),
                                      new XElement("CodigoConcepto", r.CodigoConcepto),
                                      new XElement("MontoOperacion", r.MontoOperacion),
                                      new XElement("PorcentajeRetencion", r.PorcentajeRetencion)
                                      );

            xmldoc.Element("RelacionRetencionesISLR").Add(x);
        }

        // Saving to a file, you can also save to streams
        xmldoc.Save(filePath);

        GeneralMessage_Span.InnerHtml = "<br />" +
                                        "Ok, el archivo xml ha sido generado en forma satisfactoria. <br />" +
                                        "Se han leído " + cantidadFacturas.ToString() + " facturas, en base al criterio de selección que Ud. indicó. <br />" +
                                        "Se han agregado " + cantidadRetenciones.ToString() + " retenciones (registros) al archivo de retenciones. <br />" +
                                        "El nombre del archivo es: " + filePath + "<br /><br />" +
                                        "Además, se han agregado " + empleadosAgregadosISLRFile.ToString() + " retenciones (registros) desde la nómina de pago del mes.";
        GeneralMessage_Span.Style["display"] = "block";

        DownloadFile_LinkButton.Visible = true;
        FileName_HiddenField.Value      = filePath;
    }
Exemple #6
0
        protected void Ok_Button_Click(object sender, EventArgs e)
        {
            // ahora recorremos los movimientos bancarios seleccionados y construimos un txt file con
            // los datos necesarios para que el usuario inicie un proceso de mail merge usando Word ...

            if (Session["FiltroForma"] == null)
            {
                this.CustomValidator1.IsValid      = false;
                this.CustomValidator1.ErrorMessage = "No se ha podido acceder a los registros necesarios para ejecutar este proceso.<br />" +
                                                     "Probablemente, Ud. no ha definido y aplicado un filtro aún que permita a este proceso leer y procesar registros.";
                ValidationSummary1.ShowSummary = true;

                return;
            }



            StringBuilder sb;

            // Create the CSV file on the server

            String fileName = @"OrdenesPago_" + User.Identity.Name + ".txt";
            String filePath = HttpContext.Current.Server.MapPath("~/Temp/" + fileName);

            StreamWriter sw = new StreamWriter(filePath, false);

            // First we will write the headers.

            sb = new StringBuilder();

            sb.Append("\"CiaContabNombre\"");
            sb.Append("\t");
            sb.Append("\"Fecha\"");
            sb.Append("\t");
            sb.Append("\"Beneficiario\"");
            sb.Append("\t");
            sb.Append("\"Moneda\"");
            sb.Append("\t");
            sb.Append("\"Monto\"");
            sb.Append("\t");
            sb.Append("\"MonedaYMonto\"");
            sb.Append("\t");

            sb.Append("\"Concepto\"");
            sb.Append("\t");

            sb.Append("\"Soporte1\"");
            sb.Append("\t");
            sb.Append("\"Soporte2\"");
            sb.Append("\t");
            sb.Append("\"Soporte3\"");
            sb.Append("\t");
            sb.Append("\"Soporte4\"");
            sb.Append("\t");
            sb.Append("\"Soporte5\"");
            sb.Append("\t");


            sb.Append("\"RealizadoPor\"");
            sb.Append("\t");
            sb.Append("\"CargoRealizadoPor\"");
            sb.Append("\t");
            sb.Append("\"RevisadoPor\"");
            sb.Append("\t");
            sb.Append("\"CargoRevisadoPor\"");
            sb.Append("\t");
            sb.Append("\"AutorizadoPor1\"");
            sb.Append("\t");
            sb.Append("\"CargoAutorizadoPor1\"");
            sb.Append("\t");
            sb.Append("\"AutorizadoPor2\"");
            sb.Append("\t");
            sb.Append("\"CargoAutorizadoPor2\"");

            sw.Write(sb.ToString());
            sw.Write(sw.NewLine);

            // Now write all the rows.

            BancosEntities bancosContext = new BancosEntities();

            var query = bancosContext.MovimientosBancarios.
                        Include("Chequera").
                        Include("Chequera.CuentasBancaria").
                        Include("Chequera.CuentasBancaria.Compania").
                        Include("Chequera.CuentasBancaria.Moneda1").
                        Include("Chequera.CuentasBancaria.Agencia1").
                        Include("Chequera.CuentasBancaria.Agencia1.Banco1").
                        Where(Session["FiltroForma"].ToString());

            int cantidadRegistrosLeidos = 0;

            foreach (MovimientosBancario m in query)
            {
                //sw.Write(",");
                //sw.Write(sw.NewLine);

                sb = new StringBuilder();

                sb.Append("\"" + m.Chequera.CuentasBancaria.Compania.Nombre + "\"");
                sb.Append("\t");

                sb.Append("\"" + m.Fecha.ToString("dd-MMM-yyyy") + "\"");
                sb.Append("\t");

                sb.Append("\"" + m.Beneficiario + "\"");
                sb.Append("\t");

                sb.Append("\"" + m.Chequera.CuentasBancaria.Moneda1.Simbolo + "\"");
                sb.Append("\t");

                sb.Append("\"" + Math.Abs(m.Monto).ToString("N2") + "\"");
                sb.Append("\t");

                sb.Append("\"" + m.Chequera.CuentasBancaria.Moneda1.Simbolo + " " + Math.Abs(m.Monto).ToString("N2") + "\"");
                sb.Append("\t");

                sb.Append("\"" + m.Concepto + "\"");
                sb.Append("\t");

                // escribimos hasta 5 soportes

                int i = 1;

                foreach (ListItem item in this.Soportes_CheckBoxList.Items)
                {
                    if (item.Selected)
                    {
                        sb.Append("\"" + item.Text + "\"");
                        sb.Append("\t");
                        i++;
                    }

                    if (i == 6)
                    {
                        break;
                    }
                }

                for (int j = i; j <= 5; j++)
                {
                    // si el usuario menos de 5 soportes, agregamos el resto en blanco ...
                    sb.Append("\t");
                }



                // declaramos un context para las tablas de nómina, para leer el cargo de cada empleado indicado ...

                NominaEntities nominaContext = new NominaEntities();


                // realizado por
                if (this.RealizadoPor_DropDownList.SelectedValue != "Indefinido")
                {
                    sb.Append("\"" + this.RealizadoPor_DropDownList.SelectedItem.Text + "\"");
                    sb.Append("\t");

                    int    empleadoID  = Convert.ToInt32(this.RealizadoPor_DropDownList.SelectedValue);
                    string nombreCargo = (from c in nominaContext.tEmpleados
                                          where c.Empleado == empleadoID
                                          select c).FirstOrDefault().tCargo.Descripcion;

                    sb.Append("\"" + nombreCargo + "\"");
                    sb.Append("\t");
                }
                else
                {
                    sb.Append("\t");
                    sb.Append("\t");
                }


                // revisado por
                if (this.RevisadoPor_DropDownList.SelectedValue != "Indefinido")
                {
                    sb.Append("\"" + this.RevisadoPor_DropDownList.SelectedItem.Text + "\"");
                    sb.Append("\t");

                    int    empleadoID  = Convert.ToInt32(this.RevisadoPor_DropDownList.SelectedValue);
                    string nombreCargo = (from c in nominaContext.tEmpleados
                                          where c.Empleado == empleadoID
                                          select c).FirstOrDefault().tCargo.Descripcion;

                    sb.Append("\"" + nombreCargo + "\"");
                    sb.Append("\t");
                }
                else
                {
                    sb.Append("\t");
                    sb.Append("\t");
                }


                // autorizado por (1)
                if (this.AutorizadoPor1_DropDownList.SelectedValue != "Indefinido")
                {
                    sb.Append("\"" + this.AutorizadoPor1_DropDownList.SelectedItem.Text + "\"");
                    sb.Append("\t");

                    int    empleadoID  = Convert.ToInt32(this.AutorizadoPor1_DropDownList.SelectedValue);
                    string nombreCargo = (from c in nominaContext.tEmpleados
                                          where c.Empleado == empleadoID
                                          select c).FirstOrDefault().tCargo.Descripcion;

                    sb.Append("\"" + nombreCargo + "\"");
                    sb.Append("\t");
                }
                else
                {
                    sb.Append("\t");
                    sb.Append("\t");
                }


                // autorizado por (2)
                if (this.AutorizadoPor2_DropDownList.SelectedValue != "Indefinido")
                {
                    sb.Append("\"" + this.AutorizadoPor2_DropDownList.SelectedItem.Text + "\"");
                    sb.Append("\t");

                    int    empleadoID  = Convert.ToInt32(this.AutorizadoPor2_DropDownList.SelectedValue);
                    string nombreCargo = (from c in nominaContext.tEmpleados
                                          where c.Empleado == empleadoID
                                          select c).FirstOrDefault().tCargo.Descripcion;

                    sb.Append("\"" + nombreCargo + "\"");
                }
                else
                {
                    sb.Append("\t");
                    //sb.Append("\t");
                }

                sw.Write(sb.ToString());
                sw.Write(sw.NewLine);

                cantidadRegistrosLeidos++;
            }

            // finally close the file
            sw.Close();

            if (cantidadRegistrosLeidos == 0)
            {
                this.CustomValidator1.IsValid      = false;
                this.CustomValidator1.ErrorMessage = "No se ha podido acceder a los registros necesarios para ejecutar este proceso.<br />" +
                                                     "Probablemente, Ud. no ha definido y aplicado un filtro aún que permita a este proceso leer y procesar registros.";
                ValidationSummary1.ShowSummary = true;

                return;
            }


            string message = "Ok, el archivo requerido ha sido generado en forma satisfactoria. <br />" +
                             "La cantidad de lineas que se han grabado al archivo es: " + cantidadRegistrosLeidos.ToString() +
                             ". <br />" +
                             "El nombre del archivo (en el servidor) es: " + filePath;

            Message_Span.InnerHtml        = message;
            Message_Span.Style["display"] = "block";

            DownloadFile_LinkButton.Visible = true;
            this.FileName_HiddenField.Value = filePath;

            // -------------------------------------------------------------------------------------------------------------------------
            // para guardar el contenido de los controles de la página para recuperar el state cuando se abra la proxima vez

            KeepPageState MyKeepPageState = new KeepPageState(Membership.GetUser().UserName, this.GetType().Name.ToString());

            MyKeepPageState.SavePageStateInFile(this.Controls);
            MyKeepPageState = null;
            // -------------------------------------------------------------------------------------------------------------------------
        }