private static void lfEmailQuienFactura(string sNombreDB, int iNumeroPersona, int iNumeroEmpresa, List<string> listaContactos, List<string> listaArchivos, string sArchivo, string sReceptorNombre, string sReceptorRFC, string sEmisorNombre, string sEmisorRFC, string sSerieFolio, string sTipoComprobante, string sTotal) { DataTable dt = new DataTable(); string sParametros = string.Concat(sNombreDB, "|", iNumeroPersona, "|", iNumeroEmpresa, "|", (listaContactos.Count > 0 ? listaContactos[0] : ""), "|", sArchivo, "|", sReceptorNombre, "|", sReceptorRFC, "|", sEmisorNombre, "|", sEmisorRFC, "|", sSerieFolio, "|", sTipoComprobante, "|", sTotal); string sQuery = string.Concat("USE [" + sNombreDB + "] SELECT ISNULL(Correo_Electronico,0) FROM Persona WHERE Numero = ", iNumeroPersona.ToString(), " AND Numero_Empresa = ", iNumeroEmpresa.ToString(), ""); SQLConection context = new SQLConection(); dt = context.ExecuteQuery(sQuery); if (dt != null) { if (dt.Rows[0][0].ToString() != "0") { foreach (DataRow item in dt.Rows) listaContactos.Add(item[0].ToString()); listaArchivos.Add(@sArchivo); listaArchivos.Add(@sArchivo.Replace(".xml", ".pdf")); gfEmailSend(sNombreDB, listaContactos, listaArchivos, iNumeroEmpresa, sReceptorNombre, sReceptorRFC, sEmisorNombre, sEmisorRFC, sSerieFolio, sTipoComprobante, sTotal); } } else { BitacoraController.gfLogFacturaRegistroError("EnvioAlterno", sNombreDB, sParametros); FacturaController.gfEmailSend("Facturación la persona " + iNumeroPersona + " Empresa " + iNumeroEmpresa + "No tiene email o contactos " + sParametros, FacturaController.listaContactosIncidenciaEmail, "Notificación de Facturación", listaArchivos); } }
/// <summary> /// Función que envia correos electronicos acorde al cliente y empresa /// </summary> /// <param name="iNumeroPersona"></param> /// <param name="iNumeroPersona"></param> /// <param name="iNumeroEmpresa"></param> /// <param name="sArchivo"></param> /// <param name="sAquien"></param> /// <param name="iNumeroFactura"></param> /// <param name="iTipoFacturaNotaCredito"></param> /// <param name="sReceptorNombre"></param> /// <param name="sReceptorRFC"></param> /// <param name="sEmisorNombre"></param> /// <param name="sEmisorRFC"></param> /// <param name="sSerieFolio"></param> /// <param name="sTipoComprobante"></param> /// <param name="sTotal"></param> /// <returns></returns> public static int gfDatosCorreoCliente(string sNombreDB, int iNumeroPersona, int iNumeroEmpresa, string sArchivo, string sAquien, int iNumeroFactura, int iTipoFacturaNotaCredito, string sReceptorNombre, string sReceptorRFC, string sEmisorNombre, string sEmisorRFC, string sSerieFolio, string sTipoComprobante, string sTotal) { List<string> listaContactos = new List<string>(); List<string> listaArchivos = new List<string>(); int iRespuesta = -1; DataTable dt = new DataTable(); SQLConection context = new SQLConection(); string sMensajeEmail = string.Empty; try { if (System.Text.RegularExpressions.Regex.IsMatch(sAquien, "CONTACTOS")) { string sQuery = string.Empty; if (iTipoFacturaNotaCredito == 0) { sQuery = string.Concat(" USE [" + sNombreDB + "] SELECT P.CORREO_ELECTRONICO ", " FROM CONTACTO AS C ", " JOIN PERSONA AS P ", " ON C.NUMERO_CONTACTO_PERSONA = P.NUMERO ", " WHERE C.ENVIO_MAIL = 1 ", " AND C.EMPRESA = ", iNumeroEmpresa.ToString(), " ", " AND C.NUMERO_CLIENTE IN ( SELECT NUMERO_CLIENTE FROM FACTURA ", " WHERE NUMERO = ", iNumeroFactura.ToString(), " AND NUMERO_EMPRESA = ", iNumeroEmpresa.ToString(), ") "); } else { sQuery = string.Concat(" USE [" + sNombreDB + "] SELECT P.CORREO_ELECTRONICO ", " FROM CONTACTO AS C ", " JOIN PERSONA AS P ", " ON C.NUMERO_CONTACTO_PERSONA = P.NUMERO ", " WHERE C.ENVIO_MAIL = 1 ", " AND C.EMPRESA = ", iNumeroEmpresa.ToString(), " ", " AND C.NUMERO_CLIENTE IN ( SELECT NUMERO_CLIENTE FROM NOTA_CREDITO ", " WHERE NUMERO = ", iNumeroFactura.ToString(), " ", " AND NUMERO_EMPRESA = ", iNumeroEmpresa.ToString(), ") "); } dt = context.ExecuteQuery(sQuery); listaArchivos.Add(@sArchivo); listaArchivos.Add(@sArchivo.Replace(".xml", ".pdf")); if (dt.Rows.Count >= 1) { foreach (DataRow item in dt.Rows) listaContactos.Add(item[0].ToString()); } else { listaContactos.Clear(); lfEmailQuienFactura(sNombreDB, iNumeroPersona, iNumeroEmpresa, listaContactos, listaArchivos, @sArchivo, sReceptorNombre, sReceptorRFC, sEmisorNombre, sEmisorRFC, sSerieFolio, sTipoComprobante, sTotal); } gfEmailSend(sNombreDB, listaContactos, listaArchivos, iNumeroEmpresa, sReceptorNombre, sReceptorRFC, sEmisorNombre, sEmisorRFC, sSerieFolio, sTipoComprobante, sTotal); iRespuesta = 1; } else lfEmailQuienFactura(sNombreDB, iNumeroPersona, iNumeroEmpresa, listaContactos, listaArchivos, @sArchivo, sReceptorNombre, sReceptorRFC, sEmisorNombre, sEmisorRFC, sSerieFolio, sTipoComprobante, sTotal); } catch (Exception ex) { FacturaController.gfEmailSend("gfDatosCorreoCliente |" + ex.Message + "BaseDatos:" + sNombreDB + "|NumeroEmpresa:" + iNumeroEmpresa + "|NumeroFactura:" + iNumeroFactura, FacturaController.listaContactosIncidenciaEmail, "INCIDENCIA " + ex.Message); iRespuesta = -1; } return iRespuesta; }
/// <summary> /// /// </summary> /// <param name="listaContactos"></param> /// <param name="listaAdjuntos"></param> /// <param name="iNumeroEmpresa"></param> /// <param name="sReceptorNombre"></param> /// <param name="sReceptorRFC"></param> /// <param name="sEmisorNombre"></param> /// <param name="sEmisorRFC"></param> /// <param name="sSerieFolio"></param> /// <param name="sTipoComprobante"></param> /// <param name="sTotal"></param> private static void gfEmailSend(string sNombreDB, List<string> listaContactos, List<string> listaAdjuntos, int iNumeroEmpresa, string sReceptorNombre, string sReceptorRFC, string sEmisorNombre, string sEmisorRFC, string sSerieFolio, string sTipoComprobante, string sTotal) { string strMsg = string.Empty; string sQuery = string.Empty; DataTable dt = new DataTable(); try { sQuery = string.Concat(" USE [" + sNombreDB + "] SELECT Servidor,Puerto,Mail,Contraseña,Ssl", " FROM Empresa ", " WHERE Numero = " + iNumeroEmpresa.ToString() + ""); SQLConection context = new SQLConection(); dt = context.ExecuteQuery(sQuery); //Servidor var EmailloginInfo = new NetworkCredential(dt.Rows[0]["Mail"].ToString(), dt.Rows[0]["Contraseña"].ToString()); var Emailmsg = new System.Net.Mail.MailMessage(); var EmailsmtpClient = new SmtpClient(dt.Rows[0]["Servidor"].ToString(), int.Parse(dt.Rows[0]["Puerto"].ToString())); Emailmsg.From = new MailAddress(dt.Rows[0]["Mail"].ToString()); foreach (string contacto in listaContactos) Emailmsg.To.Add(new MailAddress(contacto)); foreach (string adjunto in listaAdjuntos) { Attachment aadjunto = new Attachment(@adjunto); Emailmsg.Attachments.Add(@aadjunto); } Emailmsg.Subject = "Notificación de Facturación"; Emailmsg.IsBodyHtml = true; if (dt.Rows[0]["Mail"].ToString().ToUpper().Trim() == "*****@*****.**") { strMsg = string.Concat("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'><html><head><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'><title>KONEXUS </title></head><body><table cellpadding='0' cellspacing='0' border='0' style='font-size:12px; font-family: Arial; line-height: 17px;' width='600'><tr><td width='50%' style='background-color: #874340; padding:10px;'><span style='color: #fff; font-size: 15px; font-weight: bold;'>", sReceptorNombre, "</span><br/><span style='color:#fff' >", sReceptorRFC, "</span></td><td align='right' style='background-color:#f1f1f1; padding: 10px; font-size: 15px; font-weight: ", "bold; color: #000'>KONEXUS</td></tr><tr><td colspan='2' height='5' style='line-height: 5px; font-size: 5px;'> </td></tr><tr><td colspan='2' style='padding: 10px; background-color: #ededed'> Le notificamos que ", sEmisorNombre, " (", sEmisorRFC, ") emitio para usted un Comprobante Fiscal Digital por Internet (CFDI) con las siguientes caracteristicas <br/> <br/> •Serie y Folio: ", sSerieFolio, "<br/> •", "Fecha de Emision: ", DateTime.Now.ToShortDateString(), "<br/> •Tipo de Comprobante: ", sTipoComprobante, " <br/> •Monto Total: ", sTotal, "<br/> <br/> <h4>Favor de consultar los archivos adjuntos.</h4></td></tr><tr><td width='580' style='font-size:8px; font-family:Verdana; color:#959595; line-height: 10px; padding-bottom: 10px;' colspan='2'><p style='margin: 0px; padding-top: 10px;'><span style='font-size:10px;'>KONEXUS MX SA DE CV • TODOS LOS DERECHOS RESERVADOS • (55)5025.8895 • [email protected] •</span><br/><br/>Este mensaje está dirigido exclusivamente a las personas que tienen las direcciones de correo electrónico especificadas en los destinatarios dentro de su encabezado. Si por error usted ha recibido este mensaje, por ningún motivo debe revelar su contenido, copiarlo, distribuirlo o utilizarlo. Le solicitamos por favor comunique del error a la dirección de correo electrónico remitente y elimine dicho mensaje junto con cualquier documento adjunto que pudiera contener. Los derechos de privacidad y confidencialidad de la información en este mensaje no deben perderse por el hecho de haberse trasmitido erróneamente o por causas de interferencias en el funcionamiento de los sistemas de correo y canales de comunicación. En consideración a que los mensajes enviados de manera electrónica pueden ser interceptados y manipulados, la empresa y las entidades que lo integran no se hacen responsables si los mensajes llegan con demora, incompletos, eliminados o con algún programa malicioso denominado como virus informático. </p></td></tr></table></body></html>"); } else { strMsg = string.Concat("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'><html><head><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'><title>INTEGRASOFTWARE</title></head><body><table cellpadding='0' cellspacing='0' border='0' style='font-size:12px; font-family: Arial; line-height: 17px;' width='600'><tr><td width='50%' style='background-color: #28487a; padding:10px;'><span style='color: #fff; font-size: 15px; font-weight: bold;'>", sReceptorNombre, "</span><br/><span style='color:#fff' >", sReceptorRFC, "</span></td><td align='right' style='background-color:#f1f1f1; padding: 10px; font-size: 15px; font-weight: bold; color: #000'>INTEGRASOFTWARE</td></tr><tr><td colspan='2' height='5' style='line-height: 5px; font-size: 5px;'> </td></tr><tr><td colspan='2' style='padding: 10px; background-color: #ededed'> Le notificamos que ", sEmisorNombre, " (", sEmisorRFC, ") emitio para usted un Comprobante Fiscal Digital por Internet (CFDI) con las siguientes caracteristicas <br/> <br/> •Serie y Folio: ", sSerieFolio, "<br/> •", "Fecha de Emision: ", DateTime.Now.ToShortDateString(), "<br/> •Tipo de Comprobante: ", sTipoComprobante, " <br/> •Monto Total: ", sTotal, "<br/> <br/> <h4>Favor de consultar los archivos adjuntos.</h4></td></tr><tr><td width='580' style='font-size:8px; font-family:Verdana; color:#959595; line-height: 10px; padding-bottom: 10px;' colspan='2'><p style='margin: 0px; padding-top: 10px;'><span style='font-size:10px;'>", "Integra ERP Mexico D.F • TODOS LOS DERECHOS RESERVADOS • (55) 5207 3799 • [email protected] •</span><br/><br/>Este mensaje está dirigido exclusivamente a las personas que tienen las direcciones de correo electrónico especificadas en los destinatarios dentro de su encabezado. Si por error usted ha recibido este mensaje, por ningún motivo debe revelar su contenido, copiarlo, distribuirlo o utilizarlo. Le solicitamos por favor comunique del error a la dirección de correo electrónico remitente y elimine dicho mensaje junto con cualquier documento adjunto que pudiera contener. Los derechos de privacidad y confidencialidad de la información en este mensaje no deben perderse por el hecho de haberse trasmitido erróneamente o por causas de interferencias en el funcionamiento de los sistemas de correo y canales de comunicación. En consideración a que los mensajes enviados de manera electrónica pueden ser interceptados y manipulados, la empresa y las entidades que lo integran no se hacen responsables si los mensajes llegan con demora, incompletos, eliminados o con algún programa malicioso denominado como virus informático. </p></td></tr></table></body></html>"); } Emailmsg.Body = strMsg; EmailsmtpClient.EnableSsl = false; EmailsmtpClient.UseDefaultCredentials = false; EmailsmtpClient.Credentials = EmailloginInfo; EmailsmtpClient.Send(Emailmsg); } catch (Exception ex) { strMsg = strMsg.Replace("000'>KONEXUS</td>", "000'>FACTURACION ELECTRONICA </td>"); strMsg = strMsg.Replace("000'>INTEGRASOFTWARE</td>", "000'>FACTURACION ELECTRONICA </td>"); strMsg = strMsg.Replace("background-color: #28487a", "background-color: #00b6c1"); strMsg = strMsg.Replace("background-color: #874340", "background-color: #00b6c1"); strMsg = strMsg.Replace("KONEXUS MX SA DE CV • TODOS LOS DERECHOS RESERVADOS • (55)5025.8895 • [email protected] •", "• TODOS LOS DERECHOS RESERVADOS •"); strMsg = strMsg.Replace("Integra ERP Mexico D.F • TODOS LOS DERECHOS RESERVADOS • (55) 5207 3799 • [email protected] •", "• TODOS LOS DERECHOS RESERVADOS •"); BitacoraController.gfLogFacturaRegistroError("EnvioAlterno", sNombreDB, iNumeroEmpresa.ToString() + "|" + ex.Message); FacturaController.gfEmailSend(strMsg, listaContactos, "Notificación de Facturación", listaAdjuntos); } }
/// <summary> /// gfValidaSiEsFacturaFisicaoMoral /// </summary> /// <param name="piNumeroFactura">Id factura</param> /// <param name="Numero_Empresa">Id Empresa</param> /// <param name="Numero_Cliente">Id Cliente ,en facturación es a quien enviarle el mail </param> /// <param name="iTipoFacturaNotaCredito">0 Facturacion , 1 Nota de credito</param> /// <param name="Tipo_Documento">Es indispensable que sea Documento Electronico (-59) para el flujo básico de timbrar</param> /// <returns>Regresa si es con retenciónes (persona física ) o sin ellas (persona moral)</returns> public static decimal gfValidaSiEsFacturaFisicaoMoral(string sNombreDB, int piNumeroFactura, int Numero_Empresa, int Numero_Cliente, int iTipoFacturaNotaCredito, ref int Tipo_Documento) { DataTable dt = new DataTable(); string sQuery = string.Empty; SQLConection context = new SQLConection(); if (iTipoFacturaNotaCredito == 0) sQuery = "USE [" + sNombreDB + "] SELECT ISNULL(RET_ISR,-1) AS RESULTADO , ISNULL(Tipo_Documento,0) AS Tipo_Documento FROM FACTURA WHERE Numero_Empresa = " + Numero_Empresa.ToString() + " AND Numero = " + piNumeroFactura.ToString() + ""; else sQuery = string.Concat("USE [", sNombreDB, "] SELECT -1 AS RESULTADO , ISNULL(Tipo_Docto_Nota,0) AS Tipo_Documento FROM NOTA_CREDITO WHERE Numero_Empresa = ", Numero_Empresa.ToString(), " AND Numero = ", piNumeroFactura.ToString(), ""); dt = context.ExecuteQuery(sQuery); if (dt.Rows.Count > 0) { Tipo_Documento = (int)dt.Rows[0][1]; return decimal.Parse(dt.Rows[0][0].ToString()); } return 0; }
public static string ImporteConLetraXML(string sMonedaXML, Decimal total, int bandera, int iTipo) { string sTipoMoneda = string.Empty; DataTable dt = new DataTable(); SQLConection context = new SQLConection(); switch (sMonedaXML.ToUpper()) { case "110": sTipoMoneda = "Dólar Americano"; break; case "109": sTipoMoneda = "Peso Mexicano"; break; case "MXN": sTipoMoneda = "Peso Mexicano"; break; default: sTipoMoneda = string.Empty; break; } dt = new DataTable(); context = new SQLConection(); dt = context.ExecuteQuery(" SELECT dbo.fn_ImporteLetras(" + 1 + ", " + total + ", '" + sTipoMoneda + "', " + bandera + ") "); if (dt.Rows.Count > 0) sTipoMoneda = dt.Rows[0][0].ToString(); return sTipoMoneda; }
public static DataTable import_to_string(string sNombreDB, int company, Decimal total, int bandera, int NumeroFactura, int iTipo) { DataTable dt = new DataTable(); SQLConection context = new SQLConection(); string sQuery = string.Empty; int iResultado = -1; string sTipoMoneda = string.Empty; if (iTipo == 0) sQuery = string.Concat(" USE [" + sNombreDB + "] SELECT ISNULL(Moneda,109) AS MONEDA FROM FACTURA WHERE Numero = " + NumeroFactura.ToString() + " AND Numero_empresa = " + company.ToString() + ""); else sQuery = string.Concat(" USE [" + sNombreDB + "] SELECT ISNULL(Clas_Moneda,109) AS MONEDA FROM Nota_Credito WHERE Numero =" + NumeroFactura.ToString() + " AND Numero_Empresa = " + company.ToString() + ""); dt = context.ExecuteQuery(sQuery); iResultado = Convert.ToInt32(dt.Rows[0][0]); switch (iResultado) { case 110: sTipoMoneda = "Dólar Americano"; break; case 109: sTipoMoneda = "Peso Mexicano"; break; default: sTipoMoneda = string.Empty; break; } dt = new DataTable(); context = new SQLConection(); dt = context.ExecuteQuery(" SELECT dbo.fn_ImporteLetras(" + company + ", " + total + ", '" + sTipoMoneda + "', " + bandera + ") "); return dt; }
/// <summary> /// Valida si el id de factura o nota de credito es realmente documento electronico /// </summary> /// <param name="piNumeroFactura">id de factura o nota de credito </param> /// <param name="iNumeroCompania">id de de la empresa</param> /// <param name="iTipoFacturaNotaCredito">0 Factura , 1 Nota de credito </param> /// <returns></returns> public static int gfValidaSiEsFactura(string sNombreDB, int piNumeroFactura, string iNumeroCompania, int iTipoFacturaNotaCredito) { SQLConection context = new SQLConection(); if (iTipoFacturaNotaCredito == 0) return int.Parse(context.ExecuteQuery("USE [" + sNombreDB + "] SELECT ISNULL(COUNT(1),0) AS RES FROM FACTURA WHERE NUMERO = " + piNumeroFactura + " AND TIPO_DOCUMENTO = -59 AND Numero_Empresa = " + iNumeroCompania + " ").Rows[0][0].ToString()); else return int.Parse(context.ExecuteQuery("USE [" + sNombreDB + "] SELECT ISNULL(COUNT(1),0) AS RES FROM NOTA_CREDITO WHERE NUMERO = " + piNumeroFactura + " AND Tipo_Docto_Nota = -59 AND Numero_Empresa = " + iNumeroCompania + " ").Rows[0][0].ToString()); }