public override ExecutionResult Run(IStepExecutionContext context) { FindingWorkflowData finding = _findingRepository.GetOneByWorkflowId(context.Workflow.Id); finding.ExpirationDate = this.ExpirationDate; finding.ContainmentAction = this.ContainmentAction; finding.CauseAnalysis = this.CauseAnalysis; finding.Comment = this.Comment; int newStateId = _findingStateRepository.GetOneByCode("ENC"); //Delete Evidences foreach (var deleteEvidence in DeleteEvidencesUrls) { _findingEvidenceRepository.Delete(finding.FindingID, deleteEvidence); } //Add Evidences foreach (var newEvidence in NewEvidencesUrls) { _findingEvidenceRepository.Add(finding.FindingID, newEvidence); } //Add to history if the first time edit if (finding.FindingStateID != newStateId) { _findingStatesHistoryRepository.Add(finding.FindingID, newStateId, finding.ResponsibleUserID); } finding.FindingStateID = newStateId; _findingRepository.Update(finding); finding = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, false); _hub.Clients.All.SendAsync("transferfindingsdata", finding); return(ExecutionResult.Next()); }
public async Task <bool> Execute(FindingWorkflowData finding, IFormFile[] findingEvidences, List <string> filesToDelete) { if (findingEvidences != null) { await InsertFiles(findingEvidences, finding); } if (filesToDelete != null) { await DeleteFiles(filesToDelete, finding); } try { var findingWorkflow = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, true); finding.EmitterUserID = _httpContextAccessor.HttpContext.User.FindFirst("id").Value; await _workflowCore.ExecuteEvent("Approve", finding.WorkflowId, finding); await _hub.Clients.All.SendAsync("transferfindingsdata", findingWorkflow); return(true); } catch (Exception ex) { throw ex; } }
public async Task <bool> Execute(FindingWorkflowData finding, IFormFile[] findingEvidences, List <string> filesToDelete) { if (!_userLoggedHelper.CheckForPermissionsToUpdateReassignOrClose(finding.ResponsibleUserID)) { throw new DontHavePermissionsException("The user doesn´t have permissions to perform this action"); } if (findingEvidences != null) { await InsertFiles(findingEvidences, finding); } if (filesToDelete != null) { await DeleteFiles(filesToDelete, finding); } try { var findingWorkflow = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, true); await _workflowCore.ExecuteEvent("Close", finding.WorkflowId, finding); await _hub.Clients.All.SendAsync("transferfindingsdata", findingWorkflow); return(true); } catch (Exception ex) { throw ex; } }
public bool Execute(FindingWorkflowData finding) { var findingWorkflow = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, true); _workflowCore.ExecuteEvent("Close", finding.WorkflowId, finding); //_hub.Clients.All.SendAsync("transferfindingsdata", findingWorkflow); return(true); }
private async Task DeleteFiles(List <string> filesToDelete, FindingWorkflowData finding) { foreach (var fe in filesToDelete) { var fileToDelete = new Evidence(); fileToDelete.FileName = fe; fileToDelete.Url = await _azureStorageRepository.DeleteFileAzureStorage(fileToDelete, _azureStorageSettings.ContainerFindingName); finding.DeleteEvidencesUrls.Add(fileToDelete.Url); } }
public async Task <FindingWorkflowData> Execute(FindingWorkflowData finding, IFormFile[] findingEvidences) { if (findingEvidences != null) { await InsertFiles(findingEvidences, finding); } finding.Flow = "Finding"; finding.FlowVersion = 1; var flowId = await _workflowCore.StartFlow(finding); return(finding); }
public FindingWorkflowData Add(FindingWorkflowData finding) { using (var scope = _serviceProvider.CreateScope()) { var _mapper = scope.ServiceProvider.GetService(typeof(IMapper)) as IMapper; var _ctx = scope.ServiceProvider.GetService(typeof(SQLHoshinCoreContext)) as SQLHoshinCoreContext; Findings mappedFinding = _mapper.Map <FindingWorkflowData, Findings>(finding); Findings createdFinding = _ctx.Findings.Add(mappedFinding).Entity; _ctx.SaveChanges(); return(_mapper.Map <Findings, FindingWorkflowData>(createdFinding)); } }
public async Task <bool> Execute(FindingWorkflowData finding) { //_findingRepository.Update(finding); try { var findingWorkflow = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, true); await _workflowCore.ExecuteEvent("Close", finding.WorkflowId, finding); await _hub.Clients.All.SendAsync("transferfindingsdata", findingWorkflow); return(true); } catch (Exception ex) { throw ex; } }
public async Task <bool> Execute(FindingWorkflowData findingWorkflowData) { Domain.Finding.Finding finding = _findingRepository.Get(findingWorkflowData.FindingID); if (findingWorkflowData.ReassignedUserID == finding.ResponsibleUserID) { throw new ReassignedUserCantBeActualResponsibleUserException(finding, findingWorkflowData.ReassignedUserID); } if (_httpContextAccessor.HttpContext.User.HasClaim(CustomClaimTypes.Permission, CrossCutting.Authorization.Claims.Quality.Findings.ReassginDirectly)) { findingWorkflowData.EventData = "ReassignedWithoutApproval"; } var findingWorkflow = _findingRepository.UpdateIsInProcessWorkflow(findingWorkflowData.FindingID, true); await _workflowCore.ExecuteEvent("Close", findingWorkflowData.WorkflowId, findingWorkflowData); //await _hub.Clients.All.SendAsync("transferfindingsdata", findingWorkflow); return(true); }
public FindingWorkflowData Update(FindingWorkflowData finding) { using (var scope = _serviceProvider.CreateScope()) { var _mapper = scope.ServiceProvider.GetService(typeof(IMapper)) as IMapper; var _ctx = scope.ServiceProvider.GetService(typeof(SQLHoshinCoreContext)) as SQLHoshinCoreContext; var findingData = _ctx.Findings.Where(x => x.FindingID == finding.FindingID).FirstOrDefault(); //if (findingData.AuditID != 0) //{ // finding.AuditID = Convert.ToInt32(findingData.AuditID); // finding.AspectID = Convert.ToInt32(findingData.AspectID); // finding.StandardID = Convert.ToInt32(findingData.StandardID); //} findingData.Description = finding.Description; findingData.PlantLocationID = finding.PlantLocationID == 0 ? findingData.PlantLocationID : finding.PlantLocationID; findingData.SectorLocationID = finding.SectorLocationID == 0 ? findingData.SectorLocationID : finding.SectorLocationID; findingData.PlantTreatmentID = finding.PlantTreatmentID == 0 ? findingData.PlantTreatmentID : finding.PlantTreatmentID; findingData.SectorTreatmentID = finding.SectorTreatmentID == 0 ? findingData.SectorTreatmentID : finding.SectorTreatmentID; findingData.ResponsibleUserID = finding.ResponsibleUserID; findingData.FindingTypeID = finding.FindingTypeID; findingData.ExpirationDate = finding.ExpirationDate; findingData.FindingStateID = finding.FindingStateID; findingData.ContainmentAction = finding.ContainmentAction; findingData.CauseAnalysis = finding.CauseAnalysis; findingData.FinalComment = finding.FinalComment; //Findings f = _mapper.Map<FindingWorkflowData, Findings>(finding); if (!string.IsNullOrWhiteSpace(finding.Comment)) { Entities.Quality.FindingComments fc = new Entities.Quality.FindingComments(); fc.Date = DateTime.Now; fc.Comment = finding.Comment; fc.FindingID = findingData.FindingID; fc.CreatedByUserID = findingData.ResponsibleUserID; findingData.FindingComments.Add(fc); } _ctx.Findings.Update(findingData); _ctx.SaveChanges(); return(_mapper.Map <Findings, FindingWorkflowData>(findingData)); } }
public override ExecutionResult Run(IStepExecutionContext context) { if (context.PersistenceData == null && FindingID == 0) { //NEW FINDING FindingWorkflowData finding = new FindingWorkflowData(Description, PlantLocationId, SectorLocationId, PlantTreatmentId, SectorTreatmentId, FindingTypeId, EmitterUserId, ResponsibleUserId); finding.WorkflowId = context.Workflow.Id; finding.FindingStateID = _findingStateRepository.GetOneByCode("ESP"); //Go to DB and save the Finding. FindingWorkflowData createdFinding = _findingRepository.Add(finding); //Add State to history _findingStatesHistoryRepository.Add(createdFinding.FindingID, createdFinding.FindingStateID, createdFinding.EmitterUserID); //Add Evidence foreach (var evidence in NewEvidencesUrls) { _findingEvidenceRepository.Add(createdFinding.FindingID, evidence); } //Get the email of the Responsible User //EmailAddresses.Add(_findingRepository.GetResponsibleUserEmail(ResponsibleUserId)); //GetType the email of the finding responsible EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailResponsibleFinding()); createdFinding = _findingRepository.GetOneByWorkflowId(createdFinding.WorkflowId); this.EmailSubject = EmailStrings.GetSubjectFinding(createdFinding.FindingTypeName, "new"); this.EmailMessage = EmailStrings.GetMessageFinding(createdFinding, _emailSettings.Url, "new"); _hub.Clients.All.SendAsync("transferfindingsdata", createdFinding); //_hub.Clients.All.SendCoreAsync("transferfindingsdata", createdFinding) return(ExecutionResult.Next()); } else { _findingRepository.setWorkflowID(FindingID, context.Workflow.Id); return(ExecutionResult.Next()); } }
private async Task InsertFiles(IFormFile[] findingEvidences, FindingWorkflowData finding) { foreach (var fe in findingEvidences) { var fileToAdd = new Evidence(); using (var memoryStream = new MemoryStream()) { await fe.CopyToAsync(memoryStream); fileToAdd.Bytes = memoryStream.ToArray(); } fileToAdd.FileName = fe.FileName; fileToAdd.IsInsert = true; fileToAdd.IsDelete = false; fileToAdd.Url = await _azureStorageRepository.InsertFileAzureStorage(fileToAdd, TypeData.Byte, _azureStorageSettings.ContainerFindingName); finding.NewEvidencesUrls.Add(fileToAdd.Url); } }
public override ExecutionResult Run(IStepExecutionContext context) { FindingWorkflowData finding = _findingRepository.GetOneByWorkflowId(context.Workflow.Id); finding.FinalComment = this.FinalComment; if (State == "Finalizado OK") { finding.FindingStateID = _findingStateRepository.GetOneByCode("FOK"); } else if (State == "Finalizado No OK") { finding.FindingStateID = _findingStateRepository.GetOneByCode("FNK"); } else if (State == "Cerrado") { finding.FindingStateID = _findingStateRepository.GetOneByCode("CER"); } _findingRepository.Update(finding); _findingStatesHistoryRepository.Add(finding.FindingID, finding.FindingStateID, finding.ResponsibleUserID); finding = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, false); // responsible EmailAddresses.Add(_findingRepository.GetResponsibleUserEmail(finding.ResponsibleUserID)); //User creator EmailAddresses.Add(_findingRepository.GetResponsibleUserEmail(finding.EmitterUserID)); // SGC EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailResponsibleSGC()); // Boss, colaborator EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailSectorBoss()); EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailColaboratorSB()); this.EmailSubject = EmailStrings.GetSubjectFinding(finding.FindingTypeName, "close"); this.EmailMessage = EmailStrings.GetMessageFinding(finding, _emailSettings.Url, "close"); _hub.Clients.All.SendAsync("transferfindingsdata", finding); return(ExecutionResult.Next()); }
public override ExecutionResult Run(IStepExecutionContext context) { FindingWorkflowData finding = _findingRepository.GetOneByWorkflowId(context.Workflow.Id); finding.FinalComment = this.FinalComment; int newStateId = _findingStateRepository.GetOneByCode("RCZ"); finding.FindingStateID = newStateId; _findingRepository.Update(finding); ////Delete Evidences //foreach (var deleteEvidence in DeleteEvidencesUrls) //{ // _findingEvidenceRepository.Delete(finding.FindingID, deleteEvidence); //} ////Add Evidences //foreach (var newEvidence in NewEvidencesUrls) //{ // _findingEvidenceRepository.Add(finding.FindingID, newEvidence); //} //WE NEED GET THE RESPONSIBLESGCUSERID var RESPONSIBLESGCUSERID = finding.ResponsibleUserID; _findingStatesHistoryRepository.Add(finding.FindingID, finding.FindingStateID, RESPONSIBLESGCUSERID); finding = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, false); //usuario creador de hallazgo EmailAddresses.Add(_findingRepository.GetResponsibleUserEmail(finding.EmitterUserID)); this.EmailSubject = EmailStrings.GetSubjectFinding(finding.FindingTypeName, "reject"); this.EmailMessage = EmailStrings.GetMessageFinding(finding, _emailSettings.Url, "reject"); _hub.Clients.All.SendAsync("transferfindingsdata", finding); return(ExecutionResult.Next()); }
public override ExecutionResult Run(IStepExecutionContext context) { FindingWorkflowData finding = _findingRepository.GetOneByWorkflowId(context.Workflow.Id); finding.Description = this.Description; finding.PlantLocationID = this.PlantLocationID; finding.SectorLocationID = this.SectorLocationID; finding.PlantTreatmentID = this.PlantTreatmentID; finding.SectorTreatmentID = this.SectorTreatmentID; finding.ResponsibleUserID = this.ResponsibleUserID; finding.FindingTypeID = this.FindingTypeID; finding.ExpirationDate = this.ExpirationDate; if (State == "ApproveWithPDCA") { int newStateId = _findingStateRepository.GetOneByCode("APD"); finding.FindingStateID = newStateId; _findingRepository.Update(finding); var correctiveAction = new CorrectiveActionWorkflowData(); correctiveAction.Description = finding.Description; correctiveAction.PlantLocationID = finding.PlantLocationID; correctiveAction.SectorLocationID = finding.SectorLocationID; correctiveAction.PlantTreatmentID = finding.PlantTreatmentID; correctiveAction.SectorTreatmentID = finding.SectorTreatmentID; correctiveAction.ResponsibleUserID = finding.ResponsibleUserID; correctiveAction.FindingID = finding.FindingID; correctiveAction.EmitterUserID = EmitterUserID; correctiveAction.ReviewerUserID = ReviewerUserID; correctiveAction.CreationDate = DateTime.Today; correctiveAction.Flow = "CorrectiveAction"; correctiveAction.FlowVersion = 1; _workflowCore.StartFlow(correctiveAction); } else if (State == "Approve") { int newStateId = _findingStateRepository.GetOneByCode("APR"); finding.FindingStateID = newStateId; _findingRepository.Update(finding); } //Delete Evidences foreach (var deleteEvidence in DeleteEvidencesUrls) { _findingEvidenceRepository.Delete(finding.FindingID, deleteEvidence); } //Add Evidences foreach (var newEvidence in NewEvidencesUrls) { _findingEvidenceRepository.Add(finding.FindingID, newEvidence); } //Left obtain Responsible SGC ID string IDRESPONSIBLESGC = finding.ResponsibleUserID; _findingStatesHistoryRepository.Add(finding.FindingID, finding.FindingStateID, IDRESPONSIBLESGC); finding = _findingRepository.UpdateIsInProcessWorkflow(finding.FindingID, false); EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailResponsibleSGC()); EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailSectorBoss()); EmailAddresses.AddRange(_userWorkflowRepository.GetUsersEmailColaboratorSB()); var email = _findingRepository.GetResponsibleUserEmail(finding.ResponsibleUserID); EmailAddresses.Add(email); this.EmailSubject = Data.EmailStrings.GetSubjectFinding(finding.FindingTypeName, "approve"); this.EmailMessage = Data.EmailStrings.GetMessageFinding(finding, _emailSettings.Url, "approve"); _hub.Clients.All.SendAsync("transferfindingsdata", finding); //Get Responsible User Email. return(ExecutionResult.Next()); }