/// <summary> /// Obtiene el correo del usuario que solicito el servicio /// </summary> /// <param name="sUsuario"></param> /// <returns></returns> private string GetCorreoUsuario(string sUsuario) { userValidate = (MedDAL.DAL.usuarios)blUser.Buscar(sUsuario); if (userValidate != null) { return(userValidate.CorreoElectronico); } else { return(string.Empty); } }
/// <summary> /// Valida si el usuario existe en el sistema para autenticarlo /// </summary> /// <param name="sUsuario"></param> /// <param name="sContrasenia"></param> /// <returns></returns> public bool ValidarUsuario(string sUsuario, string sContrasenia) { userValidate = (MedDAL.DAL.usuarios)blUser.Buscar(sUsuario); if (userValidate != null) { idUsuario = userValidate.idUsuario; sNombreUsuario = userValidate.Nombre + " " + userValidate.Apellidos; string sContra = blUser.EncriptarMD5(sContrasenia); return(userValidate.Contrasena.Equals(blUser.EncriptarMD5(sContrasenia))); } else { return(false); } }
/// <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; } }
/// <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); } }