예제 #1
0
 public ActionResult Login(BancoUsers Usuario)
 {
     if (ModelState.IsValid)
     {
         BancoUsers     authUser = null;
         BancosEntities contexto = new BancosEntities();
         {
             authUser = contexto.BancoUsers.FirstOrDefault(u => u.Login == Usuario.Login && u.Password == Usuario.Password);
         }
         if (authUser != null)
         {
             FormsAuthentication.SetAuthCookie(authUser.Login, false);
             Session["USUARIO"] = authUser;
             return(RedirectToAction("Lista", "Cuentas"));
         }
         else
         {
             ModelState.AddModelError("CredentialError", "Usuario o contraseña incorrecta");
             //return null;
             return(View());
         }
     }
     else
     {
         return(View());
     }
 }
예제 #2
0
 public ActionResult Login(BancoUsers usuario, string returnUrl)
 {
     if (ModelState.IsValid)
     {
         BancoUsers authUser = null;
         using (BancosEntities contexto = new BancosEntities()) {
             authUser = contexto.BancoUsers.FirstOrDefault(u => u.Login == usuario.Login && u.Password == usuario.Password);
         }
         if (authUser != null)
         {
             FormsAuthentication.SetAuthCookie(authUser.Login, false);
             Session["USUARIO"] = authUser;
             return(Redirect(returnUrl));
         }
         else
         {
             ModelState.AddModelError("CredentialError", "Usuario o contraseña incorrectos");
             return(View());
         }
     }
     else
     {
         return(View());
     }
 }
    protected void Page_Load(object sender, EventArgs e)
    {
        ErrMessage_Span.InnerHtml        = "";
        ErrMessage_Span.Style["display"] = "none";

        GeneralMessage_Span.InnerHtml        = "";
        GeneralMessage_Span.Style["display"] = "none";

        if (!Page.IsPostBack)
        {
            if (!User.Identity.IsAuthenticated)
            {
                FormsAuthentication.SignOut();
                return;
            }

            this.OpcionesLibroCompras_Fieldset.Visible             = false;
            this.OpcionesConsultaGeneral_Div.Visible               = false;
            this.OpcionesComprobantesRetencionIva_Fieldset.Visible = false;

            // -------------------------------------------------------------------------------------------------------------------
            //  intentamos recuperar el state de esta página; en general, lo intentamos con popups filtros

            if (!(Membership.GetUser().UserName == null))
            {
                KeepPageState MyKeepPageState = new KeepPageState(Membership.GetUser().UserName, this.GetType().Name.ToString());
                MyKeepPageState.ReadStateFromFile(this, this.Controls);
                MyKeepPageState = null;
            }

            if (string.IsNullOrEmpty(this.Titulo_TextBox.Text))
            {
                this.Titulo_TextBox.Text = "Libro de Compras";
            }


            // leemos apenas la 1ra. linea del archio con los registros seleccionados, para obtener nombre y rif de la cia contab ...

            BancosEntities context = new BancosEntities();
            tTempWebReport_ConsultaFacturas factura =
                context.tTempWebReport_ConsultaFacturas.Where("it.NombreUsuario == '" + User.Identity.Name + "'").FirstOrDefault();


            if (factura != null)
            {
                this.CiaContabNombre_TextBox.Text = factura.CiaContabNombre;
                this.CiaContabRif_TextBox.Text    = factura.CiaContabRif;
            }

            this.DropDownList1.SelectedIndex = 0;
        }
    }
예제 #4
0
        public HttpResponseMessage LeerBancos()
        {
            if (!User.Identity.IsAuthenticated)
            {
                var errorResult = new
                {
                    ErrorFlag    = true,
                    ErrorMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función."
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }

            using (BancosEntities bancosContext = new BancosEntities())
            {
                try
                {
                    var bancos = bancosContext.Bancos.Select(b => new { id = b.Banco1, nombre = b.Nombre }).ToList();

                    var result = new
                    {
                        errorFlag     = false,
                        resultMessage = "",
                        bancos        = bancos
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, result));
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                    if (ex.InnerException != null)
                    {
                        message += "<br />" + ex.InnerException.Message;
                    }

                    var errorResult = new
                    {
                        errorFlag     = true,
                        resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" +
                                        "El mensaje específico de error es: <br />" + message
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
                }
            }
        }
예제 #5
0
    public bool ValidarUltimoMesCerradoBancos(DateTime fecha, int ciaContab, BancosEntities bancosContext)
    {
        var UltimoMesCerrado = (from umc in bancosContext.UltimoMesCerradoes
                                where umc.Cia == ciaContab
                                select umc).FirstOrDefault();

        if (UltimoMesCerrado == null)
        {
            return(false);
        }


        if ((fecha.Year < UltimoMesCerrado.Ano) || (fecha.Year == UltimoMesCerrado.Ano & fecha.Month <= UltimoMesCerrado.Mes))
        {
            return(false);
        }


        return(true);
    }
예제 #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                HtmlGenericControl MyHtmlH2;

                MyHtmlH2 = (HtmlGenericControl)Master.FindControl("PageTitle_TableCell");
                if (!(MyHtmlH2 == null))
                {
                    MyHtmlH2.InnerHtml = "Pagos - Consulta";
                }

                this.Pago_EntityDataSource.WhereParameters["PagoID"].DefaultValue     = Page.Request.QueryString["ID"].ToString();
                this.Facturas_EntityDataSource.WhereParameters["PagoID"].DefaultValue = Page.Request.QueryString["ID"].ToString();

                // ---------------------------------------------------------------------------------------------------
                // para permitir mostrar el asiento contable asociado, con un click al hyperlink  ...

                int pagoID = Convert.ToInt32(Page.Request.QueryString["ID"].ToString());

                // para buscar el asiento contable asociado, debemos obtener su ID (NumeroAutomatico); para hacerlo, leemos el asiento
                // antes; nótese que lo obtenemos usando el pk del movimiento bancario

                BancosEntities bancosContext = new BancosEntities();

                MovimientosBancario movimientoBancario = bancosContext.MovimientosBancarios.Where(m => m.PagoID == pagoID).FirstOrDefault();

                string url = "";

                if (movimientoBancario != null)
                {
                    url = "../../ConsultasBancos/MovimientosBancarios/MovimientoBancario_page.aspx?ID=" + movimientoBancario.ClaveUnica.ToString();
                }
                else
                {
                    url = "../../ConsultasBancos/MovimientosBancarios/MovimientoBancario_page.aspx?ID=-999";
                }

                MostrarMovimientoBancario_HyperLink.HRef = "javascript:PopupWin('" + url + "', 1000, 680)";
            }
        }
    protected void GenerarArchivoRetencionesIva_Button_Click(object sender, EventArgs e)
    {
        // Create the CSV file on the server
        String fileName = @"ImpuestoIvaRetenido_" + User.Identity.Name + ".txt";
        String filePath = HttpContext.Current.Server.MapPath("~/Temp/" + fileName);

        if (File.Exists(@filePath))
        {
            File.Delete(@filePath);
        }

        StreamWriter sw;

        try
        {
            sw = new StreamWriter(filePath, false);
        }
        catch (Exception ex)
        {
            string errorMessage = ex.Message;
            if (ex.InnerException != null)
            {
                errorMessage += ex.InnerException.Message;
            }

            ErrMessage_Span.InnerHtml = "Error al intentar escribir al archivo.<br /><br />" +
                                        errorMessage;
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        StringBuilder sb;

        int cantidadLineas = 0;

        if (this.ObtencionArchivoRetencionesIva_AgregarEncabezados_CheckBox.Checked)
        {
            // agregamos una linea de encabezado al archivo ...

            sb = new StringBuilder();

            // nuestro rif
            sb.Append("Nuestro rif" + "\t");

            // periodo fiscal
            sb.Append("Período" + "\t");

            // fecha Doc
            sb.Append("Fecha doc" + "\t");

            // tipo operación (siempre C)
            sb.Append("Tipo oper" + "\t");

            // tipo doc (siempre 01)
            sb.Append("Tipo doc" + "\t");

            // su rif
            sb.Append("Su rif" + "\t");

            // número documento
            sb.Append("Número doc" + "\t");

            // número control
            sb.Append("Control" + "\t");

            // total doc
            sb.Append("Total doc" + "\t");

            // base imponible
            sb.Append("Monto imp" + "\t");

            // ret iva
            sb.Append("Ret iva" + "\t");

            // doc afectado
            sb.Append("Doc afectado" + "\t");

            // comprobante seniat
            sb.Append("Comp seniat" + "\t");

            // base no imp
            sb.Append("Monto no imp" + "\t");

            // iva porc
            sb.Append("Iva%" + "\t");

            // número de expediente (siempre 0)
            sb.Append("#Exp");

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

            cantidadLineas++;
        }

        BancosEntities context = new BancosEntities();

        // nótese como leemos las facturas seleccionadas, en la tabla 'temp...', para construir un filtro para Facturas_Impuestos, que regrese
        // justamente, las facturas que el usuario ha seleccionado

        string filtroFacturasSeleccionadas = "";

        var facturas = from f in context.tTempWebReport_ConsultaFacturas
                       where f.NombreUsuario == User.Identity.Name
                       select f.ClaveUnicaFactura;

        foreach (int facturaID in facturas)
        {
            if (string.IsNullOrEmpty(filtroFacturasSeleccionadas))
            {
                filtroFacturasSeleccionadas = "(it.FacturaID In {" + facturaID.ToString();
            }
            else
            {
                filtroFacturasSeleccionadas += "," + facturaID.ToString();
            }
        }

        if (string.IsNullOrEmpty(filtroFacturasSeleccionadas))
        {
            filtroFacturasSeleccionadas = "(1 == 2)";
        }
        else
        {
            filtroFacturasSeleccionadas += "})";
        }

        var query = context.Facturas_Impuestos.Include("Factura").
                    Include("Factura.Proveedore").
                    Include("Factura.Compania").
                    Where(filtroFacturasSeleccionadas).
                    Select(i => i);

        query = query.Where(i => i.ImpuestosRetencionesDefinicion.Predefinido == 2).        // solo retenciones Iva
                OrderBy(i => i.Factura.NumeroComprobante);

        int retencionesIvaAgregadas = 0;

        foreach (Facturas_Impuestos impuesto in query)
        {
            // lamentablemente, debemos leer la definición del impuesto Iva para la retención que acabamos de leer. La razón es que
            // en el registro de la retención Iva no está el monto imponible que corresponde; cuando es una sola retención, se puede tomar
            // de la factura; cuando la factura tiene más de una retención, pueden haber montos imponibles diferentes ...

            Facturas_Impuestos impuestoIva = context.Facturas_Impuestos.Where(i => i.FacturaID == impuesto.FacturaID && i.ID < impuesto.ID).
                                             Where(i => i.ImpuestosRetencionesDefinicion.Predefinido == 1).
                                             OrderByDescending(i => i.ID). // para leer *justo* la definición de Iva anterior y no otra que está aún antes ...
                                             FirstOrDefault();

            string numeroDocumento = "";

            if (!string.IsNullOrEmpty(impuesto.Factura.NcNdFlag))
            {
                numeroDocumento = impuesto.Factura.NcNdFlag + "-" + impuesto.Factura.NumeroFactura;
            }
            else
            {
                numeroDocumento = impuesto.Factura.NumeroFactura;
            }

            // ahora escribimos una linea al archivo de texto, separado por tabs
            sb = new StringBuilder();

            // nuestro rif
            sb.Append(string.IsNullOrEmpty(impuesto.Factura.Compania.Rif) ? "" : impuesto.Factura.Compania.Rif.ToString().Replace("-", ""));
            sb.Append("\t");

            // nótese que el usuario indica si desea la fecha de emisión o recepción en el archivo ...
            if (this.UsarFechaEmision_CheckBox.Checked)
            {
                sb.Append(impuesto.Factura.FechaEmision.ToString("yyyy") + impuesto.Factura.FechaEmision.ToString("MM"));
                sb.Append("\t");

                sb.Append(impuesto.Factura.FechaEmision.ToString("yyyy-MM-dd"));
                sb.Append("\t");
            }
            else
            {
                sb.Append(impuesto.Factura.FechaRecepcion.ToString("yyyy") + impuesto.Factura.FechaRecepcion.ToString("MM"));
                sb.Append("\t");

                sb.Append(impuesto.Factura.FechaRecepcion.ToString("yyyy-MM-dd"));
                sb.Append("\t");
            }

            // tipo operación (siempre C)
            sb.Append("C");
            sb.Append("\t");

            // tipo doc (siempre 01; no, 01 para facturas; 03 para NC)
            if (string.IsNullOrEmpty(impuesto.Factura.NcNdFlag))
            {
                sb.Append("01");
            }
            else if (impuesto.Factura.NcNdFlag == "NC")
            {
                sb.Append("03");
            }
            else
            {
                sb.Append("01");
            }

            sb.Append("\t");

            // su rif
            sb.Append(string.IsNullOrEmpty(impuesto.Factura.Proveedore.Rif) ? "" : impuesto.Factura.Proveedore.Rif.ToString().Replace("-", ""));
            sb.Append("\t");

            // número documento
            sb.Append(numeroDocumento);
            sb.Append("\t");

            // -----------------------------------------------------------------------------------------
            // número control

            string sNumeroControlDefinitivo = impuesto.Factura.NumeroControl;

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

            Int64 numeroControl = 0;

            if (this.NumeroControl_ConvertirSoloNumeros_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 = impuesto.Factura.NumeroControl;
                }
            }
            ;

            // ---------------------------------------------------------------------------------------------------------------------------------------
            // base imponible: nótese como la tomamos del registro de impuesto Iva (leído antes)
            decimal montoNoImponible = 0;
            decimal montoImponible   = 0;
            decimal ivaPorc          = 0;
            decimal montoIva         = 0;
            decimal totalFactura     = 0;


            if (impuesto.Factura.MontoFacturaSinIva != null)
            {
                montoNoImponible = impuesto.Factura.MontoFacturaSinIva.Value;
            }

            if (impuestoIva != null && impuestoIva.MontoBase != null)
            {
                montoImponible = impuestoIva.MontoBase.Value;
            }

            if (impuestoIva != null && impuestoIva.Porcentaje != null)
            {
                ivaPorc  = impuestoIva.Porcentaje.Value;
                montoIva = montoImponible * ivaPorc / 100;
            }

            totalFactura = montoNoImponible + montoImponible + montoIva;

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

            // total doc
            sb.Append(totalFactura.ToString("0.00", CultureInfo.InvariantCulture));
            sb.Append("\t");

            // monto imponible
            sb.Append(montoImponible.ToString("0.00", CultureInfo.InvariantCulture));
            sb.Append("\t");

            // ret iva
            sb.Append(impuesto.Monto.ToString("0.00", CultureInfo.InvariantCulture));
            sb.Append("\t");

            // doc afectado
            sb.Append(string.IsNullOrEmpty(impuesto.Factura.NumeroFacturaAfectada) ? "0" : impuesto.Factura.NumeroFacturaAfectada);
            sb.Append("\t");

            // comprobante seniat
            sb.Append(impuesto.Factura.NumeroComprobante);
            sb.Append("\t");

            // base no imp
            sb.Append(montoNoImponible.ToString("0.00", CultureInfo.InvariantCulture));
            sb.Append("\t");

            // iva porc
            sb.Append(ivaPorc.ToString("0.00", CultureInfo.InvariantCulture));
            sb.Append("\t");

            // número de expediente (siempre 0)
            sb.Append("0");

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

            cantidadLineas++;
            retencionesIvaAgregadas++;
        }

        try
        {
            // finally close the file
            sw.Close();
            sw = null;
        }
        catch (Exception ex)
        {
            string errorMessage = ex.Message;
            if (ex.InnerException != null)
            {
                errorMessage += ex.InnerException.Message;
            }

            ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar grabar el archivo requerido en el servidor. <br /><br />" +
                                        errorMessage;
            ErrMessage_Span.Style["display"] = "block";

            context = null;
            return;
        }

        if (retencionesIvaAgregadas == 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";

            context = null;
            return;
        }

        GeneralMessage_Span.InnerHtml = "Ok, el archivo de texto ha sido generado en forma satisfactoria. <br />" +
                                        "La cantidad de facturas que se han grabado al archivo es: " + cantidadLineas.ToString() + ". <br />" +
                                        "El nombre del archivo es: " + filePath + ".<br /><br />";
        GeneralMessage_Span.Style["display"] = "block";

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

        return;
    }
    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;
    }
        public HttpResponseMessage construirDocumentoExcel([FromUri] int?cuentaBancariaID, [FromBody] ConstruirExcelCollections construirDocExcel_Collections)
        {
            if (!User.Identity.IsAuthenticated)
            {
                var errorResult = new
                {
                    errorFlag     = true,
                    resultMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función."
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }

            try
            {
                // --------------------------------------------------------------------------------------------------------------------------
                // establecemos una conexión a mongodb
                string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"];
                string contabM_mongodb_name       = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"];

                var client = new MongoClient(contabm_mongodb_connection);
                // var server = client.GetServer();
                // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones
                var mongoDataBase = client.GetDatabase(contabM_mongodb_name);

                // vamos a leer todas las compañías y ponerlas en una lista ... la cuenta bancaria (default) para cada compañía, será buscada allí ...

                var companiasMongoCollection = mongoDataBase.GetCollection <Compania_mongodb>("Compania");
                var mongoQuery = from e in companiasMongoCollection.AsQueryable <Compania_mongodb>()
                                 select e;
                List <Compania_mongodb> companias = mongoQuery.ToList();

                // -----------------------------------------------------------------------------------------------------------------
                // preparamos el documento Excel, para tratarlo con ClosedXML ...
                string fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/Plantillas/InstruccionesPagoAlBanco/InstruccionesPagoAlBanco.xlsx");

                XLWorkbook   wb;
                IXLWorksheet ws;

                try
                {
                    wb = new XLWorkbook(fileName);
                    ws = wb.Worksheet(1);
                }
                catch (Exception ex)
                {
                    string errorMessage = ex.Message;
                    if (ex.InnerException != null)
                    {
                        errorMessage += "<br />" + ex.InnerException.Message;
                    }

                    var errorResult = new
                    {
                        errorFlag     = true,
                        resultMessage = errorMessage
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
                }

                var excelTable = ws.Table("Facturas");
                // -----------------------------------------------------------------------------------------------------------------

                int cantidadRows = 0;

                foreach (var factura in construirDocExcel_Collections.FacturasSeleccionadas_List)
                {
                    cantidadRows++;

                    excelTable.DataRange.LastRow().Field(0).SetValue(factura.companiaID);
                    excelTable.DataRange.LastRow().Field(1).SetValue(factura.compania);
                    excelTable.DataRange.LastRow().Field(2).SetValue(new DateTime(factura.fechaRecepcion.Year, factura.fechaRecepcion.Month, factura.fechaRecepcion.Day));
                    excelTable.DataRange.LastRow().Field(3).SetValue(factura.numeroFactura);
                    excelTable.DataRange.LastRow().Field(4).SetValue(factura.numeroControl);
                    excelTable.DataRange.LastRow().Field(5).SetValue(factura.concepto);

                    excelTable.DataRange.LastRow().Field(6).SetValue(factura.montoNoImponible);
                    excelTable.DataRange.LastRow().Field(7).SetValue(factura.montoImponible);
                    excelTable.DataRange.LastRow().Field(8).SetValue(factura.Iva);
                    excelTable.DataRange.LastRow().Field(9).SetValue(factura.totalFactura);
                    excelTable.DataRange.LastRow().Field(10).SetValue(factura.montoPagado);
                    excelTable.DataRange.LastRow().Field(11).SetValue(factura.montoAPagar);

                    excelTable.DataRange.InsertRowsBelow(1);
                }



                // ----------------------------------------------------------
                // ahora escribimos registros a otra tabla en el documento
                ws         = wb.Worksheet(2);
                excelTable = ws.Table("Pagos");

                cantidadRows = 0;

                foreach (var pago in construirDocExcel_Collections.ResumenFacturas_List)
                {
                    cantidadRows++;

                    excelTable.DataRange.LastRow().Field(0).SetValue(pago.companiaID);
                    excelTable.DataRange.LastRow().Field(1).SetValue(pago.compania);
                    excelTable.DataRange.LastRow().Field(2).SetValue(pago.cantidadFacturasAPagar);
                    excelTable.DataRange.LastRow().Field(3).SetValue(pago.tipoPersona + '-' + pago.numeroRif);
                    excelTable.DataRange.LastRow().Field(4).SetValue(pago.nombreBeneficiario);
                    excelTable.DataRange.LastRow().Field(5).SetValue(pago.codigoBanco);
                    excelTable.DataRange.LastRow().Field(6).SetValue(pago.numeroCuentaBancaria);
                    excelTable.DataRange.LastRow().Field(7).SetValue(new DateTime(pago.fechaValor.Year, pago.fechaValor.Month, pago.fechaValor.Day));
                    excelTable.DataRange.LastRow().Field(8).SetValue(pago.monto);

                    excelTable.DataRange.InsertRowsBelow(1);
                }



                BancosEntities context = new BancosEntities();

                string nombreCiaContab = "";
                string rifCiaContab    = "";

                CuentasBancaria cuentaBancaria = context.CuentasBancarias.Where(cta => cta.CuentaInterna == cuentaBancariaID).FirstOrDefault();

                if (cuentaBancaria != null)
                {
                    ContabSysNet_Web.ModelosDatos_EF.Bancos.Compania ciaContab = context.Companias.Where(cia => cia.Numero == cuentaBancaria.Cia).FirstOrDefault();

                    nombreCiaContab = ciaContab.Nombre;
                    rifCiaContab    = ciaContab.Rif;
                }


                ws = wb.Worksheet(1);
                ws.Cell("B2").Value = nombreCiaContab;
                ws.Cell("B3").Value = "Rif: " + rifCiaContab;

                string userName = User.Identity.Name.Replace("@", "_").Replace(".", "_");
                fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/InstruccionesPagoAlBanco_" + userName + ".xlsx");

                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }

                wb.SaveAs(fileName);

                var errorResult2 = new
                {
                    errorFlag     = false,
                    resultMessage = "Ok, el documento Excel se ha construído en forma satisfactoria.<br />" +
                                    "Por favor haga un click en la opción que le permite descargar (download) el documento a su computador."
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult2));
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                if (ex.InnerException != null)
                {
                    message += "<br />" + ex.InnerException.Message;
                }

                var errorResult = new
                {
                    errorFlag     = true,
                    resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" +
                                    "El mensaje específico de error es: <br />" + message
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }
        }
        public HttpResponseMessage leerDatosCompanias([FromUri] int?cuentaBancariaID, [FromBody] List <ResumenFacturas> resumenFacturas)
        {
            if (!User.Identity.IsAuthenticated)
            {
                var errorResult = new
                {
                    errorFlag     = true,
                    resultMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función."
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }

            try
            {
                // --------------------------------------------------------------------------------------------------------------------------
                // establecemos una conexión a mongodb
                string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"];
                string contabM_mongodb_name       = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"];

                var client = new MongoClient(contabm_mongodb_connection);
                // var server = client.GetServer();
                // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones
                var mongoDataBase = client.GetDatabase(contabM_mongodb_name);

                // vamos a leer todas las compañías y ponerlas en una lista ... la cuenta bancaria (default) para cada compañía, será buscada allí ...

                var companiasMongoCollection = mongoDataBase.GetCollection <Compania_mongodb>("Compania");

                var mongoQuery = from e in companiasMongoCollection.AsQueryable <Compania_mongodb>()
                                 select e;

                List <Compania_mongodb> companias = mongoQuery.ToList();

                // --------------------------------------------------------------------------------------------------------------------------

                BancosEntities context = new BancosEntities();

                // antes que nada, leemos la cuenta bancaria y los datos de la cia contab ...

                ContabSysNet_Web.ModelosDatos_EF.Bancos.Compania ciaContab = null;
                CuentasBancaria cuentaBancariaCiaContab = null;
                string          codigoBancoCiaContab    = "";

                if (cuentaBancariaID != null)
                {
                    cuentaBancariaCiaContab = context.CuentasBancarias.Where(cta => cta.CuentaInterna == cuentaBancariaID).FirstOrDefault();
                    if (cuentaBancariaCiaContab != null)
                    {
                        ciaContab            = context.Companias.Where(cia => cia.Numero == cuentaBancariaCiaContab.Cia).FirstOrDefault();
                        codigoBancoCiaContab = cuentaBancariaCiaContab.Agencia1.Banco1.Codigo;
                    }
                }

                foreach (var c in resumenFacturas)
                {
                    Proveedore compania = context.Proveedores.Include("Personas").Where(p => p.Proveedor == c.companiaID).FirstOrDefault();

                    if (compania != null)
                    {
                        c.tipoPersona = compania.Rif != null?compania.Rif.Substring(0, 1) : "";

                        c.numeroRif = compania.Rif != null?compania.Rif.Substring(1, compania.Rif.Length - 1) : "";

                        Persona persona = compania.Personas.Where(p => p.DefaultFlag.HasValue && p.DefaultFlag.Value).FirstOrDefault();

                        if (persona != null)
                        {
                            c.nombreBeneficiario = persona.Nombre + ' ' + persona.Apellido;
                            c.email   = persona.email;
                            c.celular = persona.Celular;

                            // solo si la persona posee un Rif registrado, lo usamos
                            if (!string.IsNullOrEmpty(persona.Rif))
                            {
                                c.tipoPersona = persona.Rif != null?persona.Rif.Substring(0, 1) : "";

                                c.numeroRif = persona.Rif != null?persona.Rif.Substring(1, persona.Rif.Length - 1) : "";
                            }
                        }

                        // buscamos la compañía en la lista que leímos desde mongo

                        var compania2 = companias.Where(x => x.Id == c.companiaID).FirstOrDefault();

                        if (compania2 != null && compania2.cuentasBancarias.Any(x => x.isDefault))
                        {
                            var cuentaBancaria = compania2.cuentasBancarias.Where(x => x.isDefault).FirstOrDefault();
                            var banco          = context.Bancos.Where(b => b.Banco1 == cuentaBancaria.banco).FirstOrDefault();

                            c.numeroCuentaBancaria = cuentaBancaria.numero;
                            c.codigoBanco          = banco != null ? banco.Codigo : null;

                            c.modalidadPago = "";

                            if (!(cuentaBancaria.tipo == "VI" || cuentaBancaria.tipo == "MA" || cuentaBancaria.tipo == "AM"))
                            {
                                // la cuenta no es una tarjeta; es una cuenta de ahorros o corriente
                                if (c.codigoBanco == codigoBancoCiaContab)
                                {
                                    // cuentas del mismo banco (que nuestro banco)
                                    c.modalidadPago = "CTA";
                                }
                                else
                                {
                                    // cuenta de difenrente banco (a nuestro banco)
                                    c.modalidadPago = "BAN";
                                }
                            }
                            else
                            {
                                // tarjetas de crédito
                                if (cuentaBancaria.tipo == "AM")
                                {
                                    c.modalidadPago = "AME";
                                }
                                else if (c.codigoBanco == codigoBancoCiaContab)
                                {
                                    // visa/master mismo banco
                                    c.modalidadPago = "V/M";
                                }
                                else
                                {
                                    // visa/master otros bancos
                                    c.modalidadPago = "TAR";
                                }
                            }
                        }
                    }
                }

                var registroCiaContab = new
                {
                    tipoRegistro                                = "01",
                    descripcionLote                             = "Proveedores",
                    tipoPersona                                 = ciaContab.Rif != null?ciaContab.Rif.Substring(0, 1) : "",
                                                      numeroRif = ciaContab.Rif != null?ciaContab.Rif.Replace("-", "").Substring(1, ciaContab.Rif.Replace("-", "").Length - 1) : "",
                                                                      numeroContrato      = cuentaBancariaCiaContab.NumeroContrato,
                                                                      numeroLote          = 0,
                                                                      fechaEnvio          = DateTime.Today,
                                                                      cantidadOperaciones = resumenFacturas.Count(),
                                                                      montoTotal          = resumenFacturas.Sum(f => f.monto),
                                                                      moneda = "VEB"
                };

                var result = new
                {
                    errorFlag       = false,
                    resultMessage   = "",
                    resumenFacturas = resumenFacturas,
                    registroCiaContab
                };

                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                if (ex.InnerException != null)
                {
                    message += "<br />" + ex.InnerException.Message;
                }

                var errorResult = new
                {
                    errorFlag     = true,
                    resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" +
                                    "El mensaje específico de error es: <br />" + message
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }
        }
예제 #11
0
        private bool LibroCompras_ExportarMicrosoftExcel()
        {
            if (User.Identity == null || string.IsNullOrEmpty(User.Identity.Name))
            {
                // un timeout podría hacer que el usuario no esté authenticado ...
                string errorMessage = "Ud. debe hacer un login en la aplicación antes de continuar. Por vaya a Home e intente hacer un login en la aplicación.";
                ErrMessage_Span.InnerHtml        = errorMessage;
                ErrMessage_Span.Style["display"] = "block";

                return(false);
            }

            BancosEntities context = new BancosEntities();

            var query = context.tTempWebReport_ConsultaFacturas.Where("it.NombreUsuario == '" + User.Identity.Name + "'");

            if (query.Count() == 0)
            {
                string errorMessage = "No existe información para mostrar el reporte " +
                                      "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " +
                                      "filtro y seleccionado información aún.";

                ErrMessage_Span.InnerHtml        = errorMessage;
                ErrMessage_Span.Style["display"] = "block";

                return(false);
            }


            // -----------------------------------------------------------------------------------------------------------------
            // preparamos el documento Excel, para tratarlo con ClosedXML ...
            string fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/LibroCompras.xlsx");

            XLWorkbook   wb;
            IXLWorksheet ws;

            try
            {
                wb = new XLWorkbook(fileName);
                ws = wb.Worksheet(1);
            }
            catch (Exception ex)
            {
                string errorMessage = ex.Message;
                if (ex.InnerException != null)
                {
                    errorMessage += "<br />" + ex.InnerException.Message;
                }

                ErrMessage_Span.InnerHtml        = errorMessage;
                ErrMessage_Span.Style["display"] = "block";

                return(false);
            }

            var excelTable = ws.Table("Ventas");
            // -----------------------------------------------------------------------------------------------------------------

            int      cantidadRows                 = 0;
            decimal  ivaPorc                      = 0;
            decimal  montoNoImponible             = 0;
            decimal  montoImponible               = 0;
            decimal  montoIva                     = 0;
            DateTime?fechaComprobanteRetencionIva = null;
            decimal  montoRetencionImpuestosIva   = 0;

            foreach (var factura in query.OrderBy(f => f.FechaRecepcion).ThenBy(f => f.NumeroFactura))
            {
                cantidadRows++;

                excelTable.DataRange.LastRow().Field(0).SetValue(cantidadRows);
                excelTable.DataRange.LastRow().Field(1).SetValue(factura.FechaRecepcion);
                excelTable.DataRange.LastRow().Field(2).SetValue(factura.NombreCompania);
                excelTable.DataRange.LastRow().Field(3).SetValue(factura.RifCompania);

                if (factura.ImportacionFlag != null && factura.ImportacionFlag.Value)
                {
                    // importaciones
                    switch (factura.NcNdFlag)
                    {
                    case "NC":
                    {
                        excelTable.DataRange.LastRow().Field(9).SetValue(factura.NumeroFactura);
                        excelTable.DataRange.LastRow().Field(10).SetValue(factura.NumeroFacturaAfectada);
                        break;
                    }

                    case "ND":
                    {
                        excelTable.DataRange.LastRow().Field(8).SetValue(factura.NumeroFactura);
                        break;
                    }

                    default:
                    {
                        excelTable.DataRange.LastRow().Field(4).SetValue(factura.NumeroFactura);
                        break;
                    }
                    }
                }
                else
                {
                    // compra nacional
                    switch (factura.NcNdFlag)
                    {
                    case "NC":
                    {
                        excelTable.DataRange.LastRow().Field(7).SetValue(factura.NumeroFactura);
                        excelTable.DataRange.LastRow().Field(10).SetValue(factura.NumeroFacturaAfectada);
                        break;
                    }

                    case "ND":
                    {
                        excelTable.DataRange.LastRow().Field(6).SetValue(factura.NumeroFactura);
                        break;
                    }

                    default:
                    {
                        excelTable.DataRange.LastRow().Field(4).SetValue(factura.NumeroFactura);
                        break;
                    }
                    }
                }

                // calculamos el porcentaje de Iva, que no viene en el registro

                montoNoImponible             = factura.MontoFacturaSinIva != null ? factura.MontoFacturaSinIva.Value : 0;
                montoImponible               = factura.MontoFacturaConIva != null ? factura.MontoFacturaConIva.Value : 0;
                montoIva                     = factura.Iva != null ? factura.Iva.Value : 0;
                ivaPorc                      = 0;
                fechaComprobanteRetencionIva = null;
                montoRetencionImpuestosIva   = factura.RetencionSobreIva != null ? factura.RetencionSobreIva.Value : 0;

                if (montoImponible != 0)
                {
                    ivaPorc = Math.Round(montoIva * 100 / montoImponible, 2);
                }

                // para determinar la fecha de recepción del comprobante, tenemos que buscar en la tabla FacturasImpuestos; además, en FacturasImpuestos,
                // el registro cuyo correspondiente en ImpuestosRetencionesDefinicion tenga 1 en la columna Predefinido ...

                Facturas_Impuestos impuestoIva = context.Facturas_Impuestos.Where(i => i.FacturaID == factura.ClaveUnicaFactura).
                                                 Where(i => i.ImpuestosRetencionesDefinicion.Predefinido == 1).
                                                 FirstOrDefault();

                if (impuestoIva != null)
                {
                    fechaComprobanteRetencionIva = impuestoIva.FechaRecepcionPlanilla;
                }

                if (factura.ImportacionFlag != null && factura.ImportacionFlag.Value)
                {
                    excelTable.DataRange.LastRow().Field(11).SetValue(montoImponible + montoIva); // gravadas
                    excelTable.DataRange.LastRow().Field(12).SetValue(montoNoImponible);          // exoneradas
                    excelTable.DataRange.LastRow().Field(13).SetValue(montoImponible);            // base imponible
                    excelTable.DataRange.LastRow().Field(14).SetValue(ivaPorc);
                    excelTable.DataRange.LastRow().Field(15).SetValue(montoIva);
                }
                else
                {
                    excelTable.DataRange.LastRow().Field(16).SetValue(montoImponible + montoIva); // gravadas
                    excelTable.DataRange.LastRow().Field(17).SetValue(montoNoImponible);          // exoneradas
                    excelTable.DataRange.LastRow().Field(18).SetValue(montoImponible);            // base imponible
                    excelTable.DataRange.LastRow().Field(19).SetValue(ivaPorc);
                    excelTable.DataRange.LastRow().Field(20).SetValue(montoIva);
                }


                excelTable.DataRange.LastRow().Field(21).SetValue(factura.NumeroComprobante);
                excelTable.DataRange.LastRow().Field(22).SetValue(fechaComprobanteRetencionIva);
                excelTable.DataRange.LastRow().Field(23).SetValue(montoRetencionImpuestosIva);

                excelTable.DataRange.InsertRowsBelow(1);
            }

            // en el libro de ventas, asumimos que el usuario seleccionó una sola empresa (cia contab) y usamos el primer registro
            // de la lista de items seleccionados para obtenerla ...

            string nombreCiaContab     = "";
            string rifCiaContab        = "";
            string direccionCiaContab  = "";
            string periodoFechaInicial = this.Periodo_FechaInicial_TextBox.Text;
            string periodoFechaFinal   = this.Periodo_FechaFinal_TextBox.Text;

            if (query.Count() > 0)
            {
                var factura = query.FirstOrDefault();
                nombreCiaContab    = factura.CiaContabNombre;
                rifCiaContab       = factura.CiaContabRif;
                direccionCiaContab = factura.CiaContabDireccion;
            }

            ws.Cell("B2").Value = nombreCiaContab;
            ws.Cell("B3").Value = "Rif: " + rifCiaContab;
            ws.Cell("B4").Value = direccionCiaContab;
            ws.Cell("B6").Value = "Período: " + periodoFechaInicial + " al " + periodoFechaFinal;

            string userName = User.Identity.Name.Replace("@", "_").Replace(".", "_");

            fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/LibroCompras_" + userName + ".xlsx");

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            try
            {
                wb.SaveAs(fileName);

                string errorMessage = "Ok, la función que exporta los datos a Microsoft Excel se ha ejecutado en forma satisfactoria.<br />" +
                                      "En total, se han agregado " + cantidadRows.ToString() + " registros a la tabla en el documento Excel.<br />" +
                                      "Ud. debe hacer un <em>click</em> en el botón que permite obtener (<em>download</em>) el documento Excel.";

                Session["ExcelDocument_FileName"] = fileName;

                GeneralMessage_Span.InnerHtml        = errorMessage;
                GeneralMessage_Span.Style["display"] = "block";
            }
            catch (Exception ex)
            {
                string errorMessage = ex.Message;
                if (ex.InnerException != null)
                {
                    errorMessage += "<br />" + ex.InnerException.Message;
                }

                errorMessage += "Se producido un error mientras se ejecutaba el proceso. El mensaje específico del error es:<br />" + errorMessage;

                ErrMessage_Span.InnerHtml        = errorMessage;
                ErrMessage_Span.Style["display"] = "block";

                return(false);
            }

            return(true);
        }
예제 #12
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!User.Identity.IsAuthenticated)
            {
                FormsAuthentication.SignOut();
                return;
            }

            if (!Page.IsPostBack)
            {
                switch (Request.QueryString["rpt"].ToString())
                {
                case "activosFijosDepreciacion":
                {
                    if (!User.Identity.IsAuthenticated)
                    {
                        FormsAuthentication.SignOut();
                        return;
                    }

                    if (Request.QueryString["tit"] == null ||
                        Request.QueryString["subtit"] == null ||
                        Request.QueryString["mes"] == null ||
                        Request.QueryString["ano"] == null ||
                        Request.QueryString["soloTotales"] == null)
                    {
                        ErrMessage_Cell.InnerHtml = "Aparentemente, Ud. no ha seleccionado aún información para la obtención de este reporte.<br /><br />" +
                                                    "Probablemente, Ud. no ha definido y aplicado un filtro que permita seleccionar información apropiada para la obtención " +
                                                    "de este reporte.";
                        break;
                    }

                    // nótese como mantenemos los items mes y año como texto; no necesitamos que sean números en el reporte ...
                    string titutlo     = Request.QueryString["tit"].ToString();
                    string subTitulo   = Request.QueryString["subtit"].ToString();
                    string mes         = Request.QueryString["mes"].ToString();
                    string ano         = Request.QueryString["ano"].ToString();
                    bool   soloTotales = Convert.ToBoolean(Request.QueryString["soloTotales"].ToString());

                    // string que muestra el período (en meses) que va desde el inicio del año fiscal hasta el mes de la consulta; ej: Mar-Ago ...
                    string periodo = "";

                    if (Request.QueryString["periodo"] != null)
                    {
                        periodo = Request.QueryString["periodo"].ToString();
                    }

                    // ----------------------------------------------------------------------------------------------------------------------
                    // agregamos este flag luego de la reconversión del 1-Oct-21
                    // la idea es que el usuario pueda decidir si reconvertir montos
                    bool bReconvertirCifrasAntes_01Oct2021 = false;
                    if (Session["ReconvertirCifrasAntes_01Oct2021"] != null)
                    {
                        bReconvertirCifrasAntes_01Oct2021 = (bool)Session["ReconvertirCifrasAntes_01Oct2021"];
                    }

                    // ----------------------------------------------------------------------------------------------------------------------
                    // leemos la tabla de monedas para 'saber' cual es la moneda Bs. Nota: la idea es aplicar las opciones de reconversión
                    // *solo* a esta moneda
                    var monedaNacional_return = Reconversion.Get_MonedaNacional();

                    if (monedaNacional_return.error)
                    {
                        ErrMessage_Cell.InnerHtml = monedaNacional_return.message;
                        break;
                    }

                    Monedas monedaNacional = monedaNacional_return.moneda;
                    // ----------------------------------------------------------------------------------------------------------------------

                    string connectionString = WebConfigurationManager.ConnectionStrings["dbContabConnectionString"].ConnectionString;
                    string query            = "Select * From vtTempActivosFijos_ConsultaDepreciacion Where NombreUsuario = @NombreUsuario";

                    SqlCommand sqlCommand = new SqlCommand(query);
                    sqlCommand.Parameters.AddWithValue("@NombreUsuario", User.Identity.Name);

                    SqlConnection sqlConnnection = new SqlConnection(connectionString);

                    sqlCommand.Connection = sqlConnnection;

                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);

                    DataSet dataSet = new DataSet();

                    try
                    {
                        sqlConnnection.Open();
                        sqlDataAdapter.Fill(dataSet, "vtTempActivosFijos_ConsultaDepreciacion");

                        if (dataSet.Tables[0].Rows.Count == 0)
                        {
                            ErrMessage_Cell.InnerHtml = "No existe información para mostrar el reporte que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un filtro y seleccionado información aún.";
                            return;
                        }
                    }
                    catch (Exception ex)
                    {
                        string errorMessage = ex.Message;
                        if (ex.InnerException != null)
                        {
                            errorMessage += "<br /><br />" + ex.InnerException.Message;
                        }

                        ErrMessage_Cell.InnerHtml = "Hemos obtenido un error al intentar efectuar una operación de base de datos. <br />" +
                                                    "El mensaje específico del error es: <br /><br />" +
                                                    errorMessage;
                        return;
                    }
                    //finally
                    //{
                    //    sqlConnnection.Close();
                    //}

                    // ahora preparamos una lista para usarla como DataSource del report ...
                    List <ActivosFijos_Report_ConsultaDepreciacion> myList = new List <ActivosFijos_Report_ConsultaDepreciacion>();
                    ActivosFijos_Report_ConsultaDepreciacion        infoDepreciacion;

                    for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                    {
                        infoDepreciacion = new ActivosFijos_Report_ConsultaDepreciacion();

                        infoDepreciacion.NombreCiaContab      = dataSet.Tables[0].Rows[i]["NombreCiaContab"].ToString();
                        infoDepreciacion.AbreviaturaCiaContab = dataSet.Tables[0].Rows[i]["AbreviaturaCiaContab"].ToString();
                        infoDepreciacion.NombreDepartamento   = dataSet.Tables[0].Rows[i]["NombreDepartamento"].ToString();
                        infoDepreciacion.Moneda              = Convert.ToInt32(dataSet.Tables[0].Rows[i]["Moneda"]);
                        infoDepreciacion.DescripcionMoneda   = dataSet.Tables[0].Rows[i]["DescripcionMoneda"].ToString();
                        infoDepreciacion.SimboloMoneda       = dataSet.Tables[0].Rows[i]["SimboloMoneda"].ToString();
                        infoDepreciacion.NombreTipoProducto  = dataSet.Tables[0].Rows[i]["NombreTipoProducto"].ToString();
                        infoDepreciacion.Producto            = dataSet.Tables[0].Rows[i]["Producto"].ToString();
                        infoDepreciacion.DescripcionProducto = dataSet.Tables[0].Rows[i]["DescripcionProducto"].ToString();
                        infoDepreciacion.FechaCompra         = Convert.ToDateTime(dataSet.Tables[0].Rows[i]["FechaCompra"]);

                        if (DateTime.TryParse(dataSet.Tables[0].Rows[i]["FechaDesincorporacion"].ToString(), out var temp))
                        {
                            infoDepreciacion.FechaDesincorporacion = temp;
                        }

                        infoDepreciacion.DepreciarDesde              = dataSet.Tables[0].Rows[i]["DepreciarDesde"].ToString();
                        infoDepreciacion.DepreciarDesdeMes           = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepreciarDesdeMes"]);
                        infoDepreciacion.DepreciarDesdeAno           = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepreciarDesdeAno"]);
                        infoDepreciacion.DepreciarHasta              = dataSet.Tables[0].Rows[i]["DepreciarHasta"].ToString();
                        infoDepreciacion.DepreciarHastaMes           = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepreciarHastaMes"]);
                        infoDepreciacion.DepreciarHastaAno           = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepreciarHastaAno"]);
                        infoDepreciacion.CantidadMesesADepreciar     = Convert.ToInt16(dataSet.Tables[0].Rows[i]["CantidadMesesADepreciar"]);
                        infoDepreciacion.DepAcum_CantMeses           = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepAcum_CantMeses"]);
                        infoDepreciacion.DepAcum_CantMeses_AnoActual = Convert.ToInt16(dataSet.Tables[0].Rows[i]["DepAcum_CantMeses_AnoActual"]);

                        if (Int16.TryParse(dataSet.Tables[0].Rows[i]["RestaPorDepreciar_Meses"].ToString(), out var temp1))
                        {
                            infoDepreciacion.RestaPorDepreciar_Meses = temp1;
                        }

                        infoDepreciacion.CostoTotal          = Convert.ToDecimal(dataSet.Tables[0].Rows[i]["CostoTotal"]);
                        infoDepreciacion.MontoADepreciar     = Convert.ToDecimal(dataSet.Tables[0].Rows[i]["MontoADepreciar"]);
                        infoDepreciacion.DepreciacionMensual = Convert.ToDecimal(dataSet.Tables[0].Rows[i]["DepreciacionMensual"]);
                        infoDepreciacion.DepAcum_AnoActual   = Convert.ToDecimal(dataSet.Tables[0].Rows[i]["DepAcum_AnoActual"]);
                        infoDepreciacion.DepAcum_Total       = Convert.ToDecimal(dataSet.Tables[0].Rows[i]["DepAcum_Total"]);

                        if (Decimal.TryParse(dataSet.Tables[0].Rows[i]["RestaPorDepreciar"].ToString(), out var temp2))
                        {
                            infoDepreciacion.RestaPorDepreciar = temp2;
                        }

                        infoDepreciacion.NombreUsuario = dataSet.Tables[0].Rows[i]["NombreUsuario"].ToString();

                        myList.Add(infoDepreciacion);
                    }

                    // si el usuario indicó que quería reconvertir montos anteriores a Oct/2021, lo hacemos ahora
                    if (bReconvertirCifrasAntes_01Oct2021)
                    {
                        foreach (var item in myList)
                        {
                            if (item.Moneda == monedaNacional.Moneda && item.FechaCompra < new DateTime(2021, 10, 1))
                            {
                                item.CostoTotal = Math.Round((item.CostoTotal / 1000000), 2);
                            }
                        }
                    }

                    this.ReportViewer1.LocalReport.ReportPath = "ActivosFijos/Consultas/DepreciacionMensual/ConsultaDepreciacion.rdlc";

                    ReportDataSource myReportDataSource = new ReportDataSource();

                    myReportDataSource.Name  = "DataSet1";
                    myReportDataSource.Value = myList;              //  dataSet.Tables["vtTempActivosFijos_ConsultaDepreciacion"];

                    this.ReportViewer1.LocalReport.DataSources.Add(myReportDataSource);

                    this.ReportViewer1.LocalReport.Refresh();

                    List <ReportParameter> reportParameterCollection = new List <ReportParameter>();

                    reportParameterCollection.Add(new ReportParameter("tituloReporte", titutlo));
                    reportParameterCollection.Add(new ReportParameter("subTituloReporte", subTitulo));
                    reportParameterCollection.Add(new ReportParameter("mes", mes));
                    reportParameterCollection.Add(new ReportParameter("ano", ano));
                    reportParameterCollection.Add(new ReportParameter("soloTotales", soloTotales.ToString()));
                    reportParameterCollection.Add(new ReportParameter("periodo", periodo));

                    this.ReportViewer1.LocalReport.SetParameters(reportParameterCollection);

                    break;
                }


                case "movimientosbancarios":
                {
                    if (!User.Identity.IsAuthenticated)
                    {
                        FormsAuthentication.SignOut();
                        return;
                    }

                    if (Request.QueryString["tit"] == null ||
                        Request.QueryString["subtit"] == null ||
                        Request.QueryString["filter"] == null)
                    {
                        ErrMessage_Cell.InnerHtml = "Aparentemente, Ud. no ha seleccionado aún información para la obtención de este reporte.<br /><br />" +
                                                    "Probablemente, Ud. no ha definido y aplicado un filtro que permita seleccionar información apropiada para la obtención " +
                                                    "de este reporte.";
                        break;
                    }

                    string titutlo   = Request.QueryString["tit"].ToString();
                    string subTitulo = Request.QueryString["subtit"].ToString();
                    string filter    = Request.QueryString["filter"].ToString();


                    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(filter);

                    if (query.Count() == 0)
                    {
                        ErrMessage_Cell.InnerHtml = "No existe información para mostrar el reporte " +
                                                    "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " +
                                                    "filtro y seleccionado información aún.";
                        return;
                    }

                    // ahora preparamos una lista para usarla como DataSource del report ...
                    List <Bancos_Report_ConsultaMovimientoBancario> myList = new List <Bancos_Report_ConsultaMovimientoBancario>();
                    Bancos_Report_ConsultaMovimientoBancario        infoMovimientoBancario;

                    foreach (MovimientosBancario movimiento in query)
                    {
                        infoMovimientoBancario = new Bancos_Report_ConsultaMovimientoBancario();

                        infoMovimientoBancario.NombreMoneda    = movimiento.Chequera.CuentasBancaria.Moneda1.Descripcion;
                        infoMovimientoBancario.NombreCiaContab = movimiento.Chequera.CuentasBancaria.Compania.Nombre;
                        infoMovimientoBancario.Transaccion     = movimiento.Transaccion;
                        infoMovimientoBancario.Tipo            = movimiento.Tipo;
                        infoMovimientoBancario.Fecha           = movimiento.Fecha;
                        infoMovimientoBancario.NombreBanco     = movimiento.Chequera.CuentasBancaria.Agencia1.Banco1.Nombre;
                        infoMovimientoBancario.CuentaBancaria  = movimiento.Chequera.CuentasBancaria.CuentaBancaria;
                        infoMovimientoBancario.Beneficiario    = movimiento.Beneficiario;
                        infoMovimientoBancario.Concepto        = movimiento.Concepto;
                        infoMovimientoBancario.Monto           = movimiento.Monto;
                        infoMovimientoBancario.FechaEntregado  = movimiento.FechaEntregado;

                        myList.Add(infoMovimientoBancario);
                    }

                    this.ReportViewer1.LocalReport.ReportPath = "Bancos/ConsultasBancos/MovimientosBancarios/ConsultaMovimientosBancarios.rdlc";

                    ReportDataSource myReportDataSource = new ReportDataSource();

                    myReportDataSource.Name  = "DataSet1";
                    myReportDataSource.Value = myList;

                    this.ReportViewer1.LocalReport.DataSources.Add(myReportDataSource);

                    this.ReportViewer1.LocalReport.Refresh();

                    ReportParameter titulo_ReportParameter    = new ReportParameter("tituloReporte", titutlo);
                    ReportParameter subTitulo_ReportParameter = new ReportParameter("subTituloReporte", subTitulo);

                    ReportParameter[] MyReportParameters = { titulo_ReportParameter, subTitulo_ReportParameter };

                    this.ReportViewer1.LocalReport.SetParameters(MyReportParameters);

                    break;
                }

                case "pagos":
                {
                    if (!User.Identity.IsAuthenticated)
                    {
                        FormsAuthentication.SignOut();
                        return;
                    }

                    if (Request.QueryString["tit"] == null ||
                        Request.QueryString["subtit"] == null ||
                        Request.QueryString["filter"] == null)
                    {
                        ErrMessage_Cell.InnerHtml = "Aparentemente, Ud. no ha seleccionado aún información para la obtención de este reporte.<br /><br />" +
                                                    "Probablemente, Ud. no ha definido y aplicado un filtro que permita seleccionar información apropiada para la obtención " +
                                                    "de este reporte.";
                        break;
                    }

                    string titutlo   = Request.QueryString["tit"].ToString();
                    string subTitulo = Request.QueryString["subtit"].ToString();
                    string filter    = Request.QueryString["filter"].ToString();


                    BancosEntities bancosContext = new BancosEntities();

                    var query = bancosContext.Pagos.
                                Include("Proveedore").
                                Include("Compania").
                                Include("Moneda1").
                                Where(filter);

                    if (query.Count() == 0)
                    {
                        ErrMessage_Cell.InnerHtml = "No existe información para mostrar el reporte " +
                                                    "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " +
                                                    "filtro y seleccionado información aún.";
                        return;
                    }

                    // ahora preparamos una lista para usarla como DataSource del report ...

                    List <Bancos_Report_ConsultaPago> myList = new List <Bancos_Report_ConsultaPago>();
                    Bancos_Report_ConsultaPago        infoPago;

                    foreach (Pago pago in query)
                    {
                        infoPago = new Bancos_Report_ConsultaPago();

                        infoPago.NombreMoneda    = pago.Moneda1.Descripcion;
                        infoPago.NombreCiaContab = pago.Compania.Nombre;
                        infoPago.Fecha           = pago.Fecha;
                        infoPago.NombreCompania  = pago.Proveedore.Abreviatura;
                        infoPago.NumeroPago      = pago.NumeroPago;
                        infoPago.MiSu            = pago.MiSuFlag == 1 ? "Mi" : "Su";
                        infoPago.Concepto        = pago.Concepto;
                        infoPago.Monto           = pago.Monto != null ? pago.Monto.Value : 0;

                        myList.Add(infoPago);
                    }


                    this.ReportViewer1.LocalReport.ReportPath = "Bancos/Consultas facturas/Pagos/ConsultaPagos.rdlc";

                    ReportDataSource myReportDataSource = new ReportDataSource();

                    myReportDataSource.Name  = "DataSet1";
                    myReportDataSource.Value = myList;

                    this.ReportViewer1.LocalReport.DataSources.Add(myReportDataSource);

                    this.ReportViewer1.LocalReport.Refresh();

                    ReportParameter titulo_ReportParameter    = new ReportParameter("tituloReporte", titutlo);
                    ReportParameter subTitulo_ReportParameter = new ReportParameter("subTituloReporte", subTitulo);

                    ReportParameter[] MyReportParameters = { titulo_ReportParameter, subTitulo_ReportParameter };

                    this.ReportViewer1.LocalReport.SetParameters(MyReportParameters);

                    break;
                }
                }
            }
        }
예제 #13
0
        public HttpResponseMessage LeerCompanias()
        {
            if (!User.Identity.IsAuthenticated)
            {
                var errorResult = new
                {
                    ErrorFlag    = true,
                    ErrorMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función."
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }

            // --------------------------------------------------------------------------------------------------------------------------
            // establecemos una conexión a mongodb
            string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"];
            string contabM_mongodb_name       = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"];

            var client = new MongoClient(contabm_mongodb_connection);
            // var server = client.GetServer();
            // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones
            var mongoDataBase = client.GetDatabase(contabM_mongodb_name);
            // --------------------------------------------------------------------------------------------------------------------------

            var companiasMongoCollection = mongoDataBase.GetCollection <Compania_mongodb>("Compania");

            try
            {
                // --------------------------------------------------------------------------------------------------------------------------
                // eliminamos las facturas en la tabla 'temporal' que corresponden al usuario
                var builder = Builders <Compania_mongodb> .Filter;
                var filter  = builder.Eq(x => x.Id, -999999999);

                companiasMongoCollection.DeleteManyAsync(filter);
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                if (ex.InnerException != null)
                {
                    message += "<br />" + ex.InnerException.Message;
                }

                message = "Se producido un error al intentar ejecutar una operación en mongodb.<br />" +
                          "El mensaje específico del error es:<br />" + message;

                var errorResult = new
                {
                    errorFlag     = true,
                    resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" +
                                    "El mensaje específico de error es: <br />" + message
                };

                return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
            }

            using (BancosEntities bancosContext = new BancosEntities())
            {
                try
                {
                    List <Compania_ActualizarCuentasBancarias> companias = new List <Compania_ActualizarCuentasBancarias>();
                    Compania_ActualizarCuentasBancarias        compania;

                    var query = bancosContext.Proveedores.Select(c => new
                    {
                        nombre           = c.Nombre,
                        id               = c.Proveedor,
                        ciudad           = c.tCiudade.Descripcion,
                        clienteProveedor = c.ProveedorClienteFlag,
                        tipo             = c.TiposProveedor.Descripcion,
                        rif              = c.Rif,
                        naturalJuridico  = c.NatJurFlag
                    }).ToList();

                    foreach (var c in query)
                    {
                        compania = new Compania_ActualizarCuentasBancarias();

                        compania.nombre           = c.nombre;
                        compania.id               = c.id;
                        compania.ciudad           = c.ciudad;
                        compania.clienteProveedor = c.clienteProveedor;
                        compania.tipo             = c.tipo;
                        compania.rif              = c.rif;
                        compania.naturalJuridico  = c.naturalJuridico;

                        // ahora buscamos la compañía en mongo; si existe, agregamos las cuentas bancarias ...
                        var companiaMongo = companiasMongoCollection.AsQueryable().Where(e => e.Id == compania.id).FirstOrDefault();

                        if (companiaMongo != null)
                        {
                            Compania_ActualizarCuentasBancarias_CuentaBancaria cuentaBancaria;

                            foreach (var cuentaBancos in companiaMongo.cuentasBancarias)
                            {
                                cuentaBancaria = new Compania_ActualizarCuentasBancarias_CuentaBancaria();

                                cuentaBancaria.numero    = cuentaBancos.numero;
                                cuentaBancaria.banco     = cuentaBancos.banco;
                                cuentaBancaria.isDefault = cuentaBancos.isDefault;
                                cuentaBancaria.tipo      = cuentaBancos.tipo;

                                compania.cuentasBancarias.Add(cuentaBancaria);
                            }
                        }

                        companias.Add(compania);
                    }

                    var result = new
                    {
                        errorFlag     = false,
                        resultMessage = "",
                        companias     = companias
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, result));
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                    if (ex.InnerException != null)
                    {
                        message += "<br />" + ex.InnerException.Message;
                    }

                    var errorResult = new
                    {
                        errorFlag     = true,
                        resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" +
                                        "El mensaje específico de error es: <br />" + message
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, errorResult));
                }
            }
        }
예제 #14
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;
            // -------------------------------------------------------------------------------------------------------------------------
        }
예제 #15
0
 public FuncionesBancos(BancosEntities bancosContext)
 {
     _bancosContext = bancosContext;
 }