/// <summary>
        /// funcion que crea una factura nueva sin gastos de administracion
        /// </summary>
        /// <param name="sFolio"></param>
        /// <param name="iTipo">1-Tradicional, 2-Electronica</param>
        /// <returns></returns>
        private void CrearFactura(List<MedNeg.Facturas.BlDetalleFacturaReceta> lstDetalleFactura, int iTipo)
        {
            //TODO: GT Paso 3: Generar la factura con todo lo contabilizado de las recetas que van a conformar esta factura.

             //objeto que contiene la receta
            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            string sRutaCertificados = Server.MapPath("~/Archivos/");
            string sFacturaAdicional = "";
            string sFacturaAdicional2 = "";

            MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas();
            MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas();
            
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion();

            MedDAL.DAL.facturas oFacturas = new MedDAL.DAL.facturas();
            MedNeg.Facturas.BlFacturas oblFacturas = new MedNeg.Facturas.BlFacturas();
            MedDAL.DAL.FacturacionDeRecetas oFacturacionRecetas = new MedDAL.DAL.FacturacionDeRecetas();
           

            decimal dSubtotal = 0;
            int idReceta = 0;

            odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig);
          
            //ID Cliente
            oFacturas.idCliente = (int)Session["sIdCliente"];

            //IDRECETA
            //oFacturas.idReceta = oReceta.idReceta;
            
            //Asiganr el folio de la factura
            if (odalConfiguracion.iFacturasAutomatico == 1)
            {
                oFacturas.Folio = odalConfiguracion.iFolioFacturas++.ToString();
            }
            else
            {
                string sFolioAux;
                sFolioAux = "FxR" + DateTime.Now.ToShortDateString() + iContadorFacturas.ToString();
                
                //Validar que no exista el folio
                while (!ValidaFolioRepetido(sFolioAux))
                    sFolioAux = "FxR" + DateTime.Now.ToShortDateString() + iContadorFacturas++.ToString();

                oFacturas.Folio = sFolioAux;
            }

            string sIdFolioFactura=oFacturas.Folio;

            //Fecha
            oFacturas.Fecha = DateTime.Now;
            oFacturas.FechaAplicacion = DateTime.Now;

            //tipo (4 por que son de receta)
            oFacturas.TipoFactura = "4";

            //Estatus (3 de emitida)
            oFacturas.Estatus = "3";

            //Id del usuario que genero la factura
            oFacturas.idUsuario = Convert.ToInt32(Session["usuarioid"]);

            //Nombre del vendedor que en este caso es el usuario
            oFacturas.Vendedor = Session["nombre"].ToString();

            //Registrar la factura
            if (oblFacturas.NuevoRegistro(oFacturas))
            {
                
                oFacturas = new MedDAL.DAL.facturas();
                oblFacturas = new MedNeg.Facturas.BlFacturas();

                ////Recuperar el id de la factura crea| da
                oFacturas = oblFacturas.BuscarFacturasFolio(sIdFolioFactura);
                
                //Actualizar el consecutivo en la configuracion
                oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig);
                iContadorFacturas++;

                //Insertar el detalle de factura
                //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida
                foreach (MedNeg.Facturas.BlDetalleFacturaReceta renglon in lstDetalleFactura)
                {
                    oblFacturas = new MedNeg.Facturas.BlFacturas();
                    MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida();

                    oFacturaPartida.idFactura = oFacturas.idFactura;
                    oFacturaPartida.idProducto = renglon.iIdProducto;
                    oFacturaPartida.Cantidad = renglon.dCantidad;
                    oFacturaPartida.IEPS = renglon.dIeps;
                    oFacturaPartida.Iva = renglon.dIva;
                    oFacturaPartida.Precio = renglon.dPrecio;

                    //Registrar el detalle del pedido
                    if (!oblFacturas.NuevoDetallePartida(oFacturaPartida))
                    {
                        //bRegistroFallido = true;
                    }
                    else
                    {
                        //Guardar el monto de las lineas
                        MedNeg.Facturas.BlFacturacionDeLineas oblFacturacionLinea = new MedNeg.Facturas.BlFacturacionDeLineas();

                        oblFacturacionLinea.DMonto = oFacturaPartida.Cantidad * oFacturaPartida.Precio;
                        oblFacturacionLinea.DtFecha = DateTime.Now;
                        oblFacturacionLinea.IIdLineaCredito = renglon.IIdLineaCredito;

                        lstTotalFacturadoPorLinea.Add(oblFacturacionLinea);

                        //Guardar el subtotal para cuando sea una facturacion de Gtos. Admon por subtotales
                        dSubtotal += oFacturaPartida.Cantidad * oFacturaPartida.Precio;

                        //Modificar el estatus de la receta
                        if (idReceta != renglon.IIdReceta)
                        {
                            MedDAL.DAL.recetas oRecetaEditar = new MedDAL.DAL.recetas();
                            MedNeg.Recetas.BlRecetas oblRecetas = new MedNeg.Recetas.BlRecetas();

                            oRecetaEditar.idReceta = renglon.IIdReceta;
                            oRecetaEditar.Estatus = "2";

                            oblRecetas = new MedNeg.Recetas.BlRecetas();
                            oblRecetas.EditarRegistro(oRecetaEditar);

                            idReceta = renglon.IIdReceta;

                        }

                        //TODO: Paso 3.1 Aqui generar la factura electronica de las recetas facturadas
                    }
                }


                if (iTipo == 2)
                {
                    oblFacturas = new MedNeg.Facturas.BlFacturas();
                    oblFacturas.GenerarFacturaElectronica(oFacturas.idFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], oFacturas.Folio);
                }

                ///TODO
                /// Mandar a imprimir la de gastos de administración por renglones o por subtotales
                /// 1 = Renglones, 2 = Sub totales
                /// 

                //TODO: GT Paso 4: una vez generada una factura y segun como eligio el usuario se debe de hacer una factura de tipo Gasto administrativo o por sub totales A LA PAR DE LA FACTURA EMITIDA, es regla de negocio por eso por cada factura siempre existiran 2
                if (chkPanelGtosAdmon.Checked == true)
                {
                    if (rblGenerarFacturaTipo.SelectedValue == "1")
                    {
                        sFacturaAdicional = CrearFacturaGtoAdministrativo(sIdFolioFactura, lstDetalleFactura);
                        sFacturaAdicional2 = sFacturaAdicional.Replace(".xml", ".pdf");
                    }

                    if (rblGenerarFacturaTipo.SelectedValue == "2")
                    {
                        //Generar la factura agregandole el monto a la factura
                        sFacturaAdicional = CrearFacturaSubTotales(sIdFolioFactura, dSubtotal);
                        sFacturaAdicional2 = sFacturaAdicional.Replace(".xml", ".pdf");
                        dSubtotal = 0;
                    }
                }

                //Gurdar en la base de datos lo facturado por linea de credito
                foreach (MedNeg.Facturas.BlFacturacionDeLineas registro in lstTotalFacturadoPorLinea)
                {

                    oFacturacionRecetas.idLineaCredito = registro.IIdLineaCredito;
                    oFacturacionRecetas.Fecha = registro.DtFecha;
                    oFacturacionRecetas.Monto = registro.dMonto;
                    oblFacturas = new MedNeg.Facturas.BlFacturas();
                    //MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida();

                    //Registrar el renglon de lo facturado
                    if(!oblFacturas.NuevoRegistroFacturacionReceta(oFacturacionRecetas))
                    {
                       //bRegistroFallido = true;
                    }
               }

                if (iTipo == 2)
                {
                    try
                    {
                        oblFacturas.CrearZip(new string[] { Server.MapPath("~/Archivos/FacturasElectronicasTimbradas"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".zip") }, Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".xml"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".pdf"), sFacturaAdicional, sFacturaAdicional2);

                        ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(0);", true);

                        System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".zip"));

                        Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name);
                        Response.AddHeader("Content-Length", fFactura.Length.ToString());
                        Response.ContentType = "application/....";
                        Response.WriteFile(fFactura.FullName);
                        Response.End();
                    }
                    catch (Exception)
                    {
                        ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarExcepcion(0);", true);
                    }
                }
            }

            

        }
        /// <summary>
        /// Carga los detalles de la receta
        /// </summary>
        private void CargaReceta(string sFolio)
        {
            ////TODO: GT Paso 2: Cuando se recibe una receta para facturar

            //objeto que contiene la receta
            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas();
            MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas();
            
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion();

            odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig);

                   
            /**************** Registrar la partida de la factura *****************/

            //Llenar los datos de la partida de la remisión
            oblReceta = new MedNeg.Recetas.BlRecetas();

            //Recuperar datos de la receta mediante el folio enviado
            oReceta = oblReceta.BuscarRecetaFolio(sFolio);

            //Recuperar la partida del pedido
            var oQuery = oblReceta.RecuperarPartidaRecetas(oReceta.idReceta);
            int iIndiceElemento;
            decimal dGastoAdministracion=0;

            //Recorrer el resultado y meterlo al datagridview
            foreach (MedDAL.DAL.recetas_partida oDetalle in oQuery)
            {
                //Buscar si ya existe el producto en la lista, si es así entonces solo se modifica la cantidad surtida,
                //de lo contrario entonces se crea un renglon nuevo y se incrementa el contador

                iIndiceElemento = lstDetalleReceta.FindIndex(det => det.iIdProducto == oDetalle.idProducto);
                if (iIndiceElemento > -1)
                {
                    lstDetalleReceta[iIndiceElemento].dCantidad += Convert.ToDecimal(oDetalle.CantidaSurtida);
                }
                else
                {
                    //Identificar que precio o monto se debe de enviar acorde a los filtros
                    //si es por gasto de admon relacionado al producto se toma el campo 9
                    if (chkGtoAdmon.Checked == true && rblGenerarFacturaTipo.SelectedValue=="1")
                        dGastoAdministracion = Convert.ToDecimal(oDetalle.productos.Campo9);
                    if (chkMonto.Checked == true && rblGenerarFacturaTipo.SelectedValue == "1")
                        dGastoAdministracion = Convert.ToDecimal(txbMonto.Text);
                    if (chkPorcentaje.Checked == true && rblGenerarFacturaTipo.SelectedValue == "1")
                        dGastoAdministracion = Convert.ToDecimal(oDetalle.Precio * (Convert.ToDecimal(txbPorcentaje.Text) / 100));
                    

                    MedNeg.Facturas.BlDetalleFacturaReceta oblDetallePartida = new MedNeg.Facturas.BlDetalleFacturaReceta(
                        Convert.ToInt32(oDetalle.idProducto),
                        oDetalle.productos.Clave1,
                        oDetalle.productos.Nombre,
                        Convert.ToDecimal(oDetalle.CantidaSurtida),
                        Convert.ToDecimal(oDetalle.productos.TasaIeps),
                        Convert.ToDecimal(oDetalle.productos.tipo_iva.Iva),
                        dGastoAdministracion,
                        Convert.ToDecimal(oDetalle.Precio),
                        "",
                        Convert.ToDecimal(0),
                        oDetalle.idLineaCredito,
                        oReceta.idReceta);
                    
                    lstDetalleReceta.Add(oblDetallePartida);
                    iContadorRenglones++;
                }


                //Saber si ya se va a mandar a facturar
                if (iContadorRenglones == odalConfiguracion.iNoMaxRenglonesFactura && cmbModoFactura.SelectedValue == "1")
                {
                    CrearFactura(lstDetalleReceta, 1);
                    
                    //Re iniciar contadores y listas
                    iContadorRenglones = 0;
                    lstDetalleReceta.Clear();
                }

            }

            //Si al terminar el foreach el contador de renglones es menor a odalConfiguracion.iNoMaxRenglonesFactura
            //quiere decir que quedan reglones por facturar es por eso que se requiere nuevamente esta validación
            if (iContadorRenglones < odalConfiguracion.iNoMaxRenglonesFactura && cmbModoFactura.SelectedValue == "1")
            {
                CrearFactura(lstDetalleReceta, 1);

                //Re iniciar contadores y listas
                iContadorRenglones = 0;
                lstDetalleReceta.Clear();
            }

            //JID Si el modo de factura es electronico, hace el proceso con la lista completa
            if (cmbModoFactura.SelectedValue == "2")
            {
                CrearFactura(lstDetalleReceta, 2);

                //Re iniciar contadores y listas
                iContadorRenglones = 0;
                lstDetalleReceta.Clear();
            }

      }
        /// <summary>
        /// Buscar las recetas por los diferentes filtros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnBuscarRec_Click(object sender, EventArgs e)
        {
            MedNeg.Recetas.BlRecetas oblRecetas = new MedNeg.Recetas.BlRecetas();
            //var oQuery = oblRecetas.RecetasFacturarPorPrograma();
           
            //Por fechas
            if (chkFecha.Checked==true)
            {
               var oQuery = oblRecetas.RecetasFacturarPorProgramaFecha(txbFechaDesde.Text, txbFechaHasta.Text);
               MostrarLista(oQuery);
            }

            //Por fechas con almacen
            if (chkFecha.Checked == true && chkAlmacen.Checked==true)
            {
                var oQuery = oblRecetas.RecetasFacturarPorProgramaFecha(txbFechaDesde.Text, txbFechaHasta.Text);
                MostrarLista(oQuery);
            }
            
            //Por Folio
            if (chkFolio.Checked == true)
            {
                var oQuery = oblRecetas.RecetasFacturarPorProgramaFolio(txbFolioDesde.Text, txbFolioHasta.Text);
                MostrarLista(oQuery);
            }

            //Por Folio y almacen
            if (chkFolio.Checked == true && chkAlmacen.Checked==true)
            {
                var oQuery = oblRecetas.RecetasFacturarPorProgramaFolio(txbFolioDesde.Text, txbFolioHasta.Text);
                MostrarLista(oQuery);
            }

            //Filtrado solo por almacen
            if (chkAlmacen.Checked == true && chkFolio.Checked == false && chkFecha.Checked == false)
            {
                var oQuery = oblRecetas.RecetasFacturarPorPrograma(Convert.ToInt32(cmbAlmacenes.SelectedValue));
                MostrarLista(oQuery);
            }
            
            //Sin filtros
            if (chkAlmacen.Checked == false && chkFolio.Checked == false && chkFecha.Checked == false)
            {
                var oQuery = oblRecetas.RecetasFacturarPorPrograma();
                MostrarLista(oQuery);
            }

            chkTodas.Visible = true;
            chkTodas.Checked = false;
        }
Пример #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            Hashtable htbPermisos = (Hashtable)Session["permisos"];
            char      cPermiso    = 'N';

            try
            {
                #region Interfaz
                cPermiso = (char)htbPermisos["reportes"];
                Master.FindControl("btnNuevo").Visible    = false;
                Master.FindControl("btnEditar").Visible   = false;
                Master.FindControl("btnEliminar").Visible = false;
                Master.FindControl("btnReportes").Visible = false;
                Master.FindControl("btnMostrar").Visible  = false;
                Master.FindControl("btnCancelar").Visible = false;
                Master.FindControl("btnAceptar").Visible  = false;
                Master.FindControl("lblBuscar").Visible   = false;

                rdbTodos          = (RadioButton)Master.FindControl("rdbFiltro1");
                rdbTodos.Visible  = false;
                rdbClave          = (RadioButton)Master.FindControl("rdbFiltro2");
                rdbClave.Visible  = false;
                rdbNombre         = (RadioButton)Master.FindControl("rdbFiltro3");
                rdbNombre.Visible = false;

                btnBuscar         = (Button)Master.FindControl("btnBuscar");
                btnBuscar.Visible = false;
                txbBuscar         = (TextBox)Master.FindControl("txtBuscar");
                txbBuscar.Visible = false;


                lblNombreModulo      = (Label)Master.FindControl("lblNombreModulo");
                lblNombreModulo.Text = "Reportes";

                /*switch (cPermiso)
                 * {
                 *  case 'T':
                 *      break;
                 *  case 'E':
                 *      break;
                 *  case 'L':
                 *      break;
                 * }*/
                #endregion

                oblFacturas    = new MedNeg.Facturas.BlFacturas();
                oblRecetas     = new MedNeg.Recetas.BlRecetas();
                oblPoblaciones = new MedNeg.Poblaciones.BlPoblaciones();

                if (!IsPostBack)
                {
                    Session["reporteactivo"]  = 0;
                    Session["reportdocument"] = "";
                    Session["titulo"]         = "";
                    Session["reporte"]        = null;
                    pnlFiltroReportes.Visible = true;
                    CargarListaReportes();
                }
            }
            catch (NullReferenceException)
            {
                if (!ClientScript.IsStartupScriptRegistered("alertsession"))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(),
                                                            "alertsession", "alertarSesion();", true);
                }

                Site1 oPrincipal = (Site1)this.Master;
                oPrincipal.DeshabilitarControles(this);
                oPrincipal.DeshabilitarControles();
            }
        }
        /// <summary>
        /// Registrar nuevo pedido
        /// </summary>
        private void Nuevo()
        {

            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            string sRutaCertificados = Server.MapPath("~/Archivos/");

            oFactura = new MedDAL.DAL.facturas();
            oblFacturas = new MedNeg.Facturas.BlFacturas();
            oFactura.idCliente = (int)Session["sIdCliente"];

            if ((bool)Session["sEsDePedido"] == true)
                oFactura.idPedido = (int)Session["sIdPedido"];

            if ((bool)Session["sEsDeRemision"] == true)
                oFactura.idRemision = (int)Session["sIdRemision"];

            if ((bool)Session["sEsDeReceta"] == true)
                oFactura.idReceta = (int)Session["sIdReceta"];

            oFactura.TipoFactura = cmbTipoFactura.SelectedValue.ToString();
            oFactura.Fecha = DateTime.Now;
            oFactura.Estatus = cmbEstatus.SelectedValue;

            //Validar Folio Repetido
            if (ValidaFolioRepetido())
            {

                //Validar si se esta respetando el folio automatico y verificar si aun es el mismo o cambio su valor
                if (Session["iFolioAutomatico"].Equals(txbFolio.Text))
                {
                    oFactura.Folio = oblFacturas.RecuperaFolioAutomatico(sRutaArchivoConfig).ToString();
                }
                else
                {
                    oFactura.Folio = txbFolio.Text;
                }

                if (oblFacturas.NuevoRegistro(oFactura))
                {
                    //Datos de la bitacora
                    string sDatosBitacora = string.Empty;
                    sDatosBitacora += "Tipo:" + cmbTipoFactura.SelectedValue.ToString() + " ";
                    sDatosBitacora += "Folio:" + txbFolio.Text + " ";
                    sDatosBitacora += "Fecha:" + txbFecha.Text + " ";
                    sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " ";
                    sDatosBitacora += "Cliente:" + txbCliente.Text + " ";


                    // Registrar la partida de la remision
                    oFactura = new MedDAL.DAL.facturas();
                    oFactura = oblFacturas.BuscarFacturasFolio(txbFolio.Text);
                    int iIdFactura = oFactura.idFactura;
                    bool bRegistroFallido = false;

                    //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida
                    foreach (MedNeg.Facturas.BlDetallePartida facturaDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"])
                    {
                        oblFacturas = new MedNeg.Facturas.BlFacturas();
                        MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida();

                        oFacturaPartida.idFactura = iIdFactura;
                        oFacturaPartida.idProducto = facturaDetalle.iIdProducto;
                        oFacturaPartida.Cantidad = facturaDetalle.dCantidad;
                        oFacturaPartida.IEPS = facturaDetalle.dIeps;
                        oFacturaPartida.Iva = facturaDetalle.dIva;
                        oFacturaPartida.Precio = facturaDetalle.dPrecio;
                        oFacturaPartida.Descripcion = facturaDetalle.SProducto;

                        //Registrar el detalle del pedido
                        if (!oblFacturas.NuevoDetallePartida(oFacturaPartida))
                        {
                            bRegistroFallido = true;
                        }
                        else
                        {
                            sDatosBitacora += "Producto:" + facturaDetalle.iIdProducto.ToString() + " ";
                            sDatosBitacora += "Cant:" + facturaDetalle.dCantidad.ToString() + " ";
                            sDatosBitacora += "IEPS:" + facturaDetalle.dIeps.ToString() + " ";
                            sDatosBitacora += "Iva:" + facturaDetalle.dIva.ToString() + " ";
                            sDatosBitacora += "Precio:" + facturaDetalle.dPrecio.ToString() + " ";
                            sDatosBitacora += "Total:" + Convert.ToDecimal((facturaDetalle.dCantidad * facturaDetalle.dPrecio) + facturaDetalle.dIeps + facturaDetalle.dIva) + ", ";
                        }
                    }

                    //Registrar datos de la remision en la bitacora
                    //lblAviso.Text = "El usuario se ha registrado con éxito";
                    oBitacora = new MedDAL.DAL.bitacora();
                    oblBitacora = new MedNeg.Bitacora.BlBitacora();
                    oBitacora.FechaEntradaSrv = DateTime.Now;
                    oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal
                    oBitacora.Modulo = "Factura";
                    oBitacora.Usuario = Session["usuario"].ToString();
                    oBitacora.Nombre = Session["nombre"].ToString();
                    oBitacora.Accion = "Nueva Factura";
                    oBitacora.Descripcion = sDatosBitacora;
                    if (!oblBitacora.NuevoRegistro(oBitacora))
                    {
                        lblDatos.Text = "El evento no pudo ser registrado en la bitácora";
                    }

                    //Actualizar el consecutivo en la bitacora
                    oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig);

                    //Generar la factura electronica
                    if (cmbModoFactura.SelectedValue == "2")
                    {
                        oblFacturas = new MedNeg.Facturas.BlFacturas();
                        oblFacturas.GenerarFacturaElectronica(iIdFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], txbFolio.Text);

                        System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicas/FacturaE-" + txbFolio.Text + ".xml"));

                        Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name);
                        Response.AddHeader("Content-Length", fFactura.Length.ToString());
                        Response.ContentType = "application/....";
                        Response.WriteFile(fFactura.FullName);
                        Response.End();
                    }

                    //Saber si se va a actualizar el estatus del pedido
                    if ((bool)Session["sEsDePedido"] == true)
                    {
                        //Actualizar el estatus del pedido en caso de que se haya hecho la remision a partir de un pedido
                        MedDAL.DAL.pedidos oPedido = new MedDAL.DAL.pedidos();
                        MedNeg.Pedidos.BlPedidos oblPedido = new MedNeg.Pedidos.BlPedidos();

                        //Actualizar el estatus del pedido
                        oPedido = oblPedido.BuscarPedido((int)Session["sIdPedido"]);
                        oPedido.Estatus = "3";

                        if (!oblPedido.EditarRegistro(oPedido))
                        {
                            lblDatos.Text = "No se pudo cambiar el estatus del pedido, contacte al administrador";
                        }
                    }

                    //Saber si se va a actualizar el estatus de la remision
                    if ((bool)Session["sEsDeRemision"] == true)
                    {
                        //Actualizar el estatus del pedido
                        MedDAL.DAL.remisiones oRemision = new MedDAL.DAL.remisiones();
                        MedNeg.Remisiones.BlRemisiones oblRemision = new MedNeg.Remisiones.BlRemisiones();

                        oRemision = oblRemision.BuscarRemision((int)Session["sIdRemision"]);
                        oRemision.Estatus = "3";

                        if (!oblRemision.EditarRegistro(oRemision))
                        {
                            lblDatos.Text = "No se pudo cambiar el estatus de la remisión, contacte al administrador";
                        }
                    }

                    //Saber si se va a actualizar el estatus de la remision
                    if ((bool)Session["sEsDeReceta"] == true)
                    {
                        //Actualizar el estatus del pedido
                        MedDAL.DAL.remisiones oRemision = new MedDAL.DAL.remisiones();
                        MedNeg.Remisiones.BlRemisiones oblRemision = new MedNeg.Remisiones.BlRemisiones();

                        MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas();
                        MedNeg.Recetas.BlRecetas oblRecetas = new MedNeg.Recetas.BlRecetas();

                        oReceta = oblRecetas.BuscarReceta((int)Session["sIdReceta"]);
                        oReceta.Estatus = "2";

                        if (!oblRecetas.EditarRegistro(oReceta))
                        {
                            lblDatos.Text = "No se pudo cambiar el estatus de la receta, contacte al administrador";
                        }
                    }

                }
                else
                {

                }

            }
            else  //si es folio repetido
            {
                lblDatos.Text = "Folio Repetido, no se puede generar el pedido";

            }
        }
        /// <summary>
        /// Carga los detalles de la receta
        /// </summary>
        private void CargaReceta(string sFolio)
        {
            //objeto que contiene la receta
            MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas();
            MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas();

            oReceta = oblReceta.BuscarRecetaFolio(sFolio);

            //Recuperar el id de la receta y del usuario
            Session["sIdReceta"] = oReceta.idReceta;


            //Llenar los campos del cliente
            try
            {

                txbCliente.Text = oReceta.clientes.Nombre + " " + oReceta.clientes.Apellidos;
                txbDireccion.Text = oReceta.clientes.Calle + " " + oReceta.clientes.NumeroExt;
                if (oReceta.clientes.NumeroInt != null)
                {
                    txbDireccion.Text += "Int: " + oReceta.clientes.NumeroInt;
                }

                txbPoblacion.Text = oReceta.clientes.poblaciones.Nombre.ToString() + ", " + oReceta.clientes.municipios.Nombre.ToString() + ", " + oReceta.clientes.estados.Nombre.ToString();
                Session["sIdCliente"] = oReceta.idCliente;
            }
            catch
            {
                //En caso de que no tenga un cliente registrado
                txbCliente.Text = "";
                txbDireccion.Text = "";
                txbPoblacion.Text = "";
            }

            //Llenar los datos de la partida de la remisión
            oblReceta = new MedNeg.Recetas.BlRecetas();

            //Recuperar la partida del pedido
            var oQuery = oblReceta.RecuperarPartidaRecetas(oReceta.idReceta);
            if (((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Count() > 0)
            {
                ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Clear();
            }

            Session["sTotalFactura"] = 0;
            //Recorrer el resultado y meterlo al datagridview
            foreach (MedDAL.DAL.recetas_partida oDetalle in oQuery)
            {
                oblDetallePartida = new MedNeg.Facturas.BlDetallePartida(
                    Convert.ToInt32(oDetalle.idProducto),
                    oDetalle.productos.Clave1,
                    oDetalle.productos.Nombre,
                    Convert.ToDecimal(oDetalle.CantidaSurtida),
                    Convert.ToDecimal(oDetalle.productos.TasaIeps),
                    Convert.ToDecimal(oDetalle.productos.tipo_iva.Iva),
                    Convert.ToDecimal(oDetalle.Precio),
                   "",
                  Convert.ToDecimal((oDetalle.Precio * oDetalle.CantidaSurtida) + oDetalle.productos.tipo_iva.Iva));

                ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Add(oblDetallePartida);
                Session["sTotalFactura"] = Convert.ToDecimal(Session["sTotalFactura"]) + Convert.ToDecimal((oDetalle.Precio * oDetalle.CantidaSurtida) + oDetalle.productos.tipo_iva.Iva);
            }

            //Hacer el binding de la data al dgvDatos
            lblTotal.Text = "TOTAL:$" + Session["sTotalFactura"].ToString();
            dgvPartidaDetalle.DataBind();

        }
Пример #7
0
        protected void Page_Load(object sender, EventArgs e)
        {
            
            Hashtable htbPermisos = (Hashtable)Session["permisos"];
            char cPermiso = 'N';

            try
            {
                #region Interfaz
                cPermiso = (char)htbPermisos["reportes"];
                Master.FindControl("btnNuevo").Visible = false;
                Master.FindControl("btnEditar").Visible = false;
                Master.FindControl("btnEliminar").Visible = false;
                Master.FindControl("btnReportes").Visible = false;
                Master.FindControl("btnMostrar").Visible = false;
                Master.FindControl("btnCancelar").Visible = false;
                Master.FindControl("btnAceptar").Visible = false;
                Master.FindControl("lblBuscar").Visible = false;

                rdbTodos = (RadioButton)Master.FindControl("rdbFiltro1");
                rdbTodos.Visible = false;
                rdbClave = (RadioButton)Master.FindControl("rdbFiltro2");
                rdbClave.Visible = false;
                rdbNombre = (RadioButton)Master.FindControl("rdbFiltro3");
                rdbNombre.Visible = false;

                btnBuscar = (Button)Master.FindControl("btnBuscar");
                btnBuscar.Visible = false;
                txbBuscar = (TextBox)Master.FindControl("txtBuscar");
                txbBuscar.Visible = false;


                lblNombreModulo = (Label)Master.FindControl("lblNombreModulo");
                lblNombreModulo.Text = "Reportes";

                /*switch (cPermiso)
                {
                    case 'T':
                        break;
                    case 'E':                    
                        break;
                    case 'L':                    
                        break;
                }*/
                #endregion

                oblFacturas = new MedNeg.Facturas.BlFacturas();
                oblRecetas = new MedNeg.Recetas.BlRecetas();
                oblPoblaciones = new MedNeg.Poblaciones.BlPoblaciones();

                if (!IsPostBack)
                {
                    Session["reporteactivo"] = 0;
                    Session["reportdocument"] = "";
                    Session["titulo"] = "";
                    Session["reporte"] = null;
                    pnlFiltroReportes.Visible = true;
                    CargarListaReportes();
                }
            }
            catch (NullReferenceException)
            {
                if (!ClientScript.IsStartupScriptRegistered("alertsession"))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(),
                        "alertsession", "alertarSesion();", true);
                }
                
                Site1 oPrincipal = (Site1)this.Master;
                oPrincipal.DeshabilitarControles(this);
                oPrincipal.DeshabilitarControles();
            }
        }