public void CloneAnaliseDosage(Guid dosageId) { var dosage = AppContext.EXP_ExpertiseStageDosage.FirstOrDefault(e => e.Id == dosageId); if (dosage == null) { return; } var currentList = dosage.EXP_DrugAnaliseIndicator; var list = AppContext.EXP_ExpertiseStageDosage.Where(e => e.StageId == dosage.StageId && e.Id != dosageId); foreach (var expDrugDosage in list) { foreach (var entity in currentList) { if (expDrugDosage.EXP_DrugAnaliseIndicator.All(e => e.AnalyseIndicator != entity.AnalyseIndicator)) { var obj = new EXP_DrugAnaliseIndicator { Id = Guid.NewGuid(), AnalyseIndicator = entity.AnalyseIndicator, Humidity = entity.Humidity, IsMatches = entity.IsMatches, Temperature = entity.Temperature, ActualResult = entity.ActualResult, Demand = entity.Demand, Designation = entity.Designation, PositionNumber = entity.PositionNumber, DosageStageId = expDrugDosage.Id }; AppContext.EXP_DrugAnaliseIndicator.Add(obj); } } } AppContext.SaveChanges(); }
private bool ToNextStage(EXP_DrugDeclaration declaration, Guid?fromStageId, int[] nextStageIds, out string resultDescription) { resultDescription = null; string[] activeStageCodes = { EXP_DIC_StageStatus.New, EXP_DIC_StageStatus.InWork, EXP_DIC_StageStatus.InReWork }; var currentStage = fromStageId != null?AppContext.EXP_ExpertiseStage.FirstOrDefault(e => e.Id == fromStageId) : AppContext.EXP_ExpertiseStage.FirstOrDefault(e => e.DeclarationId == declaration.Id && activeStageCodes.Contains(e.EXP_DIC_StageStatus.Code)); var dosageIds = AppContext.EXP_DrugDosage.Where(e => e.DrugDeclarationId == declaration.Id) .Select(e => e.Id) .ToList(); var stageStatusNew = GetStageStatusByCode(EXP_DIC_StageStatus.New); var stageStatusRework = GetStageStatusByCode(EXP_DIC_StageStatus.InReWork); //закрываем предыдущий этап if (currentStage != null) { currentStage.StatusId = GetStageStatusByCode(EXP_DIC_StageStatus.Completed).Id; currentStage.FactEndDate = DateTime.Now; } foreach (var nextStageId in nextStageIds) { if (!CanSendToStep(declaration.Id, fromStageId, nextStageId, out resultDescription)) { return(false); } //если имеется уже выполняющийся этап то продолжаем его дальше if (AppContext.EXP_ExpertiseStage.Any(e => e.DeclarationId == declaration.Id && e.StageId == nextStageId && e.EXP_DIC_StageStatus.Code != EXP_DIC_StageStatus.Completed && !e.IsHistory)) { continue; } var oldStage = AppContext.EXP_ExpertiseStage.FirstOrDefault(es => es.IsHistory == false && es.DeclarationId == declaration.Id && es.StageId == nextStageId); if (oldStage == null) { var daysOnStage = GetExpStageDaysOnExecution(declaration.TypeId, nextStageId); var startDate = DateTime.Now; var newStage = new EXP_ExpertiseStage() { Id = Guid.NewGuid(), DeclarationId = declaration.Id, StageId = nextStageId, ParentStageId = currentStage != null ? (Guid?)currentStage.Id : null, StatusId = stageStatusNew.Id, StartDate = startDate, EndDate = daysOnStage != null ? (DateTime?)startDate.AddDays(daysOnStage.Value) : null }; //todo брать руководителя цоз из настроек newStage.Executors.Add(GetExecutorByDicStageId(nextStageId)); foreach (var dosageId in dosageIds) { newStage.EXP_ExpertiseStageDosage.Add(new EXP_ExpertiseStageDosage() { Id = Guid.NewGuid(), DosageId = dosageId, EXP_ExpertiseStage = newStage }); } AppContext.EXP_ExpertiseStage.Add(newStage); } else { var reworkStage = new EXP_ExpertiseStage() { Id = Guid.NewGuid(), DeclarationId = declaration.Id, StageId = nextStageId, ParentStageId = currentStage != null ? (Guid?)currentStage.Id : null, StatusId = stageStatusRework.Id, StartDate = oldStage.StartDate, EndDate = oldStage.EndDate, OtdIds = oldStage.OtdIds, OtdRemarks = oldStage.OtdRemarks }; reworkStage.Executors.AddRange(oldStage.Executors); foreach (var dossageStage in oldStage.EXP_ExpertiseStageDosage) { var reworkDosage = new EXP_ExpertiseStageDosage() { Id = Guid.NewGuid(), DosageId = dossageStage.DosageId, EXP_ExpertiseStage = reworkStage }; foreach (var primaryFinalDoc in dossageStage.PrimaryFinalDocs) { var docClone = new EXP_ExpertisePrimaryFinalDoc(primaryFinalDoc); docClone.Id = Guid.NewGuid(); docClone.EXP_ExpertiseStageDosage = reworkDosage; docClone.DosageStageId = reworkStage.Id; reworkDosage.PrimaryFinalDocs.Add(docClone); } foreach (var pharmaceuticalFinalDoc in dossageStage.EXP_ExpertisePharmaceuticalFinalDoc) { var docClone = new EXP_ExpertisePharmaceuticalFinalDoc(pharmaceuticalFinalDoc); docClone.Id = Guid.NewGuid(); docClone.EXP_ExpertiseStageDosage = reworkDosage; docClone.DosageStageId = reworkStage.Id; reworkDosage.EXP_ExpertisePharmaceuticalFinalDoc.Add(docClone); } foreach (var pharmacologicalFinalDoc in dossageStage.EXP_ExpertisePharmacologicalFinalDoc) { var docClone = new EXP_ExpertisePharmacologicalFinalDoc(pharmacologicalFinalDoc); docClone.Id = Guid.NewGuid(); docClone.EXP_ExpertiseStageDosage = reworkDosage; docClone.DosageStageId = reworkStage.Id; reworkDosage.EXP_ExpertisePharmacologicalFinalDoc.Add(docClone); } foreach (var safetyreportFinalDoc in dossageStage.EXP_ExpertiseSafetyreportFinalDoc) { var docClone = new EXP_ExpertiseSafetyreportFinalDoc(safetyreportFinalDoc); docClone.Id = Guid.NewGuid(); docClone.EXP_ExpertiseStageDosage = reworkDosage; docClone.DosageStageId = reworkStage.Id; reworkDosage.EXP_ExpertiseSafetyreportFinalDoc.Add(docClone); } foreach (var analiseIndicator in dossageStage.EXP_DrugAnaliseIndicator) { var docClone = new EXP_DrugAnaliseIndicator(analiseIndicator); docClone.Id = Guid.NewGuid(); docClone.EXP_ExpertiseStageDosage = reworkDosage; docClone.DosageStageId = reworkStage.Id; reworkDosage.EXP_DrugAnaliseIndicator.Add(docClone); } reworkStage.EXP_ExpertiseStageDosage.Add(reworkDosage); } AppContext.EXP_ExpertiseStage.Add(reworkStage); oldStage.IsHistory = true; } } AppContext.SaveChanges(); return(true); }