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));
                }
            }
        }
Exemplo n.º 2
0
        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));
                }
            }
        }