Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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));
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 10
0
        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));
            }
        }
Exemplo n.º 11
0
        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());
            }
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
        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());
        }
Exemplo n.º 14
0
        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());
        }
Exemplo n.º 15
0
        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());
        }