public void ValidarBd(List <doc2> lstd, List <string> archivos) { int x = 0; for (int i = 0; i < lstd.Count; i++) { string correcto = "X"; decimal de = Convert.ToDecimal(lstd[i].Posp.numero_wf); //Corroboro que exista la informacion //var ddd = db.DOCUMENTOes.Where(dds => dds.NUM_DOC == 1000000936).FirstOrDefault(); var dA = db.DOCUMENTOes.Where(y => y.NUM_DOC == de).FirstOrDefault(); //si encuentra una coincidencia if (dA != null) { //MGC 16-10-2018 Eliminar sección de eliminar //MGC 16-10-2018 DOCUMENTOPRE dp = new DOCUMENTOPRE(); dp.NUM_DOC = de; dp.POS = 1; //para el estatus E/X if (lstd[i].Posp.status == string.Empty) { //dA.ESTATUS_SAP = "X"; //Creación del preliminar //if (lstd[i].accion == "P") if (lstd[i].Posp.accion == "CREAR") { dp.MESSAGE = "Error Preliminar"; //Cancelación del preliminar } //else if (lstd[i].accion == "C") else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR") { dp.MESSAGE = "Error Cancelación"; } //else if (lstd[i].accion == "A") else if (lstd[i].Posp.accion == "CONTABILIZAR") { dp.MESSAGE = "Error contabilización SAP"; } deleteMesg(de);//MGC 16-10-2018 Eliminar msg db.DOCUMENTOPREs.Add(dp); db.SaveChanges(); } else if (lstd[i].Posp.status != string.Empty) { if (lstd[i].Posp.status.Equals("NOK")) { if (lstd[i].Posp.accion == "CREAR") //if (lstd[i].accion == "P") { //MGC 30-10-2018 Modificación estatus, cambiar estatus SAP = E y estatus preliminar a E que quiere decir error SAP dA.ESTATUS = "N"; dA.ESTATUS_SAP = "E"; dA.ESTATUS_PRE = "E"; dA.ESTATUS_WF = null; //MGC 26-11-2018 Marcar como error SAP db.Entry(dA).State = EntityState.Modified; db.SaveChanges(); //MGC 26-11-2018 Marcar como error SAP //dp.MESSAGE = "Error Preliminar"; //MGC 30-10-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } } else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR") //else if (lstd[i].accion == "C") { //dp.MESSAGE = "Error Cancelación"; //MGC 03-12-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } if (lstd[i].Posp.accion == "BORRAR-CREAR") { dA.ESTATUS = "N"; dA.ESTATUS_SAP = "E"; dA.ESTATUS_PRE = "E"; dA.ESTATUS_WF = null; db.Entry(dA).State = EntityState.Modified; db.SaveChanges(); } else if (lstd[i].Posp.accion == "BORRAR") { dA.ESTATUS_C = "B"; db.Entry(dA).State = EntityState.Modified; db.SaveChanges(); } } else if (lstd[i].Posp.accion == "CONTABILIZAR") //else if (lstd[i].accion == "A") { //MGC 03-12-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } dA.ESTATUS = "C"; dA.ESTATUS_SAP = "E"; dA.ESTATUS_WF = "A"; dA.ESTATUS_PRE = "G"; db.Entry(dA).State = EntityState.Modified; dp.MESSAGE = "Error contabilización SAP"; } //dp.MESSAGE = "Error Preliminar"; //deleteMesg(de);//MGC 16-10-2018 Eliminar msg //db.DOCUMENTOPREs.Add(dp); db.SaveChanges(); } if (lstd[i].Posp.status.Equals("OK")) { //dA.ESTATUS_SAP = "X"; //Completar el flujo en el try { ProcesaFlujo pf = new ProcesaFlujo(); if (lstd[i].Posp.accion == "CREAR") //if (lstd[i].Posp.accion == "P") { //MGC 30-10-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } //Procesa el flujo de autorización correcto = pf.procesa2(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus } else if (lstd[i].Posp.accion == "BORRAR" || lstd[i].Posp.accion == "BORRAR-CREAR") //else if (lstd[i].Posp.accion == "C") { //MGC 30-10-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } if (lstd[i].Posp.accion == "BORRAR-CREAR") { //Procesa el flujo de cancelación correcto = pf.procesaC(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus } //MGC 06-12-2018 Eliminar la solicitud ------------> else if (lstd[i].Posp.accion == "BORRAR") { //Procesa el flujo de cancelación correcto = pf.procesaCB(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus } //MGC 06-12-2018 Eliminar la solicitud ------------< } else if (lstd[i].Posp.accion == "CONTABILIZAR") //else if (lstd[i].Posp.accion == "A") { //MGC 30-10-2018 Guardar los mensajes para log for (int j = 0; j < lstd[i].Pose.Count; j++) { try { DOCUMENTOLOG dl = new DOCUMENTOLOG(); dl.NUM_DOC = dA.NUM_DOC; dl.TYPE_LINE = lstd[i].Pose[j].pos; dl.TYPE = lstd[i].Pose[j].tipo; dl.NUMBER = lstd[i].Pose[j].numero; dl.MESSAGE = lstd[i].Pose[j].mensaje; dl.FECHA = DateTime.Now; db.DOCUMENTOLOGs.Add(dl); db.SaveChanges(); } catch (Exception e) { } } //Proceso de contabilización correcto = pf.procesaA(dp.NUM_DOC, lstd[i]);//MGC 29-10-2018 Configuración de estatus } } catch (Exception e) { } } } try { //MGC 29-10-2018 Error porque mueve los datos ya actualizados en el flujo //////Hacemos el update en BD //if(lstd[i].Posp.accion == "CONTABILIZAR") //{ // dA.DOCUMENTO_SAP = lstd[i].Posp.Num_doc_pre; //} //else //{ // dA.NUM_PRE = lstd[i].Posp.Num_doc_pre; //} //dA.SOCIEDAD_PRE = lstd[i].Posp.Sociedad_pre; //dA.EJERCICIO_PRE = lstd[i].Posp.Ejercicio_pre;//MGC 11-10-2018 No enviar correos //db.Entry(dA).State = EntityState.Modified;//MGC 11-10-2018 No enviar correos //x = x + db.SaveChanges(); ////Agregamos en la tabla los valores //DOCUMENTOSAP ds = new DOCUMENTOSAP(); //ds.NUM_DOC = decimal.Parse(lstd[i].numero_wf); //ds.BUKRS = lstd[i].Sociedad; //ds.EJERCICIO = lstd[i].Año; //ds.CUENTA_A = lstd[i].Cuenta_abono.ToString(); //ds.CUENTA_C = lstd[i].Cuenta_cargo.ToString(); //ds.BLART = lstd[i].blart; //ds.KUNNR = lstd[i].kunnr; //ds.DESCR = lstd[i].desc; //ds.IMPORTE = lstd[i].importe; //try //{ // db.DOCUMENTOSAPs.Add(ds); // db.SaveChanges(); // moverArchivo(archivos[i]); //} //catch //{ // DOCUMENTOSAP ds1 = db.DOCUMENTOSAPs.Find(ds.NUM_DOC); // ds1.BUKRS = lstd[i].Sociedad; // ds1.EJERCICIO = lstd[i].Año; // ds1.CUENTA_A = lstd[i].Cuenta_abono.ToString(); // ds1.CUENTA_C = lstd[i].Cuenta_cargo.ToString(); // ds.BLART = lstd[i].blart; // ds.KUNNR = lstd[i].kunnr; // ds.DESCR = lstd[i].desc; // ds.IMPORTE = lstd[i].importe; // db.Entry(ds1).State = EntityState.Modified; // db.SaveChanges(); // moverArchivo(archivos[i]); //} try { moverArchivo(archivos[i], correcto); } catch (Exception e) { } } catch (Exception varEx) { var ex = varEx.ToString(); } //if (dA.DOCUMENTO_REF != null) //{ // if (dA.DOCUMENTO_REF > 0) // { // List<DOCUMENTO> rela = db.DOCUMENTOes.Where(a => a.DOCUMENTO_REF == dA.DOCUMENTO_REF).ToList(); // DOCUMENTO parcial = rela.Where(a => a.TSOL_ID == "RP").FirstOrDefault(); // if (parcial != null) // { // bool contabilizados = true; // foreach (DOCUMENTO rel in rela) // { // if (rel.TSOL_ID == "RP") // if (rel.ESTATUS_SAP == "X") // contabilizados = false; // } // if (contabilizados) // { // FLUJO f = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault(); // if (f != null) // { // f.ESTATUS = "A"; // f.FECHAM = DateTime.Now; // ProcesaFlujo p = new ProcesaFlujo(); // string res = p.procesa(f, ""); // if (res == "0" | res == "") // { // FLUJO f1 = db.FLUJOes.Where(a => a.NUM_DOC == parcial.NUM_DOC).OrderByDescending(a => a.POS).FirstOrDefault(); // f.ESTATUS = "A"; // f.FECHAM = DateTime.Now; // res = p.procesa(f, ""); // } // //if (res == "0" | res == "") // } // } // } // } //} } } try { //if (x == lstd.Count) //{ // moverArchivos(archivos); //} } catch (Exception varEx) { var ex = varEx.ToString(); throw new Exception(ex); } }
//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); }