コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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();
                    }
                }
            }
        }