Esempio n. 1
0
        public FLUJO determinaAgenteI(DOCUMENTO d, string user, string delega, int pos, DET_AGENTEC dah)
        {
            if (delega != null)
            {
                user = delega;
            }
            bool           fin = false;
            TAT001Entities db  = new TAT001Entities();
            DET_AGENTEC    dap = new DET_AGENTEC();
            USUARIO        u   = db.USUARIOs.Find(d.USUARIOC_ID);

            if (pos.Equals(0))
            {
                //dap = db.DET_AGENTEP.Where(a => a.SOCIEDAD_ID.Equals(dah.SOCIEDAD_ID) & a.PUESTOC_ID == dah.PUESTOC_ID &
                //                    a.VERSION == dah.VERSION & a.AGROUP_ID == dah.AGROUP_ID & a.POS == 1).FirstOrDefault();
                dap = db.DET_AGENTEC.Where(a => a.USUARIOC_ID.Equals(delega) & a.PAIS_ID == dah.PAIS_ID &
                                           a.VKORG.Equals(dah.VKORG) & a.VTWEG.Equals(dah.VTWEG) & a.SPART.Equals(dah.SPART) & a.KUNNR.Equals(dah.KUNNR) &
                                           a.VERSION == dah.VERSION & a.POS == 1).FirstOrDefault();
            }

            string agente = "";
            FLUJO  f      = new FLUJO();

            f.DETPOS = 0;
            if (!fin)
            {
                agente   = dap.USUARIOA_ID;
                f.DETPOS = dap.POS;
            }
            f.USUARIOA_ID = agente;
            return(f);
        }
Esempio n. 2
0
        public FLUJO determinaAgente1(DOCUMENTO d, string user, string delega, int pos, int?loop, int sop)
        {
            if (delega != null)
            {
                user = delega;
            }
            bool           fin      = false;
            TAT001Entities db       = new TAT001Entities();
            DET_AGENTEC    dap      = new DET_AGENTEC();
            FLUJO          f_actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(d.NUM_DOC)).FirstOrDefault();
            //DET_AGENTEH dah = db.DET_AGENTEH.Where(a => a.SOCIEDAD_ID.Equals(d.SOCIEDAD_ID) & a.PUESTOC_ID == d.PUESTO_ID &
            //                    a.USUARIOC_ID.Equals(d.USUARIOC_ID) & a.VERSION == f_actual.DETVER).FirstOrDefault();
            List <DET_AGENTEC> dah = db.DET_AGENTEC.Where(a => a.USUARIOC_ID.Equals(d.USUARIOD_ID) & a.PAIS_ID == d.PAIS_ID &
                                                          a.VKORG.Equals(d.VKORG) & a.VTWEG.Equals(d.VTWEG) & a.SPART.Equals(d.SPART) & a.KUNNR.Equals(d.PAYER_ID))
                                     .OrderByDescending(a => a.VERSION).ToList();

            USUARIO u = db.USUARIOs.Find(d.USUARIOC_ID);
            //long gaa = db.CREADOR2.Where(a => a.ID.Equals(u.ID) & a.BUKRS.Equals(d.SOCIEDAD_ID) & a.LAND.Equals(d.PAIS_ID) & a.PUESTOC_ID == d.PUESTO_ID & a.ACTIVO == true).FirstOrDefault().AGROUP_ID;
            int ppos = 0;

            if (pos.Equals(0))
            {
                if (loop == null)
                {
                    //dap = db.DET_AGENTEP.Where(a => a.SOCIEDAD_ID.Equals(dah.SOCIEDAD_ID) & a.PUESTOC_ID == dah.PUESTOC_ID &
                    //                    a.VERSION == dah.VERSION & a.AGROUP_ID == dah.AGROUP_ID & a.POS == 1).FirstOrDefault();
                    dap     = dah.Where(a => a.POS == 1).FirstOrDefault();
                    dap.POS = dap.POS - 1;
                }
                else
                {
                    FLUJO ffl = db.FLUJOes.Where(a => a.NUM_DOC.Equals(d.NUM_DOC) & a.ESTATUS.Equals("R")).OrderByDescending(a => a.POS).FirstOrDefault();
                    if (ffl.DETPOS == 99)
                    {
                        ppos = 1;
                    }
                    ffl.DETPOS = ffl.DETPOS - 1;
                    fin        = true;
                    ffl.POS    = ppos;

                    return(ffl);
                }
            }
            else if (pos.Equals(98))
            {
                dap = dah.Where(a => a.POS == (pos + 1)).FirstOrDefault();
            }
            else
            {
                //DET_AGENTE actual = db.DET_AGENTE.Where(a => a.PUESTOC_ID == d.PUESTO_ID & a.AGROUP_ID == gaa & a.POS == (pos)).FirstOrDefault();
                DET_AGENTEC actual = dah.Where(a => a.POS == (pos)).FirstOrDefault();
                if (actual.POS == 99)
                {
                    fin = true;
                }
                else if (actual.POS == 98)
                {
                    //da = db.DET_AGENTE.Where(a => a.PUESTOC_ID == d.PUESTO_ID & a.AGROUP_ID == gaa & a.POS == (pos + 1)).FirstOrDefault();
                    dap = dah.Where(a => a.POS == (pos)).FirstOrDefault();
                }
                else
                {
                    if (actual.MONTO != null)
                    {
                        if (d.MONTO_DOC_ML2 > actual.MONTO)
                        {
                            dap  = dah.Where(a => a.POS == (pos + 1)).FirstOrDefault();
                            ppos = -1;
                        }
                    }
                    //if (actual.PRESUPUESTO != null)
                    if ((bool)actual.PRESUPUESTO)
                    {
                        if (d.MONTO_DOC_MD > 100000)
                        {
                            //da = db.DET_AGENTE.Where(a => a.PUESTOC_ID == d.PUESTO_ID & a.AGROUP_ID == gaa & a.POS == (pos + 1)).FirstOrDefault();
                            dap  = dah.Where(a => a.POS == (pos + 1)).FirstOrDefault();
                            ppos = -1;
                        }
                    }
                }
            }

            string agente = "";
            FLUJO  f      = new FLUJO();

            f.DETPOS = 0;
            if (!fin)
            {
                if (dap != null)
                {
                    if (dap.USUARIOA_ID != null)
                    {
                        //agente = db.GAUTORIZACIONs.Where(a => a.ID == da.AGROUP_ID).FirstOrDefault().USUARIOs.Where(a => a.PUESTO_ID == da.PUESTOA_ID).First().ID;
                        agente   = dap.USUARIOA_ID;
                        f.DETPOS = dap.POS;
                    }
                    else
                    {
                        dap = dah.Where(a => a.POS == (sop)).FirstOrDefault();
                        if (dap == null)
                        {
                            agente   = d.USUARIOD_ID;
                            f.DETPOS = 98;
                        }
                        else
                        {
                            //agente = db.GAUTORIZACIONs.Where(a => a.ID == da.AGROUP_ID).FirstOrDefault().USUARIOs.Where(a => a.PUESTO_ID == da.PUESTOA_ID).First().ID;
                            agente   = dap.USUARIOA_ID;
                            f.DETPOS = dap.POS;
                        }
                    }
                }
                else
                {
                    dap = dah.Where(a => a.POS == (sop)).FirstOrDefault();
                    if (dap == null)
                    {
                        agente   = d.USUARIOD_ID;
                        f.DETPOS = 98;
                    }
                    else
                    {
                        //agente = db.GAUTORIZACIONs.Where(a => a.ID == da.AGROUP_ID).FirstOrDefault().USUARIOs.Where(a => a.PUESTO_ID == da.PUESTOA_ID).First().ID;
                        agente   = dap.USUARIOA_ID;
                        f.DETPOS = dap.POS;
                    }
                }
            }
            f.POS = ppos;
            if (agente != "")
            {
                f.USUARIOA_ID = agente;
            }
            else
            {
                f.USUARIOA_ID = null;
            }
            return(f);
        }
Esempio n. 3
0
        private List <DET_AGENTEC> objAList(DataTable dt)
        {
            List <DET_AGENTEC> ld       = new List <DET_AGENTEC>();
            List <CLIENTE>     clientes = new List <CLIENTE>();
            //Rows
            var rowsc = dt.Rows.Count;
            //columns
            ////var columnsc = dt.Columns.Count;

            //Columnd and row to start
            var rows = 1; // 2
                          //var cols = 0; // A
            var pos = 1;

            for (int i = rows; i < rowsc; i++)
            {
                ////for (var j = 0; j < columnsc; j++)
                ////{
                ////    var data = dt.Rows[i][j];
                ////}
                if (i >= 4)
                {
                    var v = dt.Rows[i][1];
                    if (Convert.ToString(v) == "")
                    {
                        break;
                    }
                }
                DET_AGENTEC doc = new DET_AGENTEC();

                string a = Convert.ToString(pos);

                doc.POS = Convert.ToInt32(a);
                try
                {
                    doc.USUARIOC_ID = dt.Rows[i][0].ToString(); //Usuario creador
                }
                catch
                {
                    doc.USUARIOC_ID = null;
                }
                try
                {
                    doc.PAIS_ID = dt.Rows[i][1].ToString(); //País
                }
                catch
                {
                    doc.PAIS_ID = null;
                }
                try
                {
                    doc.KUNNR = dt.Rows[i][2].ToString();
                    doc.KUNNR = completa(doc.KUNNR, 10);

                    CLIENTE u = clientes.FirstOrDefault(x => x.KUNNR.Equals(doc.KUNNR));
                    if (u == null)
                    {
                        u = db.CLIENTEs.Where(cc => cc.KUNNR.Equals(doc.KUNNR) && cc.ACTIVO).FirstOrDefault();
                        if (u == null)
                        {
                            doc.VKORG = null;
                        }
                        else
                        {
                            clientes.Add(u);
                        }
                    }

                    CLIENTE c = clientes.FirstOrDefault(cc => cc.KUNNR.Equals(doc.KUNNR) && cc.ACTIVO);
                    if (c != null)
                    {
                        doc.VKORG = c.VKORG;
                        doc.VTWEG = c.VTWEG;
                        doc.SPART = c.SPART;
                    }
                    else
                    {
                        doc.VKORG = null;
                    }
                }
                catch
                {
                    doc.KUNNR = null;
                }
                try
                {
                    doc.POS = int.Parse(dt.Rows[i][3].ToString());
                }
                catch
                {
                    doc.POS = 0;
                }
                try
                {
                    doc.USUARIOA_ID = dt.Rows[i][4].ToString();
                }
                catch
                {
                    doc.USUARIOA_ID = null;
                }

                try
                {
                    doc.MONTO = decimal.Parse(dt.Rows[i][5].ToString());
                }
                catch
                {
                    doc.MONTO = null;
                }
                try
                {
                    string p = dt.Rows[i][6].ToString();
                    if (p == "X" || p == "x")
                    {
                        doc.PRESUPUESTO = true;
                    }
                }
                catch
                {
                    doc.PRESUPUESTO = false;
                }

                ////DET_AGENTEC poss = ld.Where(x => x.USUARIOC_ID.Equals(doc.USUARIOC_ID) && x.PAIS_ID.Equals(doc.PAIS_ID)
                ////& x.KUNNR.Equals(doc.KUNNR)).FirstOrDefault();
                ////if (poss == null)
                ////    pos = 1;
                ////else
                ////    pos = ld.Where(x => x.USUARIOC_ID.Equals(doc.USUARIOC_ID) && x.PAIS_ID.Equals(doc.PAIS_ID) && x.KUNNR.Equals(doc.KUNNR)).Count() + 1;

                ld.Add(doc);
                pos++;
            }
            return(ld);
        }
Esempio n. 4
0
        public ActionResult ModificarRol(USUARIO u)
        {
            //int rol = Int32.Parse(Request.Form["txt_rol"].ToString());
            string pais  = Request.Form["item.PAIS_ID"].ToString();
            string vkorg = Request.Form["item.VKORG"].ToString();
            string vtweg = Request.Form["item.VTWEG"].ToString();
            string spart = Request.Form["item.SPART"].ToString();
            string kunnr = Request.Form["item.KUNNR"].ToString();

            //DET_AGENTEH dh = db.DET_AGENTEH.Where(a => a.SOCIEDAD_ID.Equals(soc) & a.PUESTOC_ID == u.PUESTO_ID & a.AGROUP_ID == (agroup)).OrderByDescending(a => a.VERSION).FirstOrDefault();
            DET_AGENTEC dh = db.DET_AGENTEC.Where(a => a.USUARIOC_ID.Equals(u.ID) & a.PAIS_ID.Equals(pais) & a.VKORG.Equals(vkorg) & a.VTWEG.Equals(vtweg) & a.SPART.Equals(spart) & a.KUNNR.Equals(kunnr) & a.POS == 1 & a.ACTIVO == true).OrderByDescending(a => a.VERSION).FirstOrDefault();

            if (dh != null)
            {
                List <DET_AGENTEC> ddp = db.DET_AGENTEC.Where(a => a.USUARIOC_ID.Equals(u.ID) & a.PAIS_ID.Equals(pais) & a.VKORG.Equals(vkorg) & a.VTWEG.Equals(vtweg)
                                                              & a.SPART.Equals(spart) & a.KUNNR.Equals(kunnr) & a.VERSION == dh.VERSION & a.ACTIVO == true).ToList();
                foreach (DET_AGENTEC dp in ddp)
                {
                    //DET_AGENTEP dap = new DET_AGENTEP();
                    //dap.SOCIEDAD_ID = dh.SOCIEDAD_ID;
                    //dap.PUESTOC_ID = dh.PUESTOC_ID;
                    //dap.VERSION = dh.VERSION;
                    //dap.AGROUP_ID = dh.AGROUP_ID;
                    //dap.POS = dp.POS;
                    //dap.PUESTOA_ID = dp.PUESTOA_ID;
                    dp.USUARIOA_ID = Request.Form[pais + "-" + kunnr + "-" + dp.POS].ToString();
                    try
                    {
                        string isMonto = Request.Form[pais + "-" + kunnr + "-" + dp.POS + "-IsMonto"].ToString();
                        string monto   = Request.Form[pais + "-" + kunnr + "-" + dp.POS + "-monto"].ToString();
                        if (monto != "")
                        {
                            dp.MONTO = decimal.Parse(monto);
                        }
                        else
                        {
                            dp.MONTO = null;
                        }
                    }
                    catch
                    {
                        dp.MONTO = null;
                    }
                    try
                    {
                        string presu = Request.Form[pais + "-" + kunnr + "-" + dp.POS + "-presup"].ToString();
                        if (presu == "on")
                        {
                            dp.PRESUPUESTO = true;
                        }
                        else
                        {
                            dp.PRESUPUESTO = false;
                        }
                    }
                    catch
                    {
                        dp.PRESUPUESTO = false;
                    }
                    dp.MONTO           = dp.MONTO;
                    dp.PRESUPUESTO     = dp.PRESUPUESTO;
                    dp.ACTIVO          = true;
                    db.Entry(dp).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
            return(RedirectToAction("Details", new { id = u.ID }));
        }
Esempio n. 5
0
        public string procesa(FLUJO f, string recurrente)
        {
            string         correcto = String.Empty;
            TAT001Entities db       = new TAT001Entities();
            FLUJO          actual   = new FLUJO();

            if (f.ESTATUS.Equals("I"))//---------------------------NUEVO REGISTRO
            {
                actual.NUM_DOC = f.NUM_DOC;
                DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                actual.COMENTARIO = f.COMENTARIO;
                actual.ESTATUS    = f.ESTATUS;
                actual.FECHAC     = f.FECHAC;
                actual.FECHAM     = f.FECHAM;
                actual.LOOP       = f.LOOP;
                actual.NUM_DOC    = f.NUM_DOC;
                actual.POS        = f.POS;
                //DET_AGENTEH dah = db.DET_AGENTEH.Where(a => a.SOCIEDAD_ID.Equals(d.SOCIEDAD_ID) & a.PUESTOC_ID == d.PUESTO_ID &
                //                    a.USUARIOC_ID.Equals(d.USUARIOC_ID)).OrderByDescending(a => a.VERSION).FirstOrDefault();
                DET_AGENTEC dah = db.DET_AGENTEC.Where(a => a.USUARIOC_ID.Equals(d.USUARIOD_ID) & a.PAIS_ID == d.PAIS_ID &
                                                       a.VKORG.Equals(d.VKORG) & a.VTWEG.Equals(d.VTWEG) & a.SPART.Equals(d.SPART) & a.KUNNR.Equals(d.PAYER_ID))
                                  .OrderByDescending(a => a.VERSION).FirstOrDefault();

                actual.DETPOS      = 1;
                actual.DETVER      = dah.VERSION;
                actual.USUARIOA_ID = f.USUARIOA_ID;
                actual.USUARIOD_ID = f.USUARIOD_ID;
                actual.WF_POS      = f.WF_POS;
                actual.WF_VERSION  = f.WF_VERSION;
                actual.WORKF_ID    = f.WORKF_ID;
                f.ESTATUS          = "A";
                actual.ESTATUS     = f.ESTATUS;
                db.FLUJOes.Add(actual);

                WORKFP paso_a      = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS.Equals(actual.WF_POS)).FirstOrDefault();
                int    next_step_a = 0;
                if (paso_a.NEXT_STEP != null)
                {
                    next_step_a = (int)paso_a.NEXT_STEP;
                }

                WORKFP next = new WORKFP();
                if (recurrente != "X")
                {
                    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                }
                else
                {
                    WORKFP autoriza = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.ACCION_ID == 5).FirstOrDefault();
                    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == autoriza.NS_ACCEPT).FirstOrDefault();
                }
                if (next.NEXT_STEP.Equals(99))//--------FIN DEL WORKFLOW
                {
                    d.ESTATUS_WF = "A";
                    if (paso_a.EMAIL.Equals("X"))
                    {
                        correcto = "2";
                    }
                }
                else
                {
                    //DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                    FLUJO nuevo = new FLUJO();
                    nuevo.WORKF_ID   = next.ID;
                    nuevo.WF_VERSION = next.VERSION;
                    nuevo.WF_POS     = next.POS;
                    nuevo.NUM_DOC    = actual.NUM_DOC;
                    nuevo.POS        = actual.POS + 1;
                    nuevo.LOOP       = 1;

                    if (next.ACCION.TIPO == "E")
                    {
                        nuevo.USUARIOA_ID = null;
                        nuevo.DETPOS      = 0;
                        nuevo.DETVER      = 0;
                    }
                    else
                    {
                        if (recurrente != "X")
                        {
                            FLUJO detA = determinaAgenteI(d, actual.USUARIOA_ID, actual.USUARIOD_ID, 0, dah);
                            nuevo.USUARIOA_ID = detA.USUARIOA_ID;
                            nuevo.USUARIOD_ID = nuevo.USUARIOA_ID;

                            DateTime fecha = DateTime.Now.Date;
                            DELEGAR  del   = db.DELEGARs.Where(a => a.USUARIO_ID.Equals(nuevo.USUARIOD_ID) & a.FECHAI <= fecha & a.FECHAF >= fecha & a.ACTIVO == true).FirstOrDefault();
                            if (del != null)
                            {
                                nuevo.USUARIOA_ID = del.USUARIOD_ID;
                            }
                            else
                            {
                                nuevo.USUARIOA_ID = nuevo.USUARIOD_ID;
                            }

                            nuevo.DETPOS = detA.DETPOS;
                            nuevo.DETVER = dah.VERSION;
                        }
                        else
                        {
                            nuevo.USUARIOA_ID = null;
                            nuevo.DETPOS      = 0;
                            nuevo.DETVER      = 0;
                        }
                    }
                    nuevo.ESTATUS = "P";
                    nuevo.FECHAC  = DateTime.Now;
                    nuevo.FECHAM  = DateTime.Now;

                    db.FLUJOes.Add(nuevo);
                    if (paso_a.EMAIL.Equals("X"))
                    {
                        correcto = "1";
                    }
                    d.ESTATUS_WF      = "P";
                    db.Entry(d).State = EntityState.Modified;

                    db.SaveChanges();
                }
            }
            else if (f.ESTATUS.Equals("A"))   //---------------------EN PROCESO DE APROBACIÓN
            {
                actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC) & a.POS == f.POS).OrderByDescending(a => a.POS).FirstOrDefault();

                if (!actual.ESTATUS.Equals("P"))
                {
                    return("1");//-----------------YA FUE PROCESADA
                }
                else
                {
                    var wf = actual.WORKFP;
                    actual.ESTATUS         = f.ESTATUS;
                    actual.FECHAM          = f.FECHAM;
                    actual.COMENTARIO      = f.COMENTARIO;
                    actual.USUARIOA_ID     = f.USUARIOA_ID;
                    db.Entry(actual).State = EntityState.Modified;

                    WORKFP paso_a = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS.Equals(actual.WF_POS)).FirstOrDefault();
                    bool   ban    = true;
                    while (ban)         //--------------PARA LOOP
                    {
                        int next_step_a = 0;
                        int next_step_r = 0;
                        if (paso_a.NEXT_STEP != null)
                        {
                            next_step_a = (int)paso_a.NEXT_STEP;
                        }
                        if (paso_a.NS_ACCEPT != null)
                        {
                            next_step_a = (int)paso_a.NS_ACCEPT;
                        }
                        if (paso_a.NS_REJECT != null)
                        {
                            next_step_r = (int)paso_a.NS_REJECT;
                        }

                        WORKFP next = new WORKFP();
                        if (paso_a.ACCION.TIPO == "A" | paso_a.ACCION.TIPO == "N" | paso_a.ACCION.TIPO == "R" | paso_a.ACCION.TIPO == "T" | paso_a.ACCION.TIPO == "E" | paso_a.ACCION.TIPO == "B" | paso_a.ACCION.TIPO == "M") //Si está en proceso de aprobación
                        {
                            if (f.ESTATUS.Equals("A") | f.ESTATUS.Equals("N") | f.ESTATUS.Equals("M"))                                                                                                                         //APROBAR SOLICITUD
                            {
                                DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();

                                FLUJO nuevo = new FLUJO();
                                nuevo.WORKF_ID   = paso_a.ID;
                                nuevo.WF_VERSION = paso_a.VERSION;
                                nuevo.WF_POS     = next.POS;
                                nuevo.NUM_DOC    = actual.NUM_DOC;
                                nuevo.POS        = actual.POS + 1;
                                nuevo.LOOP       = 1; //-----------------------------------cc
                                                      //int loop = db.FLUJOes.Where(a => a.WORKF_ID.Equals(next.ID) & a.WF_VERSION.Equals(next.VERSION) & a.WF_POS == next.POS & a.NUM_DOC.Equals(actual.NUM_DOC) & a.ESTATUS.Equals("A")).Count();
                                                      //if (loop >= next.LOOPS)
                                                      //{
                                                      //    paso_a = next;
                                                      //    continue;
                                                      //}
                                                      //if (loop != 0)
                                                      //    nuevo.LOOP = loop + 1;
                                                      //else
                                                      //    nuevo.LOOP = 1;
                                FLUJO detA = new FLUJO();
                                if (paso_a.ACCION.TIPO == "N")
                                {
                                    actual.DETPOS = actual.DETPOS - 1;
                                }
                                int sop = 99;
                                if (next.ACCION.TIPO == "S")
                                {
                                    sop = 98;
                                }
                                detA = determinaAgente(d, actual.USUARIOA_ID, actual.USUARIOD_ID, actual.DETPOS, next.LOOPS, sop);
                                //nuevo.USUARIOA_ID = detA.USUARIOA_ID;



                                nuevo.USUARIOD_ID = detA.USUARIOA_ID;

                                DateTime fecha = DateTime.Now.Date;
                                DELEGAR  del   = db.DELEGARs.Where(a => a.USUARIO_ID.Equals(nuevo.USUARIOD_ID) & a.FECHAI <= fecha & a.FECHAF >= fecha & a.ACTIVO == true).FirstOrDefault();
                                if (del != null)
                                {
                                    nuevo.USUARIOA_ID = del.USUARIOD_ID;
                                }
                                else
                                {
                                    nuevo.USUARIOA_ID = nuevo.USUARIOD_ID;
                                }



                                nuevo.DETPOS = detA.DETPOS;
                                nuevo.DETVER = actual.DETVER;
                                if (paso_a.ACCION.TIPO == "N")
                                {
                                    nuevo.DETPOS  = nuevo.DETPOS + 1;
                                    actual.DETPOS = actual.DETPOS + 1;
                                }

                                if (d.DOCUMENTORECs.Count > 0)
                                {
                                    recurrente = "X";
                                }

                                if (nuevo.DETPOS == 0 | nuevo.DETPOS == 99)
                                {
                                    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                                    if (recurrente == "X" & next.ACCION.TIPO.Equals("P"))
                                    {
                                        next_step_a++;
                                        next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                                    }
                                    if (next.NEXT_STEP.Equals(99))//--------FIN DEL WORKFLOW
                                    {
                                        //DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                        d.ESTATUS_WF = "A";
                                        if (paso_a.EMAIL.Equals("X"))
                                        {
                                            correcto = "2";
                                        }
                                        if (recurrente == "X")
                                        {
                                            FLUJO nuevos = new FLUJO();
                                            nuevos.WORKF_ID   = paso_a.ID;
                                            nuevos.WF_VERSION = paso_a.VERSION;
                                            nuevos.WF_POS     = next.POS;
                                            nuevos.NUM_DOC    = actual.NUM_DOC;
                                            nuevos.POS        = actual.POS + 1;
                                            nuevos.ESTATUS    = "A";
                                            nuevos.FECHAC     = DateTime.Now;
                                            nuevos.FECHAM     = DateTime.Now;

                                            d.ESTATUS = "A";

                                            db.FLUJOes.Add(nuevos);
                                            //db.SaveChanges();
                                            ban = false;
                                        }
                                    }
                                    else
                                    {
                                        //DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                        //FLUJO nuevo = new FLUJO();
                                        nuevo.WORKF_ID   = next.ID;
                                        nuevo.WF_VERSION = next.VERSION;
                                        nuevo.WF_POS     = next.POS + detA.POS;
                                        nuevo.NUM_DOC    = actual.NUM_DOC;
                                        nuevo.POS        = actual.POS + 1;
                                        nuevo.LOOP       = 1;//-----------------------------------

                                        //FLUJO detA = determinaAgente(d, actual.USUARIOA_ID, actual.USUARIOD_ID, 0);
                                        //nuevo.USUARIOA_ID = "admin";
                                        //nuevo.DETPOS = 1;
                                        bool finR = false;
                                        d.ESTATUS_WF = "P";
                                        if (next.ACCION.TIPO.Equals("T"))
                                        {
                                            TAX_LAND tl = db.TAX_LAND.Where(a => a.SOCIEDAD_ID.Equals(d.SOCIEDAD_ID) & a.PAIS_ID.Equals(d.PAIS_ID) & a.ACTIVO == true).FirstOrDefault();
                                            if (tl != null)
                                            {
                                                //nuevo.USUARIOA_ID = db.DET_TAX.Where(a => a.SOCIEDAD_ID.Equals(d.SOCIEDAD_ID) & a.PUESTOC_ID == d.PUESTO_ID & a.PAIS_ID.Equals(d.PAIS_ID) & a.ACTIVO == true).FirstOrDefault().USUARIOA_ID;
                                                //nuevo.USUARIOA_ID = db.DET_TAXEO.Where(a => a.SOCIEDAD_ID.Equals(d.SOCIEDAD_ID) & a.PAIS_ID.Equals(d.PAIS_ID) & a.PUESTOC_ID == d.PUESTO_ID & a.USUARIOC_ID.Equals(d.USUARIOC_ID) & a.ACTIVO == true).FirstOrDefault().USUARIOA_ID;
                                                nuevo.USUARIOA_ID = db.DET_TAXEOC.Where(a => a.USUARIOC_ID.Equals(d.USUARIOD_ID) & a.PAIS_ID.Equals(d.PAIS_ID) & a.KUNNR == d.PAYER_ID & a.ACTIVO == true).FirstOrDefault().USUARIOA_ID;
                                                d.ESTATUS_WF      = "T";
                                            }
                                            else
                                            {
                                                nuevo.WF_POS      = nuevo.WF_POS + 1;
                                                nuevo.USUARIOA_ID = null;
                                                d.ESTATUS_WF      = "A";
                                                d.ESTATUS_SAP     = "P";
                                                if (recurrente == "X")
                                                {
                                                    nuevo.WF_POS++;
                                                    d.ESTATUS_SAP = "";
                                                    finR          = true;
                                                }
                                            }
                                        }
                                        else if (paso_a.ACCION.TIPO == "E")
                                        {
                                            nuevo.USUARIOA_ID = null;
                                        }
                                        else
                                        {
                                            if (nuevo.DETPOS == 0)
                                            {
                                                nuevo.USUARIOA_ID = null;
                                                d.ESTATUS_WF      = "A";
                                                d.ESTATUS_SAP     = "P";
                                            }
                                        }
                                        nuevo.ESTATUS = "P";
                                        nuevo.FECHAC  = DateTime.Now;
                                        nuevo.FECHAM  = DateTime.Now;

                                        if (finR)
                                        {
                                            nuevo.ESTATUS = "A";
                                            d.ESTATUS     = "A";
                                        }

                                        db.FLUJOes.Add(nuevo);
                                        if (paso_a.EMAIL.Equals("X"))
                                        {
                                            correcto = "1";
                                        }
                                    }
                                }
                                //else if(nuevo.DETPOS == 99)
                                //{
                                //    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                                //}
                                else
                                {
                                    //nuevo.USUARIOD_ID
                                    nuevo.ESTATUS = "P";
                                    nuevo.FECHAC  = DateTime.Now;
                                    nuevo.FECHAM  = DateTime.Now;
                                    nuevo.WF_POS  = nuevo.WF_POS + detA.POS;

                                    db.FLUJOes.Add(nuevo);
                                    if (paso_a.EMAIL.Equals("X"))
                                    {
                                        correcto = "1";
                                    }

                                    d.ESTATUS_WF = "P";
                                }
                                if (nuevo.DETPOS.Equals(98))
                                {
                                    d.ESTATUS_WF = "S";
                                }
                                db.Entry(d).State = EntityState.Modified;

                                db.SaveChanges();
                                ban = false;
                            }
                        }
                        else if (paso_a.ACCION.TIPO == "P")
                        {
                            if (f.ESTATUS.Equals("A") | f.ESTATUS.Equals("N"))//APROBAR SOLICITUD
                            {
                                DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);

                                ArchivoContable sa   = new ArchivoContable();
                                string          file = sa.generarArchivo(d.NUM_DOC, 0);

                                if (file == "")
                                {
                                    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();

                                    FLUJO nuevo = new FLUJO();
                                    nuevo.WORKF_ID   = paso_a.ID;
                                    nuevo.WF_VERSION = paso_a.VERSION;
                                    nuevo.WF_POS     = next.POS;
                                    nuevo.NUM_DOC    = actual.NUM_DOC;
                                    nuevo.POS        = actual.POS + 1;
                                    nuevo.ESTATUS    = "A";
                                    nuevo.FECHAC     = DateTime.Now;
                                    nuevo.FECHAM     = DateTime.Now;

                                    d.ESTATUS = "A";
                                    correcto  = file;

                                    db.FLUJOes.Add(nuevo);
                                    db.SaveChanges();
                                    ban = false;
                                }
                                else
                                {
                                    ban      = false;
                                    correcto = file;
                                }
                            }
                        }
                        else if (paso_a.ACCION.TIPO == "S")
                        {
                            if (f.ESTATUS.Equals("A") | f.ESTATUS.Equals("N"))//APROBAR SOLICITUD
                            {
                                DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();

                                FLUJO nuevo = new FLUJO();
                                nuevo.WORKF_ID   = paso_a.ID;
                                nuevo.WF_VERSION = paso_a.VERSION;
                                nuevo.WF_POS     = next.POS;
                                nuevo.NUM_DOC    = actual.NUM_DOC;
                                nuevo.POS        = actual.POS + 1;
                                nuevo.LOOP       = 1;//-----------------------------------cc
                                //int loop = db.FLUJOes.Where(a => a.WORKF_ID.Equals(next.ID) & a.WF_VERSION.Equals(next.VERSION) & a.WF_POS == next.POS & a.NUM_DOC.Equals(actual.NUM_DOC) & a.ESTATUS.Equals("A")).Count();
                                //if (loop >= next.LOOPS)
                                //{
                                //    paso_a = next;
                                //    continue;
                                //}
                                //if (loop != 0)
                                //    nuevo.LOOP = loop + 1;
                                //else
                                //    nuevo.LOOP = 1;
                                if (paso_a.ACCION.TIPO == "N")
                                {
                                    actual.DETPOS = actual.DETPOS - 1;
                                }
                                FLUJO detA = determinaAgente(d, actual.USUARIOA_ID, actual.USUARIOD_ID, 98, next.LOOPS, 98);
                                //nuevo.USUARIOA_ID = detA.USUARIOA_ID;



                                nuevo.USUARIOD_ID = detA.USUARIOA_ID;

                                DateTime fecha = DateTime.Now.Date;
                                DELEGAR  del   = db.DELEGARs.Where(a => a.USUARIO_ID.Equals(nuevo.USUARIOD_ID) & a.FECHAI <= fecha & a.FECHAF >= fecha & a.ACTIVO == true).FirstOrDefault();
                                if (del != null)
                                {
                                    nuevo.USUARIOA_ID = del.USUARIOD_ID;
                                }
                                else
                                {
                                    nuevo.USUARIOA_ID = nuevo.USUARIOD_ID;
                                }



                                nuevo.DETPOS = detA.DETPOS;
                                nuevo.DETVER = actual.DETVER;
                                if (paso_a.ACCION.TIPO == "N")
                                {
                                    nuevo.DETPOS  = nuevo.DETPOS + 1;
                                    actual.DETPOS = actual.DETPOS + 1;
                                }


                                if (nuevo.DETPOS == 0 | nuevo.DETPOS == 99)
                                {
                                    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                                    if (next.NEXT_STEP.Equals(99))//--------FIN DEL WORKFLOW
                                    {
                                        //DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                        d.ESTATUS_WF = "A";
                                        if (paso_a.EMAIL.Equals("X"))
                                        {
                                            correcto = "2";
                                        }
                                    }
                                    else
                                    {
                                        //DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                                        //FLUJO nuevo = new FLUJO();
                                        nuevo.WORKF_ID   = next.ID;
                                        nuevo.WF_VERSION = next.VERSION;
                                        nuevo.WF_POS     = next.POS + detA.POS;
                                        nuevo.NUM_DOC    = actual.NUM_DOC;
                                        nuevo.POS        = actual.POS + 1;
                                        nuevo.LOOP       = 1; //-----------------------------------
                                                              //int loop1 = db.FLUJOes.Where(a => a.WORKF_ID.Equals(next.ID) & a.WF_VERSION.Equals(next.VERSION) & a.WF_POS == next.POS & a.NUM_DOC.Equals(actual.NUM_DOC) & a.ESTATUS.Equals("A")).Count();
                                                              //if (loop1 >= next.LOOPS)
                                                              //{
                                                              //    paso_a = next;
                                                              //    continue;
                                                              //}
                                                              //if (loop1 != 0)
                                                              //    nuevo.LOOP = loop1 + 1;
                                                              //else
                                                              //    nuevo.LOOP = 1;

                                        //FLUJO detA = determinaAgente(d, actual.USUARIOA_ID, actual.USUARIOD_ID, 0);
                                        //nuevo.USUARIOA_ID = "admin";
                                        //nuevo.DETPOS = 1;
                                        d.ESTATUS_WF = "P";
                                        if (nuevo.DETPOS == 0)
                                        {
                                            nuevo.USUARIOA_ID = null;
                                            d.ESTATUS_WF      = "A";
                                            d.ESTATUS_SAP     = "P";
                                        }
                                        nuevo.ESTATUS = "P";
                                        nuevo.FECHAC  = DateTime.Now;
                                        nuevo.FECHAM  = DateTime.Now;

                                        db.FLUJOes.Add(nuevo);
                                        if (paso_a.EMAIL.Equals("X"))
                                        {
                                            correcto = "1";
                                        }
                                    }
                                }
                                //else if(nuevo.DETPOS == 99)
                                //{
                                //    next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_a).FirstOrDefault();
                                //}
                                else
                                {
                                    //nuevo.USUARIOD_ID
                                    nuevo.ESTATUS = "P";
                                    nuevo.FECHAC  = DateTime.Now;
                                    nuevo.FECHAM  = DateTime.Now;
                                    nuevo.WF_POS  = nuevo.WF_POS + detA.POS;

                                    db.FLUJOes.Add(nuevo);
                                    if (paso_a.EMAIL.Equals("X"))
                                    {
                                        correcto = "1";
                                    }

                                    d.ESTATUS_WF = "P";
                                }
                                db.Entry(d).State = EntityState.Modified;

                                db.SaveChanges();
                                ban = false;
                            }
                        }
                    }
                }
            }
            else if (f.ESTATUS.Equals("R"))//Rechazada
            {
                actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();
                WORKFP paso_a = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS.Equals(actual.WF_POS)).FirstOrDefault();

                int next_step_a = 0;
                int next_step_r = 0;
                if (paso_a.NEXT_STEP != null)
                {
                    next_step_a = (int)paso_a.NEXT_STEP;
                }
                if (paso_a.NS_ACCEPT != null)
                {
                    next_step_a = (int)paso_a.NS_ACCEPT;
                }
                if (paso_a.NS_REJECT != null)
                {
                    next_step_r = (int)paso_a.NS_REJECT;
                }

                WORKFP next = new WORKFP();
                next = db.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS == next_step_r).FirstOrDefault();

                correcto          = "3";
                actual.ESTATUS    = f.ESTATUS;
                actual.FECHAM     = f.FECHAM;
                actual.COMENTARIO = f.COMENTARIO;

                FLUJO nuevo = new FLUJO();
                nuevo.WORKF_ID   = next.ID;
                nuevo.WF_VERSION = next.VERSION;
                nuevo.WF_POS     = next.POS;
                nuevo.NUM_DOC    = actual.NUM_DOC;
                nuevo.POS        = actual.POS + 1;
                nuevo.DETPOS     = 1;
                nuevo.DETVER     = actual.DETVER;
                nuevo.LOOP       = 1;//-----------------------------------
                DOCUMENTO d = db.DOCUMENTOes.Find(actual.NUM_DOC);
                nuevo.USUARIOD_ID = d.USUARIOD_ID;
                DateTime fecha = DateTime.Now.Date;
                DELEGAR  del   = db.DELEGARs.Where(a => a.USUARIO_ID.Equals(nuevo.USUARIOD_ID) & a.FECHAI <= fecha & a.FECHAF >= fecha & a.ACTIVO == true).FirstOrDefault();
                if (del != null)
                {
                    nuevo.USUARIOA_ID = del.USUARIOD_ID;
                }
                else
                {
                    nuevo.USUARIOA_ID = nuevo.USUARIOD_ID;
                }
                //nuevo.USUARIOD_ID
                nuevo.ESTATUS = "P";
                nuevo.FECHAC  = DateTime.Now;
                nuevo.FECHAM  = DateTime.Now;

                db.FLUJOes.Add(nuevo);
                db.Entry(actual).State = EntityState.Modified;
                d.ESTATUS_WF           = "R";
                if (next.ACCION.TIPO == "S")
                {
                    d.ESTATUS    = "R";
                    d.ESTATUS_WF = "S";
                }

                db.SaveChanges();
            }

            //-------------------------------------------------------------------------------------------------------------------------------//
            //-------------------------------------------------------------------------------------------------------------------------------//
            //-------------------------------------------------------------------------------------------------------------------------------//
            //-------------------------------------------------------------------------------------------------------------------------------//
            //-------------------------------------------------------------------------------------------------------------------------------//
            if (correcto.Equals(""))
            {
                FLUJO  conta = db.FLUJOes.Where(x => x.NUM_DOC == f.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                string corr  = "";
                if (conta.WORKFP.ACCION.TIPO == "P")
                {
                    conta.ESTATUS = "A";
                    conta.FECHAM  = DateTime.Now;
                    corr          = procesa(conta, recurrente);
                }
                if (corr == "")
                {
                    if (f.DOCUMENTO.DOCUMENTO_REF != null)
                    {
                        f.DOCUMENTO.TSOL = db.DOCUMENTOes.Where(x => x.NUM_DOC == f.NUM_DOC).FirstOrDefault().TSOL;
                        if (f.DOCUMENTO.TSOL.REVERSO == false)
                        {
                            DOCUMENTO rel = db.DOCUMENTOes.Where(x => x.DOCUMENTO_REF == f.DOCUMENTO.DOCUMENTO_REF & x.TSOL.REVERSO == true).FirstOrDefault();
                            if (rel != null)
                            {
                                FLUJO rev = db.FLUJOes.Where(x => x.NUM_DOC == rel.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
                                rev.ESTATUS = "A";
                                rev.FECHAM  = DateTime.Now;
                                corr        = procesa(rev, recurrente);
                            }
                        }
                    }
                }
            }
            //else if (correcto.Equals("1"))
            //{
            //    FLUJO conta = db.FLUJOes.Where(x => x.NUM_DOC == f.NUM_DOC).Include(x => x.WORKFP).OrderByDescending(x => x.POS).FirstOrDefault();
            //    string corr = "";
            //    if (conta.WORKFP.ACCION.TIPO == "B")
            //    {
            //        Email em = new Email();
            //        em.enviaMailC(f.NUM_DOC, false, null, )
            //    }
            //}

            return(correcto);
        }