// 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 })); } }
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 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")); }
public int creaRecurrente(string id_d, string tsol) { string dates = DateTime.Now.ToString("dd/MM/yyyy"); DateTime theTime = DateTime.ParseExact(dates, //"06/04/2018 12:00:00 a.m." "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); var relacionada_neg = ""; var relacionada_dis = ""; DOCUMENTO dOCUMENTO = new DOCUMENTO(); DOCUMENTO dOCpADRE = new DOCUMENTO(); string errorString = ""; TAT001Entities db = new TAT001Entities(); string p = ""; List <TREVERSAT> ldocr = new List <TREVERSAT>(); decimal rel = 0; try { if (id_d == null || id_d.Equals("")) { throw new Exception(); } rel = Convert.ToDecimal(id_d); } catch { rel = 0; } //Obtener los documentos relacionados List <DOCUMENTO> docsrel = new List <DOCUMENTO>(); SOCIEDAD id_bukrs = new SOCIEDAD(); var id_pais = new PAI(); var id_waers = db.MONEDAs.Where(m => m.ACTIVO == true).ToList(); if (rel > 0) { dOCpADRE = db.DOCUMENTOes.Where(doc => doc.NUM_DOC == rel).FirstOrDefault(); if (dOCpADRE.TIPO_RECURRENTE == null)//RSG 28.05.2018---------------------------------------------- { return(0); } if (!((dOCpADRE.TIPO_RECURRENTE.Equals("M") | dOCpADRE.TIPO_RECURRENTE.Equals("P")) & dOCpADRE.ESTATUS.Equals("A") & dOCpADRE.ESTATUS_WF.Equals("A")))//RSG 28.05.2018 { return(0); } //List<DOCUMENTOREC> ddrec = new List<DOCUMENTOREC>(); DOCUMENTOREC drec = dOCpADRE.DOCUMENTORECs.Where(a => a.ESTATUS == "A").FirstOrDefault(); if (drec == null) { return(0); } else { DateTime hoy = (DateTime)drec.FECHAF; var primer = new DateTime(hoy.Year, hoy.Month, 1); var ultimo = primer.AddMonths(1).AddDays(-1); dOCUMENTO.FECHAI_VIG = primer; dOCUMENTO.FECHAF_VIG = ultimo; dOCUMENTO.MONTO_DOC_MD = (decimal)drec.MONTO_BASE; } if (tsol != dOCpADRE.TSOL_ID) { return(0); } //RSG 28.05.2018---------------------------------------------- docsrel = db.DOCUMENTOes.Where(docr => docr.DOCUMENTO_REF == rel).ToList(); id_bukrs = db.SOCIEDADs.Where(soc => soc.BUKRS == dOCpADRE.SOCIEDAD_ID && soc.ACTIVO == true).FirstOrDefault(); id_pais = db.PAIS.Where(pais => pais.LAND.Equals(dOCpADRE.PAIS_ID)).FirstOrDefault();//RSG 15.05.2018 dOCUMENTO.DOCUMENTO_REF = rel; relacionada_neg = dOCpADRE.TIPO_TECNICO; ////ViewBag.TSOL_ANT = dOCUMENTO.TSOL_ID; if (dOCUMENTO != null) { dOCUMENTO.TSOL_ID = tsol; dOCUMENTO.NUM_DOC = 0; foreach (DOCUMENTOP pos in dOCpADRE.DOCUMENTOPs) { } } } else { } dOCUMENTO.SOCIEDAD_ID = id_bukrs.BUKRS; dOCUMENTO.PAIS_ID = id_pais.LAND;//RSG 18.05.2018 dOCUMENTO.MONEDA_ID = id_bukrs.WAERS; dOCUMENTO.PERIODO = Convert.ToInt32(DateTime.Now.ToString("MM")); dOCUMENTO.EJERCICIO = Convert.ToString(DateTime.Now.Year); dOCUMENTO.FECHAD = theTime; //----------------------------RSG 18.05.2018 //dOCUMENTO.SOCIEDAD = db.SOCIEDADs.Find(dOCUMENTO.SOCIEDAD_ID); //----------------------------RSG 18.05.2018 ////HTTPPOST DOCUMENTO d = new DOCUMENTO(); if (dOCUMENTO.DOCUMENTO_REF > 0) { d = db.DOCUMENTOes.Where(doc => doc.NUM_DOC == dOCUMENTO.DOCUMENTO_REF).FirstOrDefault(); //dOCUMENTO.TSOL_ID = d.TSOL_ID; id_bukrs = db.SOCIEDADs.Where(soc => soc.BUKRS == d.SOCIEDAD_ID).FirstOrDefault(); dOCUMENTO.ESTADO = d.ESTADO; dOCUMENTO.CIUDAD = d.CIUDAD; dOCUMENTO.PAYER_ID = d.PAYER_ID; dOCUMENTO.CONCEPTO = d.CONCEPTO; dOCUMENTO.NOTAS = d.NOTAS; dOCUMENTO.FECHAI_VIG = d.FECHAI_VIG; dOCUMENTO.FECHAF_VIG = d.FECHAF_VIG; dOCUMENTO.PAYER_NOMBRE = d.PAYER_NOMBRE; dOCUMENTO.PAYER_EMAIL = d.PAYER_EMAIL; dOCUMENTO.TIPO_CAMBIO = d.TIPO_CAMBIO; dOCUMENTO.GALL_ID = d.GALL_ID; dOCUMENTO.TALL_ID = d.TALL_ID; //Obtener el país dOCUMENTO.PAIS_ID = d.PAIS_ID;//RSG 15.05.2018 dOCUMENTO.TSOL_ID = d.TSOL_ID; } //Tipo técnico dOCUMENTO.TIPO_TECNICO = "M"; USUARIO u = db.USUARIOs.Find(d.USUARIOC_ID);//RSG 02/05/2018 //Obtener el número de documento decimal N_DOC = getSolID(dOCUMENTO.TSOL_ID); dOCUMENTO.NUM_DOC = N_DOC; //Obtener SOCIEDAD_ID dOCUMENTO.SOCIEDAD_ID = id_bukrs.BUKRS; ////Obtener el país //dOCUMENTO.PAIS_ID = p.ToUpper(); //CANTIDAD_EV > 1 si son recurrentes dOCUMENTO.CANTIDAD_EV = 1; //Obtener usuarioc dOCUMENTO.PUESTO_ID = u.PUESTO_ID;//RSG 02/05/2018 dOCUMENTO.USUARIOC_ID = u.ID; //Fechac dOCUMENTO.FECHAC = DateTime.Now; //Horac dOCUMENTO.HORAC = DateTime.Now.TimeOfDay; //FECHAC_PLAN dOCUMENTO.FECHAC_PLAN = DateTime.Now.Date; //FECHAC_USER dOCUMENTO.FECHAC_USER = DateTime.Now.Date; //HORAC_USER dOCUMENTO.HORAC_USER = DateTime.Now.TimeOfDay; //Estatus dOCUMENTO.ESTATUS = "N"; //Estatus wf dOCUMENTO.ESTATUS_WF = "P"; ///////////////////Montos //MONTO_DOC_MD var MONTO_DOC_MD = dOCUMENTO.MONTO_DOC_MD; dOCUMENTO.MONTO_DOC_MD = Convert.ToDecimal(MONTO_DOC_MD); //Obtener el monto de la sociedad dOCUMENTO.MONTO_DOC_ML = getValSoc(id_bukrs.WAERS, dOCUMENTO.MONEDA_ID, Convert.ToDecimal(dOCUMENTO.MONTO_DOC_MD), out errorString); if (!errorString.Equals("")) { throw new Exception(); } //MONTO_DOC_ML2 var MONTO_DOC_ML2 = dOCUMENTO.MONTO_DOC_ML2; dOCUMENTO.MONTO_DOC_ML2 = Convert.ToDecimal(MONTO_DOC_ML2); //MONEDAL_ID moneda de la sociedad dOCUMENTO.MONEDAL_ID = id_bukrs.WAERS; //MONEDAL2_ID moneda en USD dOCUMENTO.MONEDAL2_ID = "USD"; //Tipo cambio de la moneda de la sociedad TIPO_CAMBIOL dOCUMENTO.TIPO_CAMBIOL = getUkurs(id_bukrs.WAERS, dOCUMENTO.MONEDA_ID, out errorString); //Tipo cambio dolares TIPO_CAMBIOL2 dOCUMENTO.TIPO_CAMBIOL2 = getUkursUSD(dOCUMENTO.MONEDA_ID, "USD", out errorString); if (!errorString.Equals("")) { throw new Exception(); } //Obtener datos del payer CLIENTE payer = getCliente(dOCUMENTO.PAYER_ID); dOCUMENTO.VKORG = payer.VKORG; dOCUMENTO.VTWEG = payer.VTWEG; dOCUMENTO.SPART = payer.SPART; dOCUMENTO.DOCUMENTO_REF = null; //Guardar el documento db.DOCUMENTOes.Add(dOCUMENTO); db.SaveChanges(); //Actualizar el rango updateRango(dOCUMENTO.TSOL_ID, dOCUMENTO.NUM_DOC); //RSG 28.05.2018---------------------------------------------- string recurrente = ""; List <DOCUMENTOREC> ddrec = new List <DOCUMENTOREC>(); DOCUMENTOREC drecc = d.DOCUMENTORECs.Where(a => a.ESTATUS == "A").FirstOrDefault(); if (drecc == null) { return(0); } else { DateTime hoy = drecc.FECHAF.Value; var primer = new DateTime(hoy.Year, hoy.Month, 1); var ultimo = primer.AddMonths(1).AddDays(-1); dOCUMENTO.FECHAI_VIG = primer; dOCUMENTO.FECHAF_VIG = ultimo; dOCUMENTO.MONTO_DOC_MD = drecc.MONTO_BASE; dOCUMENTO.FECHAD = DateTime.Now; recurrente = "X"; } drecc.DOC_REF = dOCUMENTO.NUM_DOC; //RSG 28.05.2018---------------------------------------------- //RSG 28.05.2018---------------------------------------------- drecc.DOC_REF = dOCUMENTO.NUM_DOC; drecc.ESTATUS = "P"; db.SaveChanges(); //RSG 28.05.2018---------------------------------------------- //Guardar los documentos p para el documento guardado try { //Agregar materiales existentes para evitar que en la vista se hayan agregado o quitado List <DOCUMENTOP> docpl = new List <DOCUMENTOP>(); docpl = db.DOCUMENTOPs.Where(docp => docp.NUM_DOC == dOCpADRE.NUM_DOC).ToList(); for (int j = 0; j < docpl.Count; j++) { try { //DOCUMENTOP_MOD docmod = new DOCUMENTOP_MOD(); var cat = ""; if (docpl[j].MATNR != null && docpl[j].MATNR != "") { //docmod = dOCUMENTO.DOCUMENTOP.Where(docp => docp.MATNR == docpl[j].MATNR).FirstOrDefault(); } else { //docmod = dOCUMENTO.DOCUMENTOP.Where(docp => docp.MATKL_ID == docpl[j].MATKL).FirstOrDefault(); cat = "C"; } //Si lo encuentra meter valores de la base de datos y vista if (docpl[j] != null) { if (cat != "C") { DOCUMENTOP docP = new DOCUMENTOP(); docP.NUM_DOC = dOCUMENTO.NUM_DOC; docP.POS = docpl[j].POS; if (docpl[j].MATNR == null || docpl[j].MATNR == "") { docpl[j].MATNR = ""; } docP.MATNR = docpl[j].MATNR; docP.MATKL = docpl[j].MATKL; docP.CANTIDAD = 1; docP.MONTO = docpl[j].MONTO; docP.PORC_APOYO = docpl[j].PORC_APOYO; //docP.MONTO_APOYO = docmod.MONTO_APOYO; docP.MONTO_APOYO = docP.MONTO * (docP.PORC_APOYO / 100); docP.MONTO_APOYO = Math.Round(docP.MONTO_APOYO, 2);//RSG 16.05.2018 docP.PRECIO_SUG = docpl[j].PRECIO_SUG; docP.VOLUMEN_EST = docpl[j].VOLUMEN_EST; docP.VOLUMEN_REAL = docpl[j].VOLUMEN_REAL; docP.VIGENCIA_DE = docpl[j].VIGENCIA_DE; docP.VIGENCIA_AL = docpl[j].VIGENCIA_AL; docP.APOYO_EST = docpl[j].APOYO_EST; docP.APOYO_REAL = docpl[j].APOYO_REAL; dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018 db.SaveChanges(); //RSG } else { foreach (DOCUMENTOM docmmm in docpl[j].DOCUMENTOMs) { DOCUMENTOP docP = new DOCUMENTOP(); docP.NUM_DOC = dOCUMENTO.NUM_DOC; docP.POS = (docpl[j].POS * 10) + docmmm.POS; docP.MATNR = docmmm.MATNR; docP.MATKL = null; //docP.MONTO = (decimal)docmmm.APOYO_EST; docP.VIGENCIA_DE = docpl[j].VIGENCIA_DE; docP.VIGENCIA_AL = docpl[j].VIGENCIA_AL; docP.CANTIDAD = 1; docP.APOYO_EST = (decimal)docmmm.APOYO_EST; docP.APOYO_REAL = (decimal)docmmm.APOYO_REAL; docP.VOLUMEN_EST = 0; docP.VOLUMEN_REAL = 0; dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018 db.SaveChanges(); //RSG } } } else { DOCUMENTOP docP = new DOCUMENTOP(); docP.NUM_DOC = dOCUMENTO.NUM_DOC; docP.POS = docpl[j].POS; docP.MATNR = docpl[j].MATNR; docP.MATKL = docpl[j].MATKL; docP.CANTIDAD = 1; docP.MONTO = docpl[j].MONTO; //docP.PORC_APOYO = docpl[j].PORC_APOYO; docP.MONTO_APOYO = docP.MONTO * (docpl[j].PORC_APOYO / 100); docP.MONTO_APOYO = docpl[j].MONTO_APOYO; docP.PRECIO_SUG = docpl[j].PRECIO_SUG; docP.VOLUMEN_EST = docpl[j].VOLUMEN_EST; docP.VOLUMEN_REAL = docpl[j].VOLUMEN_REAL; docP.VIGENCIA_DE = docpl[j].VIGENCIA_DE; docP.VIGENCIA_AL = docpl[j].VIGENCIA_AL; docP.APOYO_EST = docpl[j].APOYO_EST; docP.APOYO_REAL = docpl[j].APOYO_REAL; dOCUMENTO.DOCUMENTOPs.Add(docP); //RSG 28.05.2018 db.SaveChanges(); //RSG } //Agregarlo a la bd //db.DOCUMENTOPs.Add(docP); } catch (Exception e) { } } } catch (Exception e) { } decimal total = 0; //RSG 28.05.2018----------------------------------------------------- foreach (DOCUMENTOP dp in dOCUMENTO.DOCUMENTOPs) { dp.VIGENCIA_DE = dOCUMENTO.FECHAI_VIG; dp.VIGENCIA_AL = dOCUMENTO.FECHAF_VIG; if (dOCpADRE.TIPO_TECNICO == "P") { ////if (!dOCpADRE.TSOL.FACTURA) ////{ //// try //// { //// total += (decimal)dp.APOYO_EST; //// } //// catch { } ////} ////else ////{ //// try //// { //// total += (decimal)dp.APOYO_REAL; //// } //// catch { } ////} dp.MONTO = 0; dp.CANTIDAD = 0; dp.MONTO_APOYO = 0; dp.PORC_APOYO = 0; dp.PRECIO_SUG = 0; dp.VOLUMEN_EST = 0; dp.VOLUMEN_REAL = 0; try { decimal val = (decimal)(from P in db.PRESUPSAPPs where P.VKORG == dOCpADRE.VKORG & P.VTWEG == dOCpADRE.VTWEG & P.SPART == dOCpADRE.SPART & P.KUNNR == dOCpADRE.PAYER_ID & P.MATNR == dp.MATNR & P.PERIOD == DateTime.Now.Month select new { P.GRSLS }).Sum(a => a.GRSLS); total += val; dp.MONTO = val; } catch { } } db.Entry(dOCUMENTO).State = EntityState.Modified; db.SaveChanges(); } if (dOCpADRE.TIPO_TECNICO == "P") { foreach (DOCUMENTOP dp in dOCUMENTO.DOCUMENTOPs) { //total = 100% 200 = 100% //dp.MONTo = ? 50 = 25% decimal porcentaje = dp.MONTO / total * 100; decimal nuevo_total = (decimal)drecc.MONTO_BASE; if (!dOCpADRE.TSOL.FACTURA) { try { dp.APOYO_EST = nuevo_total * porcentaje / 100; } catch { } } else { try { dp.APOYO_REAL = nuevo_total * porcentaje / 100;; } catch { } ////} } dp.MONTO = 0; db.Entry(dOCUMENTO).State = EntityState.Modified; db.SaveChanges(); } } //RSG 28.05.2018----------------------------------------------------- ProcesaFlujo pf = new ProcesaFlujo(); //db.DOCUMENTOes.Add(dOCUMENTO); //db.SaveChanges(); USUARIO user = db.USUARIOs.Where(a => a.ID.Equals(d.USUARIOC_ID)).FirstOrDefault(); int rol = user.MIEMBROS.FirstOrDefault().ROL_ID; try { //WORKFV wf = db.WORKFHs.Where(a => a.BUKRS.Equals(dOCUMENTO.SOCIEDAD_ID) & a.ROL_ID == rol).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault(); WORKFV wf = db.WORKFHs.Where(a => a.TSOL_ID.Equals(dOCUMENTO.TSOL_ID)).FirstOrDefault().WORKFVs.OrderByDescending(a => a.VERSION).FirstOrDefault(); if (wf != null) { WORKFP wp = wf.WORKFPs.OrderBy(a => a.POS).FirstOrDefault(); FLUJO f = new FLUJO(); f.WORKF_ID = wf.ID; f.WF_VERSION = wf.VERSION; f.WF_POS = wp.POS; f.NUM_DOC = dOCUMENTO.NUM_DOC; f.POS = 1; f.LOOP = 1; f.USUARIOA_ID = dOCUMENTO.USUARIOC_ID; f.ESTATUS = "I"; f.FECHAC = DateTime.Now; f.FECHAM = DateTime.Now; string c = pf.procesa(f, recurrente); //RSG 28.05.2018 ----------------------------------- //if (c == "1") //{ // Email em = new Email(); // em.enviaMail(f.NUM_DOC, true); //} FLUJO conta = db.FLUJOes.Where(a => a.NUM_DOC.Equals(f.NUM_DOC)).OrderByDescending(a => a.POS).FirstOrDefault(); conta.USUARIOA_ID = user.ID; conta.ESTATUS = "A"; conta.FECHAM = DateTime.Now; pf.procesa(conta, ""); //RSG 28.05.2018 ----------------------------------- } } catch (Exception ee) { if (errorString == "") { errorString = ee.Message.ToString(); return(0); } //ViewBag.error = errorString; } return(1); }
public void cancela(decimal id, string user)//RSG 07.06.2018--------------------------------------------- { using (TruequeEntities db = new TruequeEntities()) { DOCUMENTO d = db.DOCUMENTOes.Find(id); d.ESTATUS_C = "C"; FLUJO actual = db.FLUJOes.Where(a => a.NUM_DOC == id).OrderByDescending(a => a.POS).FirstOrDefault(); db.Entry(d).State = EntityState.Modified; if (d.DOCUMENTO_REF != null && !d.TSOL.REVERSO) //Se cancela una relacionada { DOCUMENTO dRef = db.DOCUMENTOes.Find(d.DOCUMENTO_REF); //Se abre de nuevo la provisión dRef.ESTATUS = "A"; db.Entry(dRef).State = EntityState.Modified; if (actual != null) { FLUJO nuevo = new FLUJO(); WORKFP fin = db.WORKFPs.Where(a => a.ID == actual.WORKF_ID && a.VERSION == actual.WF_VERSION && a.NEXT_STEP == 99).FirstOrDefault(); if (fin != null) { nuevo.COMENTARIO = ""; nuevo.DETPOS = 0; nuevo.DETVER = 0; nuevo.ESTATUS = "A"; nuevo.FECHAC = DateTime.Now; nuevo.FECHAM = nuevo.FECHAC; nuevo.LOOP = 0; nuevo.NUM_DOC = actual.NUM_DOC; nuevo.POS = actual.POS + 1; nuevo.USUARIOA_ID = user; nuevo.WF_POS = fin.POS; nuevo.WF_VERSION = fin.VERSION; nuevo.WORKF_ID = fin.ID; db.FLUJOes.Add(nuevo); } } DOCUMENTO rev = db.DOCUMENTOes.FirstOrDefault(a => a.DOCUMENTO_REF == dRef.NUM_DOC && a.ESTATUS_C != "C" && a.ESTATUS_WF != "B" && a.TSOL.REVERSO); if (rev != null) { cancela(rev.NUM_DOC, user); } } else if (actual != null) { if (d.DOCUMENTO_REF != null) //Se cancela una relacionada { DOCUMENTO dRef = db.DOCUMENTOes.Find(d.DOCUMENTO_REF); //Se abre de nuevo la provisión dRef.ESTATUS = "A"; db.Entry(dRef).State = EntityState.Modified; } FLUJO nuevo = new FLUJO(); WORKFP fin = db.WORKFPs.Where(a => a.ID == actual.WORKF_ID && a.VERSION == actual.WF_VERSION && a.NEXT_STEP == 99).FirstOrDefault(); if (fin != null) { nuevo.COMENTARIO = ""; nuevo.DETPOS = 0; nuevo.DETVER = 0; nuevo.ESTATUS = "A"; nuevo.FECHAC = DateTime.Now; nuevo.FECHAM = nuevo.FECHAC; nuevo.LOOP = 0; nuevo.NUM_DOC = actual.NUM_DOC; nuevo.POS = actual.POS + 1; nuevo.USUARIOA_ID = user; nuevo.WF_POS = fin.POS; nuevo.WF_VERSION = fin.VERSION; nuevo.WORKF_ID = fin.ID; db.FLUJOes.Add(nuevo); } } db.SaveChanges(); } }
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); }
//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); }