public ActionResult Edit(int ID)
        {
            int pagina = 924; //ID EN BASE DE DATOS

            FnCommon.ObtenerConfPage(db, pagina, User.Identity.Name, this.ControllerContext.Controller);
            APPSETTING aPPSETTING = db.APPSETTINGs.Find(ID);

            return(View(aPPSETTING));
        }
        public ActionResult Edit([Bind(Include = "ID,NOMBRE,VALUE,ACTIVO")] APPSETTING aPPSETTING)
        {
            string nOMBRE = aPPSETTING.NOMBRE.Replace(" ", "_");

            aPPSETTING.ID              = aPPSETTING.ID;
            aPPSETTING.NOMBRE          = nOMBRE;
            aPPSETTING.VALUE           = aPPSETTING.VALUE;
            aPPSETTING.ACTIVO          = true;
            db.Entry(aPPSETTING).State = EntityState.Modified;
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public ActionResult Delete(int ID)
        {
            APPSETTING aPPSETTING = db.APPSETTINGs.Find(ID);

            aPPSETTING.ID              = aPPSETTING.ID;
            aPPSETTING.NOMBRE          = aPPSETTING.NOMBRE;
            aPPSETTING.VALUE           = aPPSETTING.VALUE;
            aPPSETTING.ACTIVO          = false;
            db.Entry(aPPSETTING).State = EntityState.Modified;
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public void enviarErrores(List <string> mensajes)
        {
            TAT001Entities db    = new TAT001Entities();
            APPSETTING     mailC = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("mail") & x.ACTIVO).FirstOrDefault();

            if (mailC == null)
            {
                Console.Write("Falta configuración!");
            }                              //RSG 30.07.2018

            string  mailt   = mailC.VALUE; //RSG 30.07.2018
            CONMAIL conmail = db.CONMAILs.Find(mailt);

            if (conmail != null)
            {
                APPSETTING  mailAC = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("mailAdmin") & x.ACTIVO).FirstOrDefault();
                MailMessage mail   = new MailMessage(conmail.MAIL, mailAC.VALUE);
                SmtpClient  client = new SmtpClient();
                if (conmail.SSL)
                {
                    client.Port                  = (int)conmail.PORT;
                    client.EnableSsl             = conmail.SSL;
                    client.UseDefaultCredentials = false;
                    client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                }
                else
                {
                    client.UseDefaultCredentials = true;
                    client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                }
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.Host           = conmail.HOST;
                try
                {
                    mail.IsBodyHtml = true;
                    foreach (string mensaje in mensajes)
                    {
                        mail.Body += "<br><span>" + mensaje + "</span>";
                    }
                    mail.Subject = "Error programa Negociaciones- " + DateTime.Now.ToString();
                    client.Send(mail);
                }
                catch (Exception ex)
                {
                    throw new Exception("No se ha podido enviar el email", ex.InnerException);
                }
            }
        }
        public ActionResult Create([Bind(Include = "NOMBRE,VALUE,ACTIVO")] Appsetting appsetting)
        {
            APPSETTING u      = new APPSETTING();
            string     nOMBRE = appsetting.NOMBRE.Replace(" ", "_");

            u.NOMBRE = nOMBRE;
            u.VALUE  = appsetting.VALUE;
            u.ACTIVO = true;

            db.APPSETTINGs.Add(u);

            try
            {
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            catch {
                ViewBag.Error = "El usuario ya existe. Introduzca un ID de usuario diferente";
                int pagina = 923; //ID EN BASE DE DATOS
                FnCommon.ObtenerConfPage(db, pagina, User.Identity.Name, this.ControllerContext.Controller);
                return(View());
            }
        }
        public void correos2()
        {
            ImapClient ic = new ImapClient();
            List <AE.Net.Mail.MailMessage> mx;
            List <AE.Net.Mail.MailMessage> emRq17;
            APPSETTING lg = db.APPSETTINGs.Where(x => x.NOMBRE == "logPath" && x.ACTIVO).FirstOrDefault();

            log.ruta = lg.VALUE + "LeerCorreos_";
            log.escribeLog("-----------------------------------------------------------------------START");
            try
            {
                List <CONMAIL> cc      = db.CONMAILs.ToList();
                CONMAIL        conmail = cc.FirstOrDefault(x => x.ID == "LE");
                if (conmail == null)
                {
                    log.escribeLog("Falta configurar inbox."); return;
                }
                ic = new ImapClient(conmail.HOST, conmail.MAIL, conmail.PASS,
                                    AuthMethods.Login, (int)conmail.PORT, conmail.SSL);

                // Select a mailbox. Case-insensitive
                ic.SelectMailbox("INBOX");

                //Esto traera los emails recibidos y no leidos
                //mx = ic.GetMessages(0, ic.GetMessageCount() - 1, true, false)
                long a = ic.GetMessageCount();
                if (a > 100)
                {
                    mx = ic.GetMessages(ic.GetMessageCount() - 100, ic.GetMessageCount() - 1, true, false)
                         .Where(m => !m.Flags.HasFlag(Flags.Seen) && !m.Flags.HasFlag(Flags.Deleted)).ToList();
                }
                else
                {
                    mx = ic.GetMessages(0, ic.GetMessageCount() - 1, true, false)
                         .Where(m => !m.Flags.HasFlag(Flags.Seen) && !m.Flags.HasFlag(Flags.Deleted)).ToList();
                }

                //En esta lista ingresaremos a los mails que sean recibidos como cc
                emRq17 = new List <AE.Net.Mail.MailMessage>();
                log.escribeLog("Leer inbox - numReg=(" + mx.Count + ")");
            }
            catch (Exception e)
            {
                mx     = new List <AE.Net.Mail.MailMessage>();
                emRq17 = new List <AE.Net.Mail.MailMessage>();
                log.escribeLog("Error al leer" + e.Message.ToString());
            }
            try
            {
                //ingresamos los correos CORREO
                for (int i = 0; i < mx.Count; i++)
                {
                    AE.Net.Mail.MailMessage mm = ic.GetMessage(mx[i].Uid, false);
                    try
                    {
                        string[] arrAsunto = mm.Subject.Split(']');
                        int      a         = arrAsunto.Length - 1;
                        //Recupero el asunto y lo separo del numdoc y pos
                        string[] arrAprNum = arrAsunto[a].Split('-');//RSG cambiar 0 a 1
                        string[] arrClaves = arrAprNum[1].Split('.');
                        //Valido que tenga los datos necesarios para el req 17
                        if (arrClaves.Length > 1)
                        {
                            arrClaves[1] = Decimal.Parse(arrClaves[1]).ToString();
                        }
                        ////var xy = arrAprNum[0].Trim();
                        if (arrAprNum[0].Trim() == "De Acuerdo" || arrAprNum[0].Trim() == "DeAcuerdo")
                        {
                            emRq17.Add(mm);
                            log.escribeLog("NEGO A - " + arrClaves[1]);
                        }
                        else if (arrAprNum[0].Trim() == "Tengo Observaciones" || arrAprNum[0].Trim() == "TengoObservaciones")
                        {
                            emRq17.Add(mm);
                            log.escribeLog("NEGO O - " + arrClaves[1]);
                        }
                    }
                    catch
                    {
                        ic.AddFlags(Flags.Seen, mm);
                        log.escribeLog("ERROR - " + mm.Subject);
                    }
                }
                //Correos de FLUJO DE APROBACIÓN y RECURRENTE-----------------------------------------------------2 y 3
                if (true)
                {
                    for (int i = 0; i < mx.Count; i++)
                    {
                        AE.Net.Mail.MailMessage mm = ic.GetMessage(mx[i].Uid, false);
                        try
                        {
                            string[] arrAsunto = mm.Subject.Split(']');
                            int      a         = arrAsunto.Length - 1;
                            //Recupero el asunto y lo separo del numdoc y pos
                            string[] arrAprNum = arrAsunto[a].Split('-');//RSG cambiar 0 a 1
                            string[] arrClaves = arrAprNum[1].Split('.');
                            decimal  numdoc    = Decimal.Parse(arrClaves[0]);
                            //Si el Texto es Aprobado, Rechazado o Recurrente
                            string[] arrApr = arrAprNum[0].Split(':');
                            if (arrApr.Length > 1)
                            {
                                ProcesaFlujo pF = new ProcesaFlujo();
                                if (arrApr[1] == "Approved" || arrApr[1] == "Rejected")
                                {
                                    log.escribeLog("APPR AR - " + arrClaves[0]);
                                    int   pos = Convert.ToInt32(arrAprNum[2]);
                                    FLUJO fl  = db.FLUJOes.Where(x => x.NUM_DOC == numdoc && x.POS == pos).FirstOrDefault();
                                    if (fl != null)
                                    {
                                        Console.WriteLine(mm.From.Address.Trim()); Console.WriteLine(fl.USUARIO.EMAIL);
                                        log.escribeLog("APPR mails - " + mm.From.Address.Trim() + " == " + fl.USUARIO.EMAIL);
                                        if (mm.From.Address.Trim().ToLower() == fl.USUARIO.EMAIL.Trim().ToLower() || mm.From.Address.Trim().ToLower() == fl.USUARIO1.EMAIL.Trim().ToLower())
                                        {
                                            Console.WriteLine("true");
                                            fl.ESTATUS = arrApr[1].Substring(0, 1);
                                            fl.FECHAM  = DateTime.Now;
                                            Comentario com = new Comentario();
                                            fl.COMENTARIO = com.getComment(mm.Body, mm.ContentType);
                                            ////fl.COMENTARIO = mm.Body;
                                            ////if (fl.COMENTARIO.Length > 255)
                                            ////    fl.COMENTARIO = fl.COMENTARIO.Substring(0, 252) + "...";
                                            var res = pF.procesa(fl, "");
                                            log.escribeLog("APPR PROCESA - Res = " + res);
                                            Email email = new Email();
                                            if (res == "1")
                                            {
                                                email.enviarCorreo(fl.NUM_DOC, 1, pos);
                                            }
                                            else if (res == "3")
                                            {
                                                email.enviarCorreo(fl.NUM_DOC, 3, pos);
                                            }

                                            using (TAT001Entities db1 = new TAT001Entities())
                                            {
                                                FLUJO     ff   = db1.FLUJOes.Where(x => x.NUM_DOC == fl.NUM_DOC).OrderByDescending(x => x.POS).FirstOrDefault();
                                                Estatus   es   = new Estatus();//RSG 18.09.2018
                                                DOCUMENTO ddoc = db1.DOCUMENTOes.Find(fl.NUM_DOC);
                                                ff.STATUS           = es.getEstatus(ddoc);
                                                db1.Entry(ff).State = System.Data.Entity.EntityState.Modified;
                                                db1.SaveChanges();
                                            }
                                            Console.WriteLine(res);
                                        }
                                    }
                                    ic.AddFlags(Flags.Seen, mm);
                                }
                                ////else if (arrApr[1] == "Rejected")
                                ////{
                                ////    int pos = Convert.ToInt32(arrAprNum[2]);
                                ////    FLUJO fl = db.FLUJOes.Where(x => x.NUM_DOC == numdoc && x.POS == pos).FirstOrDefault();
                                ////    fl.ESTATUS = "R";
                                ////    fl.FECHAM = DateTime.Now;
                                ////    fl.COMENTARIO = mm.Body;
                                ////    var res = pF.procesa(fl, "");
                                ////    if (res == "0")
                                ////    {
                                ////        //
                                ////    }
                                ////    else if (res == "1")
                                ////    {
                                ////        enviarCorreo(fl.NUM_DOC, 1);
                                ////    }
                                ////    else if (res == "3")
                                ////    {
                                ////        enviarCorreo(fl.NUM_DOC, 3);
                                ////    }
                                ////    //para marcar el mensaje como leido
                                ////    ic.AddFlags(Flags.Seen, mm);
                                ////}
                                else if (arrApr[1] == "Recurrent")
                                {
                                    ////Reversa r = new Reversa();
                                    ////string ts = db.DOCUMENTOes.Find(numdoc).TSOL.TSOLR;
                                    ////int ret = 0;
                                    ////if (ts != null)
                                    ////    ret = r.creaReversa(numdoc.ToString(), ts);

                                    //////para marcar el mensaje como leido
                                    ////if (ret != 0)
                                    ////    ic.AddFlags(Flags.Seen, mm);
                                }
                            }
                        }
                        catch (Exception ee)
                        {
                            ic.AddFlags(Flags.Seen, mm);
                            log.escribeLog("ERROR - " + ee.Message.ToString());
                        }
                    }
                }
                //req17
                ////FLUJNEGO fn = new FLUJNEGO();
                for (int i = 0; i < emRq17.Count; i++)
                {
                    ////AE.Net.Mail.MailMessage mm = emRq17[i];
                    AE.Net.Mail.MailMessage mm = ic.GetMessage(emRq17[i].Uid, false);
                    if (true)
                    {
                        string[] arrAsunto = mm.Subject.Split(']');
                        int      isa       = arrAsunto.Length - 1;
                        //Recupero el asunto y lo separo del numdoc y pos
                        string[] arrAprNum = arrAsunto[isa].Split('-');
                        string[] arrPiNN   = arrAprNum[1].Split('.');
                        var      _id       = int.Parse(arrPiNN[1]);
                        var      vkorg     = arrPiNN[2];
                        var      _correo   = arrPiNN[4].Replace('*', '.').Replace('+', '-').Replace('/', '@').Replace('#', '-');
                        //recupero las fechas de envio
                        var _xres = db.NEGOCIACIONs.Where(x => x.ID == _id).FirstOrDefault();
                        var pid   = arrPiNN[0];
                        //// var fs = db.DOCUMENTOes.Where(f => f.PAYER_ID == pid && f.FECHAC.Value.Month == DateTime.Now.Month  && f.FECHAC.Value.Year == DateTime.Now.Year && f.DOCUMENTO_REF == null).ToList();
                        var _xff = _xres.FECHAF.AddDays(1);
                        var fs   = db.DOCUMENTOes.Where(f => f.PAYER_ID == pid && f.VKORG == vkorg && f.PAYER_EMAIL == _correo && f.FECHAC >= _xres.FECHAI && f.FECHAC < _xff && f.DOCUMENTO_REF == null).ToList();
                        //LEJ 20.07.2018-----
                        var dOCUMENTOes = fs;
                        var lstD        = new List <DOCUMENTO>();//---
                        ////DOCUMENTOA dz = null;//---
                        for (int y = 0; y < dOCUMENTOes.Count; y++)
                        {
                            PorEnviar pe = new PorEnviar();
                            if (pe.seEnvia(dOCUMENTOes[y], db, log))
                            {
                                lstD.Add(dOCUMENTOes[y]);
                            }

                            //////recupero el numdoc
                            ////var de = fs[i].NUM_DOC;
                            //////sino ecuentra una coincidencia con el criterio discriminatorio se agregan o no a la lista
                            ////dz = db.DOCUMENTOAs.Where(x => x.NUM_DOC == de && x.CLASE != "OTR").FirstOrDefault();
                            ////if (dz == null || dz != null)
                            ////{
                            ////    if (dOCUMENTOes[y].TSOL.NEGO == true)//para el ultimo filtro
                            ////    {

                            ////        string estatus = "";
                            ////        if (dOCUMENTOes[y].ESTATUS != null) { estatus += dOCUMENTOes[y].ESTATUS; } else { estatus += " "; }
                            ////        if (dOCUMENTOes[y].ESTATUS_C != null) { estatus += dOCUMENTOes[y].ESTATUS_C; } else { estatus += " "; }
                            ////        if (dOCUMENTOes[y].ESTATUS_SAP != null) { estatus += dOCUMENTOes[y].ESTATUS_SAP; } else { estatus += " "; }
                            ////        if (dOCUMENTOes[y].ESTATUS_WF != null) { estatus += dOCUMENTOes[y].ESTATUS_WF; } else { estatus += " "; }
                            ////        if (dOCUMENTOes[y].FLUJOes.Count > 0)
                            ////        {
                            ////            estatus += dOCUMENTOes[y].FLUJOes.OrderByDescending(a => a.POS).FirstOrDefault().WORKFP.ACCION.TIPO;
                            ////        }
                            ////        else
                            ////        {
                            ////            estatus += " ";
                            ////        }
                            ////        if (dOCUMENTOes[y].TSOL.PADRE) { estatus += "P"; } else { estatus += " "; }
                            ////        if (dOCUMENTOes[y].FLUJOes.Where(x => x.ESTATUS == "R").ToList().Count > 0)
                            ////        {
                            ////            estatus += dOCUMENTOes[y].FLUJOes.Where(x => x.ESTATUS == "R").OrderByDescending(a => a.POS).FirstOrDefault().USUARIO.PUESTO_ID;
                            ////        }
                            ////        else
                            ////        {
                            ////            estatus += " ";
                            ////        }


                            ////        if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "...[P][R].."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "...[R]..[8]"))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "[P]..[A]..."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "..[P][A]..."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "..[E][A]..."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "...[A].[P]."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "...[A]..."))
                            ////            lstD.Add(dOCUMENTOes[y]);
                            ////        else if (System.Text.RegularExpressions.Regex.IsMatch(estatus, "...[T]..."))
                            ////            lstD.Add(dOCUMENTOes[y]);

                            ////        //if (dOCUMENTOes[y].ESTATUS_WF == "P")//LEJ 20.07.2018---------------------------I
                            ////        //{
                            ////        //    if (dOCUMENTOes[y].FLUJOes.Count > 0)
                            ////        //    {
                            ////        //        if (dOCUMENTOes[y].FLUJOes.OrderByDescending(a => a.POS).FirstOrDefault().USUARIO != null)
                            ////        //        {
                            ////        //            //(Pendiente Validación TS)
                            ////        //            if (dOCUMENTOes[y].FLUJOes.OrderByDescending(a => a.POS).FirstOrDefault().USUARIO.PUESTO_ID == 8)
                            ////        //            {
                            ////        //                lstD.Add(dOCUMENTOes[y]);
                            ////        //            }
                            ////        //        }
                            ////        //    }
                            ////        //}
                            ////        //else if (dOCUMENTOes[y].ESTATUS_WF == "R")//(Pendiente Corrección)
                            ////        //{
                            ////        //    if (dOCUMENTOes[y].FLUJOes.Count > 0)
                            ////        //    {
                            ////        //        lstD.Add(dOCUMENTOes[y]);
                            ////        //    }
                            ////        //}
                            ////        //else if (dOCUMENTOes[y].ESTATUS_WF == "T")//(Pendiente Taxeo)
                            ////        //{
                            ////        //    if (dOCUMENTOes[y].TSOL_ID == "NCIA")
                            ////        //    {
                            ////        //        if (dOCUMENTOes[y].PAIS_ID == "CO")//(sólo Colombia)
                            ////        //        {
                            ////        //            lstD.Add(dOCUMENTOes[y]);
                            ////        //        }
                            ////        //    }
                            ////        //}
                            ////        //else if (dOCUMENTOes[y].ESTATUS_WF == "A")//(Por Contabilizar)
                            ////        //{
                            ////        //    if (dOCUMENTOes[y].ESTATUS == "P")
                            ////        //    {
                            ////        //        lstD.Add(dOCUMENTOes[y]);
                            ////        //    }
                            ////        //}
                            ////        //else if (dOCUMENTOes[y].ESTATUS_SAP == "E")//Error en SAP
                            ////        //{
                            ////        //    lstD.Add(dOCUMENTOes[y]);
                            ////        //}
                            ////        //else if (dOCUMENTOes[y].ESTATUS_SAP == "X")//Succes en SAP
                            ////        //{
                            ////        //    lstD.Add(dOCUMENTOes[y]);
                            ////        //}
                            ////    }
                            ////    //LEJ 20.07.2018----------------------------------------------------------------T
                            ////}
                        }
                        //----
                        if (arrAprNum[0].Trim() == "DeAcuerdo" || arrAprNum[0].Trim() == "De Acuerdo")
                        {
                            for (int x = 0; x < lstD.Count; x++)
                            {
                                FLUJNEGO fn = new FLUJNEGO();
                                fn.NUM_DOC = lstD[x].NUM_DOC;
                                DateTime fecham = mm.Date;
                                fn.FECHAM = fecham;
                                fn.FECHAC = lstD[x].FECHAC;
                                fn.KUNNR  = arrPiNN[0];
                                var        cm  = arrAprNum[0].ToString();
                                Comentario com = new Comentario();
                                cm += com.getComment(mm.Body, mm.ContentType);
                                ////cm += " - " + mm.Body;
                                var cpos = db.FLUJNEGOes.Where(h => h.NUM_DOC.Equals(fn.NUM_DOC)).ToList().Count;
                                fn.POS        = cpos + 1;
                                fn.COMENTARIO = cm;
                                db.FLUJNEGOes.Add(fn);
                                db.SaveChanges();
                            }
                        }
                        else if (arrAprNum[0].Trim() == "TengoObservaciones" || arrAprNum[0].Trim() == "Tengo Observaciones")
                        {
                            for (int x = 0; x < lstD.Count; x++)
                            {
                                FLUJNEGO fn = new FLUJNEGO();
                                fn.NUM_DOC = lstD[x].NUM_DOC;
                                fn.FECHAC  = lstD[x].FECHAC;
                                DateTime fecham = mm.Date;
                                fn.FECHAM = fecham;
                                fn.KUNNR  = arrPiNN[0];
                                var        cm  = arrAprNum[0] + " ";
                                Comentario com = new Comentario();
                                cm += com.getComment(mm.Body, mm.ContentType);
                                ////cm += " - " + mm.Body;
                                var cpos = db.FLUJNEGOes.Where(h => h.NUM_DOC.Equals(fn.NUM_DOC)).ToList().Count;
                                fn.POS        = cpos + 1;
                                fn.COMENTARIO = cm;
                                db.FLUJNEGOes.Add(fn);
                                db.SaveChanges();
                            }
                        }
                        else
                        {
                            //Hubo algun error
                            break;
                        }
                    }
                    //para marcar el mensaje como leido
                    ic.AddFlags(Flags.Seen, mm);
                }
            }
            catch (Exception ex)
            {
                log.escribeLog("ERROR - " + ex.InnerException.ToString());
                ////throw new Exception(ex.InnerException.ToString());
            }
            finally
            {
                ic.Dispose();
            }
        }
        public List <string> leerArchivos()
        {
            APPSETTING lg = db.APPSETTINGs.Where(x => x.NOMBRE == "logPath" && x.ACTIVO).FirstOrDefault();

            log.ruta = lg.VALUE + "ConexionSAP_";
            log.escribeLog("-----------------------------------------------------------------------START");

            List <string> errores = new List <string>();
            APPSETTING    sett    = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("filePath") && x.ACTIVO).FirstOrDefault();//RSG 30.07.2018

            if (sett == null)
            {
                errores.Add("Falta configuración de PATH!");
            }
            //var cadena = ConfigurationManager.AppSettings["url"];
            var           cadena    = sett.VALUE;
            List <doc>    lstd      = new List <doc>();
            List <string> archivos2 = new List <string>();

            try
            {
                string[] archivos = Directory.GetFiles(cadena += sap += datasync, "*.txt", SearchOption.AllDirectories);
                Console.WriteLine(archivos.Length + " _1");//RSG 30.07.2018
                log.escribeLog("Archivos en carpeta: " + archivos.Length);
                //en este for sabre cuales archivos usar
                for (int i = 0; i < archivos.Length; i++)
                {
                    //separo por carpetas
                    string[] varx = archivos[i].Split('\\');
                    //separo especificamente el nombre para saber si es BUDG O LOG
                    string[] varNA = varx[varx.Length - 1].Split('_');
                    if (varNA[1] == "LOG")
                    {
                        archivos2.Add(archivos[i]);
                    }
                }
                Console.WriteLine(archivos2.Count + " _2");//RSG 30.07.2018
                log.escribeLog("Archivos tipo LOG: " + archivos2.Count);
                //en este for armo un objeto para posterior manipular hacia la bd
                for (int i = 0; i < archivos2.Count; i++)
                {
                    //Leo todas las lineas del archivo
                    //string[] readText = File.ReadAllLines(archivos2[i]);
                    //foreach (var item in readText)
                    int cont = 1;
                    foreach (var item in File.ReadLines(archivos2[i]))
                    {
                        doc      d   = new doc();
                        string[] val = item.Split('|');
                        if (val != null)
                        {
                            if (item != "")
                            {
                                if (val.Length < 2)
                                {
                                    log.escribeLog("Archivo inválido" + archivos2[i]);
                                    errores.Add("Archivo inválido" + archivos2[i]);
                                }
                                else
                                {
                                    if (val[1] == "Error" || val[1] == "Error - Reprocess")
                                    {
                                        d.numero_TAT = val[0];
                                        d.Mensaje    = val[1];
                                        //d.Cuenta_cargo = Convert.ToInt64(val[5]);
                                        //d.Cuenta_abono = Convert.ToInt64(val[6]);
                                        log.escribeLog("(E) - NUM_DOC:" + val[0] + " -- MENSAJE: " + val[1]);
                                    }
                                    else
                                    {
                                        log.escribeLog("(S) - NUM_DOC:" + val[0] + " -- MENSAJE: " + val[1] + " -- NUM_SAP: " + val[2]);
                                        d.numero_TAT   = val[0];
                                        d.Mensaje      = val[1];
                                        d.Num_doc_SAP  = decimal.Parse(val[2]);
                                        d.Sociedad     = val[3];
                                        d.Año          = int.Parse(val[4]);
                                        d.Cuenta_cargo = Convert.ToInt64(val[5]);
                                        d.Cuenta_abono = Convert.ToInt64(val[6]);
                                        try
                                        {
                                            d.blart   = val[7];
                                            d.kunnr   = val[8];
                                            d.desc    = val[9];
                                            d.importe = decimal.Parse(val[10]);
                                            d.fechac  = decimal.Parse(val[11]);
                                        }
                                        catch { }
                                    }
                                    d.pos  = cont;
                                    d.file = archivos2[i];
                                    lstd.Add(d);
                                }
                            }
                        }
                        cont++;
                    }
                }
                foreach (doc d in lstd)
                {
                    if (d.pos == lstd.Where(x => x.file == d.file).OrderByDescending(x => x.pos).First().pos)
                    {
                        d.last = true;
                    }
                    else
                    {
                        d.last = false;
                    }
                }
                log.escribeLog("-------------------------------");
                log.escribeLog("DOCS: " + lstd.Count + "ARCHIVOS: " + archivos2.Count);
                log.escribeLog("-------------------------------ValidarBD");
                validarBd(lstd, archivos2);
            }
            catch (Exception ex)
            {
                log.escribeLog("ERROR LOG: " + ex.Message);
                errores.Add(ex.Message);
                throw new Exception(ex.Message);
            }
            return(errores);
        }
        public List <string> mandarCorreo(string pay, string vkorg, string vtweg, string spart, string correo, DateTime fi, DateTime ff, DateTime fn)
        {
            List <string> errores = new List <string>();

            try
            {
                //LEJ 20.07.2018------------------------------
                //Validar si hay coincidencias en el filtro
                ////var dOCUMENTOes = db.DOCUMENTOes.Where(x => x.PAYER_ID == pay && x.VKORG == vkorg && x.VTWEG == vtweg && x.SPART == spart && x.PAYER_EMAIL == correo && ((x.FECHAC.Value.Day >= fi.Day && x.FECHAC.Value.Day <= ff.Day) && x.FECHAC.Value.Month == ff.Month && x.FECHAC.Value.Year == ff.Year)).Include(d => d.CLIENTE).Include(d => d.PAI).Include(d => d.SOCIEDAD).Include(d => d.TALL).Include(d => d.TSOL).Include(d => d.USUARIO).ToList();
                var dOCUMENTOes = db.DOCUMENTOes.Where(x => x.PAYER_ID == pay && x.VKORG == vkorg && x.VTWEG == vtweg && x.SPART == spart && x.PAYER_EMAIL == correo && (x.FECHAC >= fi && x.FECHAC <= ff)).Include(d => d.CLIENTE).Include(d => d.PAI).Include(d => d.SOCIEDAD).Include(d => d.TALL).Include(d => d.TSOL).Include(d => d.USUARIO).ToList();
                ////DOCUMENTOA dz = null;
                //Para ver si encuentra un match
                ////int xv = 0;
                int xxv = 0;
                for (int i = 0; i < dOCUMENTOes.Count; i++)
                {
                    PorEnviar pe = new PorEnviar();
                    if (pe.seEnvia(dOCUMENTOes[i], db, log))
                    {
                        xxv++;
                    }
                }
                //si encontro entra.
                if (xxv > 0)//LEJ 20.07.2018-----
                {
                    ////string mailt = ConfigurationManager.AppSettings["mailt"];
                    APPSETTING mailC = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("mail") && x.ACTIVO).FirstOrDefault();
                    if (mailC == null)
                    {
                        Console.Write("Falta configuración de tipo de email!"); errores.Add("Falta configuración de tipo de email!"); return(errores);
                    }                              //RSG 30.07.2018

                    string  mailt   = mailC.VALUE; //RSG 30.07.2018
                    CONMAIL conmail = db.CONMAILs.Find(mailt);
                    //correo = correoA;
                    if (string.IsNullOrEmpty(correoA))
                    {
                        correoA = correo;
                    }
                    if (conmail != null)
                    {
                        ////MailMessage mail = new MailMessage(conmail.MAIL, "*****@*****.**");
                        MailMessage mail = new MailMessage(conmail.MAIL, correoA);
                        log.escribeLog("MAIL TO: TST");
                        log.escribeLog("MAIL TO: " + correo);
                        SmtpClient client = new SmtpClient();
                        if (conmail.SSL)
                        {
                            client.Port                  = (int)conmail.PORT;
                            client.EnableSsl             = conmail.SSL;
                            client.UseDefaultCredentials = false;
                            client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                        }
                        else
                        {
                            client.UseDefaultCredentials = true;
                            client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                        }
                        client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        client.Host           = conmail.HOST;
                        try
                        {
                            APPSETTING urlC = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("url") && x.ACTIVO).FirstOrDefault();
                            ////string cadUrl = System.Configuration.ConfigurationManager.AppSettings["url"];
                            if (urlC == null)
                            {
                                Console.Write("Falta configuración de URL!"); errores.Add("Falta configuración!"); return(errores);
                            }                           //RSG 30.07.2018
                            string cadUrl = urlC.VALUE; //RSG 30.07.2018
                            cadUrl += "Negociaciones/Index/";
                            string UrlDirectory = cadUrl;
                            ////UrlDirectory += "?pay=" + pay + "&vkorg=" + vkorg + "&vtweg=" + vtweg + "&spart=" + spart + "&correo=" + correo + "&fi=" + fi.ToShortDateString() + "&ff=" + ff.ToShortDateString();
                            UrlDirectory += "?pay=" + pay + "&vkorg=" + vkorg + "&vtweg=" + vtweg + "&spart=" + spart + "&correo=" + correo + "&fn=" + fn.ToShortDateString();
                            log.escribeLog("url: " + UrlDirectory);

                            WebRequest myRequest = WebRequest.Create(UrlDirectory);
                            myRequest.Method = "GET";
                            WebResponse  myResponse = myRequest.GetResponse();
                            StreamReader sr         = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
                            string       result     = sr.ReadToEnd();
                            sr.Close();
                            myResponse.Close();
                            mail.IsBodyHtml = true;
                            mail.Body       = result;
                            mail.Subject    = "TAT Kellogg's - " + DateTime.Now.ToShortDateString();
                            client.Send(mail);
                            log.escribeLog("MAIL ENVIADO a " + correoA);
                        }
                        catch (Exception ex)
                        {
                            log.escribeLog("ENVIADO: NO");
                            errores.Add("No se ha podido enviar el email");
                            log.escribeLog("ERROR: " + ex.InnerException);
                            ////throw new Exception("No se ha podido enviar el email", ex.InnerException);
                            return(errores);
                        }
                    }
                }
            }
            catch (Exception exe)
            {
                errores.Add(exe.ToString());
            }
            return(errores);
        }
        public List <string> armarCorreos()
        {
            List <string> errores = new List <string>();

            try
            {
                Console.Write("Escriba el correo: ");
                correoA = Console.ReadLine();

                APPSETTING lg = db.APPSETTINGs.Where(x => x.NOMBRE == "logPath" && x.ACTIVO).FirstOrDefault();
                log.ruta = lg.VALUE + "Nego_";
                log.escribeLog("-----------------------------------------------------------------------START");

                var _hoy = DateTime.Now;
                ////var _neg = db.NEGOCIACIONs.Where(x => x.FECHAN.Day == _hoy.Day && x.FECHAN.Month == _hoy.Month && x.FECHAN.Year == _hoy.Year && x.ACTIVO == true).FirstOrDefault();
                List <NEGOCIACION> nn = db.NEGOCIACIONs.Where(x => x.ID == 1 && x.ACTIVO).ToList();
                var _neg = nn.FirstOrDefault(x => x.FECHAN == _hoy.Date && x.ACTIVO);
                if (_neg != null)
                {
                    ////Realizo una consulta por medio de la coincidencia entre fechas
                    ////var fs = db.DOCUMENTOes.Where(f => (f.FECHAC.Value.Day >= _neg.FECHAI.Day && f.FECHAC.Value.Day <= _neg.FECHAF.Day) && f.FECHAC.Value.Month == _neg.FECHAF.Month && f.FECHAC.Value.Year == _neg.FECHAF.Year).ToList();
                    var fs  = db.DOCUMENTOes.Where(f => (f.FECHAC >= _neg.FECHAI && f.FECHAC <= _neg.FECHAF) && f.DOCUMENTOAs.Any()).ToList();
                    var fs3 = fs.DistinctBy(q => new { q.PAYER_ID, q.PAYER_EMAIL }).ToList();
                    for (int i = 0; i < fs3.Count; i++)
                    {
                        ////if (fs3[i].PAYER_ID == "0000400564")
                        ////    fs3[i].PAYER_ID = "0000400564";
                        if (fs3[i].PAYER_ID != null && fs3[i].PAYER_EMAIL != null)
                        {
                            log.escribeLog("PAYER: " + fs3[i].PAYER_ID);
                            log.escribeLog("PAYER MAIL: " + fs3[i].PAYER_EMAIL);
                            ////var cco = db.CONTACTOCs.Where(x => x.KUNNR == fs3[i].PAYER_ID && x.EMAIL == fs3[i].PAYER_EMAIL).Select(x=>x).ToList();
                            var cco = (from c in db.CONTACTOCs
                                       select new { c.KUNNR, c.EMAIL, CARTA = c.CARTA == null ? false : (bool)c.CARTA }).ToList();
                            var co = cco.FirstOrDefault(x => x.KUNNR == fs3[i].PAYER_ID && x.EMAIL == fs3[i].PAYER_EMAIL);
                            if (co == null)
                            {
                                var de = fs3[i].NUM_DOC;
                                if (fs3[i].DOCUMENTOAs.Count > 0)
                                {
                                    var dsa = fs3[i].DOCUMENTOAs.FirstOrDefault(x => x.NUM_DOC == de && x.CLASE == "OTR");
                                    if (dsa == null)
                                    {
                                        ////bool ban = true;
                                        ////if (ban)
                                        errores.AddRange(mandarCorreo(fs3[i].PAYER_ID, fs3[i].VKORG, fs3[i].VTWEG, fs3[i].SPART, fs3[i].PAYER_EMAIL, _neg.FECHAI, _neg.FECHAF, _neg.FECHAN));
                                    }
                                }
                            }
                            else
                            {
                                ////if (co.CARTA == null)
                                ////    co.CARTA = true;
                                if (!co.CARTA)
                                {
                                    var de = fs3[i].NUM_DOC;
                                    if (fs3[i].DOCUMENTOAs.Count > 0)
                                    {
                                        var dsa = fs3[i].DOCUMENTOAs.FirstOrDefault(x => x.NUM_DOC == de && x.CLASE == "OTR");
                                        if (dsa == null)
                                        {
                                            ////bool ban = true;
                                            ////if (ban)
                                            errores.AddRange(mandarCorreo(fs3[i].PAYER_ID, fs3[i].VKORG, fs3[i].VTWEG, fs3[i].SPART, fs3[i].PAYER_EMAIL, _neg.FECHAI, _neg.FECHAF, _neg.FECHAN));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception exe)
            {
                errores.Add(exe.ToString());
            }
            return(errores);
        }
        public void enviarCorreo(decimal nd, int c, int pos)
        {
            try
            {
                ////var workflow = db.FLUJOes.Where(a => a.NUM_DOC.Equals(nd) && a.POS == pos).OrderByDescending(a => a.POS).FirstOrDefault();
                var        workflow  = db.FLUJOes.Where(a => a.NUM_DOC.Equals(nd)).OrderByDescending(a => a.POS).FirstOrDefault();
                APPSETTING mailtC    = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("mail") && x.ACTIVO).FirstOrDefault();
                string     mailt     = mailtC.VALUE;
                APPSETTING mailTestC = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("mailTest") && x.ACTIVO).FirstOrDefault();
                string     mtest     = mailTestC.VALUE;
                string     mailTo    = "";
                if (mtest == "X")
                {
                    mailTo = "*****@*****.**";
                }
                else
                {
                    mailTo = workflow.USUARIO.EMAIL;
                }
                CONMAIL conmail = db.CONMAILs.Find(mailt);
                if (conmail != null)
                {
                    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(conmail.MAIL, mailTo);
                    SmtpClient client = new SmtpClient();
                    if (conmail.SSL)
                    {
                        client.Port                  = (int)conmail.PORT;
                        client.EnableSsl             = conmail.SSL;
                        client.UseDefaultCredentials = false;
                        client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                    }
                    else
                    {
                        client.UseDefaultCredentials = true;
                        client.Credentials           = new NetworkCredential(conmail.MAIL, conmail.PASS);
                    }
                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
                    client.Host           = conmail.HOST;

                    APPSETTING urlC         = db.APPSETTINGs.Where(x => x.NOMBRE.Equals("url") && x.ACTIVO).FirstOrDefault();
                    string     cadUrl       = urlC.VALUE;
                    string     UrlDirectory = "";
                    if (c == 1)
                    {
                        UrlDirectory = cadUrl + "Correos/Index/" + nd + "?spras=" + workflow.USUARIO.SPRAS_ID;
                        ////mail.Subject = "Aprobado";
                        mail.Subject = "A" + nd + "-" + DateTime.Now.ToShortTimeString();
                    }
                    if (c == 3)
                    {
                        UrlDirectory = cadUrl + "Correos/Details/" + nd + "?spras=" + workflow.USUARIO.SPRAS_ID;
                        ////mail.Subject = "Rechazado";
                        mail.Subject = "R" + nd + "-" + DateTime.Now.ToShortTimeString();
                    }
                    WebRequest myRequest = WebRequest.Create(UrlDirectory);
                    myRequest.Method      = "GET";
                    myRequest.ContentType = "application/x-www-form-urlencoded";
                    // Set credentials to use for this request.
                    myRequest.Credentials = CredentialCache.DefaultCredentials;
                    WebResponse  myResponse = myRequest.GetResponse();
                    StreamReader sr         = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
                    string       result     = sr.ReadToEnd();
                    sr.Close();
                    myResponse.Close();
                    mail.AlternateViews.Add(Mail_Body(result, "MX"));//B20180803 MGC Correos
                    mail.IsBodyHtml = true;
                    //mail.Body = result;
                    client.Send(mail);
                }
            }
            catch (Exception ex)
            {
                log.escribeLog("ERROR - " + ex.InnerException.ToString());
                ////throw new Exception("No se ha podido enviar el email", ex.InnerException);
            }
        }