예제 #1
0
        public PatientMedSuppData SavePatientMedSupps(PutPatientMedSuppDataRequest request)
        {
            try
            {
                PatientMedSuppData result = null;
                var repo = MedicationRepositoryFactory.GetMedicationRepository(request, RepositoryType.PatientMedSupp);

                if (request.PatientMedSuppData != null)
                {
                    if (request.Insert)
                    {
                        string id = (string)repo.Insert(request);
                        if (!string.IsNullOrEmpty(id))
                        {
                            result = (PatientMedSuppData)repo.FindByID(id);
                        }
                    }
                    else
                    {
                        bool status = (bool)repo.Update(request);
                        if (status)
                        {
                            result = (PatientMedSuppData)repo.FindByID(request.PatientMedSuppData.Id);
                        }
                    }
                }
                return(result);
            }
            catch (Exception ex) { throw ex; }
        }
예제 #2
0
        public PatientMedSuppData SavePatientMedSupp(PostPatientMedSuppRequest request)
        {
            try
            {
                PatientMedSuppData result = null;
                IRestClient        client = new JsonServiceClient();
                //[Route("/{Context}/{Version}/{ContractNumber}/PatientMedSupp/Save", "PUT")]
                var url = Common.Helper.BuildURL(string.Format("{0}/{1}/{2}/{3}/PatientMedSupp/Save",
                                                               DDMedicationUrl,
                                                               "NG",
                                                               request.Version,
                                                               request.ContractNumber), request.UserId);
                PatientMedSuppData            data = Mapper.Map <PatientMedSuppData>(request.PatientMedSupp);
                PutPatientMedSuppDataResponse dataDomainResponse = client.Put <PutPatientMedSuppDataResponse>(url, new PutPatientMedSuppDataRequest
                {
                    Context            = "NG",
                    ContractNumber     = request.ContractNumber,
                    UserId             = request.UserId,
                    Version            = request.Version,
                    PatientMedSuppData = data,
                    Insert             = request.Insert
                } as object);

                if (dataDomainResponse != null)
                {
                    result = dataDomainResponse.PatientMedSuppData;
                }
                return(result);
            }
            catch (Exception ex) { throw ex; }
        }
예제 #3
0
        public void SavePatientMedSupps_Test()
        {
            PutPatientMedSuppDataRequest request = new PutPatientMedSuppDataRequest
            {
                Context            = context,
                ContractNumber     = contractNumber,
                UserId             = userId,
                Version            = version,
                Insert             = true,
                PatientMedSuppData = new PatientMedSuppData {
                    CategoryId   = 1,
                    TypeId       = "545bdfa6d433232248966639",
                    DeleteFlag   = false,
                    Dosage       = "2",
                    EndDate      = DateTime.Now.AddDays(3),
                    StartDate    = DateTime.Now,
                    Form         = "TABLET",
                    Name         = "ASPIRIN",
                    Notes        = "This is a test note",
                    PatientId    = "54bdde96fe7a5b27384a9551",
                    PrescribedBy = "Dr. Louis",
                    Reason       = "This is a test reason",
                    Route        = "ORAL",
                    SystemName   = "Engage",
                    Strength     = "30 mg"
                }
            };
            PatientMedSuppData response = cm.SavePatientMedSupps(request);

            Assert.IsTrue(response.Id == "54bdde96fe7a5b27384aaad9");
        }
예제 #4
0
        public void SavePatientMedSupp_Test()
        {
            PatientMedSuppData pms = new PatientMedSuppData
            {
                CategoryId     = 1,
                DeleteFlag     = false,
                Dosage         = "One",
                EndDate        = DateTime.UtcNow,
                Form           = "tablet",
                FreqHowOftenId = "545be059d43323224896663a",
                FreqQuantity   = "Twice",
                FreqWhenId     = "545be126d433232248966643",
                Id             = "",
                Name           = "Exilir",
                //NDCs = ,
                Notes     = "This is my note",
                PatientId = "5325d9e9d6a4850adcbba4b1",
                //PharmClasses = ,
                PrescribedBy = "PCP",
                Reason       = "This is my reason",
                Route        = "Oral",
                //SigCode = ,
                SourceId = "544e9976d433231d9c0330ae",
                //StartDate = ,
                StatusId = 1,
                Strength = "90 mg",
                //SystemName = "Engage",
                TypeId = "545bdfa6d433232248966639",
            };


            PutPatientMedSuppDataRequest request = new PutPatientMedSuppDataRequest
            {
                Context            = context,
                ContractNumber     = contractNumber,
                PatientMedSuppData = pms,
                UserId             = userId,
                Version            = version
            };

            //[Route("/{Context}/{Version}/{ContractNumber}/PatientMedSupp/Update", "PUT")]
            PutPatientMedSuppDataResponse response = client.Put <PutPatientMedSuppDataResponse>(
                string.Format("{0}/{1}/{2}/{3}/PatientMedSupp/Update", url, context, version, contractNumber), request);

            Assert.IsNotNull(response);
        }
        public object FindByID(string entityID)
        {
            PatientMedSuppData data = null;

            try
            {
                using (MedicationMongoContext ctx = new MedicationMongoContext(ContractDBName))
                {
                    List <IMongoQuery> queries = new List <IMongoQuery>();
                    queries.Add(Query.EQ(MEPatientMedSupp.IdProperty, ObjectId.Parse(entityID)));
                    IMongoQuery      mQuery = Query.And(queries);
                    MEPatientMedSupp mePMS  = ctx.PatientMedSupps.Collection.Find(mQuery).FirstOrDefault();
                    if (mePMS != null)
                    {
                        data = AutoMapper.Mapper.Map <PatientMedSuppData>(mePMS);
                    }
                }
                return(data);
            }
            catch (Exception) { throw; }
        }
        public object FindByPatientId(object request)
        {
            List <PatientMedSuppData>     list        = null;
            GetPatientMedSuppsDataRequest dataRequest = (GetPatientMedSuppsDataRequest)request;

            try
            {
                using (MedicationMongoContext ctx = new MedicationMongoContext(ContractDBName))
                {
                    List <IMongoQuery> queries = new List <IMongoQuery>();
                    queries.Add(Query.EQ(MEPatientMedSupp.PatientIdProperty, ObjectId.Parse(dataRequest.PatientId)));
                    queries.Add(Query.EQ(MEPatientMedSupp.DeleteFlagProperty, false));
                    queries.Add(Query.EQ(MEPatientMedSupp.TTLDateProperty, BsonNull.Value));
                    if (dataRequest.StatusIds != null && dataRequest.StatusIds.Count > 0)
                    {
                        queries.Add(Query.In(MEPatientMedSupp.StatusProperty, new BsonArray(dataRequest.StatusIds)));
                    }
                    if (dataRequest.CategoryIds != null && dataRequest.CategoryIds.Count > 0)
                    {
                        queries.Add(Query.In(MEPatientMedSupp.CategoryProperty, new BsonArray(dataRequest.CategoryIds)));
                    }
                    IMongoQuery             mQuery = Query.And(queries);
                    List <MEPatientMedSupp> mePMSs = ctx.PatientMedSupps.Collection.Find(mQuery).ToList();
                    if (mePMSs != null && mePMSs.Count > 0)
                    {
                        list = new List <PatientMedSuppData>();
                        mePMSs.ForEach(p =>
                        {
                            PatientMedSuppData data = AutoMapper.Mapper.Map <PatientMedSuppData>(p);
                            list.Add(data);
                        });
                    }
                }
                return(list);
            }
            catch (Exception) { throw; }
        }
예제 #7
0
        public PatientMedSupp SavePatientMedSupp(PostPatientMedSuppRequest request)
        {
            PatientMedSupp patientMedSupp = null;

            try
            {
                if (request.PatientMedSupp != null)
                {
                    string name     = string.IsNullOrEmpty(request.PatientMedSupp.Name) ? string.Empty : request.PatientMedSupp.Name.ToUpper();
                    string form     = string.IsNullOrEmpty(request.PatientMedSupp.Form) ? string.Empty : request.PatientMedSupp.Form.ToUpper();
                    string route    = string.IsNullOrEmpty(request.PatientMedSupp.Route) ? string.Empty : request.PatientMedSupp.Route.ToUpper();
                    string strength = string.IsNullOrEmpty(request.PatientMedSupp.Strength) ? string.Empty : request.PatientMedSupp.Strength;

                    #region Search MedicationMap
                    // Search if any record exists with the given combination of name, strength, route and form.
                    GetMedicationMapsRequest mmRequest = new GetMedicationMapsRequest
                    {
                        Name           = name,
                        Route          = route,
                        Form           = form,
                        Strength       = strength,
                        ContractNumber = request.ContractNumber,
                        UserId         = request.UserId,
                        Version        = request.Version
                    };
                    List <MedicationMapData> list = EndpointUtil.SearchMedicationMap(mmRequest);
                    #endregion
                    if (list == null)
                    {
                        MedicationMapData medData = null;
                        if (string.IsNullOrEmpty(request.PatientMedSupp.FamilyId))
                        {
                            #region Insert MedicationMap
                            PostMedicationMapRequest insertReq = new PostMedicationMapRequest
                            {
                                MedicationMap = new DTO.MedicationMap
                                {
                                    FullName      = name,
                                    SubstanceName = string.Empty,
                                    Strength      = strength,
                                    Route         = route,
                                    Form          = form,
                                    Custom        = true,
                                    Verified      = false
                                },
                                ContractNumber = request.ContractNumber,
                                UserId         = request.UserId,
                                Version        = request.Version
                            };
                            medData = EndpointUtil.InsertMedicationMap(insertReq);
                            #endregion
                        }
                        else
                        {
                            #region Update MedicationMap
                            // This saves the initialized medicine map
                            PutMedicationMapRequest req = new PutMedicationMapRequest
                            {
                                MedicationMap = new DTO.MedicationMap
                                {
                                    Id            = request.PatientMedSupp.FamilyId,
                                    FullName      = name,
                                    SubstanceName = string.Empty,
                                    Strength      = strength,
                                    Route         = route,
                                    Form          = form,
                                    Custom        = true,
                                    Verified      = false
                                },
                                ContractNumber = request.ContractNumber,
                                UserId         = request.UserId,
                                Version        = request.Version
                            };
                            medData = EndpointUtil.UpdateMedicationMap(req);
                            #endregion
                        }
                        RegisterMedication(request, medData);
                    }
                    #region Calculate NDC codes.
                    bool calculateNDC = false;
                    if (request.Insert)
                    {
                        calculateNDC = true;
                        request.PatientMedSupp.SystemName = Constants.SystemName;
                    }
                    else
                    {
                        // On update, check for ReCalculateNDC flag.
                        if (request.RecalculateNDC)
                        {
                            calculateNDC = true;
                        }
                    }
                    if (calculateNDC)
                    {
                        request.PatientMedSupp.NDCs = EndpointUtil.GetMedicationNDCs(request);
                    }
                    #endregion

                    string sigCode = CalculateSigCode(request);
                    if (!string.IsNullOrEmpty(sigCode))
                    {
                        request.PatientMedSupp.SigCode = sigCode;
                    }
                    PatientMedSuppData data = EndpointUtil.SavePatientMedSupp(request);
                    if (data != null)
                    {
                        patientMedSupp = Mapper.Map <PatientMedSupp>(data);
                    }
                }
                return(patientMedSupp);
            }
            catch (Exception ex) { throw ex; }
        }
        public object Insert(object newEntity)
        {
            PutPatientMedSuppDataRequest request = (PutPatientMedSuppDataRequest)newEntity;
            PatientMedSuppData           data    = request.PatientMedSuppData;

            try
            {
                using (MedicationMongoContext ctx = new MedicationMongoContext(ContractDBName))
                {
                    MEPatientMedSupp mePMS = new MEPatientMedSupp(this.UserId)
                    {
                        PatientId = ObjectId.Parse(data.PatientId),
                        //FamilyId = string.IsNullOrEmpty(data.FamilyId) ? (ObjectId?)null : ObjectId.Parse(data.FamilyId),
                        Name               = string.IsNullOrEmpty(data.Name) ? null : data.Name.ToUpper(),
                        CategoryId         = (Category)data.CategoryId,
                        TypeId             = ObjectId.Parse(data.TypeId),
                        StatusId           = (Status)data.StatusId,
                        Dosage             = data.Dosage,
                        Strength           = data.Strength,
                        Route              = string.IsNullOrEmpty(data.Route) ? null : data.Route.ToUpper(),
                        Form               = string.IsNullOrEmpty(data.Form) ? null : data.Form.ToUpper(),
                        PharmClasses       = getPharmClassses(ctx, data.Name),
                        NDCs               = (data.NDCs != null && data.NDCs.Count > 0) ? data.NDCs : null,
                        FreqQuantity       = data.FreqQuantity,
                        FreqHowOftenId     = string.IsNullOrEmpty(data.FreqHowOftenId) ? (ObjectId?)null : ObjectId.Parse(data.FreqHowOftenId),
                        FreqWhenId         = string.IsNullOrEmpty(data.FreqWhenId) ? (ObjectId?)null : ObjectId.Parse(data.FreqWhenId),
                        FrequencyId        = string.IsNullOrEmpty(data.FrequencyId) ? (ObjectId?)null : ObjectId.Parse(data.FrequencyId),
                        SourceId           = ObjectId.Parse(data.SourceId),
                        StartDate          = data.StartDate == null ? (DateTime?)null : data.StartDate,
                        EndDate            = data.EndDate == null ? (DateTime?)null : data.EndDate,
                        Reason             = data.Reason,
                        Notes              = data.Notes,
                        SigCode            = data.SigCode,
                        PrescribedBy       = data.PrescribedBy,
                        SystemName         = data.SystemName,
                        DeleteFlag         = false,
                        DataSource         = data.DataSource,
                        ExternalRecordId   = data.ExternalRecordId,
                        OriginalDataSource = data.OriginalDataSource,
                        Duration           = data.Duration,
                        DurationUnitId     = string.IsNullOrEmpty(data.DurationUnitId) ? (ObjectId?)null : ObjectId.Parse(data.DurationUnitId),
                        OtherDuration      = data.OtherDuration,
                        ReviewId           = string.IsNullOrEmpty(data.ReviewId) ? (ObjectId?)null : ObjectId.Parse(data.ReviewId),
                        RefusalReasonId    = string.IsNullOrEmpty(data.RefusalReasonId) ? (ObjectId?)null : ObjectId.Parse(data.RefusalReasonId),
                        OtherRefusalReason = data.OtherRefusalReason,
                        OrderedBy          = data.OrderedBy,
                        OrderedDate        = data.OrderedDate,
                        PrescribedDate     = data.PrescribedDate,
                        RxNumber           = Helper.TrimAndLimit(data.RxNumber, 50),
                        RxDate             = data.RxDate,
                        Pharmacy           = Helper.TrimAndLimit(data.Pharmacy, 500)
                    };
                    ctx.PatientMedSupps.Collection.Insert(mePMS);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientMedSupp.ToString(),
                                             mePMS.Id.ToString(),
                                             DataAuditType.Insert,
                                             request.ContractNumber);
                    return(mePMS.Id.ToString());
                }
            }
            catch (Exception) { throw; }
        }
        public object Update(object entity)
        {
            bool result = false;
            PutPatientMedSuppDataRequest request = (PutPatientMedSuppDataRequest)entity;
            PatientMedSuppData           data    = request.PatientMedSuppData;

            try
            {
                using (MedicationMongoContext ctx = new MedicationMongoContext(ContractDBName))
                {
                    var q = MB.Query <MEPatientMedSupp> .EQ(b => b.Id, ObjectId.Parse(data.Id));

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientMedSupp.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientMedSupp.VersionProperty, request.Version));
                    uv.Add(MB.Update.Set(MEPatientMedSupp.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    if (data.PatientId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PatientIdProperty, ObjectId.Parse(data.PatientId)));
                    }
                    if (!string.IsNullOrEmpty(data.Name))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.NameProperty, data.Name.ToUpper()));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.NameProperty, BsonNull.Value));
                    }
                    //if (data.FamilyId != null)
                    //{
                    //    uv.Add(MB.Update.Set(MEPatientMedSupp.FamilyIdProperty, ObjectId.Parse(data.FamilyId)));
                    //}
                    //else
                    //{
                    //    uv.Add(MB.Update.Set(MEPatientMedSupp.FamilyIdProperty, BsonNull.Value));
                    //}
                    if (data.CategoryId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.CategoryProperty, data.CategoryId));
                    }
                    if (data.TypeId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.TypeIdProperty, ObjectId.Parse(data.TypeId)));
                    }
                    if (data.StatusId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.StatusProperty, data.StatusId));
                    }
                    if (!string.IsNullOrEmpty(data.Dosage))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DosageProperty, data.Dosage));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DosageProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.Strength))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.StrengthProperty, data.Strength));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.StrengthProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.Form))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FormProperty, data.Form.ToUpper()));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FormProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.Route))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RouteProperty, data.Route.ToUpper()));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RouteProperty, BsonNull.Value));
                    }
                    uv.Add(MB.Update.SetWrapped <List <string> >(MEPatientMedSupp.PharmClassProperty, (data.PharmClasses != null && data.PharmClasses.Count > 0) ? data.PharmClasses : null));
                    uv.Add(MB.Update.SetWrapped <List <string> >(MEPatientMedSupp.NDCProperty, (data.NDCs != null && data.NDCs.Count > 0) ? data.NDCs : null));
                    if (!string.IsNullOrEmpty(data.FreqQuantity))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqQuantityProperty, data.FreqQuantity));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqQuantityProperty, BsonNull.Value));
                    }
                    if (data.FreqHowOftenId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqHowOftenIdProperty, ObjectId.Parse(data.FreqHowOftenId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqHowOftenIdProperty, BsonNull.Value));
                    }
                    if (data.FreqWhenId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqWhenIdProperty, ObjectId.Parse(data.FreqWhenId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FreqWhenIdProperty, BsonNull.Value));
                    }
                    if (data.FrequencyId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FrequencyIdProperty, ObjectId.Parse(data.FrequencyId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.FrequencyIdProperty, BsonNull.Value));
                    }
                    if (data.SourceId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.SourceIdProperty, ObjectId.Parse(data.SourceId)));
                    }
                    if (data.StartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.StartDateProperty, data.StartDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.StartDateProperty, BsonNull.Value));
                    }
                    if (data.EndDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.EndDateProperty, data.EndDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.EndDateProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.Reason))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ReasonProperty, data.Reason));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ReasonProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.SigCode))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.SigProperty, data.SigCode));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.SigProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.Notes))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.NotesProperty, data.Notes));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.NotesProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(data.PrescribedBy))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PrescribedByProperty, data.PrescribedBy));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PrescribedByProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(data.DataSource))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DataSourceProperty, data.DataSource));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DataSourceProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(data.ExternalRecordId))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ExternalRecordIdProperty, data.ExternalRecordId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ExternalRecordIdProperty, BsonNull.Value));
                    }

                    if (string.IsNullOrEmpty(data.OriginalDataSource))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OriginalDataSourceProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OriginalDataSourceProperty, data.OriginalDataSource));
                    }
                    uv.Add(MB.Update.Set(MEPatientMedSupp.DurationProperty, data.Duration));
                    if (string.IsNullOrEmpty(data.DurationUnitId))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DurationUnitProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.DurationUnitProperty, ObjectId.Parse(data.DurationUnitId)));
                    }
                    if (string.IsNullOrEmpty(data.OtherDuration))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OtherDurationProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OtherDurationProperty, data.OtherDuration));
                    }
                    if (string.IsNullOrEmpty(data.ReviewId))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ReviewProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.ReviewProperty, ObjectId.Parse(data.ReviewId)));
                    }
                    if (string.IsNullOrEmpty(data.RefusalReasonId))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RefusalReasonProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RefusalReasonProperty, ObjectId.Parse(data.RefusalReasonId)));
                    }
                    if (string.IsNullOrEmpty(data.OtherRefusalReason))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OtherRefusalReasonProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OtherRefusalReasonProperty, data.OtherRefusalReason));
                    }
                    if (string.IsNullOrEmpty(data.OrderedBy))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OrderedByProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OrderedByProperty, data.OrderedBy));
                    }
                    if (data.OrderedDate == null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OrderedDateProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.OrderedDateProperty, data.OrderedDate));
                    }
                    if (data.PrescribedDate == null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PrescribedDateProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PrescribedDateProperty, data.PrescribedDate));
                    }
                    if (data.RxDate == null)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RxDateProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RxDateProperty, data.RxDate));
                    }
                    if (string.IsNullOrEmpty(data.Pharmacy))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PharmacyProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.PharmacyProperty, Helper.TrimAndLimit(data.Pharmacy, 500)));
                    }
                    if (string.IsNullOrEmpty(data.RxNumber))
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RxNumberProperty, BsonNull.Value));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.RxNumberProperty, Helper.TrimAndLimit(data.RxNumber, 50)));
                    }
                    uv.Add(MB.Update.Set(MEPatientMedSupp.SystemProperty, data.SystemName));
                    uv.Add(MB.Update.Set(MEPatientMedSupp.DeleteFlagProperty, data.DeleteFlag));
                    DataAuditType type;
                    if (data.DeleteFlag)
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.TTLDateProperty, System.DateTime.UtcNow.AddDays(_expireDays)));
                        type = DataAuditType.Delete;
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientMedSupp.TTLDateProperty, BsonNull.Value));
                        type = DataAuditType.Update;
                    }
                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientMedSupps.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientMedSupp.ToString(),
                                             data.Id,
                                             type,
                                             request.ContractNumber);

                    result = true;
                }
                return(result as object);
            }
            catch (Exception) { throw; }
        }