// GET: Workflows/Details/5
        public ActionResult Details(string id)
        {
            int pagina = 111; //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;
            }
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WORKFH wORKFH = db.WORKFHs.Find(id);

            if (wORKFH == null)
            {
                return(HttpNotFound());
            }

            wORKFH.WORKFVs.OrderByDescending(a => a.VERSION);
            WORKFV wv = wORKFH.WORKFVs.Last();

            wORKFH.WORKFVs = new List <WORKFV>();
            wORKFH.WORKFVs.Add(wv);
            WORKFT wt = wORKFH.WORKFVs.First().WORKFTs.Where(a => a.SPRAS_ID.Equals(Session["spras"].ToString())).FirstOrDefault();

            wORKFH.WORKFVs.First().WORKFTs = new List <WORKFT>();
            wORKFH.WORKFVs.First().WORKFTs.Add(wt);
            return(View(wORKFH));
        }
Ejemplo n.º 2
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.º 3
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.º 4
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);
        }
Ejemplo n.º 5
0
        public decimal creaReversa(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 valores de tsols
            List <TSOL> tsols_val = new List <TSOL>();

            //List<TSOLT_MODBD> tsols_valbd = new List<TSOLT_MODBD>();//RSG 13.06.2018
            try
            {
                tsols_val = db.TSOLs.ToList();
                //tsols_valbd = tsols_val.Select(tsv => new TSOLT_MODBD
                //{
                //    ID = tsv.ID,
                //    FACTURA = tsv.FACTURA
                //}).ToList();
            }
            catch (Exception e)
            {
            }
            //Validar si es una reversa
            string isrn     = "";
            string isr      = "";
            var    freversa = (dynamic)null;

            try
            {
                if (tsol == null || tsol.Equals(""))
                {
                    throw new Exception();
                }
                TSOL ts = tsols_val.Where(tsb => tsb.TSOLR == tsol).FirstOrDefault();
                if (ts != null)
                {
                    isrn     = "X";
                    isr      = "preversa";
                    freversa = theTime.ToString("yyyy-MM-dd");;
                    //Obtener los tipos de reversas
                    try
                    {
                        ldocr = db.TREVERSATs.Where(a => a.TREVERSA.ACTIVO == true && a.SPRAS_ID == dOCpADRE.USUARIO.SPRAS_ID).ToList();
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            catch (Exception e)
            {
                isrn     = "";
                isr      = "";
                freversa = "";
            }
            //---

            //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)
                    ////{

                    ////}
                    List <DOCUMENTOP> docpl    = db.DOCUMENTOPs.Where(docp => docp.NUM_DOC == dOCpADRE.NUM_DOC).ToList();//Documentos que se obtienen de la provisión
                    List <DOCUMENTOP> docsrelp = new List <DOCUMENTOP>();

                    if (docsrel.Count > 0)
                    {
                        docsrelp = docsrel
                                   .Join(
                            db.DOCUMENTOPs,
                            docsl => docsl.NUM_DOC,
                            docspl => docspl.NUM_DOC,
                            (docsl, docspl) => new DOCUMENTOP
                        {
                            NUM_DOC      = docspl.NUM_DOC,
                            POS          = docspl.POS,
                            MATNR        = docspl.MATNR,
                            MATKL        = docspl.MATKL,
                            CANTIDAD     = docspl.CANTIDAD,
                            MONTO        = docspl.MONTO,
                            PORC_APOYO   = docspl.PORC_APOYO,
                            MONTO_APOYO  = docspl.MONTO_APOYO,
                            PRECIO_SUG   = docspl.PRECIO_SUG,
                            VOLUMEN_EST  = docspl.VOLUMEN_EST,
                            VOLUMEN_REAL = docspl.VOLUMEN_REAL,
                            APOYO_REAL   = docspl.APOYO_REAL,
                            APOYO_EST    = docspl.APOYO_EST,
                            VIGENCIA_DE  = docspl.VIGENCIA_DE,
                            VIGENCIA_AL  = docspl.VIGENCIA_AL
                        }).ToList();
                    }
                    List <TAT001.Models.DOCUMENTOP_MOD> docsp = new List <DOCUMENTOP_MOD>();
                    var dis = "";
                    for (int j = 0; j < docpl.Count; j++)
                    {
                        try
                        {
                            //Documentos de la provisión
                            DOCUMENTOP_MOD docP = new DOCUMENTOP_MOD();
                            docP.NUM_DOC = dOCpADRE.NUM_DOC;
                            docP.POS     = docpl[j].POS;
                            docP.MATNR   = docpl[j].MATNR;
                            if (j == 0 && docP.MATNR == "")
                            {
                                relacionada_dis = "C";
                            }
                            docP.MATKL       = docpl[j].MATKL;
                            docP.MATKL_ID    = docpl[j].MATKL;
                            docP.CANTIDAD    = 1;
                            docP.MONTO       = docpl[j].MONTO;
                            docP.PORC_APOYO  = docpl[j].PORC_APOYO;
                            docP.MONTO_APOYO = docpl[j].MONTO_APOYO;
                            docP.PRECIO_SUG  = docpl[j].PRECIO_SUG;
                            docP.VOLUMEN_EST = docpl[j].VOLUMEN_EST;
                            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;

                            //Verificar si hay materiales en las relacionadas
                            if (docsrelp.Count > 0)
                            {
                                List <DOCUMENTOP> docrel = new List <DOCUMENTOP>();

                                if (docP.MATNR != null && docP.MATNR != "")
                                {
                                    docrel = docsrelp.Where(docrell => docrell.MATNR == docP.MATNR).ToList();
                                }
                                else
                                {
                                    docrel = docsrelp.Where(docrell => docrell.MATKL == docP.MATKL_ID).ToList();
                                    dis    = "C";
                                }

                                for (int k = 0; k < docrel.Count; k++)
                                {
                                    //Relacionada se obtiene el
                                    decimal docr_vr = Convert.ToDecimal(docrel[k].VOLUMEN_REAL);
                                    decimal docr_ar = Convert.ToDecimal(docrel[k].APOYO_REAL);

                                    docP.VOLUMEN_EST -= docr_vr;
                                    docP.APOYO_EST   -= docr_ar;

                                    if (dis == "C")
                                    {
                                        //decimal docr_vr = Convert.ToDecimal(docrel[k].);
                                        //decimal docr_ar = Convert.ToDecimal(docrel[k].APOYO_REAL);
                                    }
                                }
                            }

                            //Siempre tiene que ser igual a 0
                            if (docP.VOLUMEN_EST < 0)
                            {
                                docP.VOLUMEN_EST = 0;
                            }
                            if (docP.APOYO_EST < 0)
                            {
                                docP.APOYO_EST = 0;
                            }

                            docP.MATNR = docpl[j].MATNR.TrimStart('0');//RSG 07.06.2018
                            docsp.Add(docP);
                        }
                        catch (Exception e)
                        {
                        }
                    }

                    dOCUMENTO.DOCUMENTOP = docsp;
                }
            }
            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


            dOCUMENTO.MONTO_DOC_MD = decimal.Parse("0.00");
            foreach (DOCUMENTOP_MOD dpm in dOCUMENTO.DOCUMENTOP)
            {
                DOCUMENTOP ddp = new DOCUMENTOP();
                ddp.MATKL        = dpm.MATKL_ID;
                ddp.MATNR        = new Cadena().completaMaterial(dpm.MATNR);
                ddp.MONTO        = dpm.MONTO;
                ddp.MONTO_APOYO  = dpm.MONTO_APOYO;
                ddp.PORC_APOYO   = dpm.PORC_APOYO;
                ddp.POS          = dpm.POS;
                ddp.PRECIO_SUG   = dpm.PRECIO_SUG;
                ddp.VIGENCIA_AL  = dpm.VIGENCIA_AL;
                ddp.VIGENCIA_DE  = dpm.VIGENCIA_DE;
                ddp.VOLUMEN_EST  = dpm.VOLUMEN_EST;
                ddp.VOLUMEN_REAL = dpm.VOLUMEN_REAL;
                ddp.APOYO_EST    = dpm.APOYO_EST;
                ddp.APOYO_REAL   = dpm.APOYO_REAL;
                ddp.CANTIDAD     = dpm.CANTIDAD;

                DOCUMENTOP dpp = dOCpADRE.DOCUMENTOPs.Where(x => x.POS == ddp.POS).FirstOrDefault();
                foreach (DOCUMENTOM dm in dpp.DOCUMENTOMs)
                {
                    DOCUMENTOM dmm = new DOCUMENTOM();
                    dmm.APOYO_EST  = dm.APOYO_EST;
                    dmm.APOYO_REAL = dm.APOYO_REAL;
                    dmm.MATNR      = dm.MATNR;
                    //dmm.NUM_DOC = dm.NUM_DOC;
                    dmm.PORC_APOYO  = dm.PORC_APOYO;
                    dmm.POS         = dm.POS;
                    dmm.POS_ID      = dm.POS_ID;
                    dmm.VALORH      = dm.VALORH;
                    dmm.VIGENCIA_A  = dm.VIGENCIA_A;
                    dmm.VIGENCIA_DE = dm.VIGENCIA_DE;

                    ddp.DOCUMENTOMs.Add(dmm);
                }

                dOCUMENTO.DOCUMENTOPs.Add(ddp);
                dOCUMENTO.MONTO_DOC_MD += ddp.APOYO_EST;
            }

            foreach (DOCUMENTOP dpp in dOCpADRE.DOCUMENTOPs)
            {
            }
            ////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 = "";

            USUARIO u      = db.USUARIOs.Find(d.USUARIOC_ID); //RSG 02/05/2018
            Rangos  rangos = new Rangos();                    //RSG 01.08.2018
            //Obtener el número de documento
            decimal N_DOC = rangos.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;
            dOCUMENTO.USUARIOD_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);

            TCambio tcambio = new TCambio();//RSG 01.08.2018

            //Obtener el monto de la sociedad
            dOCUMENTO.MONTO_DOC_ML = tcambio.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 = tcambio.getUkurs(id_bukrs.WAERS, dOCUMENTO.MONEDA_ID, out errorString);

            //Tipo cambio dolares TIPO_CAMBIOL2
            dOCUMENTO.TIPO_CAMBIOL2 = tcambio.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;
            dOCUMENTO.TSOL_ID = tsol;
            //Guardar el documento
            db.DOCUMENTOes.Add(dOCUMENTO);
            db.SaveChanges();

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


            DOCUMENTO referencia = db.DOCUMENTOes.Find(dOCUMENTO.DOCUMENTO_REF);

            referencia.ESTATUS         = "R";
            db.Entry(referencia).State = EntityState.Modified;
            db.SaveChanges();
            //Guardar los documentos p para el documento guardado

            ProcesaFlujo2 pf = new ProcesaFlujo2();
            //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, "");
                    //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(dOCUMENTO.NUM_DOC);
        }
Ejemplo n.º 6
0
        //LEJGG 12-12-2018
        public string procesacoc(decimal num_doc) //MGC 29-10-2018 Configuración de estatus
        {
            bool            nextSol    = false;   ////MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario
            string          correcto   = String.Empty;
            WFARTHAEntities db         = new WFARTHAEntities();
            FLUJO           actual     = new FLUJO();
            string          recurrente = "";
            bool            emails     = false; //MGC 08-10-2018 Obtener los datos para el correo
            string          emailsto   = "";    //MGC 09-10-2018 Envío de correos

            if (true)                           //---------------------------NUEVO REGISTRO
            {
                DOCUMENTO d = db.DOCUMENTOes.Find(num_doc);

                //actual = db.FLUJOes.Where(fl => fl.NUM_DOC == num_doc).FirstOrDefault();//MGC 05-10-2018 Modificación para work flow al ser editada
                actual = db.FLUJOes.Where(a => a.NUM_DOC.Equals(d.NUM_DOC)).OrderByDescending(x => x.POS).FirstOrDefault();//MGC 05-10-2018 Modificación para work flow al ser editada


                //MGC 08-10-2018 Obtener los datos para el correo
                WORKFV wf = db.WORKFHs.Where(a => a.ID == actual.WORKF_ID).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault();

                WORKFP wp    = wf.WORKFPs.Where(a => a.ID.Equals(actual.WORKF_ID) & a.VERSION.Equals(actual.WF_VERSION) & a.POS.Equals(actual.WF_POS)).OrderBy(a => a.POS).FirstOrDefault();
                string email = ""; //MGC 08-10-2018 Obtener el nombre del cliente
                email = wp.EMAIL;  //MGC 08-10-2018 Obtener el nombre del cliente

                if (email == "X")
                {
                    emails = true;
                }

                int step = 0;
                if (actual.STEP_AUTO == 0)
                {
                    //step = Convert.ToInt32(actual.STEP_AUTO) + 1;
                    step = Convert.ToInt32(actual.STEP_AUTO);//MGC 19-10-2018 Cambio a detonador
                }

                List <DET_AGENTECA> dap = db.DET_AGENTECA.Where(a => a.VERSION == actual.RUTA_VERSION && a.ID_RUTA_AGENTE == actual.ID_RUTA_A && a.STEP_FASE == step).OrderByDescending(a => a.VERSION).ToList();
                DET_AGENTECA        dah = new DET_AGENTECA();
                dah = detAgenteLimite(dap, Convert.ToDecimal(d.MONTO_DOC_MD), step, actual);//MGC 19-10-2018 Cambio a detonador


                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();
                }
                if (next.NEXT_STEP.Equals(99))//--------FIN DEL WORKFLOW
                {
                    d.ESTATUS_WF = "A";
                    if (paso_a.EMAIL != null)
                    {
                        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;

                    //Agregar autorización MGC
                    nuevo.ID_RUTA_A    = actual.ID_RUTA_A;
                    nuevo.RUTA_VERSION = actual.RUTA_VERSION;

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

                    if (next.ACCION.TIPO == "E")
                    {
                        nuevo.USUARIOA_ID = null;
                        nuevo.DETPOS      = 0;
                        nuevo.DETVER      = 0;
                    }
                    else
                    {
                        if (recurrente != "X")
                        {
                            //MGC 12-11-2018 Se guarda con normalidad
                            FLUJO detA = determinaAgenteI(d, actual.USUARIOA_ID, actual.USUARIOD_ID, 0, dah, step, actual);//MGC 19-10-2018 Cambio a detonador
                            nuevo.USUARIOA_ID = detA.USUARIOA_ID;
                            nuevo.USUARIOD_ID = nuevo.USUARIOA_ID;
                            nuevo.STEP_AUTO   = detA.STEP_AUTO;

                            //MGC 12-11-2018 Se obtiene el back up
                            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;

                            //MGC 09-10-2018 Envío de correos
                            if (emails)
                            {
                                emails = true;

                                //MGC 09-10-2018 Envío de correos
                                //Obtener el email del creador
                                string emailc = "";
                                emailc   = db.USUARIOs.Where(us => us.ID == d.USUARIOC_ID).FirstOrDefault().EMAIL;
                                emailsto = emailc;
                                emailc   = "";

                                //Obtener el usuario aprobador
                                emailc    = db.USUARIOs.Where(us => us.ID == nuevo.USUARIOA_ID).FirstOrDefault().EMAIL;
                                emailsto += "," + emailc;

                                //Obtener el usuario del siguiente aprobador
                            }
                        }
                        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);
                    db.SaveChanges();//MGC 03-12-2018 Loop para firmas y obtener el más actual

                    if (paso_a.EMAIL != null)
                    {
                        if (paso_a.EMAIL.Equals("X"))
                        {
                            correcto = "1";
                        }
                    }

                    d.ESTATUS_WF      = "P";
                    d.ESTATUS         = "F";
                    db.Entry(d).State = EntityState.Modified;
                    db.SaveChanges();//MGC 03-12-2018 Loop para firmas y obtener el más actual

                    DOCUMENTO dmod = db.DOCUMENTOes.Find(num_doc);
                    dmod.ESTATUS_WF      = "P";
                    dmod.ESTATUS         = "F";
                    dmod.ESTATUS_SAP     = null;
                    dmod.ESTATUS_PRE     = "G";
                    db.Entry(dmod).State = EntityState.Modified;
                    db.SaveChanges();

                    //MGC 03-12-2018 Loop para firmas y obtener el más actual
                    //Actualizar el actual
                    actual.FECHAM          = DateTime.Now;
                    db.Entry(actual).State = EntityState.Modified;
                    db.SaveChanges();

                    //MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario-------------------------------------------------->
                    if (d.USUARIOC_ID == d.USUARIOD_ID)
                    {
                        nextSol = true;
                    }
                    //MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario--------------------------------------------------<

                    //MGC 30-10-2018 Agregar mensaje a log de modificación
                    try
                    {
                        DOCUMENTOLOG dl = new DOCUMENTOLOG();

                        dl.NUM_DOC   = d.NUM_DOC;
                        dl.TYPE_LINE = "M";
                        dl.TYPE      = "S";
                        dl.MESSAGE   = "Comienza el Proceso de Aprobación";
                        dl.FECHA     = DateTime.Now;

                        //db.DOCUMENTOLOGs.Add(dl);//MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario
                        //db.SaveChanges();//MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario
                    }
                    catch (Exception e)
                    {
                    }
                    //MGC 30-10-2018 Agregar mensaje a log de modificación

                    //MGC 16-10-2018 Eliminar msg
                    deleteMesg(d.NUM_DOC);
                }
            }

            //MGC 08-10-2018 Obtener los datos para el correo
            if (emails)
            {
                //Obtener el directorio desde la configuración


                //MGC 08-10-2018 Obtener los datos para el correo comentar provisional
                Email  em           = new Email();
                string UrlDirectory = getURLPortal();
                //string image = Server.MapPath("~/images/artha_logo.jpg");
                string image = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string page  = "Index";
                try
                {
                    //MGC 11-10-2018 No enviar correos
                    em.enviaMailC(num_doc, true, "ES", UrlDirectory, page, image, emailsto);
                }
                catch (Exception)
                {
                }
            }

            //MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario-------------------------------------------------->
            //MGC 21-11-2018 correr el siguiente flujo cuando el creador y solicitante son el mismo usuario
            if (nextSol)
            {
                //Obtener el documento
                DOCUMENTO _doc = db.DOCUMENTOes.Find(num_doc);


                //Obtener el último flujo registrado
                FLUJO fa = new FLUJO();
                fa = db.FLUJOes.Where(a => a.NUM_DOC.Equals(_doc.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault();

                //Obtener las acciones
                FLUJO f = db.FLUJOes.Where(a => a.NUM_DOC.Equals(_doc.NUM_DOC) & a.ESTATUS.Equals("P")).FirstOrDefault();

                //Hacer las modificaciones necesarias el flujo para auto-aprobar
                if (_doc.ESTATUS_C != "C")
                {
                    if (f != null)
                    {
                        string accion = "";
                        accion = db.WORKFPs.Where(a => a.ID.Equals(f.WORKF_ID) & a.POS.Equals(f.WF_POS) & a.VERSION.Equals(f.WF_VERSION)).FirstOrDefault().ACCION.TIPO;

                        if (accion == "A")
                        {
                            //Modificación del flujo, simular
                            fa.ESTATUS    = "A";
                            fa.COMENTARIO = "Auto Aprobado";

                            Flujosprocesa(fa, _doc.USUARIOC_ID);
                        }
                    }
                }
            }
            //MGC 21-11-2018 Validar si el creador y el solicitante es el mismo usuario--------------------------------------------------<

            return(correcto);
        }