Ejemplo n.º 1
0
        protected void EditarRegistro()
        {
            int idCliente = (int)gdvDatos.SelectedValue;

            oCliente = new MedDAL.DAL.clientes();
            oCliente = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
            PoblarDatosGenerales();
            PoblarDatosContacto();
            PoblarDatosProfesionales();
            PoblarDatosOpcionales();
            if (oblCliente.EditarRegistro(oCliente))
            {
                oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
                if (oblClientesContactos.EliminarSimultaneos(idCliente) & oblClientesContactos.NuevoRegistro((List <MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"], idCliente))
                {
                    NotificarAccion(true, "Se ha editado correctamente el cliente");
                }
                else
                {
                    NotificarAccion(true, "Se ha editado correctamente el cliente, pero no se actualizaron los contactos");
                }
                RegistrarEvento("Clientes", "Editar cliente", "Se ha editado el cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                                ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc);
                ModificarControl(this.tabContainer, false, false);
            }
            else
            {
                NotificarAccion(false, "No se ha podido editar el cliente");
            }
        }
Ejemplo n.º 2
0
        protected void NuevoRegistro()
        {
            oCliente = new MedDAL.DAL.clientes();
            PoblarDatosGenerales();
            PoblarDatosContacto();
            PoblarDatosProfesionales();
            PoblarDatosOpcionales();
            //if (ValidarCliente())
            //{
            if (oblCliente.NuevoRegistro(oCliente))
            {
                NotificarAccion(true, "Se ha agregado correctamente el cliente");
                ModificarControl(this.tabContainer, true, true);
                //Session["lstContactosDB"] = new List<MedDAL.DAL.clientes_contacto>();
                //gdvContactosCliente.DataBind();
                CargarEstados(false);
                CargarCmbTipos(false);
                gdvDatos.SelectedIndex = -1;
                RegistrarEvento("Cliente", "Agregar cliente", "Se ha agregado el Cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                                ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc + "");

                oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
                if (!oblClientesContactos.NuevoRegistro((List <MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"], oCliente.idCliente))
                {
                    NotificarAccion(false, "Se ha agregado correctamente el cliente, pero no se pudieron agregar 1 o mas contactos");
                }
            }
            else
            {
                NotificarAccion(false, "No se ha podido agregar el cliente");
            }
            //}
            //else
            //    NotificarAccion(false, "Ya existe un cliente con esa clave");
        }
Ejemplo n.º 3
0
        protected void Editar()
        {
            int idCliente = (int)gdvDatos.SelectedValue;

            ModificarControl(this.tabContainer, true, true);
            oCliente                       = new MedDAL.DAL.clientes();
            oCliente                       = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
            oblClientesContactos           = new MedNeg.ClientesContactos.BlClientesContactos();
            Session["lstContactosDB"]      = oblClientesContactos.BuscarContactos(idCliente);;
            gdvContactosCliente.DataSource = ((List <MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"]);
            gdvContactosCliente.DataBind();
            LlenarDatosGenerales();
            LlenarDatosContacto();
            LlenarDatosProfesionales();
            LlenarDatosOpcionales();
        }
Ejemplo n.º 4
0
 protected void Eliminar(int idCliente)
 {
     oCliente             = new MedDAL.DAL.clientes();
     oCliente             = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
     oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
     if (oblClientesContactos.EliminarSimultaneos(idCliente))
     {
         if (oblCliente.EliminarRegistro(oCliente.idCliente))
         {
             gdvDatos.SelectedIndex = -1;
             NotificarAccion(true, "Se ha eliminado correctamente el vendedor");
             RegistrarEvento("Clientes", "Eliminar cliente", "Se ha elminado el cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                             ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc);
         }
         else
         {
             NotificarAccion(false, "No se ha podido eliminar al cliente");
         }
     }
     else
     {
         NotificarAccion(false, "No se ha podido eliminar al cliente porque aun tiene contactos asociados");
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Generacion de factura electronica
        /// </summary>
        /// <param name="iIdFactura"></param>
        /// <param name="sRutaArchivos"></param>
        /// <param name="sUsuario"></param>
        /// <param name="iIdCliente"></param>
        /// <param name="?"></param>
        /// <param name="sFolioFactura"></param>
        public int GenerarFacturaElectronica(int iIdFactura, string sRutaArchivos, string sUsuario,int iIdCliente,string sFolioFactura)
        {
            int iResultado = 0;
            //Datos de la factura
            MedNeg.Facturas.BlFacturas oblFactura = new BlFacturas();
            MedDAL.DAL.facturas oFactura = new MedDAL.DAL.facturas();

            //Datos de la factura
            oFactura = oblFactura.BuscarFactura(iIdFactura);            
            
            //Recuperar la partida de la factura
            List<MedDAL.DAL.facturas_partida> oQuery = new List<MedDAL.DAL.facturas_partida>();
            oQuery.AddRange(oblFactura.RecuperarPartidaFactura(oFactura.idFactura));
            decimal dSubtotal = 0;
            decimal dImpuestosTrasladados = 0;
            decimal dTotal = 0;

            //Recorrer el resultado de la partida para obtener el total
            foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery)
            {
                dSubtotal += oDetalle.Cantidad * oDetalle.Precio;
                dImpuestosTrasladados += (decimal)oDetalle.Iva + (decimal)oDetalle.IEPS;
            }
            //Total
            dTotal = dSubtotal + dImpuestosTrasladados;

            DateTime dtFechaTest = DateTime.Now;
            string sNumeroCertificado = "";
            string sA, sB, sC;

            //Leer archivo de configuracion
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion();

            odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivos+"/Configuracion.xml");
            
            //Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Certificados/aaa010101aaa_csd_06.cer", out sA, out sB, out sC, out sNumeroCertificado);
            Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Facturacion/"+odalConfiguracion.sRutaCertificado, out sA, out sB, out sC, out sNumeroCertificado);

            //Establecer el numero de cuenta
            string sNumeroCuenta = null;
            if (oFactura.metodo_pago.MetodoPago.Equals("depósito en cuenta", StringComparison.InvariantCultureIgnoreCase) ||
                oFactura.metodo_pago.MetodoPago.Equals("traspaso", StringComparison.InvariantCultureIgnoreCase))
            {
                sNumeroCuenta = oFactura.NumeroCuentaPago;
            }
            

            //Debo validar la vigencia del certificado con sa <= FechaEmision <= sB

            #region generarcomprobante

            //Construir objeto factura
            Comprobante.ComprobanteFiscalDigital oComprobanteFiscalDigital = new Comprobante.ComprobanteFiscalDigital(
                   "", //Serie 
                   sFolioFactura, //Folio 
                   dtFechaTest.ToString("yyyy-MM-ddThh:mm:ss"), //Fecha
                   oFactura.tipo_forma_pago.FormaPago, //FormaDePago
                   sNumeroCertificado, //NoCertificado
                   "",//"Condiciones de pago",
                   dSubtotal.ToString(), //SubTotal
                   "0",//Descuento
                   "",//Motivo del descuento
                   dTotal.ToString(), //Total
                   oFactura.metodo_pago.MetodoPago, //Metodo de pago
                   "Ingreso", //Tipo de comprobante
                   null, //noAprobacion
                   null, //anoAprobacion
                   "3.2", //version
                   null,//TipoCambio
                   null, //Moneda
                   odalConfiguracion.sEstado + "," + odalConfiguracion.sMunicipio, //LugarExpedicion
                   sNumeroCuenta //NumCtaPago
                   );

            //Pendiente la parte de pagos parciales

            //Empresa o razon social y direccion fiscal
            Comprobante.t_Emisor Emisor = new Comprobante.t_Emisor(
                odalConfiguracion.sRfc,
                    odalConfiguracion.sRazonSocial,
                    odalConfiguracion.sDomicilio, //Calle
                    "", //No exterior
                    "", //No interior
                    "", //Colonia
                    "", //Localidad
                    "",//Emisor Referencia
                    odalConfiguracion.sMunicipio,
                    odalConfiguracion.sEstado,
                    odalConfiguracion.sPais,
                    odalConfiguracion.sCodigoPostal
                );

            Emisor.addRegimenFiscal(odalConfiguracion.sRegimenFiscal);

            oComprobanteFiscalDigital.setEmisor(Emisor);

            //Establece la expedición de la factura, se toman lo datos del almacen
            MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();
            MedNeg.Usuarios.BlUsuarios oblUsuario = new Usuarios.BlUsuarios();
            oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(sUsuario);

            oComprobanteFiscalDigital.setExpedicion(
                    oUsuario.almacenes.Calle.ToString(),//Calle
                    oUsuario.almacenes.NumeroExt.ToString(),//NoExt
                    "", //NoInt
                    oUsuario.almacenes.colonias.Nombre, //Colonia
                    oUsuario.almacenes.poblaciones.Nombre.ToString(), //Población
                    "",//Emisor Referencia Expedicion
                    oUsuario.almacenes.municipios.Nombre.ToString(),//Municipio
                    oUsuario.almacenes.estados.Nombre.ToString(),//Estado
                    oUsuario.almacenes.Pais.ToString(),//Pais
                    oUsuario.almacenes.CodigoPostal.ToString());//CP

            //Establecer los datos del cliente
            MedDAL.DAL.clientes oCliente = new MedDAL.DAL.clientes();
            MedNeg.BlClientes.BlClientes oblClientes = new BlClientes.BlClientes();
            oCliente = oblClientes.BuscarCliente(iIdCliente);

            oComprobanteFiscalDigital.setReceptor(
                oCliente.Rfc.ToString(), //RFC
                oCliente.Nombre.ToString() + " " + oCliente.Apellidos.ToString(), //Nombre
                oCliente.Calle.ToString(), //Calle
                oCliente.NumeroExt.ToString(), //No ext
                oCliente.NumeroInt.ToString(),//No int
                oCliente.colonias.Nombre.ToString(),//Colo
                oCliente.poblaciones.Nombre.ToString(),//Ciudad
                "",//ReferenciaReceptor
                oCliente.municipios.Nombre.ToString(),//Municipio
                oCliente.estados.Nombre.ToString(),//Estado
                "Mexico",//Pais
                oCliente.CodigoPostal.ToString() //Codigo postal
                );


            //Recorrer el resultado de la partida para obtener el total
            foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery)
            {
                string Cantidad, Codigo, Descripcion, Unidad, PrecioUnitario, Importe, ImporteNeto;
                
                decimal dImporte=0;
                Cantidad = oDetalle.Cantidad.ToString();
                //Codigo = oDetalle.productos.Clave1.ToString();
                //Descripcion = oDetalle.productos.Nombre.ToString();
                //0087 Identificar si es un producto o un ensamble
                if (oDetalle.idEnsamble.Equals(null))
                {
                    //Datos del producto
                    Codigo = oDetalle.productos.Clave1.ToString();
                }
                else
                {
                    //Datos del ensamble
                    Codigo = oDetalle.ensamble.ClaveBom.ToString();
                }
                
                Descripcion = oDetalle.Descripcion.ToString();
                Unidad = oDetalle.productos.UnidadMedida;
                PrecioUnitario = oDetalle.Precio.ToString();
                dImporte=oDetalle.Cantidad * oDetalle.Precio;
                Importe = dImporte.ToString();
                

                Comprobante.Concepto C = new Comprobante.Concepto(
                    Cantidad,
                    Unidad, 
                    Codigo, 
                    Descripcion, 
                    PrecioUnitario, 
                    Importe);
                oComprobanteFiscalDigital.addConcepto(C);//aqui agregas el elemento a la partida

            }



            #endregion

            //Commpruebo que sea válido
            if (oComprobanteFiscalDigital.Valido() == true)
            {
                string sCadenaOriginal = oComprobanteFiscalDigital.CadenaOriginal();
                oComprobanteFiscalDigital.Sellar(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaLlave.ToString(), sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado.ToString(), odalConfiguracion.sContraseña.ToString());
                oComprobanteFiscalDigital.XML().Save(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml");
                //return a.XML();
                /*
                 * Modificaciones de POJO: 1 de Noviembre 2011 : Agregando el webservice para timbrado, guardaré los archivos en /Facturacion/Timbrados/
                 */
                FacturaService.TimbradoClient svcT = new FacturaService.TimbradoClient();
                FacturaService.RespuestaCFDi RespuestaCFDi = new FacturaService.RespuestaCFDi();
                
                //Aquí, cambiar la funcion a svcT.Timbrar cuando vayan a mostrarlo en producción, de otra manera, no serán válidos los cfdi's que emitan.
                try
                {
                    byte [] aArchivo = File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml");
                    RespuestaCFDi = svcT.Timbrar("pojo", "a", aArchivo);                    
                    File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml", RespuestaCFDi.Documento);
                    RespuestaCFDi = svcT.PDF("pojo", "a", File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml"), null);
                    File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".pdf", RespuestaCFDi.Documento);
                    return 0;
                }
                catch (System.Net.WebException ex)
                {
                    //Sale cuando no encuentra al server
                    return 1;
                }
                catch (System.Web.Services.Protocols.SoapHeaderException ex)
                {

                    return 3;
                }
                catch (Exception ex)
                {
                    //Para excepciones no conocidas
                    return 4;
                }
                /*
                 * Falta: Revisar errores con PAC (¿Cómo los regresas? ¿Qué pasa si algo está mal? ¿el xml fue correctamente construido?¿Una función nueva?)
                 */
            }
            else
            {
                //Sale cuando el certificado no es valido
                return 2;
            }
        }
Ejemplo n.º 6
0
 protected void Editar()
 {
     int idCliente = (int)gdvDatos.SelectedValue;
     ModificarControl(this.tabContainer, true, true);
     oCliente = new MedDAL.DAL.clientes();
     oCliente = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
     oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
     Session["lstContactosDB"] = oblClientesContactos.BuscarContactos(idCliente); ;
     gdvContactosCliente.DataSource = ((List<MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"]);
     gdvContactosCliente.DataBind();
     LlenarDatosGenerales();
     LlenarDatosContacto();
     LlenarDatosProfesionales();
     LlenarDatosOpcionales();
 }
Ejemplo n.º 7
0
 protected void EditarRegistro()
 {
     int idCliente = (int)gdvDatos.SelectedValue;
     oCliente = new MedDAL.DAL.clientes();
     oCliente = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
     PoblarDatosGenerales();
     PoblarDatosContacto();
     PoblarDatosProfesionales();
     PoblarDatosOpcionales();
     if (oblCliente.EditarRegistro(oCliente))
     {
         oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
         if (oblClientesContactos.EliminarSimultaneos(idCliente)&oblClientesContactos.NuevoRegistro((List<MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"],idCliente))
             NotificarAccion(true, "Se ha editado correctamente el cliente");    
         else
             NotificarAccion(true, "Se ha editado correctamente el cliente, pero no se actualizaron los contactos");
         RegistrarEvento("Clientes", "Editar cliente", "Se ha editado el cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                 ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc);
         ModificarControl(this.tabContainer, false, false);
     }
     else
         NotificarAccion(false, "No se ha podido editar el cliente");
 }
Ejemplo n.º 8
0
 protected void Eliminar(int idCliente)
 {
     oCliente = new MedDAL.DAL.clientes();
     oCliente = (MedDAL.DAL.clientes)oblCliente.BuscarCliente(idCliente);
     oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
     if (oblClientesContactos.EliminarSimultaneos(idCliente))
     {
         if (oblCliente.EliminarRegistro(oCliente.idCliente))
         {
             gdvDatos.SelectedIndex = -1;
             NotificarAccion(true, "Se ha eliminado correctamente el vendedor");
             RegistrarEvento("Clientes", "Eliminar cliente", "Se ha elminado el cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                 ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc);
         }
         else
             NotificarAccion(false, "No se ha podido eliminar al cliente");
     }
     else
         NotificarAccion(false, "No se ha podido eliminar al cliente porque aun tiene contactos asociados");
 }
Ejemplo n.º 9
0
        protected void NuevoRegistro()
        {
            oCliente = new MedDAL.DAL.clientes();
            PoblarDatosGenerales();
            PoblarDatosContacto();
            PoblarDatosProfesionales();
            PoblarDatosOpcionales();
            //if (ValidarCliente())
            //{
                if (oblCliente.NuevoRegistro(oCliente))
                {
                    NotificarAccion(true, "Se ha agregado correctamente el cliente");
                    ModificarControl(this.tabContainer, true, true);
                    //Session["lstContactosDB"] = new List<MedDAL.DAL.clientes_contacto>();
                    //gdvContactosCliente.DataBind();
                    CargarEstados(false);
                    CargarCmbTipos(false);
                    gdvDatos.SelectedIndex = -1;
                    RegistrarEvento("Cliente", "Agregar cliente", "Se ha agregado el Cliente " + oCliente.idCliente + ": " + oCliente.Nombre + " " + oCliente.Apellidos +
                        ", Clave: " + oCliente.Clave1 + ", Correo electronico:" + oCliente.CorreoElectronico + ", RFC: " + oCliente.Rfc + "");

                    oblClientesContactos = new MedNeg.ClientesContactos.BlClientesContactos();
                    if (!oblClientesContactos.NuevoRegistro((List<MedDAL.DAL.clientes_contacto>)Session["lstContactosDB"], oCliente.idCliente))
                        NotificarAccion(false, "Se ha agregado correctamente el cliente, pero no se pudieron agregar 1 o mas contactos");
                }
                else
                    NotificarAccion(false, "No se ha podido agregar el cliente");
            //}
            //else
            //    NotificarAccion(false, "Ya existe un cliente con esa clave");
        }
Ejemplo n.º 10
0
        /// <summary>
        ///Cargar los datos del cliente
        /// </summary>
        /// <param name="sNombre"></param>
        private void CargaDatosCliente(string sNombre)
        {
            MedDAL.DAL.clientes oCliente = new MedDAL.DAL.clientes();
            MedNeg.BlClientes.BlClientes oblCliente = new MedNeg.BlClientes.BlClientes();

            oCliente = oblCliente.BuscarPorClave(sNombre.Substring(0, sNombre.IndexOf(" ")));

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

                txbPoblacion.Text = oCliente.poblaciones.Nombre.ToString() + ", " + oCliente.municipios.Nombre.ToString() +
                       ", " + oCliente.estados.Nombre.ToString();

                Session["sIdCliente"] = oCliente.idCliente;
                
            }
            catch
            {
                txbCliente.Focus();
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 ///  BL - Registrar un cliente nuevo
 /// </summary>
 /// <param name="ocliente">cliente a registrar</param>
 /// <returns></returns>
 public bool NuevoRegistro(MedDAL.DAL.clientes oCliente)
 {
     return(odalClientes.NuevoRegistro(oCliente));
 }
Ejemplo n.º 12
0
 /// <summary>
 /// BL - Editar un cliente
 /// </summary>
 /// <param name="ocliente">cliente a editar</param>
 /// <returns></returns>
 public bool EditarRegistro(MedDAL.DAL.clientes oCliente)
 {
     return(odalClientes.EditarRegistro(oCliente));
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Generacion de factura electronica
        /// </summary>
        /// <param name="iIdFactura"></param>
        /// <param name="sRutaArchivos"></param>
        /// <param name="sUsuario"></param>
        /// <param name="iIdCliente"></param>
        /// <param name="?"></param>
        /// <param name="sFolioFactura"></param>
        public int GenerarFacturaElectronica(int iIdFactura, string sRutaArchivos, string sUsuario, int iIdCliente, string sFolioFactura)
        {
            int iResultado = 0;

            //Datos de la factura
            MedNeg.Facturas.BlFacturas oblFactura = new BlFacturas();
            MedDAL.DAL.facturas        oFactura   = new MedDAL.DAL.facturas();

            //Datos de la factura
            oFactura = oblFactura.BuscarFactura(iIdFactura);

            //Recuperar la partida de la factura
            List <MedDAL.DAL.facturas_partida> oQuery = new List <MedDAL.DAL.facturas_partida>();

            oQuery.AddRange(oblFactura.RecuperarPartidaFactura(oFactura.idFactura));
            decimal dSubtotal             = 0;
            decimal dImpuestosTrasladados = 0;
            decimal dTotal = 0;

            //Recorrer el resultado de la partida para obtener el total
            foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery)
            {
                dSubtotal             += oDetalle.Cantidad * oDetalle.Precio;
                dImpuestosTrasladados += (decimal)oDetalle.Iva + (decimal)oDetalle.IEPS;
            }
            //Total
            dTotal = dSubtotal + dImpuestosTrasladados;

            DateTime dtFechaTest = DateTime.Now;
            string   sNumeroCertificado = "";
            string   sA, sB, sC;

            //Leer archivo de configuracion
            MedNeg.Configuracion.BlConfiguracion  oblConfiguracion  = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion();

            odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivos + "/Configuracion.xml");

            //Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Certificados/aaa010101aaa_csd_06.cer", out sA, out sB, out sC, out sNumeroCertificado);
            Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado, out sA, out sB, out sC, out sNumeroCertificado);

            //Establecer el numero de cuenta
            string sNumeroCuenta = null;

            if (oFactura.metodo_pago.MetodoPago.Equals("depósito en cuenta", StringComparison.InvariantCultureIgnoreCase) ||
                oFactura.metodo_pago.MetodoPago.Equals("traspaso", StringComparison.InvariantCultureIgnoreCase))
            {
                sNumeroCuenta = oFactura.NumeroCuentaPago;
            }


            //Debo validar la vigencia del certificado con sa <= FechaEmision <= sB

            #region generarcomprobante

            //Construir objeto factura
            Comprobante.ComprobanteFiscalDigital oComprobanteFiscalDigital = new Comprobante.ComprobanteFiscalDigital(
                "",                                                             //Serie
                sFolioFactura,                                                  //Folio
                dtFechaTest.ToString("yyyy-MM-ddThh:mm:ss"),                    //Fecha
                oFactura.tipo_forma_pago.FormaPago,                             //FormaDePago
                sNumeroCertificado,                                             //NoCertificado
                "",                                                             //"Condiciones de pago",
                dSubtotal.ToString(),                                           //SubTotal
                "0",                                                            //Descuento
                "",                                                             //Motivo del descuento
                dTotal.ToString(),                                              //Total
                oFactura.metodo_pago.MetodoPago,                                //Metodo de pago
                "Ingreso",                                                      //Tipo de comprobante
                null,                                                           //noAprobacion
                null,                                                           //anoAprobacion
                "3.2",                                                          //version
                null,                                                           //TipoCambio
                null,                                                           //Moneda
                odalConfiguracion.sEstado + "," + odalConfiguracion.sMunicipio, //LugarExpedicion
                sNumeroCuenta                                                   //NumCtaPago
                );

            //Pendiente la parte de pagos parciales

            //Empresa o razon social y direccion fiscal
            Comprobante.t_Emisor Emisor = new Comprobante.t_Emisor(
                odalConfiguracion.sRfc,
                odalConfiguracion.sRazonSocial,
                odalConfiguracion.sDomicilio, //Calle
                "",                           //No exterior
                "",                           //No interior
                "",                           //Colonia
                "",                           //Localidad
                "",                           //Emisor Referencia
                odalConfiguracion.sMunicipio,
                odalConfiguracion.sEstado,
                odalConfiguracion.sPais,
                odalConfiguracion.sCodigoPostal
                );

            Emisor.addRegimenFiscal(odalConfiguracion.sRegimenFiscal);

            oComprobanteFiscalDigital.setEmisor(Emisor);

            //Establece la expedición de la factura, se toman lo datos del almacen
            MedDAL.DAL.usuarios        oUsuario   = new MedDAL.DAL.usuarios();
            MedNeg.Usuarios.BlUsuarios oblUsuario = new Usuarios.BlUsuarios();
            oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(sUsuario);

            oComprobanteFiscalDigital.setExpedicion(
                oUsuario.almacenes.Calle.ToString(),              //Calle
                oUsuario.almacenes.NumeroExt.ToString(),          //NoExt
                "",                                               //NoInt
                oUsuario.almacenes.colonias.Nombre,               //Colonia
                oUsuario.almacenes.poblaciones.Nombre.ToString(), //Población
                "",                                               //Emisor Referencia Expedicion
                oUsuario.almacenes.municipios.Nombre.ToString(),  //Municipio
                oUsuario.almacenes.estados.Nombre.ToString(),     //Estado
                oUsuario.almacenes.Pais.ToString(),               //Pais
                oUsuario.almacenes.CodigoPostal.ToString());      //CP

            //Establecer los datos del cliente
            MedDAL.DAL.clientes          oCliente    = new MedDAL.DAL.clientes();
            MedNeg.BlClientes.BlClientes oblClientes = new BlClientes.BlClientes();
            oCliente = oblClientes.BuscarCliente(iIdCliente);

            oComprobanteFiscalDigital.setReceptor(
                oCliente.Rfc.ToString(),                                          //RFC
                oCliente.Nombre.ToString() + " " + oCliente.Apellidos.ToString(), //Nombre
                oCliente.Calle.ToString(),                                        //Calle
                oCliente.NumeroExt.ToString(),                                    //No ext
                oCliente.NumeroInt.ToString(),                                    //No int
                oCliente.colonias.Nombre.ToString(),                              //Colo
                oCliente.poblaciones.Nombre.ToString(),                           //Ciudad
                "",                                                               //ReferenciaReceptor
                oCliente.municipios.Nombre.ToString(),                            //Municipio
                oCliente.estados.Nombre.ToString(),                               //Estado
                "Mexico",                                                         //Pais
                oCliente.CodigoPostal.ToString()                                  //Codigo postal
                );


            //Recorrer el resultado de la partida para obtener el total
            foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery)
            {
                string Cantidad, Codigo, Descripcion, Unidad, PrecioUnitario, Importe, ImporteNeto;

                decimal dImporte = 0;
                Cantidad = oDetalle.Cantidad.ToString();
                //Codigo = oDetalle.productos.Clave1.ToString();
                //Descripcion = oDetalle.productos.Nombre.ToString();
                //0087 Identificar si es un producto o un ensamble
                if (oDetalle.idEnsamble.Equals(null))
                {
                    //Datos del producto
                    Codigo = oDetalle.productos.Clave1.ToString();
                }
                else
                {
                    //Datos del ensamble
                    Codigo = oDetalle.ensamble.ClaveBom.ToString();
                }

                Descripcion    = oDetalle.Descripcion.ToString();
                Unidad         = oDetalle.productos.UnidadMedida;
                PrecioUnitario = oDetalle.Precio.ToString();
                dImporte       = oDetalle.Cantidad * oDetalle.Precio;
                Importe        = dImporte.ToString();


                Comprobante.Concepto C = new Comprobante.Concepto(
                    Cantidad,
                    Unidad,
                    Codigo,
                    Descripcion,
                    PrecioUnitario,
                    Importe);
                oComprobanteFiscalDigital.addConcepto(C);//aqui agregas el elemento a la partida
            }



            #endregion

            //Commpruebo que sea válido
            if (oComprobanteFiscalDigital.Valido() == true)
            {
                string sCadenaOriginal = oComprobanteFiscalDigital.CadenaOriginal();
                oComprobanteFiscalDigital.Sellar(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaLlave.ToString(), sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado.ToString(), odalConfiguracion.sContraseña.ToString());
                oComprobanteFiscalDigital.XML().Save(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml");
                //return a.XML();

                /*
                 * Modificaciones de POJO: 1 de Noviembre 2011 : Agregando el webservice para timbrado, guardaré los archivos en /Facturacion/Timbrados/
                 */
                FacturaService.TimbradoClient svcT          = new FacturaService.TimbradoClient();
                FacturaService.RespuestaCFDi  RespuestaCFDi = new FacturaService.RespuestaCFDi();

                //Aquí, cambiar la funcion a svcT.Timbrar cuando vayan a mostrarlo en producción, de otra manera, no serán válidos los cfdi's que emitan.
                try
                {
                    byte [] aArchivo = File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml");
                    RespuestaCFDi = svcT.Timbrar("pojo", "a", aArchivo);
                    File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml", RespuestaCFDi.Documento);
                    RespuestaCFDi = svcT.PDF("pojo", "a", File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml"), null);
                    File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".pdf", RespuestaCFDi.Documento);
                    return(0);
                }
                catch (System.Net.WebException ex)
                {
                    //Sale cuando no encuentra al server
                    return(1);
                }
                catch (System.Web.Services.Protocols.SoapHeaderException ex)
                {
                    return(3);
                }
                catch (Exception ex)
                {
                    //Para excepciones no conocidas
                    return(4);
                }

                /*
                 * Falta: Revisar errores con PAC (¿Cómo los regresas? ¿Qué pasa si algo está mal? ¿el xml fue correctamente construido?¿Una función nueva?)
                 */
            }
            else
            {
                //Sale cuando el certificado no es valido
                return(2);
            }
        }