private void LeerCorreo(object IdOperador) { Int32 idProcesoPersonal = idProceso; try { Int32 idOperador = (int)IdOperador; using (CobranzasDataContext db = new CobranzasDataContext()) { List <Entidades.CorreosFiltros> Filtros = db.CorreosFiltros./*Where(x => x.idOperador == idOperador).*/ ToList(); String Ruta = Parametro("RutaCorreos", db); Entidades.Operadores op = db.Operadores.Single(x => x.idOperador == idOperador); Log("Leyendo: " + op.Nombre, idProcesoPersonal, idOperador); String Servidor = (op.POP3Host ?? Parametro("POP3Host", db)); if (Servidor == null) { Log("Saltando, por no tener definido un servidor", idProcesoPersonal, idOperador); return; } Int32 Puerto = (op.POP3Port ?? Convert.ToInt32(Parametro("POP3Port", db))); Boolean SSL = op.POP3SSL ?? (Parametro("POP3SSL", db) == "1"); String Usuario = op.POP3Login; String Password = op.POP3Password; if (op.POP3Password == null) { Log("Saltando, por no tener contraseña", idProcesoPersonal, idOperador); return; } DateTime?UltimaFecha = op.UltimaFechaCorreoEntrante; using (OpenPop.Pop3.Pop3Client POP3 = new OpenPop.Pop3.Pop3Client())//Iniciando el servidor POP3; { POP3.Connect(Servidor, Puerto, SSL); POP3.Authenticate(Usuario, Password); int Count = POP3.GetMessageCount(); Int32 Inicio = Count; while (true) { OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(Inicio); if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId)) { break; } Inicio--; if (Inicio == 0) { break; } } Inicio++; //Inicio = UltimaFecha == null ? 1 : BuscarIdPorFecha(1, Count, POP3, UltimaFecha.Value); //Inicio -= 4; //if (Inicio < 1) Inicio = 1; Log(op.Login + " Inicio:" + Inicio + ", Total:" + Count, idProcesoPersonal, idOperador); Int32 ErroresSeguidos = 0; if (Inicio > Count) { Log("No hay correos nuevos para: " + op.Login, idProcesoPersonal, idOperador); } for (int i = Inicio; i <= Count; i++)//últimos 5 correos para verificar. { if (ErroresSeguidos == 5) { Log("Abortando Lectura de " + op.Login + " Por 5 erorres consecutivos", idProcesoPersonal, idOperador); break; } try { OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(i); /*if (UltimaFecha != null && mh.DateSent.ToLocalTime() <= UltimaFecha) * { * Log("Saltando Mensaje", idProcesoPersonal, i); * continue; * }*/ if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId)) { Log("Saltando Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador); continue; } Log("Leyendo Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador); OpenPop.Mime.Message m = POP3.GetMessage(i); UltimaFecha = mh.DateSent.ToLocalTime(); String idLimpio = Limpiar(mh.MessageId); String Directorio = UltimaFecha.Value.ToString("yyyyMMdd") + "\\"; String Prefijo = UltimaFecha.Value.ToString("mmss") + "_"; String RutaCompleta = Ruta + Directorio + Prefijo + idLimpio + ".eml"; Int32 idCorreoNuevo = 0; if (!File.Exists(RutaCompleta)) { Directory.CreateDirectory(Ruta + Directorio); m.Save(new FileInfo(RutaCompleta)); } Entidades.Correos Correo = new Entidades.Correos(); Correo.IdPop3 = mh.MessageId; Correo.idOperador = idOperador; Correo.Asunto = Limitar(mh.Subject, 2000); Correo.Remitente = Limitar(mh.From.Raw, 500); Correo.FechaCreacion = mh.DateSent.ToLocalTime(); Correo.Destinatarios = Limitar(String.Join(",", mh.To.Select(x => x.Raw)), 5000); Correo.DestinatariosCopia = Limitar(String.Join(",", mh.Cc.Select(x => x.Raw)), 5000); Correo.DestinatariosCopiaOculta = Limitar(String.Join(",", mh.Bcc.Select(x => x.Raw)), 5000); Correo.RutaEml = Directorio + Prefijo + idLimpio; var Personas = Filtros.Where(x => mh.From.Address.ToLower() == x.De.ToLower()).Select(x => x.idPersona); foreach (int idPersona in Personas) { Correo.Correos_Personas.Add(new Entidades.Correos_Personas() { idPersona = idPersona }); } db.Correos.InsertOnSubmit(Correo); Correo.Fecha = DateTime.Now; db.SubmitChanges(); idCorreoNuevo = Correo.idCorreo; db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, op); op.UltimaFechaCorreoEntrante = UltimaFecha; db.SubmitChanges(); Log("Leido Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString() + "#" + idCorreoNuevo, idProcesoPersonal, idOperador); ErroresSeguidos = 0; } catch (OpenPop.Pop3.Exceptions.InvalidLoginException Ex) { ErroresSeguidos++; Log("Error en Mensaje: IL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.InvalidUseException Ex) { ErroresSeguidos++; Log("Error en Mensaje: IU Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.LoginDelayException Ex) { ErroresSeguidos++; Log("Error en Mensaje: LD Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PS Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerLockedException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PSL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerNotAvailableException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PSNA Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerNotFoundException Ex) { ErroresSeguidos++; Log("Error en Mensaje: SNF Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopClientException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PC Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (Exception Ex) { ErroresSeguidos++; Log("Error en Mensaje: Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } } POP3.Disconnect(); } Log("Fin Lectura: " + op.Nombre, idProcesoPersonal, idOperador); } } catch (Exception Ex) { if (Ex.Message == "Server did not accept user credentials") { try { using (CobranzasDataContext db = new CobranzasDataContext()) { db.Operadores.Single(x => x.idOperador == (Int32)IdOperador).POP3Password = null; db.SubmitChanges(); db.Avisos.InsertOnSubmit(new Entidades.Avisos { Aviso = "El servidor ha rechazado su contraseña, por favor actualice su contraseña de correo nuevamente", FechaAviso = DateTime.Now.AddMinutes(2), FechaCrea = DateTime.Now, FechaOriginal = DateTime.Now.AddMinutes(2), idOperador = (Int32)IdOperador, idOperadorCrea = 1, VecesMostrada = 0 }); db.SubmitChanges(); } } catch { } } Log("Error General: Op:" + IdOperador + ", Mensaje:" + Ex.Message, idProcesoPersonal, (int)IdOperador); } }
protected void btnLlevarPago_Click(object sender, EventArgs e) { using (CobranzasDataContext db = new CobranzasDataContext()) { Entidades.Pagos Pago; try { Pago = db.Pagos.Single(x => x.idPago == Convert.ToInt32(this.idPago.Value)); } catch (Exception Ex) { Response.Write("Error Llevando el Pago a SCI"); return; } int?idOrigen = Pago.Pagos_Cuentas.First().Cuentas.idOrigen; Entidades.Origenes Origen = db.Origenes.Single(x => x.idOrigen == idOrigen); //OleDbConnection Conn = new OleDbConnection("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=mberroteran;Password=mberroteran;Initial Catalog=SCI;Data Source=VECCSVS020"); OleDbConnection Conn = new OleDbConnection(Origen.ConnectionString);//"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=mberroteran;Password=mberroteran;Initial Catalog=milleniumv2;Data Source=VECCSVS020"); Conn.Open(); OleDbCommand Comm = Conn.CreateCommand(); Comm.CommandTimeout = 10 * 60; Comm.CommandType = CommandType.StoredProcedure; Comm.CommandText = "transact_Cobros"; Comm.Parameters.Add("transactId", OleDbType.Integer); Comm.Parameters.Add("cobroPaisId", OleDbType.Integer).Direction = ParameterDirection.Output; Comm.Parameters.Add("fechaCobro", OleDbType.Date).Direction = ParameterDirection.Output; Comm.Parameters.Add("empresaPaisId", OleDbType.Integer); Comm.Parameters.Add("descripcion", OleDbType.VarChar); Comm.Parameters.Add("ptocreacion", OleDbType.VarChar); Comm.Parameters.Add("moneda", OleDbType.Boolean); Comm.Parameters.Add("cobradorPaisId", OleDbType.Integer); Comm.Parameters.Add("clientePaisId", OleDbType.Integer); OleDbCommand Comm2 = Conn.CreateCommand(); Comm2.CommandTimeout = 10 * 60; Comm2.CommandType = CommandType.StoredProcedure; Comm2.CommandText = "transact_entradasbanco"; Comm2.Parameters.Add("transactId", OleDbType.Integer); Comm2.Parameters.Add("entradaID", OleDbType.Integer).Direction = ParameterDirection.Output; Comm2.Parameters.Add("empresaPaisId", OleDbType.Integer); Comm2.Parameters.Add("cuentaID", OleDbType.Integer); Comm2.Parameters.Add("fecharecepcion", OleDbType.Date); Comm2.Parameters.Add("transferencia", OleDbType.Boolean); Comm2.Parameters.Add("numdeposito", OleDbType.Integer); Comm2.Parameters.Add("cobroPaisId", OleDbType.Integer); Comm2.Parameters.Add("montoefectivo", OleDbType.Decimal); OleDbCommand Comm3 = Conn.CreateCommand(); Comm3.CommandTimeout = 10 * 60; Comm3.CommandType = CommandType.StoredProcedure; Comm3.CommandText = "transact_cheques"; Comm3.Parameters.Add("transactId", OleDbType.Integer); Comm3.Parameters.Add("IDcheque", OleDbType.Integer).Direction = ParameterDirection.Output; Comm3.Parameters.Add("entradaID", OleDbType.Integer); Comm3.Parameters.Add("chequeId", OleDbType.VarChar); Comm3.Parameters.Add("chequebco", OleDbType.VarChar); Comm3.Parameters.Add("montocheque", OleDbType.Decimal); //Comm3.Parameters.Add("IDcheque", OleDbType.Numeric).Direction = ParameterDirection.Output; //Comm3.Parameters.Add("entradaID", OleDbType.Numeric); //Comm3.Parameters.Add("chequeid", OleDbType.Char); //Comm3.Parameters.Add("chequebco", OleDbType.Char); //Comm3.Parameters.Add("montocheque", OleDbType.Numeric); //Comm3.Parameters.Add("cobroid", OleDbType.Numeric); //Comm3.Parameters.Add("bancoid", OleDbType.Char); //Comm3.Parameters.Add("numdeposito", OleDbType.Char); //Comm3.Parameters.Add("chequefecha", OleDbType.Char); //Comm3.Parameters.Add("bolivar", OleDbType.Boolean); OleDbCommand Comm4 = Conn.CreateCommand(); Comm4.CommandTimeout = 10 * 60; Comm4.CommandType = CommandType.StoredProcedure; Comm4.CommandText = "Cobranzas.Insertar_Pagos_Cuentas"; Comm4.Parameters.Add("CodigoPago", OleDbType.VarChar); Comm4.Parameters.Add("CodigoCuenta", OleDbType.VarChar); Comm4.Parameters.Add("Monto", OleDbType.Decimal); Comm4.Parameters.Add("Retencion1", OleDbType.Decimal); Comm4.Parameters.Add("Retencion2", OleDbType.Decimal); Comm4.Parameters.Add("Pais", OleDbType.Char, 3); OleDbCommand Comm5 = Conn.CreateCommand(); Comm5.CommandTimeout = 10 * 60; Comm5.CommandType = CommandType.Text; Comm5.CommandText = "SELECT Empresapaisid FROM OEmpresapais as ep inner join opais as p on ep.pais=p.pais where p.iso3='" + Pago.Personas.idPais + "'"; Int32 EmpresaPaisId = Convert.ToInt32(Comm5.ExecuteScalar()); Comm5.CommandText = "select cuentaid from tbancocuenta as bc inner join tbanco as b on bc.bancoid=b.bancoid where b.bancopaisid='" + Pago.BancosPropios.Bancos.Codigo + "' and b.empresapaisid=" + EmpresaPaisId.ToString() + " and bc.numcuenta='" + Pago.BancosPropios.NroCuenta + "'"; Int32 CuentaId = Convert.ToInt32(Comm5.ExecuteScalar()); Comm5.CommandText = "SELECT Top 1 OS.puertoid FROM dstEstacion AS ES INNER JOIN SubRedSerie AS SS ON SS.subrID=ES.subrID INNER JOIN oOficSerie AS OS ON OS.serie=SS.serieDMDG AND OS.empresaPaisID=SS.empresaPaisID INNER JOIN oEmpresapais as EP on SS.Empresapaisid=Ep.empresapaisid INNER JOIN oPais as P on Ep.pais=p.pais WHERE ES.usuario=SUSER_NAME()and p.iso3='" + Pago.Personas.idPais + "'"; String PuertoCreacion = Convert.ToString(Comm5.ExecuteScalar()); OleDbTransaction Trans = Conn.BeginTransaction(); Boolean PagoListo = false; try { Comm.Transaction = Trans; Comm2.Transaction = Trans; Comm3.Transaction = Trans; Comm4.Transaction = Trans; // String PuertoCreacion = Pago.Pagos_Cuentas.First().Cuentas.Datos.Descendants("Dato").Where(x => x.Attribute("Clave").Value == "Port").First().Value; Comm.Parameters["transactId"].Value = 1; Comm.Parameters["empresaPaisId"].Value = EmpresaPaisId; Comm.Parameters["descripcion"].Value = Pago.Descripcion; Comm.Parameters["ptocreacion"].Value = PuertoCreacion; Comm.Parameters["moneda"].Value = Pago.idMoneda == "USD" ? 0 : 1; Comm.Parameters["cobradorPaisId"].Value = db.Operadores_Asignaciones.Single(x => x.idOperador == Pago.idOperador && x.idPais == Pago.Personas.idPais).Codigo; Comm.Parameters["clientePaisId"].Value = Pago.Personas.Codigo; Comm.ExecuteNonQuery(); Pago.Codigo = Comm.Parameters["cobroPaisId"].Value.ToString(); //Comm.Parameters["fechaCobro", OleDbType.Date).Direction = ParameterDirection.Output; Comm2.Parameters["transactId"].Value = 1; Comm2.Parameters["empresaPaisId"].Value = EmpresaPaisId; Comm2.Parameters["cuentaID"].Value = CuentaId; Comm2.Parameters["fecharecepcion"].Value = Pago.Fecha; Comm2.Parameters["transferencia"].Value = Pago.TipoPago == 2; Comm2.Parameters["numdeposito"].Value = Pago.Referencia; Comm2.Parameters["cobroPaisId"].Value = Pago.Codigo; Comm2.Parameters["montoefectivo"].Value = Pago.MontoEfectivo; Comm2.ExecuteNonQuery(); Int32 Entrada = Convert.ToInt32(Comm2.Parameters["entradaID"].Value); foreach (Entidades.Pagos_Cuentas PC in Pago.Pagos_Cuentas) { Comm4.Parameters["CodigoPago"].Value = Pago.Codigo; Comm4.Parameters["CodigoCuenta"].Value = PC.Cuentas.Codigo; Comm4.Parameters["Monto"].Value = PC.Monto; Comm4.Parameters["Retencion1"].Value = PC.Retencion1; Comm4.Parameters["Retencion2"].Value = PC.Retencion2; Comm4.Parameters["Pais"].Value = Pago.Personas.idPais; Comm4.ExecuteNonQuery(); } foreach (Entidades.PagosDet Cheque in Pago.PagosDet) { Comm3.Parameters["transactId"].Value = 1; Comm3.Parameters["entradaID"].Value = Entrada; Comm3.Parameters["chequeId"].Value = Cheque.NroCheque; Comm3.Parameters["chequebco"].Value = Cheque.Bancos.Codigo; Comm3.Parameters["montocheque"].Value = Cheque.Monto; Comm3.ExecuteNonQuery(); Cheque.Codigo = Comm3.Parameters["IDcheque"].Value.ToString(); } Trans.Commit(); PagoListo = true; Pago.idStatusPago = 6;//Aprobado Procesamiento ClientScript.RegisterStartupScript(typeof(Page), "Aviso", "alert('El código del Pago Generado es:" + Pago.Codigo + "')"); db.SubmitChanges(); try//Crear Gestión { Int32 Status = Convert.ToInt32(db.Parametros.Single(x => x.Clave == "_STPago" + Pago.Personas.idPais).Valor); Entidades.Gestiones Gestion = new Entidades.Gestiones(); Gestion.Descripcion = Pago.Descripcion; db.Gestiones.InsertOnSubmit(Gestion); Gestion.Fecha = DateTime.Now; Gestion.idOperador = Pago.idOperadorCrea.Value; Gestion.idPersona = Pago.idPersona; Gestion.idStatus = Status; foreach (Int32 idCuenta in Pago.Pagos_Cuentas.Select(x => x.idCuenta)) { Entidades.Cuentas_Gestiones CG = new Entidades.Cuentas_Gestiones(); CG.idCuenta = idCuenta; Gestion.Cuentas_Gestiones.Add(CG); } db.SubmitChanges(); } catch (Exception Ex) { } } catch (Exception Ex) { if (!PagoListo) { Response.Write("Error Llevando Pago " + Pago.idPago + "Mensaje: " + Ex.Message); Trans.Rollback(); db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Pago); Pago.Codigo = null; Pago.Resultado = Ex.Message; Pago.FechaResultado = DateTime.Now; Pago.Confirmado = false; Pago.Aprobado = false; Pago.idStatusPago = 2; db.SubmitChanges(); Entidades.Avisos Aviso = new Entidades.Avisos(); Aviso.Aviso = "El Pago del cliente(" + Pago.Personas.idPais + "): " + Pago.Personas.Codigo + ", Referencia: " + Pago.Referencia + ", Ha sido rechazado por el SCI por el siguiente motivo: " + Ex.Message; Aviso.FechaAviso = DateTime.Now.AddMinutes(5); Aviso.FechaCancelado = null; Aviso.FechaOriginal = DateTime.Now.AddMinutes(5); Aviso.FechaCrea = DateTime.Now; Aviso.idOperador = Pago.idOperadorCrea ?? Pago.idOperador ?? 1; Aviso.idOperadorCrea = 1; Aviso.idPersona = Pago.idPersona; Aviso.VecesMostrada = 0; db.Avisos.InsertOnSubmit(Aviso); db.SubmitChanges(); } } } }