Exemplo n.º 1
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_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();
                CLIENTEF cf = db.CLIENTEFs.Where(a => 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      = cf.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(cf);
                            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 = cf.VERSION;
                        }
                        else
                        {
                            nuevo.USUARIOA_ID = null;
                            nuevo.DETPOS      = 0;
                            nuevo.DETVER      = 0;
                        }
                    }
                    nuevo.ESTATUS = "P";
                    nuevo.FECHAC  = DateTime.Now;
                    nuevo.FECHAM  = DateTime.Now;

                    if (paso_a.EMAIL.Equals("X"))
                    {
                        correcto = "1";
                    }
                    d.ESTATUS_WF = "P";

                    db.FLUJOes.Add(nuevo);
                    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;

                                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);

                                CLIENTEF cf = db.CLIENTEFs.Where(a => 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();

                                detA = determinaAgenteC(d, cf, actual.DETPOS, sop, paso_a.ACCION.TIPO);
                                //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 = 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 != null)
                                        {
                                            next_step_a = (int)next.NEXT_STEP;
                                        }
                                        if (next.NS_ACCEPT != null)
                                        {
                                            next_step_a = (int)next.NS_ACCEPT;
                                        }
                                        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 & cf.USUARIO7_ID != null)
                                            {
                                                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;
                                                nuevo.USUARIOA_ID = cf.USUARIO7_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);
                                CLIENTEF cf = db.CLIENTEFs.Where(a => 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();
                                FLUJO detA = determinaAgenteC(d, cf, 98, 98, "S");



                                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);
        }
        public FileStreamResult generarExcel(List <SolxContabilizar> lst, string cocode)
        {
            ArchivoContable acontable = new ArchivoContable();
            List <ArchivoC> l_ac      = new List <ArchivoC>();
            var             workbook  = new XLWorkbook();
            var             worksheet = workbook.Worksheets.Add("Sheet 1");

            foreach (var l in lst)
            {
                acontable.generarArchivo(l.NUM_DOC, 0, 0, "L", ref l_ac);
            }
            var fila = 1;

            foreach (var la in l_ac)
            {
                worksheet.Cell(fila, 1).Value  = la.tab.TIPO_DOC;
                worksheet.Cell(fila, 2).Value  = la.tab.SOCIEDAD.Trim();
                worksheet.Cell(fila, 3).Value  = la.tab.FECHA_DOCU.Trim();
                worksheet.Cell(fila, 4).Value  = la.tab.FECHA_DOCU.Trim();
                worksheet.Cell(fila, 5).Value  = la.doc.MONEDA_ID.Trim();
                worksheet.Cell(fila, 6).Value  = la.tab.HEADER_TEXT.Trim();
                worksheet.Cell(fila, 7).Value  = la.tab.REFERENCIA.Trim();
                worksheet.Cell(fila, 8).Value  = la.tab.CALC_TAXT.ToString().Replace("True", "X").Replace("False", "");
                worksheet.Cell(fila, 9).Value  = la.tab.NOTA.Trim();
                worksheet.Cell(fila, 10).Value = la.tab.CORRESPONDENCIA.Trim();
                var fdetalle = fila + 2;
                foreach (var d in la.det)
                {
                    worksheet.Cell(fdetalle, 1).Value  = d.POS_TYPE;
                    worksheet.Cell(fdetalle, 2).Value  = d.COMP_CODE;
                    worksheet.Cell(fdetalle, 3).Value  = d.BUS_AREA;
                    worksheet.Cell(fdetalle, 4).Value  = d.POST_KEY;
                    worksheet.Cell(fdetalle, 5).Value  = d.ACCOUNT;
                    worksheet.Cell(fdetalle, 6).Value  = d.COST_CENTER;
                    worksheet.Cell(fdetalle, 7).Value  = d.BALANCE;
                    worksheet.Cell(fdetalle, 8).Value  = d.TEXT;
                    worksheet.Cell(fdetalle, 9).Value  = "'" + d.SALES_ORG;
                    worksheet.Cell(fdetalle, 10).Value = d.DIST_CHANEL;
                    worksheet.Cell(fdetalle, 11).Value = d.DIVISION;
                    worksheet.Cell(fdetalle, 12).Value = d.INV_REF;
                    worksheet.Cell(fdetalle, 13).Value = d.PAY_TERM;
                    worksheet.Cell(fdetalle, 14).Value = d.JURIS_CODE;
                    worksheet.Cell(fdetalle, 15).Value = "'" + d.CUSTOMER;
                    worksheet.Cell(fdetalle, 16).Value = "'" + d.PRODUCT;
                    worksheet.Cell(fdetalle, 17).Value = d.TAX_CODE;
                    worksheet.Cell(fdetalle, 18).Value = d.PLANT;
                    worksheet.Cell(fdetalle, 19).Value = d.REF_KEY1;
                    worksheet.Cell(fdetalle, 20).Value = d.REF_KEY2;
                    worksheet.Cell(fdetalle, 21).Value = d.REF_KEY3;
                    worksheet.Cell(fdetalle, 22).Value = "'" + d.ASSIGNMENT;
                    worksheet.Cell(fdetalle, 23).Value = d.QTY;
                    worksheet.Cell(fdetalle, 24).Value = d.BASE_UNIT;
                    worksheet.Cell(fdetalle, 25).Value = d.AMOUNT_LC;
                    worksheet.Cell(fdetalle, 26).Value = d.RETENCION_ID;
                    fdetalle += 1;
                }
                fila = fdetalle + 2;
            }
            worksheet.Columns().AdjustToContents();
            var fileDownloadName = "SolxContabilizar_" + cocode + "_" + DateTime.Now.ToString("ddMMyyyy") + ".xlsx";
            var contentType      = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

            var fileStream = new MemoryStream();

            workbook.SaveAs(fileStream);
            fileStream.Position = 0;

            var fsr = new FileStreamResult(fileStream, contentType);

            fsr.FileDownloadName = fileDownloadName;

            return(fsr);
        }