public async Task <Result <OtzActivityFormResponse> > Handle(OtzActivityFormCommand request, CancellationToken cancellationToken) { using (_unitOfWork) { try { int patientMasterVisitId = 0; var visit = await _unitOfWork.Repository <Core.Models.PatientMasterVisit>().Get(x => x.VisitDate == request.VisitDate).ToListAsync(); if (visit.Count == 0) { var patientMasterVisit = new Core.Models.PatientMasterVisit() { PatientId = request.PatientId, ServiceId = request.ServiceId, Start = request.VisitDate, DeleteFlag = false, CreatedBy = request.UserId, CreateDate = DateTime.Now, Active = true, End = request.VisitDate, Status = null, VisitBy = null, VisitDate = request.VisitDate, VisitScheduled = null, VisitType = null }; await _unitOfWork.Repository <Core.Models.PatientMasterVisit>().AddAsync(patientMasterVisit); await _unitOfWork.SaveAsync(); patientMasterVisitId = patientMasterVisit.Id; } else { patientMasterVisitId = visit[0].Id; } var activityFormId = 0; var otzActivities = await _unitOfWork.Repository <OtzActivityForm>().Get(x => x.PatientMasterVisitId == patientMasterVisitId).ToListAsync(); if (otzActivities.Count == 0) { var otzActivityForm = new OtzActivityForm() { AttendedSupportGroup = request.AttendedSupportGroup, DeleteFlag = false, PatientMasterVisitId = patientMasterVisitId, Remarks = request.Remarks, UserId = request.UserId }; await _unitOfWork.Repository <OtzActivityForm>().AddAsync(otzActivityForm); await _unitOfWork.SaveAsync(); activityFormId = otzActivityForm.Id; } else { otzActivities[0].AttendedSupportGroup = request.AttendedSupportGroup; otzActivities[0].Remarks = request.Remarks; otzActivities[0].UserId = request.UserId; _unitOfWork.Repository <OtzActivityForm>().Update(otzActivities[0]); await _unitOfWork.SaveAsync(); activityFormId = otzActivities[0].Id; } if (request.OtzActivity.Any()) { List <OtzActivityTopics> otzActivityTopics = new List <OtzActivityTopics>(); request.OtzActivity.ForEach(x => otzActivityTopics.Add(new OtzActivityTopics { ActivityFormId = activityFormId, DateCompleted = x.DateCompleted, TopicId = x.TopicId })); await _unitOfWork.Repository <OtzActivityTopics>().AddRangeAsync(otzActivityTopics); await _unitOfWork.SaveAsync(); } return(Result <OtzActivityFormResponse> .Valid(new OtzActivityFormResponse() { Message = $"Successfully added new otz activity forms" })); } catch (Exception ex) { Log.Error(ex, "An error occured while trying to add new otz activity form"); return(Result <OtzActivityFormResponse> .Invalid(ex.Message)); } } }
public async Task <Result <AddEncounterVisitResponse> > Handle(AddEncounterVisitCommand request, CancellationToken cancellationToken) { using (var trans = _unitOfWork.Context.Database.BeginTransaction()) { try { var masterVisits = await _unitOfWork.Repository <Core.Models.PatientMasterVisit>() .Get(x => x.PatientId == request.PatientId && x.VisitDate == request.EncounterDate && x.ServiceId == request.ServiceAreaId) .ToListAsync(); if (masterVisits.Count > 0) { var patientEncounters = await _unitOfWork.Repository <PatientEncounter>() .Get(x => x.PatientMasterVisitId == masterVisits[0].Id && x.EncounterTypeId == request.EncounterType).ToListAsync(); if (patientEncounters.Count > 0) { return(Result <AddEncounterVisitResponse> .Valid(new AddEncounterVisitResponse { PatientMasterVisitId = masterVisits[0].Id, PatientEncounterId = patientEncounters[0].Id })); } else { PatientEncounter patientEncount = new PatientEncounter() { PatientId = request.PatientId, EncounterTypeId = request.EncounterType, Status = 0, PatientMasterVisitId = masterVisits[0].Id, EncounterStartTime = request.EncounterDate, EncounterEndTime = request.EncounterDate, ServiceAreaId = request.ServiceAreaId, CreatedBy = request.UserId, CreateDate = DateTime.Now }; await _unitOfWork.Repository <PatientEncounter>().AddAsync(patientEncount); await _unitOfWork.SaveAsync(); trans.Commit(); return(Result <AddEncounterVisitResponse> .Valid(new AddEncounterVisitResponse { PatientMasterVisitId = masterVisits[0].Id, PatientEncounterId = patientEncount.Id })); } } Core.Models.PatientMasterVisit patientMasterVisit = new Core.Models.PatientMasterVisit() { PatientId = request.PatientId, ServiceId = request.ServiceAreaId, Start = request.EncounterDate, Active = true, CreateDate = DateTime.Now, DeleteFlag = false, VisitDate = request.EncounterDate, CreatedBy = request.UserId, VisitType = 0 }; await _unitOfWork.Repository <Core.Models.PatientMasterVisit>().AddAsync(patientMasterVisit); await _unitOfWork.SaveAsync(); PatientEncounter patientEncounter = new PatientEncounter() { PatientId = request.PatientId, EncounterTypeId = request.EncounterType, Status = 0, PatientMasterVisitId = patientMasterVisit.Id, EncounterStartTime = request.EncounterDate, EncounterEndTime = request.EncounterDate, ServiceAreaId = request.ServiceAreaId, CreatedBy = request.UserId, CreateDate = DateTime.Now }; await _unitOfWork.Repository <PatientEncounter>().AddAsync(patientEncounter); await _unitOfWork.SaveAsync(); trans.Commit(); //_unitOfWork.Dispose(); return(Result <AddEncounterVisitResponse> .Valid(new AddEncounterVisitResponse { PatientMasterVisitId = patientMasterVisit.Id, PatientEncounterId = patientEncounter.Id })); } catch (Exception ex) { Log.Error($"Error saving Encounter Visit for PatientId: {request.PatientId} ", ex.Message); trans.Rollback(); return(Result <AddEncounterVisitResponse> .Invalid(ex.Message)); } } }