public async Task <JsonResult> AddComment(AddCommentViewModel model) { if (ModelState.IsValid) { // Crear Comment (primer paso Success) PQRSRecordComentario nPQRSComment = new PQRSRecordComentario(); nPQRSComment.PQRSRecordId = model.PQRSRecordId; nPQRSComment.PQRSRecordOrder = model.PQRSRecordOrder;; nPQRSComment.UsuarioId = Seguridadcll.Usuario.UsuarioId; nPQRSComment.FechaCreacion = DateTime.Now; nPQRSComment.Comentario = model.Comment; nPQRSComment.TipoComentario = TipoComentario.Comment; db.PQRSRecordComentarios.Add(nPQRSComment); await db.SaveChangesAsync(); AddLog("PQRS/AddComment", nPQRSComment.Id, nPQRSComment); if (model.PQRSRecordDocumentos != null) { await SaveDocuments(nPQRSComment.Id, model.PQRSRecordDocumentos); } if (model.Files != null) { await UploadFiles(nPQRSComment.Id, model.Files); } API.PQRSController ApiPQRS = new API.PQRSController(); ApiPQRS.SendNotificationEmailTask(API.PQRSController.TipoNotificacion.Comment, model.TipoComentario, model.TipoPQRS, model.PQRSRecordId, model.PQRSRecordOrder, model.DataId, nPQRSComment.Id, Seguridadcll.Usuario.UsuarioNombre, Seguridadcll.Aplicacion.Link); //await Task.Run(() => ApiPQRS.SendNotificationEmailTask(API.PQRSController.TipoNotificacion.Comment, model.TipoComentario, model.TipoPQRS, model.PQRSRecordId, model.PQRSRecordOrder, model.DataId, nPQRSComment.Id)); } return(Json(true, JsonRequestBehavior.AllowGet)); }
public async Task <JsonResult> AddAnswer(AddCommentViewModel model) { var result = new AjaxResult(); if (ModelState.IsValid) { #region ValidaCheckList //var tareas = await db.PQRSRecordTareas.Where(pt => pt.PQRSRecordId == model.PQRSRecordId && pt.PQRSRecordOrder == model.PQRSRecordOrder).ToListAsync(); if (model.TipoComentario == TipoComentario.Approval) { if (model.Tareas == null) { model.Tareas = new List <PQRSRecordTareas>(); } bool flagTareas = true; string msgTareas = ""; foreach (var t in model.Tareas) { if (t.Requerido && !t.Terminado) { flagTareas = false; msgTareas += $" Task: '{t.Descripcion}' is required to advance" + System.Environment.NewLine; } } if (!flagTareas) { return(Json(result.False(msgTareas), JsonRequestBehavior.AllowGet)); } } #endregion // Crear Comment (primer paso Success) PQRSRecordComentario nPQRSComment = new PQRSRecordComentario(); nPQRSComment.PQRSRecordId = model.PQRSRecordId; nPQRSComment.PQRSRecordOrder = model.PQRSRecordOrder; nPQRSComment.UsuarioId = Seguridadcll.Usuario.UsuarioId; nPQRSComment.FechaCreacion = DateTime.Now; nPQRSComment.Comentario = model.Comment; nPQRSComment.TipoComentario = model.TipoComentario; db.PQRSRecordComentarios.Add(nPQRSComment); await db.SaveChangesAsync(); AddLog("PQRS/AddAnswer", nPQRSComment.Id, nPQRSComment); if (model.PQRSRecordDocumentos != null) { await SaveDocuments(nPQRSComment.Id, model.PQRSRecordDocumentos); } if (model.Files != null) { await UploadFiles(nPQRSComment.Id, model.Files); } if (model.Tareas != null) { await SaveCheckList(model.Tareas); } if (model.Condiciones != null) { foreach (var c in model.Condiciones) { await SaveConditions(c.Condiciones); } } //Users in step var usuarioStep = await db.PQRSRecordUsuarios .Where(pu => pu.PQRSRecordId == model.PQRSRecordId && pu.PQRSRecordOrder == model.PQRSRecordOrder && pu.UsuarioId == Seguridadcll.Usuario.UsuarioId) .FirstOrDefaultAsync(); if (usuarioStep != null) { if (model.TipoComentario == TipoComentario.Approval) { //usuarioStep.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Approved; usuarioStep.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Done; } else if (model.TipoComentario == TipoComentario.Rejection) { //usuarioStep.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Rejected; usuarioStep.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Returned; } else if (model.TipoComentario == TipoComentario.Close) { usuarioStep.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Closed; } db.Entry(usuarioStep).State = EntityState.Modified; await db.SaveChangesAsync(); } API.PQRSController ApiPQRS = new API.PQRSController(); if (model.TipoComentario == TipoComentario.Close) { await ApiPQRS.CloseFlow(model.TipoComentario, model.PQRSRecordId, model.PQRSRecordOrder); //Notificación Close Flow ApiPQRS.SendNotificationEmailTask(API.PQRSController.TipoNotificacion.Close, model.TipoComentario, model.TipoPQRS, model.PQRSRecordId, model.PQRSRecordOrder, model.DataId, nPQRSComment.Id, Seguridadcll.Usuario.UsuarioNombre, Seguridadcll.Aplicacion.Link); } else { await ApiPQRS.ChangeStep(model.TipoComentario, model.PQRSRecordId, model.PQRSRecordOrder, model.DataId, model.TipoPQRS); //Notificación Current Step ApiPQRS.SendNotificationEmailTask(API.PQRSController.TipoNotificacion.CurrentStep, model.TipoComentario, model.TipoPQRS, model.PQRSRecordId, model.PQRSRecordOrder, model.DataId, nPQRSComment.Id, Seguridadcll.Usuario.UsuarioNombre, Seguridadcll.Aplicacion.Link); } await ApiPQRS.CompleteFormat(model.TipoPQRS, model.DataId); } else { return(Json(result.False("All fields are required."), JsonRequestBehavior.AllowGet)); } return(Json(result.True(), JsonRequestBehavior.AllowGet)); }
public async Task <IHttpActionResult> CreaPQRSRecord(TipoPQRS TipoPQRS, int id) { var dataDist = new List <PQRSMotivoViewModel>(); //Tipo Recrutamento if (TipoPQRS == TipoPQRS.Recruitment) { dataDist = await db.Recruitments.Where(r => r.RecruitmentId == id). Select(RE => new PQRSMotivoViewModel() { DataId = RE.RecruitmentId, MotivoPQRSId = 29, PQRSRecordId = RE.RecruitmentId }). Distinct().ToListAsync(); } try { if (dataDist.Count == 0) { return(Ok(false)); } //Consecutivo del flujo int idx = 1; //Recorre data foreach (var item in dataDist) { var flujo = await db.FlujosPQRS.Include(f => f.MotivoPQRS).Where(f => f.MotivoPQRSId == item.MotivoPQRSId).ToListAsync(); idx = 1; idx = await db.Database.SqlQuery <int>("select isnull(max(id),0) from PQRSRecord").FirstOrDefaultAsync() + 1; int CommentId = 0; foreach (var f in flujo) { //1. Crea record PQRSRecord nPQRS = new PQRSRecord(); nPQRS.Id = idx; nPQRS.Order = f.Order; PQRSRecordComentario nPQRSComment = new PQRSRecordComentario(); if (f.Id == 1) { //nPQRS.EstadoStep = EstadoStep.Approved; nPQRS.EstadoStep = EstadoStep.Done; nPQRS.PasoActual = false; //Crear Comment (primer paso Success) nPQRSComment.PQRSRecordId = nPQRS.Id; nPQRSComment.PQRSRecordOrder = nPQRS.Order; nPQRSComment.UsuarioId = Seguridadcll.Usuario.UsuarioId; nPQRSComment.FechaCreacion = DateTime.Now; nPQRSComment.Comentario = f.Nombre + " Formato:" + f.MotivoPQRS.TipoPQRS.ToString() + " Motivo:" + f.MotivoPQRS.Nombre; nPQRSComment.TipoComentario = TipoComentario.Approval; db.PQRSRecordComentarios.Add(nPQRSComment); // await db.SaveChangesAsync(); AddLog("", nPQRS.Id, nPQRSComment); } else if (f.Id == 2) { nPQRS.EstadoStep = EstadoStep.In_Process; nPQRS.PasoActual = true; } else { nPQRS.EstadoStep = EstadoStep.Pending; nPQRS.PasoActual = false; } nPQRS.MotivoPQRSId = f.MotivoPQRSId; nPQRS.TipoPQRS = TipoPQRS; nPQRS.MotivoPQRSNombre = f.MotivoPQRS.Nombre; nPQRS.FlujoPQRSNombre = f.Nombre; nPQRS.FlujoPQRSTipoPaso = f.TipoPaso; nPQRS.EnviaCorreoDestinatarios = f.EnviaCorreoDestinatarios; nPQRS.FlujoPQRSDescripcion = f.Descripcion; db.PQRSRecords.Add(nPQRS); await db.SaveChangesAsync(); if (nPQRSComment != null) { CommentId = nPQRSComment.Id; } AddLog("", nPQRS.Id, nPQRS); //crea record usuarios var flujoUsuarios = await db.UsuarioFlujoPQRS.Where(uf => uf.MotivoPQRSId == f.MotivoPQRSId && uf.FlujoPQRSId == f.Id).ToListAsync(); foreach (var uf in flujoUsuarios) { PQRSRecordUsuario nPQRSUser = new PQRSRecordUsuario(); if (uf.UsuarioId == Seguridadcll.Configuracion.UsuarioVendedorPQRS) { string usuarioVendedor = ""; usuarioVendedor = await db.Novedad.Include(d => d.Cliente).Where(d => d.Id == id).Select(d => d.Cliente.VendedorId).FirstOrDefaultAsync(); nPQRSUser.UsuarioId = usuarioVendedor; } else { nPQRSUser.UsuarioId = uf.UsuarioId; } nPQRSUser.PQRSRecordId = nPQRS.Id; nPQRSUser.PQRSRecordOrder = nPQRS.Order; nPQRSUser.EstadoUsuarioFlujoPQRS = EstadoUsuarioFlujoPQRS.Unanswered; db.PQRSRecordUsuarios.Add(nPQRSUser); await db.SaveChangesAsync(); AddLog("", nPQRSUser.UsuarioId, nPQRSUser); } //Tareas var Tareas = await db.FlujoPQRSTareas.Where(uf => uf.MotivoPQRSId == f.MotivoPQRSId && uf.FlujoPQRSId == f.Id).ToListAsync(); foreach (var t in Tareas) { PQRSRecordTareas nTarea = new PQRSRecordTareas(); //nTarea.Id = t.Id; nTarea.PQRSRecordId = nPQRS.Id; nTarea.PQRSRecordOrder = nPQRS.Order; nTarea.Descripcion = t.Descripcion; nTarea.Requerido = t.Requerido; nTarea.Terminado = false; db.PQRSRecordTareas.Add(nTarea); await db.SaveChangesAsync(); AddLog("", nTarea.Id, nTarea); } //Condiciones var Condiciones = await db.FlujoPQRSCondiciones.Where(uf => uf.MotivoPQRSId == f.MotivoPQRSId && uf.FlujoPQRSId == f.Id).ToListAsync(); foreach (var c in Condiciones) { PQRSRecordCondiciones nCondicion = new PQRSRecordCondiciones(); nCondicion.Id = c.Id; nCondicion.PQRSRecordId = nPQRS.Id; nCondicion.PQRSRecordOrder = nPQRS.Order; nCondicion.Descripcion = c.Descripcion; nCondicion.TipoCondicion = c.TipoCondicion; nCondicion.CondicionesValor = c.CondicionesValor; nCondicion.Valor = c.Valor; nCondicion.SiNo = c.SiNo; nCondicion.RespValor = 0; nCondicion.RespSiNo = false; db.PQRSRecordCondiciones.Add(nCondicion); await db.SaveChangesAsync(); AddLog("", nCondicion.Id, nCondicion); } // if (f.Id == 4) { SendNotificationEmailTask(TipoNotificacion.NextStep, TipoComentario.Approval, TipoPQRS, nPQRS.Id, nPQRS.Order, dataDist.FirstOrDefault().DataId, nPQRSComment.Id, Seguridadcll.Usuario.UsuarioNombre, Seguridadcll.Aplicacion.Link); } } if (TipoPQRS == TipoPQRS.Recruitment) { var itemsdev = await db.Recruitments.Where(di => di.RecruitmentId == item.DataId && 29 == item.MotivoPQRSId).ToListAsync(); foreach (var itemD in itemsdev) { itemD.PQRSRecordId = idx; db.Entry(itemD).State = EntityState.Modified; await db.SaveChangesAsync(); AddLog("", itemD.RecruitmentId, itemD); } } } } catch (Exception ex) { return(InternalServerError(ex)); } return(Ok(true)); }