public async Task <Result <EnrollClientResponse> > Handle(EnrollClientCommand request, CancellationToken cancellationToken)
        {
            try
            {
                RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork);
                var patientIdentifier = await registerPersonService.EnrollPatient(request.ClientEnrollment.EnrollmentNo,
                                                                                  request.ClientEnrollment.PatientId, request.ClientEnrollment.ServiceAreaId,
                                                                                  request.ClientEnrollment.CreatedBy, request.ClientEnrollment.DateOfEnrollment);

                GetPatientDetails patientDetails = new GetPatientDetails(_unitOfWork);


                var patientLookup = await patientDetails.GetPatientByPatientId(request.ClientEnrollment.PatientId);

                if (patientLookup.Count > 0 && patientLookup[0].ptn_pk == null)
                {
                    var dobPrecision = "EXACT";
                    var dob          = DateTime.Now;
                    if (patientLookup[0].DobPrecision.HasValue)
                    {
                        dobPrecision = patientLookup[0].DobPrecision.Value ? "ESTIMATED" : "EXACT";
                    }

                    if (patientLookup[0].DateOfBirth.HasValue)
                    {
                        dob = patientLookup[0].DateOfBirth.Value;
                    }


                    var response = await registerPersonService.InsertIntoBlueCard(
                        patientLookup[0].FirstName,
                        patientLookup[0].LastName,
                        patientLookup[0].MidName,
                        request.ClientEnrollment.DateOfEnrollment,
                        patientLookup[0].MaritalStatusName,
                        patientLookup[0].PhysicalAddress,
                        patientLookup[0].MobileNumber,
                        patientLookup[0].Gender,
                        dobPrecision,
                        dob,
                        request.ClientEnrollment.CreatedBy,
                        request.ClientEnrollment.PosId
                        );

                    if (response.Count > 0)
                    {
                        await registerPersonService.UpdatePatient(request.ClientEnrollment.PatientId,
                                                                  request.ClientEnrollment.DateOfEnrollment, request.ClientEnrollment.PosId);
                    }
                }


                return(Result <EnrollClientResponse> .Valid(new EnrollClientResponse()
                {
                    IdentifierId = patientIdentifier.Id,
                    IdentifierValue = request.ClientEnrollment.EnrollmentNo
                }));
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
                return(Result <EnrollClientResponse> .Invalid(e.Message));
            }

            //using (var trans = _unitOfWork.Context.Database.BeginTransaction())
            //{
            //    try
            //    {
            //        var previouslyIdentifiers = await _unitOfWork.Repository<PatientIdentifier>().Get(y =>
            //                y.IdentifierValue == request.ClientEnrollment.EnrollmentNo && y.IdentifierTypeId == 8)
            //            .ToListAsync();

            //        if (previouslyIdentifiers.Count > 0)
            //        {
            //            var exception = new Exception("No: " + request.ClientEnrollment.EnrollmentNo + " already exists");
            //            throw exception;
            //        }

            //        var enrollmentVisitType = await _unitOfWork.Repository<LookupItemView>().Get(x => x.MasterName == "VisitType" && x.ItemName == "Enrollment").FirstOrDefaultAsync();
            //        int? visitType = enrollmentVisitType != null ? enrollmentVisitType.ItemId : 0;
            //        var patientMasterVisit = new PatientMasterVisit()
            //        {
            //            PatientId = request.ClientEnrollment.PatientId,
            //            ServiceId = request.ClientEnrollment.ServiceAreaId,
            //            Start = DateTime.Now,
            //            End = null,
            //            Active = false,
            //            VisitDate = DateTime.Now,
            //            VisitType = visitType,
            //            Status = 1,
            //            CreateDate = DateTime.Now,
            //            DeleteFlag = false,
            //            CreatedBy = request.ClientEnrollment.CreatedBy
            //        };

            //        await _unitOfWork.Repository<PatientMasterVisit>().AddAsync(patientMasterVisit);
            //        await _unitOfWork.SaveAsync();

            //        var patientEnrollment = new PatientEnrollment()
            //        {
            //            PatientId = request.ClientEnrollment.PatientId,
            //            ServiceAreaId = request.ClientEnrollment.ServiceAreaId,
            //            EnrollmentDate = request.ClientEnrollment.DateOfEnrollment,
            //            EnrollmentStatusId = 0,
            //            TransferIn = false,
            //            CareEnded = false,
            //            DeleteFlag = false,
            //            CreatedBy = request.ClientEnrollment.CreatedBy,
            //            CreateDate = DateTime.Now

            //        };

            //        await _unitOfWork.Repository<PatientEnrollment>().AddAsync(patientEnrollment);
            //        await _unitOfWork.SaveAsync();

            //        var patientIdentifier = new PatientIdentifier()
            //        {
            //            PatientId = request.ClientEnrollment.PatientId,
            //            PatientEnrollmentId = patientEnrollment.Id,
            //            IdentifierTypeId = 8,
            //            IdentifierValue = request.ClientEnrollment.EnrollmentNo,
            //            DeleteFlag = false,
            //            CreatedBy = request.ClientEnrollment.CreatedBy,
            //            CreateDate = DateTime.Now,
            //            Active = true

            //        };

            //        await _unitOfWork.Repository<PatientIdentifier>().AddAsync(patientIdentifier);
            //        await _unitOfWork.SaveAsync();

            //        GetPatientDetails patientDetails = new GetPatientDetails(_unitOfWork);
            //        LookupLogic lookupLogic = new LookupLogic(_unitOfWork);

            //        var patientLookup = await patientDetails.GetPatientByPatientId(request.ClientEnrollment.PatientId);

            //        if (patientLookup.Count > 0)
            //        {
            //            Facility facility = await _unitOfWork.Repository<Facility>().Get(x => x.DeleteFlag == 0).FirstOrDefaultAsync();
            //            var referralId = await lookupLogic.GetDecodeIdByName("VCT", 17);
            //            var maritalStatusId = await lookupLogic.GetDecodeIdByName(patientLookup[0].MaritalStatusName, 17);
            //            var address = patientLookup[0].PhysicalAddress == null ? " " : patientLookup[0].PhysicalAddress;
            //            var phone = patientLookup[0].MobileNumber == null ? " " : patientLookup[0].MobileNumber;
            //            var dobPrecision = patientLookup[0].DobPrecision ? 1 : 0;

            //            var gender = 0;
            //            if (patientLookup[0].Gender == "Male")
            //            {
            //                gender = 16;
            //            }
            //            else if (patientLookup[0].Gender == "Female")
            //            {
            //                gender = 17;
            //            }

            //            StringBuilder sql = new StringBuilder();
            //            sql.Append("exec pr_OpenDecryptedSession;");
            //            sql.Append("Insert Into mst_Patient(FirstName, LastName, MiddleName, LocationID, PatientEnrollmentID, ReferredFrom, RegistrationDate, Sex, DOB, DobPrecision, MaritalStatus, Address, Phone, UserID, PosId, Status, DeleteFlag, CreateDate,MovedToPatientTable)");
            //            sql.Append("Values(");
            //            sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].FirstName}'),");
            //            sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].LastName}'),");
            //            sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].MidName}'),");
            //            sql.Append($"'{facility.FacilityID}',");
            //            sql.Append("' ',");
            //            sql.Append($"'{referralId}',");
            //            sql.Append($"'{request.ClientEnrollment.DateOfEnrollment.ToString("yyyy-MM-dd")}',");
            //            sql.Append($"'{gender}',");
            //            sql.Append($"'{patientLookup[0].DateOfBirth.ToString("yyyy-MM-dd")}',");
            //            sql.Append($"'{dobPrecision}',");
            //            sql.Append($"'{maritalStatusId}',");
            //            sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{address}'),");
            //            sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{phone}'),");
            //            sql.Append($"'{request.ClientEnrollment.CreatedBy}',");
            //            sql.Append($"'{facility.PosID}',");
            //            sql.Append("0,");
            //            sql.Append("0,");
            //            sql.Append($"'{request.ClientEnrollment.DateOfEnrollment.ToString("yyyy-MM-dd")}',");
            //            sql.Append("1");
            //            sql.Append(");");

            //            sql.Append("SELECT Ptn_Pk, CAST(DECRYPTBYKEY([FirstName]) AS VARCHAR(50)) AS FirstName, CAST(DECRYPTBYKEY([LastName]) AS VARCHAR(50)) AS LastName, LocationID FROM [dbo].[mst_Patient] WHERE [Ptn_Pk] = SCOPE_IDENTITY();");
            //            sql.Append("exec [dbo].[pr_CloseDecryptedSession];");

            //            var result = await _unitOfWork.Repository<MstPatient>().FromSql(sql.ToString());

            //            StringBuilder sqlBuilder = new StringBuilder();
            //            sqlBuilder.Append("Insert Into Lnk_PatientProgramStart(Ptn_pk, ModuleId, StartDate, UserID, CreateDate)");
            //            sqlBuilder.Append("Values(");
            //            sqlBuilder.Append($"'{result[0].Ptn_Pk}',");
            //            sqlBuilder.Append("283,");
            //            sqlBuilder.Append($"'{request.ClientEnrollment.DateOfEnrollment.ToString("yyyy-MM-dd")}',");
            //            sqlBuilder.Append($"'{request.ClientEnrollment.CreatedBy}',");
            //            sqlBuilder.Append($"'{request.ClientEnrollment.DateOfEnrollment.ToString("yyyy-MM-dd")}'");
            //            sqlBuilder.Append(");");

            //            var insertResult = await _unitOfWork.Context.Database.ExecuteSqlCommandAsync(sqlBuilder.ToString());

            //            StringBuilder sqlPatient = new StringBuilder();
            //            sqlPatient.Append($"UPDATE Patient SET ptn_pk = '{result[0].Ptn_Pk}' WHERE Id = '{request.ClientEnrollment.PatientId}';");
            //            var updateResult = await _unitOfWork.Context.Database.ExecuteSqlCommandAsync(sqlPatient.ToString());
            //        }

            //        trans.Commit();

            //        _unitOfWork.Dispose();

            //        return Result<EnrollClientResponse>.Valid(new EnrollClientResponse
            //        {
            //            IdentifierValue = request.ClientEnrollment.EnrollmentNo,
            //            IdentifierId = patientIdentifier.Id
            //        });
            //    }
            //    catch (Exception ex)
            //    {
            //        trans.Rollback();
            //        return Result<EnrollClientResponse>.Invalid(ex.Message);
            //    }
            //}
        }
        public async Task <Result <EnrollClientResponse> > Handle(EnrollClientCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var transferIn = false;
                if (request.ClientEnrollment.transferIn)
                {
                    transferIn = true;
                }

                RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork);
                await registerPersonService.DynamicEnrollment(request.ClientEnrollment.PatientId,
                                                              request.ClientEnrollment.ServiceAreaId, request.ClientEnrollment.CreatedBy,
                                                              request.ClientEnrollment.DateOfEnrollment, request.ClientEnrollment.ServiceIdentifiersList, transferIn);

                /*var patientIdentifier = await registerPersonService.EnrollPatient(request.ClientEnrollment.EnrollmentNo,
                 *  request.ClientEnrollment.PatientId, request.ClientEnrollment.ServiceAreaId,
                 *  request.ClientEnrollment.CreatedBy, request.ClientEnrollment.DateOfEnrollment);*/

                string cccNumber = String.Empty;
                int    moduleId  = 283;
                foreach (var item in request.ClientEnrollment.ServiceIdentifiersList)
                {
                    if (item.IdentifierId == 1)
                    {
                        cccNumber = item.IdentifierValue;
                        moduleId  = 203;
                    }
                }

                GetPatientDetails patientDetails = new GetPatientDetails(_unitOfWork);


                var patientLookup = await patientDetails.GetPatientByPatientId(request.ClientEnrollment.PatientId);

                if (patientLookup.Count > 0 && (patientLookup[0].ptn_pk == 0 || patientLookup[0].ptn_pk == null))
                {
                    var dobPrecision = "EXACT";
                    var dob          = DateTime.Now;
                    if (patientLookup[0].DobPrecision.HasValue)
                    {
                        dobPrecision = patientLookup[0].DobPrecision.Value ? "ESTIMATED" : "EXACT";
                    }

                    if (patientLookup[0].DateOfBirth.HasValue)
                    {
                        dob = patientLookup[0].DateOfBirth.Value;
                    }


                    var response = await registerPersonService.InsertIntoBlueCard(
                        patientLookup[0].FirstName,
                        patientLookup[0].LastName,
                        patientLookup[0].MidName,
                        request.ClientEnrollment.DateOfEnrollment,
                        cccNumber,
                        moduleId,
                        patientLookup[0].MaritalStatusName,
                        patientLookup[0].PhysicalAddress,
                        patientLookup[0].MobileNumber,
                        patientLookup[0].Gender,
                        dobPrecision,
                        dob,
                        request.ClientEnrollment.CreatedBy,
                        request.ClientEnrollment.PosId
                        );

                    if (response.Count > 0)
                    {
                        await registerPersonService.UpdatePatient(request.ClientEnrollment.PatientId,
                                                                  request.ClientEnrollment.DateOfEnrollment, request.ClientEnrollment.PosId);
                    }
                }
                else
                {
                    if (moduleId == 203)
                    {
                        await registerPersonService.UpdateBlueCard(patientLookup[0].ptn_pk, cccNumber, moduleId);
                    }
                }


                return(Result <EnrollClientResponse> .Valid(new EnrollClientResponse()
                {
                    Message = "Success"
                }));
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
                return(Result <EnrollClientResponse> .Invalid(e.Message));
            }
        }