Ejemplo n.º 1
0
        public void Flujosprocesa(FLUJO f, string user)
        {
            WFARTHAEntities db = new WFARTHAEntities();

            ProcesaFlujo pf     = new ProcesaFlujo();
            DOCUMENTO    d      = db.DOCUMENTOes.Find(f.NUM_DOC);
            FLUJO        actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();

            FLUJO flujo = actual;

            flujo.ESTATUS     = f.ESTATUS;
            flujo.FECHAM      = DateTime.Now;
            flujo.COMENTARIO  = f.COMENTARIO;
            flujo.USUARIOA_ID = user;// User.Identity.Name;//MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario

            flujo.ID_RUTA_A    = f.ID_RUTA_A;
            flujo.RUTA_VERSION = f.RUTA_VERSION;
            flujo.STEP_AUTO    = f.STEP_AUTO;
            string res = pf.procesa(flujo, "", false, "", "");

            if (res.Equals("0"))//Aprobado
            {
                //
            }
            else if (res.Equals("1") | res.Equals("2") | res.Equals("3"))//CORREO
            {
                //
            }
            else
            {
                //
            }
        }
        public string Procesa2(decimal id)
        {
            String       res = "Archivo generado";
            ProcesaFlujo pf  = new ProcesaFlujo();

            if (ModelState.IsValid)
            {
                res = pf.procesa(id);
                if (res.Equals("0"))//Aprobado
                {
                    //return RedirectToAction("Details", "Solicitudes", new { id = id });
                    res = "Archivo generado";
                }
                //else if (res.Equals("1") | res.Equals("2") | res.Equals("3"))//CORREO
                //{

                //    return RedirectToAction("Details", "Solicitudes", new { id = id });
                //}
                //else
                //{
                //    TempData["error"] = res;
                //    return RedirectToAction("Details", "Solicitudes", new { id = id });
                //}
            }

            return(res);
        }
Ejemplo n.º 3
0
        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();
            }
        }
Ejemplo n.º 4
0
        // GET: Flujos/Create
        public ActionResult Create(decimal id)
        {
            int pagina = 103; //ID EN BASE DE DATOS

            using (TruequeEntities db = new TruequeEntities())
            {
                string u    = User.Identity.Name;
                var    user = db.USUARIOs.Where(a => a.ID.Equals(u)).FirstOrDefault();
                ViewBag.permisos = db.PAGINAVs.Where(a => a.ID.Equals(user.ID)).ToList();
                ViewBag.carpetas = db.CARPETAVs.Where(a => a.USUARIO_ID.Equals(user.ID)).ToList();
                ViewBag.usuario  = user; ViewBag.returnUrl = Request.Url.PathAndQuery;;
                ViewBag.rol      = user.PUESTO.PUESTOTs.Where(a => a.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.Title    = db.PAGINAs.Where(a => a.ID.Equals(pagina)).FirstOrDefault().PAGINATs.Where(b => b.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.warnings = db.WARNINGVs.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();
                ViewBag.textos   = db.TEXTOes.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();

                try
                {
                    string p = Session["pais"].ToString();
                    ViewBag.pais = p + ".png";
                }
                catch
                {
                    //ViewBag.pais = "mx.png";
                    //return RedirectToAction("Pais", "Home");
                }
                Session["spras"] = user.SPRAS_ID;

                DOCUMENTO dOCUMENTO = db.DOCUMENTOes.Find(id);
                //db.DOCUMENTOes.Add(dOCUMENTO);
                //db.SaveChanges();

                int rol = user.MIEMBROS.FirstOrDefault().ROL_ID;
                //WORKFV wf = db.WORKFHs.Where(a => a.BUKRS.Equals(dOCUMENTO.SOCIEDAD_ID) && a.ROL_ID == rol).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();
                WORKFV wf = db.WORKFHs.Where(a => a.TSOL_ID.Equals(dOCUMENTO.TSOL_ID)).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();

                WORKFP wp = wf.WORKFPs.OrderBy(a => a.POS).FirstOrDefault();
                FLUJO  f  = new FLUJO();
                f.WORKF_ID    = wf.ID;
                f.WF_VERSION  = wf.VERSION;
                f.WF_POS      = wp.POS;
                f.NUM_DOC     = dOCUMENTO.NUM_DOC;
                f.POS         = 1;
                f.LOOP        = 1;
                f.USUARIOA_ID = dOCUMENTO.USUARIOC_ID;
                f.ESTATUS     = "I";
                f.FECHAC      = DateTime.Now;
                f.FECHAM      = DateTime.Now;
                ProcesaFlujo pf = new ProcesaFlujo();
                string       c  = pf.procesa(f, "");

                //WORKFP next = wf.WORKFPs.Where(a => a.POS.Equals(wp.NEXT_STEP)).FirstOrDefault();
                //FLUJO fn = new FLUJO();
                //fn.WORKF_ID = wf.ID;
                //fn.WF_VERSION = wf.VERSION;
                //fn.WF_POS = next.POS;
                //fn.NUM_DOC = dOCUMENTO.NUM_DOC;
                //fn.POS = 2;
                //fn.LOOP = 1;
                //fn.ESTATUS = "P";
                //fn.FECHAC = DateTime.Now;
                //fn.FECHAM = DateTime.Now;
                //fn.USUARIOA_ID = db.USUARIOs.Where(a => a.ID.Equals(dOCUMENTO.USUARIOC_ID)).FirstOrDefault().MANAGER;

                //db.FLUJOes.Add(f);
                //db.FLUJOes.Add(fn);

                db.SaveChanges();
                if (wp.EMAIL.Equals("X"))
                {
                    return(RedirectToAction("Index", "Correos", new { id = id }));
                }

                return(RedirectToAction("Details", "Solicitudes", new { id = id }));
            }
        }
Ejemplo n.º 5
0
        public ActionResult Nuevo(decimal id)
        {
            try
            {
                ProcesaFlujo pf        = new ProcesaFlujo();
                DOCUMENTO    dOCUMENTO = db.DOCUMENTOes.Find(id);
                ////WORKFV wf = db.WORKFHs.Where(a => a.BUKRS.Equals(dOCUMENTO.SOCIEDAD_ID) && a.ROL_ID == rol).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();
                WORKFV wf = db.WORKFHs.Where(a => a.TSOL_ID.Equals(dOCUMENTO.TSOL_ID)).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();
                if (wf != null)
                {
                    WORKFP wp = wf.WORKFPs.OrderBy(a => a.POS).FirstOrDefault();
                    FLUJO  f  = new FLUJO();
                    f.WORKF_ID    = wf.ID;
                    f.WF_VERSION  = wf.VERSION;
                    f.WF_POS      = wp.POS;
                    f.NUM_DOC     = dOCUMENTO.NUM_DOC;
                    f.POS         = 1;
                    f.LOOP        = 1;
                    f.USUARIOA_ID = dOCUMENTO.USUARIOC_ID;
                    f.USUARIOD_ID = dOCUMENTO.USUARIOD_ID;
                    f.ESTATUS     = "I";
                    f.FECHAC      = DateTime.Now;
                    f.FECHAM      = DateTime.Now;
                    f.COMENTARIO  = "";//ADD RSG 20.08.2018
                    string c     = pf.procesa(f, "");
                    FLUJO  conta = db.FLUJOes.Where(x => x.NUM_DOC == f.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                    while (c == "1")
                    {
                        Email     em           = new Email();
                        string    UrlDirectory = Request.Url.GetLeftPart(UriPartial.Path);
                        string    image        = Server.MapPath("~/images/logo_kellogg.png");
                        DOCUMENTO docc         = db.DOCUMENTOes.Where(x => x.NUM_DOC == dOCUMENTO.NUM_DOC).First();
                        string    imageFlag    = Server.MapPath("~/images/flags/mini/" + docc.PAIS_ID + ".png");
                        em.enviaMailC(f.NUM_DOC, true, Session["spras"].ToString(), UrlDirectory, "Index", image, imageFlag);

                        if (conta.WORKFP.ACCION.TIPO == "B")
                        {
                            ////WORKFP wpos = db.WORKFPs.Where(x => x.ID == conta.WORKF_ID && x.VERSION == conta.WF_VERSION && x.POS == conta.WF_POS).FirstOrDefault();
                            conta.ESTATUS = "A";
                            conta.FECHAM  = DateTime.Now;
                            c             = pf.procesa(conta, "");
                            conta         = db.FLUJOes.Where(x => x.NUM_DOC == f.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                        }
                        else
                        {
                            c = "";
                        }
                    }
                    Estatus   es  = new Estatus();//RSG 18.09.2018
                    DOCUMENTO doc = db.DOCUMENTOes.Find(f.NUM_DOC);
                    conta.STATUS          = es.getEstatus(doc);
                    db.Entry(conta).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
            catch
            {
                return(RedirectToAction("Index", "Solicitudes"));
            }

            return(RedirectToAction("Index", "Solicitudes"));
        }
Ejemplo n.º 6
0
        public ActionResult Procesa(FLUJO f)
        {
            FLUJO actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();

            DOCUMENTO      d   = db.DOCUMENTOes.Find(f.NUM_DOC);
            List <TS_FORM> tts = db.TS_FORM.Where(a => a.BUKRS_ID.Equals(d.SOCIEDAD_ID) && a.LAND_ID.Equals(d.PAIS_ID) && a.TS_CAMPO.ACTIVO).ToList();

            if (actual.WORKFP.ACCION.TIPO == "R")
            {
                List <DOCUMENTOT> ddt = new List <DOCUMENTOT>();
                foreach (TS_FORM ts in tts)
                {
                    DOCUMENTOT dts = new DOCUMENTOT();
                    dts.NUM_DOC   = f.NUM_DOC;
                    dts.TSFORM_ID = ts.POS;
                    try
                    {
                        string temp = Request.Form["chk-" + ts.POS].ToString();
                        if (temp == "on")
                        {
                            dts.CHECKS = true;
                        }
                    }
                    catch
                    {
                        dts.CHECKS = false;
                    }
                    int tt = db.DOCUMENTOTS.Where(a => a.NUM_DOC.Equals(f.NUM_DOC) && a.TSFORM_ID == ts.POS).Count();
                    if (tt == 0)
                    {
                        ddt.Add(dts);
                    }
                    else
                    {
                        db.Entry(dts).State = EntityState.Modified;
                    }
                }
                if (ddt.Count > 0)
                {
                    db.DOCUMENTOTS.AddRange(ddt);
                }
                db.SaveChanges();
            }

            FLUJO flujo = actual;

            flujo.ESTATUS     = f.ESTATUS;
            flujo.FECHAM      = DateTime.Now;
            flujo.COMENTARIO  = f.COMENTARIO;
            flujo.USUARIOA_ID = User.Identity.Name;
            ProcesaFlujo pf = new ProcesaFlujo();

            if (ModelState.IsValid)
            {
                string res = pf.procesa(flujo, "");

                using (TruequeEntities db1 = new TruequeEntities())
                {
                    FLUJO     ff   = db1.FLUJOes.Where(x => x.NUM_DOC == flujo.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                    Estatus   es   = new Estatus();//RSG 18.09.2018
                    DOCUMENTO ddoc = db1.DOCUMENTOes.Find(f.NUM_DOC);
                    ff.STATUS           = es.getEstatus(ddoc);
                    db1.Entry(ff).State = EntityState.Modified;
                    db1.SaveChanges();
                }


                if (res.Equals("0"))//Aprobado
                {
                    ////return RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC });
                    return(RedirectToAction("Index", "Solicitudes"));
                }
                else if (res.Equals("1") || res.Equals("2") || res.Equals("3"))//CORREO
                {
                    Email     em           = new Email();
                    string    UrlDirectory = Request.Url.GetLeftPart(UriPartial.Path);
                    string    image        = Server.MapPath("~/images/logo_kellogg.png");
                    DOCUMENTO doc          = db.DOCUMENTOes.Where(x => x.NUM_DOC == flujo.NUM_DOC).First();
                    string    imageFlag    = Server.MapPath("~/images/flags/mini/" + doc.PAIS_ID + ".png");
                    string    spras_id     = FnCommon.ObtenerSprasId(db, User.Identity.Name);
                    if (res.Equals("1") || res.Equals("2"))//CORREO
                    {
                        em.enviaMailC(f.NUM_DOC, true, spras_id, UrlDirectory, "Index", image, imageFlag);
                    }
                    else
                    {
                        em.enviaMailC(f.NUM_DOC, true, spras_id, UrlDirectory, "Details", image, imageFlag);
                        return(RedirectToAction("Index", "Home"));
                    }
                    ////return RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC });
                    return(RedirectToAction("Index", "Solicitudes"));
                }
                else
                {
                    TempData["error"] = res;
                    ////return RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC });
                    return(RedirectToAction("Index", "Solicitudes"));
                }
            }

            int    pagina = 103; //ID EN BASE DE DATOS
            string u      = User.Identity.Name;
            var    user   = db.USUARIOs.Where(a => a.ID.Equals(u)).FirstOrDefault();

            FnCommon.ObtenerConfPage(db, pagina, User.Identity.Name, this.ControllerContext.Controller);
            try
            {
                string p = Session["pais"].ToString();
                ViewBag.pais = p + ".png";
            }
            catch
            {
                ////return RedirectToAction("Pais", "Home");
            }
            Session["spras"] = user.SPRAS_ID;

            return(View(f));
        }
Ejemplo n.º 7
0
        public void validarBd(List <doc> lstd, List <string> archivos)
        {
            int x = 0;

            for (int i = 0; i < lstd.Count; i++)
            {
                decimal de = Convert.ToDecimal(lstd[i].numero_TAT);
                log.escribeLog("NUM_DOC: " + de);
                //Corroboro que exista la informacion
                var dA = db.DOCUMENTOes.Where(y => y.NUM_DOC == de).FirstOrDefault();
                //si encuentra una coincidencia
                if (dA != null)
                {
                    log.escribeLog("NUM_DOC existe: " + dA.NUM_DOC);
                    //para el estatus E/X
                    if (lstd[i].Mensaje == string.Empty)
                    {
                        dA.ESTATUS_SAP = "X";
                    }
                    else if (lstd[i].Mensaje != string.Empty)
                    {
                        if (lstd[i].Mensaje.Equals("Error"))
                        {
                            dA.ESTATUS_SAP = "E";
                        }
                        if (lstd[i].Mensaje.Equals("Success"))
                        {
                            dA.ESTATUS_SAP = "X";
                        }
                    }
                    try
                    {
                        //Hacemos el update en BD
                        dA.DOCUMENTO_SAP = lstd[i].Num_doc_SAP.ToString();
                        if (dA.ESTATUS_WF == "P")
                        {
                            dA.ESTATUS_WF = "A";
                        }
                        db.Entry(dA).State = EntityState.Modified;
                        x = x + db.SaveChanges();
                        //Agregamos en la tabla los valores
                        DOCUMENTOSAP ds = new DOCUMENTOSAP();
                        ds.NUM_DOC   = decimal.Parse(lstd[i].numero_TAT);
                        ds.BUKRS     = lstd[i].Sociedad;
                        ds.EJERCICIO = lstd[i].Año;
                        ds.CUENTA_A  = lstd[i].Cuenta_abono.ToString();
                        ds.CUENTA_C  = lstd[i].Cuenta_cargo.ToString();
                        ds.BLART     = lstd[i].blart;
                        ds.KUNNR     = lstd[i].kunnr;
                        ds.DESCR     = lstd[i].desc;
                        ds.IMPORTE   = lstd[i].importe;
                        try
                        {
                            db.DOCUMENTOSAPs.Add(ds);
                            db.SaveChanges();
                            log.escribeLog("Actualiza doc -- " + dA.NUM_DOC);
                            if (lstd[i].last)
                            {
                                moverArchivo(lstd[i].file);
                            }
                            log.escribeLog("Mueve archivo -- " + lstd[i].file);
                            //moverArchivo(archivos[i]);
                        }
                        catch
                        {
                            if (dA.ESTATUS_WF == "P")
                            {
                                dA.ESTATUS_WF = "A";
                            }
                            DOCUMENTOSAP ds1 = db.DOCUMENTOSAPs.Find(ds.NUM_DOC);
                            ds1.BUKRS     = lstd[i].Sociedad;
                            ds1.EJERCICIO = lstd[i].Año;
                            ds1.CUENTA_A  = lstd[i].Cuenta_abono.ToString();
                            ds1.CUENTA_C  = lstd[i].Cuenta_cargo.ToString();
                            ds.BLART      = lstd[i].blart;
                            ds.KUNNR      = lstd[i].kunnr;
                            ds.DESCR      = lstd[i].desc;
                            ds.IMPORTE    = lstd[i].importe;
                            if (lstd[i].fechac.ToString().Length == 8)
                            {
                                ds.FECHAC = new DateTime(int.Parse(lstd[i].fechac.ToString().Substring(0, 4)), int.Parse(lstd[i].fechac.ToString().Substring(4, 2)), int.Parse(lstd[i].fechac.ToString().Substring(6, 2)));
                            }
                            db.Entry(ds1).State = EntityState.Modified;

                            db.SaveChanges();
                            log.escribeLog("Actualiza doc -- " + dA.NUM_DOC);
                            if (lstd[i].last)
                            {
                                moverArchivo(lstd[i].file);
                            }
                            log.escribeLog("Mueve archivo -- " + lstd[i].file);
                            //moverArchivo(archivos[i]);
                        }
                    }
                    catch (Exception varEx)
                    {
                        log.escribeLog("Error LOG -- " + varEx.ToString());
                        var ex = varEx.ToString();
                    }

                    if (dA.DOCUMENTO_REF != null)
                    {
                        if (dA.DOCUMENTO_REF > 0)
                        {
                            log.escribeLog("Es relacionado -- NUM_DOC: " + dA.NUM_DOC + " - NUM_PADRE: " + dA.DOCUMENTO_REF);
                            List <DOCUMENTO> rela = db.DOCUMENTOes.Where(a => a.DOCUMENTO_REF == dA.DOCUMENTO_REF & a.ESTATUS_C != "C" & a.ESTATUS_WF != "B").ToList();
                            //DOCUMENTO parcial = rela.Where(a => a.TSOL_ID == "RP").FirstOrDefault();
                            DOCUMENTO parcial = rela.FirstOrDefault(a => a.TSOL.REVERSO);
                            if (parcial != null & !dA.TSOL.REVERSO)
                            {
                                string pa = "";
                                if (parcial.TSOL_ID != "RP")
                                {
                                    pa = "C";
                                }
                                log.escribeLog("Es parcial -- NUM_DOC: " + dA.NUM_DOC + " - NUM_PADRE: " + dA.DOCUMENTO_REF);
                                bool contabilizados = true;
                                foreach (DOCUMENTO rel in rela)
                                {
                                    if (!rel.TSOL.REVERSO)
                                    {
                                        if (rel.ESTATUS_SAP != "X")
                                        {
                                            contabilizados = false;
                                        }
                                    }
                                }

                                if (contabilizados)
                                {
                                    log.escribeLog("Estan contabilizados -- NUM_DOC: " + dA.NUM_DOC + " - NUM_PADRE: " + dA.DOCUMENTO_REF);
                                    FLUJO f = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault();
                                    if (f != null)
                                    {
                                        f.ESTATUS = "A";
                                        f.FECHAM  = DateTime.Now;
                                        ProcesaFlujo p   = new ProcesaFlujo();
                                        string       res = p.procesa(f, pa);
                                        log.escribeLog("Procesa Flujo 1 -- NUM_DOC: " + parcial.NUM_DOC + " - RES: " + res);

                                        if (res == "0" | res == "" | res == "1")
                                        {
                                            FLUJO f1 = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault();

                                            f1.ESTATUS = "A";
                                            f1.FECHAM  = DateTime.Now;
                                            res        = p.procesa(f1, "");
                                            log.escribeLog("Procesa Flujo 2 -- NUM_DOC: " + parcial.NUM_DOC + " - RES: " + res);
                                        }

                                        //if (res == "0" | res == "")
                                    }
                                }
                            }
                            else
                            {
                                //////------------------PARA REVERSAS TOTALES PRUEBA
                                //parcial = rela.Where(a => a.TSOL.REVERSO == true).FirstOrDefault();
                                //if (parcial != null)
                                //{

                                //    log.escribeLog("Es reverso -- NUM_DOC: " + dA.NUM_DOC + " - NUM_PADRE: " + dA.DOCUMENTO_REF);
                                //    bool contabilizados = true;
                                //    foreach (DOCUMENTO rel in rela)
                                //    {
                                //        if (rel.ESTATUS_SAP != "X")
                                //            contabilizados = false;
                                //    }

                                //    if (contabilizados)
                                //    {
                                //        log.escribeLog("Estan contabilizados -- NUM_DOC: " + dA.NUM_DOC + " - NUM_PADRE: " + dA.DOCUMENTO_REF);
                                //        DOCUMENTO docPadre = db.DOCUMENTOes.Find(dA.DOCUMENTO_REF);
                                //        docPadre.ESTATUS = "R";
                                //        db.Entry(docPadre).State = EntityState.Modified;
                                //        db.SaveChanges();
                                //    }
                                //}
                            }
                        }
                    }
                }
            }
            try
            {
                //if (x == lstd.Count)
                //{
                //    moverArchivos(archivos);
                //}
            }
            catch (Exception varEx)
            {
                var ex = varEx.ToString();
                log.escribeLog("Error LOG -- " + varEx.ToString());
                throw new Exception(ex);
            }
        }
Ejemplo n.º 8
0
        public int creaRecurrente(string id_d, string tsol)
        {
            string   dates   = DateTime.Now.ToString("dd/MM/yyyy");
            DateTime theTime = DateTime.ParseExact(dates, //"06/04/2018 12:00:00 a.m."
                                                   "dd/MM/yyyy",
                                                   System.Globalization.CultureInfo.InvariantCulture,
                                                   System.Globalization.DateTimeStyles.None);

            var relacionada_neg = "";
            var relacionada_dis = "";

            DOCUMENTO      dOCUMENTO   = new DOCUMENTO();
            DOCUMENTO      dOCpADRE    = new DOCUMENTO();
            string         errorString = "";
            TAT001Entities db          = new TAT001Entities();


            string           p     = "";
            List <TREVERSAT> ldocr = new List <TREVERSAT>();
            decimal          rel   = 0;

            try
            {
                if (id_d == null || id_d.Equals(""))
                {
                    throw new Exception();
                }
                rel = Convert.ToDecimal(id_d);
            }
            catch
            {
                rel = 0;
            }

            //Obtener los documentos relacionados
            List <DOCUMENTO> docsrel = new List <DOCUMENTO>();

            SOCIEDAD id_bukrs = new SOCIEDAD();
            var      id_pais  = new PAI();
            var      id_waers = db.MONEDAs.Where(m => m.ACTIVO == true).ToList();

            if (rel > 0)
            {
                dOCpADRE = db.DOCUMENTOes.Where(doc => doc.NUM_DOC == rel).FirstOrDefault();
                if (dOCpADRE.TIPO_RECURRENTE == null)//RSG 28.05.2018----------------------------------------------
                {
                    return(0);
                }
                if (!((dOCpADRE.TIPO_RECURRENTE.Equals("M") | dOCpADRE.TIPO_RECURRENTE.Equals("P")) & dOCpADRE.ESTATUS.Equals("A") & dOCpADRE.ESTATUS_WF.Equals("A")))//RSG 28.05.2018
                {
                    return(0);
                }
                //List<DOCUMENTOREC> ddrec = new List<DOCUMENTOREC>();
                DOCUMENTOREC drec = dOCpADRE.DOCUMENTORECs.Where(a => a.ESTATUS == "A").FirstOrDefault();
                if (drec == null)
                {
                    return(0);
                }
                else
                {
                    DateTime hoy    = (DateTime)drec.FECHAF;
                    var      primer = new DateTime(hoy.Year, hoy.Month, 1);
                    var      ultimo = primer.AddMonths(1).AddDays(-1);
                    dOCUMENTO.FECHAI_VIG   = primer;
                    dOCUMENTO.FECHAF_VIG   = ultimo;
                    dOCUMENTO.MONTO_DOC_MD = (decimal)drec.MONTO_BASE;
                }
                if (tsol != dOCpADRE.TSOL_ID)
                {
                    return(0);
                }
                //RSG 28.05.2018----------------------------------------------
                docsrel  = db.DOCUMENTOes.Where(docr => docr.DOCUMENTO_REF == rel).ToList();
                id_bukrs = db.SOCIEDADs.Where(soc => soc.BUKRS == dOCpADRE.SOCIEDAD_ID && soc.ACTIVO == true).FirstOrDefault();
                id_pais  = db.PAIS.Where(pais => pais.LAND.Equals(dOCpADRE.PAIS_ID)).FirstOrDefault();//RSG 15.05.2018
                dOCUMENTO.DOCUMENTO_REF = rel;
                relacionada_neg         = dOCpADRE.TIPO_TECNICO;
                ////ViewBag.TSOL_ANT = dOCUMENTO.TSOL_ID;

                if (dOCUMENTO != null)
                {
                    dOCUMENTO.TSOL_ID = tsol;
                    dOCUMENTO.NUM_DOC = 0;
                    foreach (DOCUMENTOP pos in dOCpADRE.DOCUMENTOPs)
                    {
                    }
                }
            }
            else
            {
            }

            dOCUMENTO.SOCIEDAD_ID = id_bukrs.BUKRS;
            dOCUMENTO.PAIS_ID     = id_pais.LAND;//RSG 18.05.2018
            dOCUMENTO.MONEDA_ID   = id_bukrs.WAERS;
            dOCUMENTO.PERIODO     = Convert.ToInt32(DateTime.Now.ToString("MM"));
            dOCUMENTO.EJERCICIO   = Convert.ToString(DateTime.Now.Year);

            dOCUMENTO.FECHAD = theTime;

            //----------------------------RSG 18.05.2018

            //dOCUMENTO.SOCIEDAD = db.SOCIEDADs.Find(dOCUMENTO.SOCIEDAD_ID);
            //----------------------------RSG 18.05.2018



            ////HTTPPOST
            DOCUMENTO d = new DOCUMENTO();

            if (dOCUMENTO.DOCUMENTO_REF > 0)
            {
                d = db.DOCUMENTOes.Where(doc => doc.NUM_DOC == dOCUMENTO.DOCUMENTO_REF).FirstOrDefault();
                //dOCUMENTO.TSOL_ID = d.TSOL_ID;
                id_bukrs               = db.SOCIEDADs.Where(soc => soc.BUKRS == d.SOCIEDAD_ID).FirstOrDefault();
                dOCUMENTO.ESTADO       = d.ESTADO;
                dOCUMENTO.CIUDAD       = d.CIUDAD;
                dOCUMENTO.PAYER_ID     = d.PAYER_ID;
                dOCUMENTO.CONCEPTO     = d.CONCEPTO;
                dOCUMENTO.NOTAS        = d.NOTAS;
                dOCUMENTO.FECHAI_VIG   = d.FECHAI_VIG;
                dOCUMENTO.FECHAF_VIG   = d.FECHAF_VIG;
                dOCUMENTO.PAYER_NOMBRE = d.PAYER_NOMBRE;
                dOCUMENTO.PAYER_EMAIL  = d.PAYER_EMAIL;
                dOCUMENTO.TIPO_CAMBIO  = d.TIPO_CAMBIO;
                dOCUMENTO.GALL_ID      = d.GALL_ID;
                dOCUMENTO.TALL_ID      = d.TALL_ID;
                //Obtener el país
                dOCUMENTO.PAIS_ID = d.PAIS_ID;//RSG 15.05.2018
                dOCUMENTO.TSOL_ID = d.TSOL_ID;
            }

            //Tipo técnico
            dOCUMENTO.TIPO_TECNICO = "M";

            USUARIO u = db.USUARIOs.Find(d.USUARIOC_ID);//RSG 02/05/2018
            //Obtener el número de documento
            decimal N_DOC = getSolID(dOCUMENTO.TSOL_ID);

            dOCUMENTO.NUM_DOC = N_DOC;


            //Obtener SOCIEDAD_ID
            dOCUMENTO.SOCIEDAD_ID = id_bukrs.BUKRS;

            ////Obtener el país
            //dOCUMENTO.PAIS_ID = p.ToUpper();

            //CANTIDAD_EV > 1 si son recurrentes
            dOCUMENTO.CANTIDAD_EV = 1;

            //Obtener usuarioc
            dOCUMENTO.PUESTO_ID   = u.PUESTO_ID;//RSG 02/05/2018
            dOCUMENTO.USUARIOC_ID = u.ID;

            //Fechac
            dOCUMENTO.FECHAC = DateTime.Now;

            //Horac
            dOCUMENTO.HORAC = DateTime.Now.TimeOfDay;

            //FECHAC_PLAN
            dOCUMENTO.FECHAC_PLAN = DateTime.Now.Date;

            //FECHAC_USER
            dOCUMENTO.FECHAC_USER = DateTime.Now.Date;

            //HORAC_USER
            dOCUMENTO.HORAC_USER = DateTime.Now.TimeOfDay;

            //Estatus
            dOCUMENTO.ESTATUS = "N";

            //Estatus wf
            dOCUMENTO.ESTATUS_WF = "P";

            ///////////////////Montos
            //MONTO_DOC_MD
            var MONTO_DOC_MD = dOCUMENTO.MONTO_DOC_MD;

            dOCUMENTO.MONTO_DOC_MD = Convert.ToDecimal(MONTO_DOC_MD);

            //Obtener el monto de la sociedad
            dOCUMENTO.MONTO_DOC_ML = getValSoc(id_bukrs.WAERS, dOCUMENTO.MONEDA_ID, Convert.ToDecimal(dOCUMENTO.MONTO_DOC_MD), out errorString);
            if (!errorString.Equals(""))
            {
                throw new Exception();
            }

            //MONTO_DOC_ML2
            var MONTO_DOC_ML2 = dOCUMENTO.MONTO_DOC_ML2;

            dOCUMENTO.MONTO_DOC_ML2 = Convert.ToDecimal(MONTO_DOC_ML2);

            //MONEDAL_ID moneda de la sociedad
            dOCUMENTO.MONEDAL_ID = id_bukrs.WAERS;

            //MONEDAL2_ID moneda en USD
            dOCUMENTO.MONEDAL2_ID = "USD";

            //Tipo cambio de la moneda de la sociedad TIPO_CAMBIOL
            dOCUMENTO.TIPO_CAMBIOL = getUkurs(id_bukrs.WAERS, dOCUMENTO.MONEDA_ID, out errorString);

            //Tipo cambio dolares TIPO_CAMBIOL2
            dOCUMENTO.TIPO_CAMBIOL2 = getUkursUSD(dOCUMENTO.MONEDA_ID, "USD", out errorString);
            if (!errorString.Equals(""))
            {
                throw new Exception();
            }
            //Obtener datos del payer
            CLIENTE payer = getCliente(dOCUMENTO.PAYER_ID);

            dOCUMENTO.VKORG = payer.VKORG;
            dOCUMENTO.VTWEG = payer.VTWEG;
            dOCUMENTO.SPART = payer.SPART;

            dOCUMENTO.DOCUMENTO_REF = null;

            //Guardar el documento
            db.DOCUMENTOes.Add(dOCUMENTO);
            db.SaveChanges();

            //Actualizar el rango
            updateRango(dOCUMENTO.TSOL_ID, dOCUMENTO.NUM_DOC);

            //RSG 28.05.2018----------------------------------------------
            string recurrente         = "";
            List <DOCUMENTOREC> ddrec = new List <DOCUMENTOREC>();
            DOCUMENTOREC        drecc = d.DOCUMENTORECs.Where(a => a.ESTATUS == "A").FirstOrDefault();

            if (drecc == null)
            {
                return(0);
            }
            else
            {
                DateTime hoy    = drecc.FECHAF.Value;
                var      primer = new DateTime(hoy.Year, hoy.Month, 1);
                var      ultimo = primer.AddMonths(1).AddDays(-1);
                dOCUMENTO.FECHAI_VIG   = primer;
                dOCUMENTO.FECHAF_VIG   = ultimo;
                dOCUMENTO.MONTO_DOC_MD = drecc.MONTO_BASE;
                dOCUMENTO.FECHAD       = DateTime.Now;
                recurrente             = "X";
            }
            drecc.DOC_REF = dOCUMENTO.NUM_DOC;
            //RSG 28.05.2018----------------------------------------------

            //RSG 28.05.2018----------------------------------------------
            drecc.DOC_REF = dOCUMENTO.NUM_DOC;
            drecc.ESTATUS = "P";
            db.SaveChanges();
            //RSG 28.05.2018----------------------------------------------

            //Guardar los documentos p para el documento guardado
            try
            {
                //Agregar materiales existentes para evitar que en la vista se hayan agregado o quitado
                List <DOCUMENTOP> docpl = new List <DOCUMENTOP>();

                docpl = db.DOCUMENTOPs.Where(docp => docp.NUM_DOC == dOCpADRE.NUM_DOC).ToList();

                for (int j = 0; j < docpl.Count; j++)
                {
                    try
                    {
                        //DOCUMENTOP_MOD docmod = new DOCUMENTOP_MOD();
                        var cat = "";

                        if (docpl[j].MATNR != null && docpl[j].MATNR != "")
                        {
                            //docmod = dOCUMENTO.DOCUMENTOP.Where(docp => docp.MATNR == docpl[j].MATNR).FirstOrDefault();
                        }
                        else
                        {
                            //docmod = dOCUMENTO.DOCUMENTOP.Where(docp => docp.MATKL_ID == docpl[j].MATKL).FirstOrDefault();
                            cat = "C";
                        }
                        //Si lo encuentra meter valores de la base de datos y vista
                        if (docpl[j] != null)
                        {
                            if (cat != "C")
                            {
                                DOCUMENTOP docP = new DOCUMENTOP();
                                docP.NUM_DOC = dOCUMENTO.NUM_DOC;
                                docP.POS     = docpl[j].POS;
                                if (docpl[j].MATNR == null || docpl[j].MATNR == "")
                                {
                                    docpl[j].MATNR = "";
                                }
                                docP.MATNR      = docpl[j].MATNR;
                                docP.MATKL      = docpl[j].MATKL;
                                docP.CANTIDAD   = 1;
                                docP.MONTO      = docpl[j].MONTO;
                                docP.PORC_APOYO = docpl[j].PORC_APOYO;
                                //docP.MONTO_APOYO = docmod.MONTO_APOYO;
                                docP.MONTO_APOYO  = docP.MONTO * (docP.PORC_APOYO / 100);
                                docP.MONTO_APOYO  = Math.Round(docP.MONTO_APOYO, 2);//RSG 16.05.2018
                                docP.PRECIO_SUG   = docpl[j].PRECIO_SUG;
                                docP.VOLUMEN_EST  = docpl[j].VOLUMEN_EST;
                                docP.VOLUMEN_REAL = docpl[j].VOLUMEN_REAL;
                                docP.VIGENCIA_DE  = docpl[j].VIGENCIA_DE;
                                docP.VIGENCIA_AL  = docpl[j].VIGENCIA_AL;
                                docP.APOYO_EST    = docpl[j].APOYO_EST;
                                docP.APOYO_REAL   = docpl[j].APOYO_REAL;
                                dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018
                                db.SaveChanges();                //RSG
                            }
                            else
                            {
                                foreach (DOCUMENTOM docmmm in docpl[j].DOCUMENTOMs)
                                {
                                    DOCUMENTOP docP = new DOCUMENTOP();
                                    docP.NUM_DOC = dOCUMENTO.NUM_DOC;
                                    docP.POS     = (docpl[j].POS * 10) + docmmm.POS;

                                    docP.MATNR = docmmm.MATNR;
                                    docP.MATKL = null;
                                    //docP.MONTO = (decimal)docmmm.APOYO_EST;
                                    docP.VIGENCIA_DE  = docpl[j].VIGENCIA_DE;
                                    docP.VIGENCIA_AL  = docpl[j].VIGENCIA_AL;
                                    docP.CANTIDAD     = 1;
                                    docP.APOYO_EST    = (decimal)docmmm.APOYO_EST;
                                    docP.APOYO_REAL   = (decimal)docmmm.APOYO_REAL;
                                    docP.VOLUMEN_EST  = 0;
                                    docP.VOLUMEN_REAL = 0;

                                    dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018
                                    db.SaveChanges();                //RSG
                                }
                            }
                        }
                        else
                        {
                            DOCUMENTOP docP = new DOCUMENTOP();
                            docP.NUM_DOC  = dOCUMENTO.NUM_DOC;
                            docP.POS      = docpl[j].POS;
                            docP.MATNR    = docpl[j].MATNR;
                            docP.MATKL    = docpl[j].MATKL;
                            docP.CANTIDAD = 1;
                            docP.MONTO    = docpl[j].MONTO;
                            //docP.PORC_APOYO = docpl[j].PORC_APOYO;
                            docP.MONTO_APOYO  = docP.MONTO * (docpl[j].PORC_APOYO / 100);
                            docP.MONTO_APOYO  = docpl[j].MONTO_APOYO;
                            docP.PRECIO_SUG   = docpl[j].PRECIO_SUG;
                            docP.VOLUMEN_EST  = docpl[j].VOLUMEN_EST;
                            docP.VOLUMEN_REAL = docpl[j].VOLUMEN_REAL;
                            docP.VIGENCIA_DE  = docpl[j].VIGENCIA_DE;
                            docP.VIGENCIA_AL  = docpl[j].VIGENCIA_AL;
                            docP.APOYO_EST    = docpl[j].APOYO_EST;
                            docP.APOYO_REAL   = docpl[j].APOYO_REAL;
                            dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018
                            db.SaveChanges();                //RSG
                        }

                        //Agregarlo a la bd
                        //db.DOCUMENTOPs.Add(docP);
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            catch (Exception e)
            {
            }
            decimal total = 0;

            //RSG 28.05.2018-----------------------------------------------------
            foreach (DOCUMENTOP dp in dOCUMENTO.DOCUMENTOPs)
            {
                dp.VIGENCIA_DE = dOCUMENTO.FECHAI_VIG;
                dp.VIGENCIA_AL = dOCUMENTO.FECHAF_VIG;
                if (dOCpADRE.TIPO_TECNICO == "P")
                {
                    ////if (!dOCpADRE.TSOL.FACTURA)
                    ////{
                    ////    try
                    ////    {
                    ////        total += (decimal)dp.APOYO_EST;
                    ////    }
                    ////    catch { }
                    ////}
                    ////else
                    ////{
                    ////    try
                    ////    {
                    ////        total += (decimal)dp.APOYO_REAL;
                    ////    }
                    ////    catch { }
                    ////}
                    dp.MONTO        = 0;
                    dp.CANTIDAD     = 0;
                    dp.MONTO_APOYO  = 0;
                    dp.PORC_APOYO   = 0;
                    dp.PRECIO_SUG   = 0;
                    dp.VOLUMEN_EST  = 0;
                    dp.VOLUMEN_REAL = 0;
                    try
                    {
                        decimal val = (decimal)(from P in db.PRESUPSAPPs
                                                where P.VKORG == dOCpADRE.VKORG
                                                & P.VTWEG == dOCpADRE.VTWEG
                                                & P.SPART == dOCpADRE.SPART
                                                & P.KUNNR == dOCpADRE.PAYER_ID
                                                & P.MATNR == dp.MATNR
                                                & P.PERIOD == DateTime.Now.Month
                                                select new { P.GRSLS }).Sum(a => a.GRSLS);
                        total   += val;
                        dp.MONTO = val;
                    }
                    catch { }
                }

                db.Entry(dOCUMENTO).State = EntityState.Modified;
                db.SaveChanges();
            }

            if (dOCpADRE.TIPO_TECNICO == "P")
            {
                foreach (DOCUMENTOP dp in dOCUMENTO.DOCUMENTOPs)
                {
                    //total = 100%   200 = 100%
                    //dp.MONTo = ?      50 = 25%
                    decimal porcentaje  = dp.MONTO / total * 100;
                    decimal nuevo_total = (decimal)drecc.MONTO_BASE;

                    if (!dOCpADRE.TSOL.FACTURA)
                    {
                        try
                        {
                            dp.APOYO_EST = nuevo_total * porcentaje / 100;
                        }
                        catch { }
                    }
                    else
                    {
                        try
                        {
                            dp.APOYO_REAL = nuevo_total * porcentaje / 100;;
                        }
                        catch { }
                        ////}
                    }
                    dp.MONTO = 0;

                    db.Entry(dOCUMENTO).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
            //RSG 28.05.2018-----------------------------------------------------

            ProcesaFlujo pf = new ProcesaFlujo();
            //db.DOCUMENTOes.Add(dOCUMENTO);
            //db.SaveChanges();

            USUARIO user = db.USUARIOs.Where(a => a.ID.Equals(d.USUARIOC_ID)).FirstOrDefault();
            int     rol  = user.MIEMBROS.FirstOrDefault().ROL_ID;

            try
            {
                //WORKFV wf = db.WORKFHs.Where(a => a.BUKRS.Equals(dOCUMENTO.SOCIEDAD_ID) & a.ROL_ID == rol).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();
                WORKFV wf = db.WORKFHs.Where(a => a.TSOL_ID.Equals(dOCUMENTO.TSOL_ID)).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();
                if (wf != null)
                {
                    WORKFP wp = wf.WORKFPs.OrderBy(a => a.POS).FirstOrDefault();
                    FLUJO  f  = new FLUJO();
                    f.WORKF_ID    = wf.ID;
                    f.WF_VERSION  = wf.VERSION;
                    f.WF_POS      = wp.POS;
                    f.NUM_DOC     = dOCUMENTO.NUM_DOC;
                    f.POS         = 1;
                    f.LOOP        = 1;
                    f.USUARIOA_ID = dOCUMENTO.USUARIOC_ID;
                    f.ESTATUS     = "I";
                    f.FECHAC      = DateTime.Now;
                    f.FECHAM      = DateTime.Now;
                    string c = pf.procesa(f, recurrente);
                    //RSG 28.05.2018 -----------------------------------
                    //if (c == "1")
                    //{
                    //    Email em = new Email();
                    //    em.enviaMail(f.NUM_DOC, true);
                    //}
                    FLUJO conta = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();
                    conta.USUARIOA_ID = user.ID;
                    conta.ESTATUS     = "A";
                    conta.FECHAM      = DateTime.Now;
                    pf.procesa(conta, "");
                    //RSG 28.05.2018 -----------------------------------
                }
            }
            catch (Exception ee)
            {
                if (errorString == "")
                {
                    errorString = ee.Message.ToString();
                    return(0);
                }
                //ViewBag.error = errorString;
            }

            return(1);
        }
        public void ValidarBd(List <doc2> lstd, List <string> archivos)
        {
            int x = 0;

            for (int i = 0; i < lstd.Count; i++)
            {
                string correcto = "X";

                decimal de = Convert.ToDecimal(lstd[i].Posp.numero_wf);
                //Corroboro que exista la informacion
                //var ddd = db.DOCUMENTOes.Where(dds => dds.NUM_DOC == 1000000936).FirstOrDefault();
                var dA = db.DOCUMENTOes.Where(y => y.NUM_DOC == de).FirstOrDefault();
                //si encuentra una coincidencia
                if (dA != null)
                {
                    //MGC 16-10-2018 Eliminar sección de eliminar
                    //MGC 16-10-2018

                    DOCUMENTOPRE dp = new DOCUMENTOPRE();

                    dp.NUM_DOC = de;
                    dp.POS     = 1;

                    //para el estatus E/X
                    if (lstd[i].Posp.status == string.Empty)
                    {
                        //dA.ESTATUS_SAP = "X";
                        //Creación del preliminar
                        //if (lstd[i].accion == "P")
                        if (lstd[i].Posp.accion == "CREAR")
                        {
                            dp.MESSAGE = "Error Preliminar";

                            //Cancelación del preliminar
                        }
                        //else if (lstd[i].accion == "C")
                        else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR")
                        {
                            dp.MESSAGE = "Error Cancelación";
                        }
                        //else if (lstd[i].accion == "A")
                        else if (lstd[i].Posp.accion == "CONTABILIZAR")
                        {
                            dp.MESSAGE = "Error contabilización SAP";
                        }

                        deleteMesg(de);//MGC 16-10-2018 Eliminar msg

                        db.DOCUMENTOPREs.Add(dp);
                        db.SaveChanges();
                    }
                    else if (lstd[i].Posp.status != string.Empty)
                    {
                        if (lstd[i].Posp.status.Equals("NOK"))
                        {
                            if (lstd[i].Posp.accion == "CREAR")
                            //if (lstd[i].accion == "P")
                            {
                                //MGC 30-10-2018 Modificación estatus, cambiar estatus SAP = E y estatus preliminar a E que quiere decir error SAP
                                dA.ESTATUS         = "N";
                                dA.ESTATUS_SAP     = "E";
                                dA.ESTATUS_PRE     = "E";
                                dA.ESTATUS_WF      = null; //MGC 26-11-2018 Marcar como error SAP
                                db.Entry(dA).State = EntityState.Modified;
                                db.SaveChanges();          //MGC 26-11-2018 Marcar como error SAP
                                //dp.MESSAGE = "Error Preliminar";

                                //MGC 30-10-2018 Guardar los mensajes para log
                                for (int j = 0; j < lstd[i].Pose.Count; j++)
                                {
                                    try
                                    {
                                        DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                        dl.NUM_DOC   = dA.NUM_DOC;
                                        dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                        dl.TYPE      = lstd[i].Pose[j].tipo;
                                        dl.NUMBER    = lstd[i].Pose[j].numero;
                                        dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                        dl.FECHA     = DateTime.Now;

                                        db.DOCUMENTOLOGs.Add(dl);
                                        db.SaveChanges();
                                    }
                                    catch (Exception e)
                                    {
                                    }
                                }
                            }
                            else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR")
                            //else if (lstd[i].accion == "C")
                            {
                                //dp.MESSAGE = "Error Cancelación";



                                //MGC 03-12-2018 Guardar los mensajes para log
                                for (int j = 0; j < lstd[i].Pose.Count; j++)
                                {
                                    try
                                    {
                                        DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                        dl.NUM_DOC   = dA.NUM_DOC;
                                        dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                        dl.TYPE      = lstd[i].Pose[j].tipo;
                                        dl.NUMBER    = lstd[i].Pose[j].numero;
                                        dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                        dl.FECHA     = DateTime.Now;

                                        db.DOCUMENTOLOGs.Add(dl);
                                        db.SaveChanges();
                                    }
                                    catch (Exception e)
                                    {
                                    }
                                }

                                if (lstd[i].Posp.accion == "BORRAR-CREAR")
                                {
                                    dA.ESTATUS         = "N";
                                    dA.ESTATUS_SAP     = "E";
                                    dA.ESTATUS_PRE     = "E";
                                    dA.ESTATUS_WF      = null;
                                    db.Entry(dA).State = EntityState.Modified;
                                    db.SaveChanges();
                                }
                                else if (lstd[i].Posp.accion == "BORRAR")
                                {
                                    dA.ESTATUS_C       = "B";
                                    db.Entry(dA).State = EntityState.Modified;
                                    db.SaveChanges();
                                }
                            }
                            else if (lstd[i].Posp.accion == "CONTABILIZAR")
                            //else if (lstd[i].accion == "A")
                            {
                                //MGC 03-12-2018 Guardar los mensajes para log
                                for (int j = 0; j < lstd[i].Pose.Count; j++)
                                {
                                    try
                                    {
                                        DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                        dl.NUM_DOC   = dA.NUM_DOC;
                                        dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                        dl.TYPE      = lstd[i].Pose[j].tipo;
                                        dl.NUMBER    = lstd[i].Pose[j].numero;
                                        dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                        dl.FECHA     = DateTime.Now;

                                        db.DOCUMENTOLOGs.Add(dl);
                                        db.SaveChanges();
                                    }
                                    catch (Exception e)
                                    {
                                    }
                                }

                                dA.ESTATUS         = "C";
                                dA.ESTATUS_SAP     = "E";
                                dA.ESTATUS_WF      = "A";
                                dA.ESTATUS_PRE     = "G";
                                db.Entry(dA).State = EntityState.Modified;

                                dp.MESSAGE = "Error contabilización SAP";
                            }
                            //dp.MESSAGE = "Error Preliminar";
                            //deleteMesg(de);//MGC 16-10-2018 Eliminar msg
                            //db.DOCUMENTOPREs.Add(dp);
                            db.SaveChanges();
                        }
                        if (lstd[i].Posp.status.Equals("OK"))
                        {
                            //dA.ESTATUS_SAP = "X";
                            //Completar el flujo en el
                            try
                            {
                                ProcesaFlujo pf = new ProcesaFlujo();
                                if (lstd[i].Posp.accion == "CREAR")
                                //if (lstd[i].Posp.accion == "P")
                                {
                                    //MGC 30-10-2018 Guardar los mensajes para log
                                    for (int j = 0; j < lstd[i].Pose.Count; j++)
                                    {
                                        try
                                        {
                                            DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                            dl.NUM_DOC   = dA.NUM_DOC;
                                            dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                            dl.TYPE      = lstd[i].Pose[j].tipo;
                                            dl.NUMBER    = lstd[i].Pose[j].numero;
                                            dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                            dl.FECHA     = DateTime.Now;

                                            db.DOCUMENTOLOGs.Add(dl);
                                            db.SaveChanges();
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }


                                    //Procesa el flujo de autorización
                                    correcto = pf.procesa2(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus
                                }
                                else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR")
                                //else if (lstd[i].Posp.accion == "C")
                                {
                                    //MGC 30-10-2018 Guardar los mensajes para log
                                    for (int j = 0; j < lstd[i].Pose.Count; j++)
                                    {
                                        try
                                        {
                                            DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                            dl.NUM_DOC   = dA.NUM_DOC;
                                            dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                            dl.TYPE      = lstd[i].Pose[j].tipo;
                                            dl.NUMBER    = lstd[i].Pose[j].numero;
                                            dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                            dl.FECHA     = DateTime.Now;

                                            db.DOCUMENTOLOGs.Add(dl);
                                            db.SaveChanges();
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    if (lstd[i].Posp.accion == "BORRAR-CREAR")
                                    {
                                        //Procesa el flujo de cancelación
                                        correcto = pf.procesaC(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus
                                    }
                                    //MGC 06-12-2018 Eliminar la solicitud ------------>
                                    else if (lstd[i].Posp.accion == "BORRAR")
                                    {
                                        //Procesa el flujo de cancelación
                                        correcto = pf.procesaCB(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus
                                    }
                                    //MGC 06-12-2018 Eliminar la solicitud ------------<
                                }
                                else if (lstd[i].Posp.accion == "CONTABILIZAR")
                                //else if (lstd[i].Posp.accion == "A")
                                {
                                    //MGC 30-10-2018 Guardar los mensajes para log
                                    for (int j = 0; j < lstd[i].Pose.Count; j++)
                                    {
                                        try
                                        {
                                            DOCUMENTOLOG dl = new DOCUMENTOLOG();

                                            dl.NUM_DOC   = dA.NUM_DOC;
                                            dl.TYPE_LINE = lstd[i].Pose[j].pos;
                                            dl.TYPE      = lstd[i].Pose[j].tipo;
                                            dl.NUMBER    = lstd[i].Pose[j].numero;
                                            dl.MESSAGE   = lstd[i].Pose[j].mensaje;
                                            dl.FECHA     = DateTime.Now;

                                            db.DOCUMENTOLOGs.Add(dl);
                                            db.SaveChanges();
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }

                                    //Proceso de contabilización
                                    correcto = pf.procesaA(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus
                                }
                            } catch (Exception e)
                            {
                            }
                        }
                    }

                    try
                    {
                        //MGC 29-10-2018 Error porque mueve los datos ya actualizados en el flujo
                        //////Hacemos el update en BD
                        //if(lstd[i].Posp.accion == "CONTABILIZAR")
                        //{
                        //    dA.DOCUMENTO_SAP = lstd[i].Posp.Num_doc_pre;
                        //}
                        //else
                        //{
                        //    dA.NUM_PRE = lstd[i].Posp.Num_doc_pre;
                        //}

                        //dA.SOCIEDAD_PRE = lstd[i].Posp.Sociedad_pre;
                        //dA.EJERCICIO_PRE = lstd[i].Posp.Ejercicio_pre;//MGC 11-10-2018 No enviar correos
                        //db.Entry(dA).State = EntityState.Modified;//MGC 11-10-2018 No enviar correos
                        //x = x + db.SaveChanges();
                        ////Agregamos en la tabla los valores
                        //DOCUMENTOSAP ds = new DOCUMENTOSAP();
                        //ds.NUM_DOC = decimal.Parse(lstd[i].numero_wf);
                        //ds.BUKRS = lstd[i].Sociedad;
                        //ds.EJERCICIO = lstd[i].Año;
                        //ds.CUENTA_A = lstd[i].Cuenta_abono.ToString();
                        //ds.CUENTA_C = lstd[i].Cuenta_cargo.ToString();
                        //ds.BLART = lstd[i].blart;
                        //ds.KUNNR = lstd[i].kunnr;
                        //ds.DESCR = lstd[i].desc;
                        //ds.IMPORTE = lstd[i].importe;
                        //try
                        //{
                        //    db.DOCUMENTOSAPs.Add(ds);
                        //    db.SaveChanges();
                        //    moverArchivo(archivos[i]);
                        //}
                        //catch
                        //{
                        //    DOCUMENTOSAP ds1 = db.DOCUMENTOSAPs.Find(ds.NUM_DOC);
                        //    ds1.BUKRS = lstd[i].Sociedad;
                        //    ds1.EJERCICIO = lstd[i].Año;
                        //    ds1.CUENTA_A = lstd[i].Cuenta_abono.ToString();
                        //    ds1.CUENTA_C = lstd[i].Cuenta_cargo.ToString();
                        //    ds.BLART = lstd[i].blart;
                        //    ds.KUNNR = lstd[i].kunnr;
                        //    ds.DESCR = lstd[i].desc;
                        //    ds.IMPORTE = lstd[i].importe;
                        //    db.Entry(ds1).State = EntityState.Modified;

                        //    db.SaveChanges();
                        //    moverArchivo(archivos[i]);
                        //}
                        try
                        {
                            moverArchivo(archivos[i], correcto);
                        }
                        catch (Exception e)
                        {
                        }
                    }
                    catch (Exception varEx)
                    {
                        var ex = varEx.ToString();
                    }

                    //if (dA.DOCUMENTO_REF != null)
                    //{
                    //    if (dA.DOCUMENTO_REF > 0)
                    //    {
                    //        List<DOCUMENTO> rela = db.DOCUMENTOes.Where(a => a.DOCUMENTO_REF == dA.DOCUMENTO_REF).ToList();
                    //        DOCUMENTO parcial = rela.Where(a => a.TSOL_ID == "RP").FirstOrDefault();
                    //        if (parcial != null)
                    //        {
                    //            bool contabilizados = true;
                    //            foreach (DOCUMENTO rel in rela)
                    //            {
                    //                if (rel.TSOL_ID == "RP")
                    //                    if (rel.ESTATUS_SAP == "X")
                    //                        contabilizados = false;
                    //            }

                    //            if (contabilizados)
                    //            {
                    //                FLUJO f = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault();
                    //                if (f != null)
                    //                {
                    //                    f.ESTATUS = "A";
                    //                    f.FECHAM = DateTime.Now;
                    //                    ProcesaFlujo p = new ProcesaFlujo();
                    //                    string res = p.procesa(f, "");

                    //                    if (res == "0" | res == "")
                    //                    {
                    //                        FLUJO f1 = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault();

                    //                        f.ESTATUS = "A";
                    //                        f.FECHAM = DateTime.Now;
                    //                        res = p.procesa(f, "");
                    //                    }

                    //                    //if (res == "0" | res == "")
                    //                }
                    //            }

                    //        }
                    //    }
                    //}
                }
            }
            try
            {
                //if (x == lstd.Count)
                //{
                //    moverArchivos(archivos);
                //}
            }
            catch (Exception varEx)
            {
                var ex = varEx.ToString();
                throw new Exception(ex);
            }
        }
        public ActionResult Procesa(FLUJO f)
        {
            ProcesaFlujo pf     = new ProcesaFlujo();
            DOCUMENTO    d      = db.DOCUMENTOes.Find(f.NUM_DOC);
            FLUJO        actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();



            //MGC 12092018
            //List<TS_FORM> tts = db.TS_FORM.Where(a => a.BUKRS_ID.Equals(d.SOCIEDAD_ID) & a.LAND_ID.Equals(d.PAIS_ID)).ToList();

            //bool c = false;
            //if (actual.WORKFP.ACCION.TIPO == "R")
            //{
            //    List<DOCUMENTOT> ddt = new List<DOCUMENTOT>();
            //    foreach (TS_FORM ts in tts)
            //    {
            //        DOCUMENTOT dts = new DOCUMENTOT();
            //        dts.NUM_DOC = f.NUM_DOC;
            //        dts.TSFORM_ID = ts.POS;
            //        try
            //        {
            //            string temp = Request.Form["chk-" + ts.POS].ToString();
            //            if (temp == "on")
            //                dts.CHECKS = true;
            //            c = true;
            //        }
            //        catch
            //        {
            //            dts.CHECKS = false;
            //        }
            //        int tt = db.DOCUMENTOTS.Where(a => a.NUM_DOC.Equals(f.NUM_DOC) & a.TSFORM_ID == ts.POS).Count();
            //        if (tt == 0)
            //            ddt.Add(dts);
            //        else
            //            db.Entry(dts).State = EntityState.Modified;
            //    }
            //    if (ddt.Count > 0)
            //        db.DOCUMENTOTS.AddRange(ddt);
            //    db.SaveChanges();

            //    db.Dispose();
            //}

            FLUJO flujo = actual;

            flujo.ESTATUS     = f.ESTATUS;
            flujo.FECHAM      = DateTime.Now;
            flujo.COMENTARIO  = f.COMENTARIO;
            flujo.USUARIOA_ID = User.Identity.Name;

            flujo.ID_RUTA_A    = f.ID_RUTA_A;
            flujo.RUTA_VERSION = f.RUTA_VERSION;
            flujo.STEP_AUTO    = f.STEP_AUTO;

            //MGC 11-12-2018 Agregar Contabilizador 0----------------->
            flujo.VERSIONC1 = actual.VERSIONC1;
            flujo.VERSIONC2 = actual.VERSIONC2;
            //MGC 11-12-2018 Agregar Contabilizador 0-----------------<

            flujo.FECHACON = f.FECHACON; //MGC-14-12-2018 Modificación fechacon



            //Agregar funcionalidad, para checar si el próximo es contabilización, y si es contabilización
            //checar que el usuario contabilizador esté asignado a la sociedad
            ContabilizarRes resc = new ContabilizarRes();

            if (d.ESTATUS == "F" && (d.ESTATUS_WF.Equals("P") | d.ESTATUS_WF.Equals("S")))
            {
                //MGC 30-10-2018 Modificación estatus, Pendiente por aprobadores  *@
                if (d.ESTATUS_PRE == "G")
                {
                    //Pendiente verificar quién es el dueño del flujo si C o A
                    if (User.Identity.Name == actual.USUARIOA_ID)
                    {
                        //Simular el pf.procesa
                        //ContabilizarRes res = new ContabilizarRes();
                        resc = pf.procesaConta(flujo);
                    }
                }
            }

            //Validar la respuesta
            //Hay respuesta
            if (resc.contabilizar != null && resc.res != null)
            {
                if (resc.contabilizar == true && resc.res == false)
                {
                    TempData["error"] = "Se necesita asignar usuario contabilizador a la sociedad: " + d.SOCIEDAD_ID;
                    return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                }
                else
                {
                    if (ModelState.IsValid)
                    {
                        string res = pf.procesa(flujo, "", false, "", "");
                        if (res.Equals("0"))//Aprobado
                        {
                            //FRT 13-12-2018 para realizar la actualización del tipo de cambio segun la fecha en el modal
                            if (d.MONEDA_ID != "MXN")
                            {
                                var moneda  = d.MONEDA_ID;
                                var restipo = TipoCambio(actual, moneda, f);
                            }

                            //ENDFRT 13-12-2018 para realizar la actualización del tipo de cambio segun la fecha en el modal
                            return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                        }
                        else if (res.Equals("1") | res.Equals("2") | res.Equals("3"))//CORREO
                        {
                            //FRT 13-12-2018 para realizar la actualización del tipo de cambio segun la fecha en el modal
                            if (d.MONEDA_ID != "MXN")
                            {
                                var moneda  = d.MONEDA_ID;
                                var restipo = TipoCambio(actual, moneda, f);
                            }

                            //ENDFRT 13-12-2018 para realizar la actualización del tipo de cambio segun la fecha en el modal

                            //return RedirectToAction("Enviar", "Mails", new { id = flujo.NUM_DOC, index = false, tipo = "A" });
                            //MGC 12092018
                            //Email em = new Email();
                            //string UrlDirectory = Request.Url.GetLeftPart(UriPartial.Path);
                            //string image = Server.MapPath("~/images/logo_kellogg.png");
                            //if (res.Equals("1") | res.Equals("2"))//CORREO
                            //{
                            //    em.enviaMailC(f.NUM_DOC, true, Session["spras"].ToString(), UrlDirectory, "Index", image);
                            //}
                            //else
                            //{
                            //    em.enviaMailC(f.NUM_DOC, true, Session["spras"].ToString(), UrlDirectory, "Details", image);
                            //}
                            return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                        }
                        else
                        {
                            TempData["error"] = res;
                            return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                        }
                    }
                }
            }

            int pagina = 103; //ID EN BASE DE DATOS

            using (WFARTHAEntities db = new WFARTHAEntities())
            {
                string u    = User.Identity.Name;
                var    user = db.USUARIOs.Where(a => a.ID.Equals(u)).FirstOrDefault();
                ViewBag.permisos = db.PAGINAVs.Where(a => a.ID.Equals(user.ID)).ToList();
                ViewBag.carpetas = db.CARPETAVs.Where(a => a.USUARIO_ID.Equals(user.ID)).ToList();
                ViewBag.usuario  = user; ViewBag.returnUrl = Request.Url.PathAndQuery;;
                ViewBag.rol      = user.PUESTO.PUESTOTs.Where(a => a.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.Title    = db.PAGINAs.Where(a => a.ID.Equals(pagina)).FirstOrDefault().PAGINATs.Where(b => b.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.warnings = db.WARNINGVs.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();
                ViewBag.textos   = db.TEXTOes.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();

                try
                {
                    string p = Session["pais"].ToString();
                    ViewBag.pais = p + ".png";
                }
                catch
                {
                    //ViewBag.pais = "mx.png";
                    //return RedirectToAction("Pais", "Home");
                }
                Session["spras"] = user.SPRAS_ID;
            }
            return(View(f));
        }
Ejemplo n.º 11
0
        public ActionResult Procesa(FLUJO f)
        {
            FLUJO actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();

            DOCUMENTO      d   = db.DOCUMENTOes.Find(f.NUM_DOC);
            List <TS_FORM> tts = db.TS_FORM.Where(a => a.BUKRS_ID.Equals(d.SOCIEDAD_ID) & a.LAND_ID.Equals(d.PAIS_ID)).ToList();

            bool c = false;

            if (actual.WORKFP.ACCION.TIPO == "R")
            {
                List <DOCUMENTOT> ddt = new List <DOCUMENTOT>();
                foreach (TS_FORM ts in tts)
                {
                    DOCUMENTOT dts = new DOCUMENTOT();
                    dts.NUM_DOC   = f.NUM_DOC;
                    dts.TSFORM_ID = ts.POS;
                    try
                    {
                        string temp = Request.Form["chk-" + ts.POS].ToString();
                        if (temp == "on")
                        {
                            dts.CHECKS = true;
                        }
                        c = true;
                    }
                    catch
                    {
                        dts.CHECKS = false;
                    }
                    int tt = db.DOCUMENTOTS.Where(a => a.NUM_DOC.Equals(f.NUM_DOC) & a.TSFORM_ID == ts.POS).Count();
                    if (tt == 0)
                    {
                        ddt.Add(dts);
                    }
                    else
                    {
                        db.Entry(dts).State = EntityState.Modified;
                    }
                }
                if (ddt.Count > 0)
                {
                    db.DOCUMENTOTS.AddRange(ddt);
                }
                db.SaveChanges();

                db.Dispose();
            }

            FLUJO flujo = actual;

            flujo.ESTATUS     = f.ESTATUS;
            flujo.FECHAM      = DateTime.Now;
            flujo.COMENTARIO  = f.COMENTARIO;
            flujo.USUARIOA_ID = User.Identity.Name;
            ProcesaFlujo pf = new ProcesaFlujo();

            if (ModelState.IsValid)
            {
                string res = pf.procesa(flujo, "");

                using (TAT001Entities db1 = new TAT001Entities())
                {
                    FLUJO   ff = db1.FLUJOes.Where(x => x.NUM_DOC == flujo.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                    Estatus es = new Estatus();//RSG 18.09.2018
                    d                   = db1.DOCUMENTOes.Find(d.NUM_DOC);
                    ff.STATUS           = es.getEstatus(d);
                    db1.Entry(ff).State = EntityState.Modified;
                    db1.SaveChanges();
                }

                if (res.Equals("0"))//Aprobado
                {
                    return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                }
                else if (res.Equals("1") | res.Equals("2") | res.Equals("3"))//CORREO
                {
                    //return RedirectToAction("Enviar", "Mails", new { id = flujo.NUM_DOC, index = false, tipo = "A" });
                    Email  em           = new Email();
                    string UrlDirectory = Request.Url.GetLeftPart(UriPartial.Path);
                    string image        = Server.MapPath("~/images/logo_kellogg.png");
                    if (res.Equals("1") | res.Equals("2"))//CORREO
                    {
                        em.enviaMailC(f.NUM_DOC, true, Session["spras"].ToString(), UrlDirectory, "Index", image);
                    }
                    else
                    {
                        em.enviaMailC(f.NUM_DOC, true, Session["spras"].ToString(), UrlDirectory, "Details", image);
                    }
                    return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                }
                else
                {
                    TempData["error"] = res;
                    return(RedirectToAction("Details", "Solicitudes", new { id = flujo.NUM_DOC }));
                }
            }

            int pagina = 103; //ID EN BASE DE DATOS

            using (TAT001Entities db = new TAT001Entities())
            {
                string u    = User.Identity.Name;
                var    user = db.USUARIOs.Where(a => a.ID.Equals(u)).FirstOrDefault();
                ViewBag.permisos = db.PAGINAVs.Where(a => a.ID.Equals(user.ID)).ToList();
                ViewBag.carpetas = db.CARPETAVs.Where(a => a.USUARIO_ID.Equals(user.ID)).ToList();
                ViewBag.usuario  = user; ViewBag.returnUrl = Request.Url.PathAndQuery;;
                ViewBag.rol      = user.PUESTO.PUESTOTs.Where(a => a.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.Title    = db.PAGINAs.Where(a => a.ID.Equals(pagina)).FirstOrDefault().PAGINATs.Where(b => b.SPRAS_ID.Equals(user.SPRAS_ID)).FirstOrDefault().TXT50;
                ViewBag.warnings = db.WARNINGVs.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();
                ViewBag.textos   = db.TEXTOes.Where(a => (a.PAGINA_ID.Equals(pagina) || a.PAGINA_ID.Equals(0)) && a.SPRAS_ID.Equals(user.SPRAS_ID)).ToList();

                try
                {
                    string p = Session["pais"].ToString();
                    ViewBag.pais = p + ".png";
                }
                catch
                {
                    //ViewBag.pais = "mx.png";
                    //return RedirectToAction("Pais", "Home");
                }
                Session["spras"] = user.SPRAS_ID;
            }
            return(View(f));
        }