public static void CreateLABAnswerMeasuresByLABMeasureAndLABStudy(LABMeasure labmeasure, LABStudy study)
        {
            List<LABAnswer> answerList = LABAnswerBL.GetAnswerListByIdLABStudy(study.idLABStudy);

            answerList.ForEach(answer =>
                {
                    LABAnswerMeasureBL.CreateLABAnswerMeasureByIdLABMeasureAndLABAnswer(labmeasure.idLABMeasure, answer);
                });
        }
        public static LABStudy GetLatestLABStudyByIdCustomerProspect(Guid idCustomerProspect, LABStudy.StatusEnum status)
        {
            using (UpsilabEntities context = new UpsilabEntities())
            {
                string statusEnum = status.ToString();
                return context.LABStudy.Where(study => study.idCustomer == idCustomerProspect && study.Status.Equals(statusEnum))
                                .OrderByDescending(study => study.DateUpdated)
                                .FirstOrDefault();

                var CompletedLABQuery = ComletedLabCompiledQuery.Invoke(context, new CompletedLabStudyByIdCustomerProspect
                 {
                     idCustomer = idCustomerProspect,
                     clabcompletedStatus = LABStudy.StatusEnum.Completed.ToString(),
                     clabsentToCoffreFort = LABStudy.StatusEnum.SentToCoffreFort.ToString()

                 });

                return CompletedLABQuery.AsEnumerable().FirstOrDefault();
            }
        }
        public static LABMeasure CreateLABMeasureForCompletedLABStudy(LABStudy study)
        {
            if (!LABStudyBL.IsLABStudyCompleted(study))
                return null;

            LABMeasure returnValue = new LABMeasure();
            returnValue.idCustomerProspect = study.idCustomer;
            returnValue.idLABStudy = study.idLABStudy;
            returnValue.DateCreated = DateTime.Now;
            returnValue.Status = LABMeasure.StatusEnum.Pending.ToString();

            //craete the labmeasure
            using (UpsilabEntities context = new UpsilabEntities())
            {
                context.LABMeasure.Attach(returnValue);
                context.ObjectStateManager.ChangeObjectState(returnValue, System.Data.EntityState.Added);
                context.SaveChanges();
            }

            //get all answers and get them some lab answer measures
            LABAnswerMeasureBL.CreateLABAnswerMeasuresByLABMeasureAndLABStudy(returnValue, study);

            return returnValue;
        }
        public static Boolean InsertAnswers(LABStudy labStudy, List<LABAnswer> answers)
        {
            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    answers.ForEach(answer =>
                    {
                        LABAnswer newLabAnswer = new LABAnswer()
                        {
                            idLABAnswer = GuidHelper.GenerateGuid(),
                            idLABStudy = labStudy.idLABStudy,
                            idLABQuestion = answer.idLABQuestion,
                            idResponse = answer.idResponse,
                            idVigilance = answer.idVigilance,
                            idRisk = answer.idRisk,
                            ExtensionAnswer = answer.ExtensionAnswer,
                            DateCreated = DateTime.Now
                        };

                        context.LABAnswer.AddObject(newLabAnswer);
                    });

                    context.SaveChanges();
                }

                return true;
            }
            catch
            {
                return false;
            }
        }
        public static Boolean SaveAndProcessAnswers(LABStudy study, List<LABAnswer> answers)
        {
            try
            {
                if (study == null)
                    return true;

                if (answers == null)
                    return true;

                if (answers.Count <= 0)
                    return true;

                List<LABAnswer> answerList = answers.ToList();

                //Get answer for first question
                LABAnswer firstQuestionAnswer = answerList.Where(a => a.idLABQuestion == 2).FirstOrDefault(); //Id 2
                
                //process and save the answers
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    answerList.ForEach(answer =>
                        {
                            QuestionAssessmentBL.ProcessAnswerRiskAndVigilance(ref answer, firstQuestionAnswer);
                            
                            context.LABAnswer.Attach(answer);
                            
                            if (context.LABAnswer.Where(a => a.idLABAnswer.Equals(answer.idLABAnswer)).Count() > 0)
                            {
                                answer.DateUpdated = DateTime.Now;
                                context.ObjectStateManager.ChangeObjectState(answer, System.Data.EntityState.Modified);
                            }
                            else
                            {
                                answer.DateCreated = DateTime.Now;
                                context.ObjectStateManager.ChangeObjectState(answer, System.Data.EntityState.Added);
                            }
                            context.SaveChanges();
                        });

                    //context.SaveChanges();
                }

               LABStudyBL.EvaluateLABStudy(study);

                return true;
            }
            catch
            {
                return false;
            }
        }
        public static LABStudy CopyLatestLABStudy(LABStudy latestLABStudy)
        {
            LABStudy newLABStudy = new LABStudy()
            {
                idLABStudy = Business.Utility.GuidHelper.GenerateGuid(),
                idCustomer = latestLABStudy.idCustomer,
                idVigilance = latestLABStudy.idVigilance,
                idRisk = latestLABStudy.idRisk,
                //Status = LABStudy.StatusEnum.InProgress.ToString(),
                Status = LABStudy.StatusEnum.Completed.ToString(), //Completed since it's an update from a completed one
                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now,
            };

            try
            {
                //Create new Labstudy
                LABStudyBL.InsertLABStudy(newLABStudy);

                //Copy options values : get latest and copy them to new LABStudy
                List<LABStudyOptionValue> labStudyOptionValues = Upsilab.Business.LAB.LABStudyOptionBL.GetOptionValuesByIdLabStudy(latestLABStudy.idLABStudy);
                LABStudyOptionBL.SaveLabStudyOptionValues(newLABStudy, labStudyOptionValues);

                //Copy the latest LAB Answers
                List<LABAnswer> latestLABAnswers = LABAnswerBL.GetLABAnswersByIdLABStudy(latestLABStudy.idLABStudy);
                LABAnswerBL.InsertAnswers(newLABStudy, latestLABAnswers);
            }
            catch { }

            return newLABStudy;
        }
        public static LABStudy CreateEmptyLABStudy(Guid _idCustomer)
        {
            LABStudy LABStudy = new LABStudy()
            {
                idLABStudy = GuidHelper.GenerateGuid(),
                idCustomer = _idCustomer,
                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now,
                Status = Data.Model.LABStudy.StatusEnum.Created.ToString(),
                LABAnswer = new System.Data.Objects.DataClasses.EntityCollection<LABAnswer>()
            };

            LABStudyBL.SaveLABStudy(LABStudy);

            return LABStudy;
        }
        public static string BuildLABFileName(LABStudy pLabStudy, Upsilab.Data.Model.CustomerProspect pCustomer)
        {
            string type = (!pCustomer.IsCorporation.HasValue) ? "PP" : (pCustomer.IsCorporation.Value) ? "PM" : "PP";
            string name = (type == "PP") ? pCustomer.User.UserName : pCustomer.CompanyName;
            string date = (pLabStudy.DateUpdated == null) ? pLabStudy.DateCreated.ToString("ddMMyyyy") : pLabStudy.DateUpdated.Value.ToString("ddMMyyyy");

            string fileName = string.Format("LAB_{0}_{1}_{2}_{3}.pdf", type, FileManager.GetCorrectFileName(name), date, pLabStudy.idLABStudy);

            return fileName;
        }
        public static LABStudy EvaluateLABStudy(LABStudy study)
        {
            if (LABStudyBL.IsLABStudyCompleted(study))
            {
                study.Status = Data.Model.LABStudy.StatusEnum.Completed.ToString();

                var answerList = LABAnswerBL.GetAnswerListByIdLABStudy(study.idLABStudy);

                LABAnswer riskValue = null;
                LABAnswer vigilanceValue = null;
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    var query = from answer in answerList
                                join risk in context.RiskLevel on answer.idRisk equals risk.idRiskLevel
                                orderby risk.RiskOrder descending
                                select answer;

                    riskValue = query.FirstOrDefault();

                    query = from answer in answerList
                            join vigilance in context.VigilanceLevel on answer.idVigilance equals vigilance.idVigilanceLevel
                            orderby vigilance.VigilanceOrder descending
                            select answer;

                    vigilanceValue = query.FirstOrDefault();
                }

                if (riskValue != null)
                    study.idRisk = riskValue.idRisk;

                if (vigilanceValue != null)
                    study.idVigilance = vigilanceValue.idVigilance;

                //TODO: LAB MEASURES
            }
            else
            {
                study.Status = Data.Model.LABStudy.StatusEnum.InProgress.ToString();
            }

            study.DateUpdated = DateTime.Now;
            LABStudyBL.SaveLABStudy(study);

            return study;
        }
 public static void InsertLABStudy(LABStudy study)
 {
     using (UpsilabEntities context = new UpsilabEntities())
     {
         context.LABStudy.AddObject(study);
         context.SaveChanges();
     }
 }
        public static void SaveLABStudy(LABStudy study)
        {
            using (UpsilabEntities context = new UpsilabEntities())
            {
                context.LABStudy.Attach(study);

                if (study.Status.Equals(Data.Model.LABStudy.StatusEnum.Created.ToString()))
                {
                    study.Status = Data.Model.LABStudy.StatusEnum.InProgress.ToString();
                    context.ObjectStateManager.ChangeObjectState(study, System.Data.EntityState.Added);
                }
                else
                {
                    context.ObjectStateManager.ChangeObjectState(study, System.Data.EntityState.Modified);
                }

                //update customer lab status
                Upsilab.Data.Model.CustomerProspect cust = context.CustomerProspect.Where(c => c.idCustomer == study.idCustomer).FirstOrDefault();
                cust.CurrentLabStatus = study.Status;
                cust.idRisk = study.idRisk;
                cust.idVigilance = study.idVigilance;
                
                if (study.Status == Data.Model.LABStudy.StatusEnum.SentToCoffreFort.ToString())
                {
                    cust.DateShiftLABLast = DateTime.Now;
                    cust.DateShiftLABNext = DateTime.Now.AddYears(1);
                    
                    if (cust.NbElectronicSafeDocument.HasValue)
                        cust.NbElectronicSafeDocument = cust.NbElectronicSafeDocument.Value + 1;
                    else
                        cust.NbElectronicSafeDocument = 1;
                }
                
                if (study.Status == Data.Model.LABStudy.StatusEnum.Completed.ToString() || study.Status == Data.Model.LABStudy.StatusEnum.SentToCoffreFort.ToString())
                {
                    cust.NbVigilanceMeasure = (study.VigilanceMeasure != null) ? study.VigilanceMeasure.Count : 0;
                }
                
                context.ObjectStateManager.ChangeObjectState(cust, System.Data.EntityState.Modified);
                context.SaveChanges();
            }
        }
        public static Boolean IsLABStudyCompleted(LABStudy LABStudy)
        {
            if (LABStudy == null)
                return false;

            //get root questions by idCustomer isCorporation and construct question list
            var questionList = LABQuestionBL.GetLABQuestionsByIdCustomer(LABStudy.idCustomer);
            var answerList = LABAnswerBL.GetAnswerListByIdLABStudy(LABStudy.idLABStudy);

            // count the question vs answers 
            if (answerList.Count >= questionList.Count) //should be == but some evol obliged us to delete some questions
                return true;

            return false;
        }
Example #13
0
        private static void ProcessUser(User user)
        {


            try
            {

                string statusInProgress = LABStudy.StatusEnum.InProgress.ToString();
                string statusCompleted = LABStudy.StatusEnum.Completed.ToString();
                string statusSentToCoffreFort = LABStudy.StatusEnum.SentToCoffreFort.ToString();
                bool isSendTocoffreOk = false;




                ////////            


                {

                    //     System.Console.WriteLine("\nTraitement de l'utilisateur : {0} {1}", user.UserName, user.UserFirstName);

                    //     int randomNumber = Rand();
                    _Log.Trace("Starting thread  for {0} {1} from  iteration {2} Thread count : {3} ", user.UserName, user.UserFirstName, _IterationId, _countThread);

                    //     Thread.Sleep(randomNumber);

                    //     _LstOfCommand.Enqueue(new GuidAction() { guid = user.idUser, action = "remove" });
                    //   autoEvent.Set();
                    // _Log.Trace("Ending thread  for {0} {1} from  iteration {2}", user.UserName, user.UserFirstName, _IterationId);

                }
                //  return;

                //////

                //liste des CustomerProspectLABModel par utilisateur
                List<CustomerProspectLABModel> lstCustomerLABModels = new List<CustomerProspectLABModel>();
                lstCustomerLABModels = LABStudyBL.GetCustomerLABModelInProgress(user.idUser);

                //boucle sur liste customer
                LABModel labModelNow = null;
                LABStudy labStudyNow = null;

                List<Guid> lstFailingGuid = new List<Guid>();


                foreach (CustomerProspectLABModel customerLabModel in lstCustomerLABModels)
                {
                    try
                    {
                        using (UpsilabEntities db = new UpsilabEntities())
                        {
                            //LABModel d'un utilisateur en cour  
                            labModelNow = new LABModel();
                            labModelNow = db.LABModel.Where(l => l.idUser == user.idUser && l.idLABModel == customerLabModel.idLABModel).FirstOrDefault();

                            //copy LABModel vers LABStudy
                            labStudyNow = new LABStudy()
                            {
                                idLABStudy = GuidHelper.GenerateGuid(),
                                idCustomer = customerLabModel.idCustomerProspect,
                                DateCreated = DateTime.Now,
                                DateUpdated = DateTime.Now,
                                Status = statusInProgress,
                                idRisk = labModelNow.idRisk,
                                idVigilance = labModelNow.idVigilance
                            };

                            db.LABStudy.AddObject(labStudyNow);
                            _Log.Trace("\nApplication du modele LAB : {0} au client : {1} {2}", labModelNow.Name, customerLabModel.CustomerProspect.Name, customerLabModel.CustomerProspect.User.UserFirstName);

                            //liste des question/reponse (LABAnswerModel)
                            List<LABAnswerModel> lstanswermodel = new List<LABAnswerModel>();
                            lstanswermodel = db.LABAnswerModel.Where(lam => lam.idLABModel == labModelNow.idLABModel).ToList();
                            //copy LABAnswerModel vers LABAnswer
                            foreach (LABAnswerModel lam in lstanswermodel)
                            {
                                LABAnswer LABAnswerNow = new LABAnswer()
                                {
                                    idLABAnswer = GuidHelper.GenerateGuid(),
                                    idLABStudy = labStudyNow.idLABStudy,
                                    idLABQuestion = lam.idLABQuestion,
                                    idResponse = lam.idResponse,
                                    idRisk = lam.idRisk,
                                    idVigilance = lam.idVigilance,
                                    DateCreated = DateTime.Now,
                                    DateUpdated = DateTime.Now
                                };

                                db.LABAnswer.AddObject(LABAnswerNow);
                            }

                            labStudyNow.idElectronicSafeDocument = null;
                            labStudyNow.Status = statusCompleted;

                            //envoie la transaction
                            db.SaveChanges();
                        }

                        if (labStudyNow != null)
                        {
                            _Log.Trace("Début envoi de la LAB au coffre-fort");
                            //ElectronicSafeDocument
                            Guid idElectronicSafeDocument = Guid.Empty;
                            idElectronicSafeDocument = LABStudyBL.SendToCoffreFort(labStudyNow.idCustomer, labStudyNow.idLABStudy);

                            if (idElectronicSafeDocument != Guid.Empty)
                            {
                                isSendTocoffreOk = true;
                                using (UpsilabEntities db = new UpsilabEntities())
                                {
                                    //update 
                                    CustomerProspectLABModel customerLAbModeltoupdate = db.CustomerProspectLABModel.Where(c => c.idCustomerProspectLABModel == customerLabModel.idCustomerProspectLABModel).FirstOrDefault();
                                    customerLAbModeltoupdate.Status = statusCompleted;
                                    customerLAbModeltoupdate.DateUpdated = DateTime.Now;

                                    //update customerprospect
                                    CustomerProspect customerToUpdate = db.CustomerProspect.Where(c => c.idCustomer == customerLabModel.idCustomerProspect).FirstOrDefault();
                                    customerToUpdate.CurrentLabStatus = statusSentToCoffreFort;
                                    //envoie la transaction
                                    db.SaveChanges();
                                }
                                _Log.Trace("Envoi au coffre-fort OK");
                            }
                            else
                            {
                                lstFailingGuid.Add(customerLabModel.CustomerProspect.IdUser);
                                _Log.Trace("Erreur envoi au coffre-fort");
                            }

                        }
                    }
                    catch (Exception exc)
                    {

                        lstFailingGuid.Add(customerLabModel.CustomerProspect.IdUser);
                        _Log.Trace("Erreur pour le customer : {0}", customerLabModel.CustomerProspect.IdUser.ToString());

                    }
                    if (_CancelToken.IsCancellationRequested)
                        break;

                }

                //ajout nouveau message pour un utilisateur quand l'affectation LAB est fini  
                if (lstFailingGuid.Count == 0)
                {
                    using (UpsilabEntities db = new UpsilabEntities())
                    {
                        Message msg = new Message()
                        {
                            idUser = user.idUser,
                            NameKey = LABStudyBL.MessageNamekey,
                            Read = false,
                            DateCreated = DateTime.Now,
                            DateUpdated = DateTime.Now,
                            idLABModel = labModelNow.idLABModel,
                            From = LABStudyBL.FromLABModel
                        };

                        db.Message.AddObject(msg);
                        //envoie la transaction
                        db.SaveChanges();
                    }


                    _Log.Trace("\n Aucun incident pour l'utilisateur");
                }
                else
                {
                    using (UpsilabEntities db = new UpsilabEntities())
                    {
                        Message msg = new Message()
                        {
                            idUser = user.idUser,
                            NameKey = LABStudyBL.MessageNamekeyKO,
                            Read = false,
                            DateCreated = DateTime.Now,
                            DateUpdated = DateTime.Now,
                            idLABModel = labModelNow.idLABModel,
                            From = LABStudyBL.FromLABModel,
                            AdditionnalContent = String.Join(";", lstFailingGuid.ToArray())
                        };

                        db.Message.AddObject(msg);
                        //envoie la transaction
                        db.SaveChanges();
                    }
                    _Log.Trace("\n Erreur survenue pour l'utilisateur");
                }



            }
            catch (Exception ex)
            {
                _Log.Trace("Exception : {0}", ex.Message);
                Log.AppendException(ex);
            }

            finally
            {
                _LstOfCommand.Enqueue(new GuidAction() { guid = user.idUser, action = "remove" });
                autoEvent.Set();
                _Log.Trace("Ending thread  for {0} {1} from  iteration {2}", user.UserName, user.UserFirstName, _IterationId);
            }
            //  RemoveItemToLstOfProcessingUser(user);

        }