protected virtual void FillDosageControl(EXP_ExpertiseStageDosage model) { var externalRepository = new ExternalRepository(); var repository = new ReadOnlyDictionaryRepository(); var measures = externalRepository.GetMeasures(); var wrappingTypes = repository.GetWrappingTypes().ToArray(); var boxes = externalRepository.GetBoxes().ToArray(); // var remarkTypes = repository.GetRemarkTypes().ToArray(); var sales = repository.GetSaleType().ToList(); var drugDeclarationRepository = new DrugDeclarationRepository(); model.EXP_DrugDosage.ExpDrugWrappings = new List <EXP_DrugWrapping>(); model.EXP_DrugDosage.ExpDrugPrices = new List <EXP_DrugPrice>(); model.EXP_DrugDosage.ExpDrugSubstances = new List <EXP_DrugSubstance>(); // model.EXP_DrugDosage.ExpDrugAppDosageRemarks = new List<EXP_DrugAppDosageRemark>(); // model.EXP_DrugDosage.ExpDrugAppDosageResults = new List<EXP_DrugAppDosageResult>(); /* foreach (var expDrugAppDosageRemark in model.EXP_DrugDosage.EXP_DrugAppDosageRemark) * { * model.EXP_DrugDosage.ExpDrugAppDosageRemarks.Add(expDrugAppDosageRemark); * } * if (model.EXP_DrugDosage.ExpDrugAppDosageRemarks.Count == 0) * { * model.EXP_DrugDosage.ExpDrugAppDosageRemarks.Add(new EXP_DrugAppDosageRemark()); * } * * foreach (var expDrugAppDosageRemark in model.EXP_DrugDosage.EXP_DrugAppDosageResult) * { * model.EXP_DrugDosage.ExpDrugAppDosageResults.Add(expDrugAppDosageRemark); * } * if (model.EXP_DrugDosage.ExpDrugAppDosageResults.Count == 0) * { * model.EXP_DrugDosage.ExpDrugAppDosageResults.Add(new EXP_DrugAppDosageResult()); * } */ /* ViewData["RemarkTypes" + model.EXP_DrugDosage.DrugDeclarationId] = new SelectList(remarkTypes, "Id", "NameRu", * null); * foreach (var wrap in model.EXP_DrugDosage.ExpDrugAppDosageResults) * { * ViewData["ResultTypes" + model.EXP_DrugDosage.DrugDeclarationId + "_" + wrap.Id] = new SelectList(remarkTypes, "Id", "NameRu", * wrap.RemarkTypeId); * } * foreach (var wrap in model.EXP_DrugDosage.ExpDrugAppDosageRemarks) * { * ViewData["RemarkTypes" + model.EXP_DrugDosage.DrugDeclarationId + "_" + wrap.Id] = new SelectList(remarkTypes, "Id", "NameRu", * wrap.RemarkTypeId); * }*/ foreach (var expDrugWrapping in model.EXP_DrugDosage.EXP_DrugWrapping) { model.EXP_DrugDosage.ExpDrugWrappings.Add(expDrugWrapping); } foreach (var expDrugWrapping in model.EXP_DrugDosage.EXP_DrugPrice) { model.EXP_DrugDosage.ExpDrugPrices.Add(expDrugWrapping); } for (var d = 0; d < model.EXP_DrugDosage.EXP_DrugSubstance.Count; d++) { model.EXP_DrugDosage.ExpDrugSubstances.Add(model.EXP_DrugDosage.EXP_DrugSubstance.ToList()[d]); if (model.EXP_DrugDosage.EXP_DrugSubstance.ToList()[d].ExpDrugSubstanceManufactures == null) { model.EXP_DrugDosage.EXP_DrugSubstance.ToList()[d].ExpDrugSubstanceManufactures = new List <EXP_DrugSubstanceManufacture>(); } foreach (var expDrugSubstanceManufacture in model.EXP_DrugDosage.EXP_DrugSubstance.ToList()[d].EXP_DrugSubstanceManufacture) { model.EXP_DrugDosage.EXP_DrugSubstance.ToList()[d].ExpDrugSubstanceManufactures.Add(expDrugSubstanceManufacture); } } /* foreach (var expDrugWrapping in model.EXP_DrugDosage.EXP_DrugSubstance) * { * model.EXP_DrugDosage.ExpDrugSubstances.Add(expDrugWrapping); * foreach (var expDrugSubstanceManufacture in expDrugWrapping.EXP_DrugSubstanceManufacture) * { * model.EXP_DrugDosage.ExpDrugSubstances.Add(expDrugWrapping); * } * }*/ if (model.EXP_DrugDosage.ExpDrugWrappings == null || model.EXP_DrugDosage.ExpDrugWrappings.Count == 0) { model.EXP_DrugDosage.ExpDrugWrappings = new List <EXP_DrugWrapping>(); } if (model.EXP_DrugDosage.ExpDrugSubstances == null || model.EXP_DrugDosage.ExpDrugSubstances.Count == 0) { model.EXP_DrugDosage.ExpDrugSubstances = new List <EXP_DrugSubstance> (); } if (model.EXP_DrugDosage.ExpDrugPrices == null) { model.EXP_DrugDosage.ExpDrugPrices = new List <EXP_DrugPrice>(); } ViewData["MeasureList" + model.EXP_DrugDosage.Id] = new SelectList(measures, "Id", "name", model.EXP_DrugDosage.DosageMeasureTypeId); ViewData["SaleTypeList" + model.EXP_DrugDosage.Id] = new SelectList(sales, "Id", "NameRu", model.EXP_DrugDosage.SaleTypeId); ViewData["BestBeforeMeasureTypeList" + model.EXP_DrugDosage.Id] = new SelectList(measures, "id", "short_name", model.EXP_DrugDosage.BestBeforeMeasureTypeDicId); ViewData["AppPeriodMixMeasureList" + model.EXP_DrugDosage.Id] = new SelectList(measures, "id", "short_name", model.EXP_DrugDosage.AppPeriodMixMeasureDicId); ViewData["AppPeriodOpenMeasureList" + model.EXP_DrugDosage.Id] = new SelectList(measures, "id", "short_name", model.EXP_DrugDosage.AppPeriodOpenMeasureDicId); for (var j = 0; j < model.EXP_DrugDosage.ExpDrugWrappings.Count; j++) { var wrap = model.EXP_DrugDosage.ExpDrugWrappings[j]; ViewData["WrappingTypes" + wrap.Id] = new SelectList(wrappingTypes, "Id", "NameRu", wrap.WrappingTypeId); ViewData["Boxes" + wrap.Id] = new SelectList(boxes, "Id", "name", wrap.WrappingKindId); ViewData["SizeMeasureList" + wrap.Id] = new SelectList(measures, "Id", "short_name", wrap.SizeMeasureId); ViewData["VolumeMeasureList" + wrap.Id] = new SelectList(measures, "Id", "short_name", wrap.VolumeMeasureId); } var origins = repository.GetOrigins().ToArray(); var plantKinds = repository.GetPlantKinds().ToArray(); var substanceTypes = externalRepository.GetSubstanceTypes().ToArray(); var countries = externalRepository.GetCounties().ToArray(); var booleans = repository.GetBooleanList(); for (var j = 0; j < model.EXP_DrugDosage.ExpDrugSubstances.Count; j++) { var ids = model.EXP_DrugDosage.ExpDrugSubstances[j].Id.ToString(); model.EXP_DrugDosage.ExpDrugSubstances[j].CategoryName = GetCategoryName(model.EXP_DrugDosage.ExpDrugSubstances[j].sr_substances); model.EXP_DrugDosage.ExpDrugSubstances[j].CategoryPos = model.EXP_DrugDosage.ExpDrugSubstances[j].sr_substances?.category_pos; ViewData["SubstanceTypes" + ids] = new SelectList(substanceTypes, "Id", "name", model.EXP_DrugDosage.ExpDrugSubstances[j].SubstanceTypeId); ViewData["Origins" + ids] = new SelectList(origins, "Id", "NameRu", model.EXP_DrugDosage.ExpDrugSubstances[j].OriginId); ViewData["PlantKinds" + ids] = new SelectList(plantKinds, "Id", "NameRu", model.EXP_DrugDosage.ExpDrugSubstances[j].PlantKindId); ViewData["SubstanceMeasureList" + ids] = new SelectList(measures, "Id", "short_name", model.EXP_DrugDosage.ExpDrugSubstances[j].MeasureId); ViewData["SubstanceCounties" + ids] = new SelectList(countries, "Id", "name", model.EXP_DrugDosage.ExpDrugSubstances[j].CountryId); ViewData["IsControlList" + ids] = new SelectList(booleans, "IsSign", "NameRu", model.EXP_DrugDosage.ExpDrugSubstances[j].IsControl); ViewData["NormDocs" + ids] = new SelectList(repository.GetExpDicNormDocFarms().ToArray(), "Id", "NameRu", model.EXP_DrugDosage.ExpDrugSubstances[j].NormDocFarmId); ViewData["IsPoisonList" + ids] = new SelectList(booleans, "IsSign", "NameRu", model.EXP_DrugDosage.ExpDrugSubstances[j].IsPoison); /* ViewData["SubstanceCounties" + ids] = new SelectList(countries, "Id", "name", * model.EXP_DrugDosage.ExpDrugSubstances[j].CountryId);*/ if (model.EXP_DrugDosage.ExpDrugSubstances[j].ExpDrugSubstanceManufactures != null) { for (var k = 0; k < model.EXP_DrugDosage.ExpDrugSubstances[j].ExpDrugSubstanceManufactures.Count; k++) { ViewData["SubstanceCounties" + model.EXP_DrugDosage.ExpDrugSubstances[j].ExpDrugSubstanceManufactures[k].Id.ToString()] = new SelectList(countries, "Id", "name", model.EXP_DrugDosage.ExpDrugSubstances[j].ExpDrugSubstanceManufactures[k].CountryId); } } } for (var j = 0; j < model.EXP_DrugDosage.ExpDrugPrices.Count; j++) { var price = model.EXP_DrugDosage.ExpDrugPrices[j]; model.EXP_DrugDosage.ExpDrugPrices[j].PrimaryText = drugDeclarationRepository.GetNameByWrappingNames(price.PrimaryValue); model.EXP_DrugDosage.ExpDrugPrices[j].SecondaryText = drugDeclarationRepository.GetNameByWrappingNames(price.SecondaryValue); model.EXP_DrugDosage.ExpDrugPrices[j].IntermediateText = drugDeclarationRepository.GetNameByWrappingNames(price.IntermediateValue); } }
/// <summary> /// Возвращать на предыдущий этап /// </summary> /// <param name="declarationId"></param> /// <param name="fromStageId"></param> /// <param name="nextStageIds"></param> /// <param name="resultDescription"></param> /// <returns></returns> public bool ToBackStage(Guid declarationId, Guid?fromStageId, int[] nextStageIds, out string resultDescription) { resultDescription = null; var stageStatusInRework = GetStageStatusByCode(EXP_DIC_StageStatus.InReWork); string[] activeStageCodes = { 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 == declarationId && activeStageCodes.Contains(e.EXP_DIC_StageStatus.Code)); if (currentStage != null) { currentStage.StatusId = GetStageStatusByCode(EXP_DIC_StageStatus.Completed).Id; currentStage.FactEndDate = DateTime.Now; } foreach (var nextStageId in nextStageIds) { if (!CanSendToStep(declarationId, fromStageId, nextStageId, out resultDescription)) { return(false); } var oldStage = AppContext.EXP_ExpertiseStage.FirstOrDefault(es => es.IsHistory == false && es.DeclarationId == declarationId && es.StageId == nextStageId); var dosageIds = AppContext.EXP_DrugDosage.Where(e => e.DrugDeclarationId == declarationId) .Select(e => e.Id) .ToList(); if (oldStage != null) { var newStage = new EXP_ExpertiseStage() { Id = Guid.NewGuid(), DeclarationId = declarationId, StageId = nextStageId, ParentStageId = oldStage?.Id, StatusId = stageStatusInRework.Id, OtdIds = oldStage.OtdIds }; newStage.Executors = oldStage.Executors; AppContext.EXP_ExpertiseStage.Add(newStage); oldStage.IsHistory = true; foreach (var dosageId in dosageIds) { var newDosageStage = new EXP_ExpertiseStageDosage() { Id = Guid.NewGuid(), DosageId = dosageId, EXP_ExpertiseStage = newStage }; newStage.EXP_ExpertiseStageDosage.Add(newDosageStage); switch (oldStage.EXP_DIC_Stage.Code) { case EXP_DIC_Stage.PharmacologicalExp: var oldpcolFinalDoc = AppContext.EXP_ExpertisePharmacologicalFinalDoc.FirstOrDefault( pc => pc.EXP_ExpertiseStageDosage.DosageId == dosageId && pc.EXP_ExpertiseStageDosage.StageId == oldStage.Id); if (oldpcolFinalDoc != null) { var newpcolFinalDoc = new EXP_ExpertisePharmacologicalFinalDoc(oldpcolFinalDoc); newpcolFinalDoc.DosageStageId = newDosageStage.Id; newpcolFinalDoc.EXP_ExpertiseStageDosage = newDosageStage; newDosageStage.EXP_ExpertisePharmacologicalFinalDoc.Add(newpcolFinalDoc); } break; case EXP_DIC_Stage.PharmaceuticalExp: var oldpceuFinalDoc = AppContext.EXP_ExpertisePharmaceuticalFinalDoc.FirstOrDefault( pc => pc.EXP_ExpertiseStageDosage.DosageId == dosageId && pc.EXP_ExpertiseStageDosage.StageId == oldStage.Id); if (oldpceuFinalDoc != null) { var newpceulFinalDoc = new EXP_ExpertisePharmaceuticalFinalDoc(oldpceuFinalDoc); newpceulFinalDoc.DosageStageId = newDosageStage.Id; newpceulFinalDoc.EXP_ExpertiseStageDosage = newDosageStage; newDosageStage.EXP_ExpertisePharmaceuticalFinalDoc.Add(newpceulFinalDoc); } break; } } AppContext.EXP_ExpertiseStage.Add(newStage); } } AppContext.SaveChanges(); return(true); }
private EXP_ExpertiseSafetyreportFinalDoc CreateExpertiseSafetyreportFinalDoc(EXP_ExpertiseStageDosage model) { EXP_DIC_Type type = null; bool termless = false; IEnumerable <EXP_ExpertiseStage> stages = new List <EXP_ExpertiseStage>(); if (model.EXP_DrugDosage?.EXP_DrugDeclaration != null) { type = model.EXP_DrugDosage?.EXP_DrugDeclaration.EXP_DIC_Type; // EXP_DIC_PrimaryKind termless = model.EXP_DrugDosage?.EXP_DrugDeclaration.EXP_DrugPrimaryKind.FirstOrDefault(dpk => dpk.PrimaryKindId == 7) == null; stages = model.EXP_DrugDosage?.EXP_DrugDeclaration.EXP_ExpertiseStage .Where(es => !es.IsHistory).ToList(); // && (es.EXP_DIC_StageStatus.Code == EXP_DIC_StageStatus.Completed|| es.EXP_DIC_StageStatus.Code == EXP_DIC_StageStatus.InWork) } // Первичная var expExpertiseStage = stages.FirstOrDefault(s => s.EXP_DIC_Stage.Code == CodeConstManager.STAGE_PRIMARY.ToString()); string primaryResult = string.Empty; if (expExpertiseStage?.EXP_DIC_StageResult != null) { primaryResult = GetStageText(expExpertiseStage, type); } // Фармацевтика expExpertiseStage = stages.FirstOrDefault(s => s.EXP_DIC_Stage.Code == CodeConstManager.STAGE_PHARMACEUTICAL.ToString()); string pharmaceuticalResult = string.Empty; if (expExpertiseStage?.EXP_DIC_StageResult != null) { pharmaceuticalResult = GetStageText(expExpertiseStage, type); } // Фармакология expExpertiseStage = stages.FirstOrDefault(s => s.EXP_DIC_Stage.Code == CodeConstManager.STAGE_PHARMACOLOGICAL.ToString()); string pharmacologicalResult = string.Empty; if (expExpertiseStage?.EXP_DIC_StageResult != null) { pharmacologicalResult = GetStageText(expExpertiseStage, type); } // Иследовательский центр expExpertiseStage = stages.FirstOrDefault(s => s.EXP_DIC_Stage.Code == CodeConstManager.STAGE_ANALITIC.ToString()); string analiticResult = string.Empty; if (expExpertiseStage?.EXP_DIC_StageResult != null) { analiticResult = GetStageText(expExpertiseStage, type); } // ЗОБ expExpertiseStage = stages.FirstOrDefault(s => s.EXP_DIC_Stage.Code == CodeConstManager.STAGE_SAFETYREPORT.ToString()); string conclusion = string.Empty; string conclusionKz = string.Empty; //if (expExpertiseStage?.EXP_DIC_StageResult != null) if (model?.EXP_DIC_StageResult != null && expExpertiseStage != null) { // этап expExpertiseStage.EXP_DIC_StageResult = model?.EXP_DIC_StageResult; conclusion = GetStageText(expExpertiseStage, type); conclusionKz = GetStageText(expExpertiseStage, type, termless, true); } return(new EXP_ExpertiseSafetyreportFinalDoc() { Id = Guid.NewGuid(), PrimaryConclusion = primaryResult, PrimaryConclusionKz = primaryResult, PharmaceuticalConclusion = pharmaceuticalResult, PharmaceuticalConclusionKz = pharmaceuticalResult, PharmacologicalConclusion = pharmacologicalResult, PharmacologicalConclusionKz = pharmacologicalResult, AnalyticalConclusion = analiticResult, AnalyticalConclusionKz = analiticResult, Conclusion = conclusion, ConclusionKz = conclusionKz, DosageStageId = model.Id }); }
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); }