Пример #1
0
        public object Insert(object newEntity)
        {
            var    data   = newEntity as PatientUtilizationData;
            string noteId = string.Empty;

            try
            {
                if (data != null)
                {
                    var meN = new MEPatientUtilization(this.UserId)
                    {
                        DeleteFlag                                   = false,
                        OtherDisposition                             = Trim(data.OtherDisposition, 100),
                        OtherLocation                                = Trim(data.OtherLocation, 100),
                        OtherType                                    = Trim(data.OtherType, 100),
                        ProgramIds                                   = data.ProgramIds != null?data.ProgramIds.ConvertAll(ObjectId.Parse) : null,
                                                          DataSource = data.DataSource = Helper.TrimAndLimit(data.DataSource, 50),
                                                          Reason     = data.Reason = Helper.TrimAndLimit(data.Reason, 5000),
                                                          Version    = 1,
                                                          Admitted   = data.Admitted
                    };

                    if (data.AdmitDate != null && !data.AdmitDate.Equals(new DateTime()))
                    {
                        meN.AdmitDate = data.AdmitDate = data.AdmitDate.GetValueOrDefault().ToUniversalTime();
                    }
                    else
                    {
                        data.AdmitDate = null;
                    }

                    if (data.DischargeDate != null && !data.DischargeDate.Equals(new DateTime()))
                    {
                        meN.DischargeDate = data.DischargeDate = data.DischargeDate.GetValueOrDefault().ToUniversalTime();
                    }
                    else
                    {
                        data.DischargeDate = null;
                    }

                    if (!string.IsNullOrEmpty(data.DispositionId))
                    {
                        meN.Disposition = ObjectId.Parse(data.DispositionId);
                    }
                    if (!string.IsNullOrEmpty(data.LocationId))
                    {
                        meN.Location = ObjectId.Parse(data.LocationId);
                    }
                    if (!string.IsNullOrEmpty(data.SourceId))
                    {
                        meN.SourceId = ObjectId.Parse(data.SourceId);
                    }
                    if (!string.IsNullOrEmpty(data.VisitTypeId))
                    {
                        meN.VisitType = ObjectId.Parse(data.VisitTypeId);
                    }
                    if (!string.IsNullOrEmpty(data.PatientId))
                    {
                        meN.PatientId = ObjectId.Parse(data.PatientId);
                    }
                    if (!string.IsNullOrEmpty(data.TypeId))
                    {
                        meN.NoteType = ObjectId.Parse(data.TypeId);
                    }

                    using (Context)
                    {
                        Context.PatientUtilizations.Collection.Insert(meN);

                        AuditHelper.LogDataAudit(this.UserId,
                                                 MongoCollectionName.PatientUtilization.ToString(),
                                                 meN.Id.ToString(),
                                                 DataAuditType.Insert,
                                                 ContractDBName);

                        noteId = meN.Id.ToString();
                    }


                    data.CreatedById = meN.RecordCreatedBy.ToString();
                    data.CreatedOn   = meN.RecordCreatedOn;
                    data.Id          = meN.Id.ToString();
                }

                return(data);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #2
0
        public object Update(object entity)
        {
            bool result = false;
            PutPatientAllergyDataRequest pa = (PutPatientAllergyDataRequest)entity;
            PatientAllergyData           pt = pa.PatientAllergyData;

            try
            {
                using (AllergyMongoContext ctx = new AllergyMongoContext(ContractDBName))
                {
                    var q = MB.Query <MEPatientAllergy> .EQ(b => b.Id, ObjectId.Parse(pt.Id));

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientAllergy.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientAllergy.VersionProperty, pa.Version));
                    uv.Add(MB.Update.Set(MEPatientAllergy.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    if (pt.PatientId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.PatientIdProperty, ObjectId.Parse(pt.PatientId)));
                    }
                    if (pt.AllergyId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.AllergyIdProperty, ObjectId.Parse(pt.AllergyId)));
                    }
                    if (pt.SeverityId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.SeverityIdProperty, ObjectId.Parse(pt.SeverityId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.SeverityIdProperty, BsonNull.Value));
                    }
                    if (pt.ReactionIds != null && pt.ReactionIds.Count > 0)
                    {
                        uv.Add(MB.Update.SetWrapped <List <ObjectId> >(MEPatientAllergy.ReactionIdsProperty, Helper.ConvertToObjectIdList(pt.ReactionIds)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.ReactionIdsProperty, BsonNull.Value));
                    }
                    if (pt.StartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.StartDateProperty, pt.StartDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.StartDateProperty, BsonNull.Value));
                    }
                    if (pt.EndDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.EndDateProperty, pt.EndDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.EndDateProperty, BsonNull.Value));
                    }
                    if (pt.StatusId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.StatusProperty, pt.StatusId));
                    }
                    if (pt.SourceId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.SourceIdProperty, ObjectId.Parse(pt.SourceId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.SourceIdProperty, BsonNull.Value));
                    }

                    if (pt.DataSource != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.DataSourceProperty, pt.DataSource));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.DataSourceProperty, BsonNull.Value));
                    }

                    if (pt.ExternalRecordId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.ExternalRecordIdProperty, pt.ExternalRecordId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.ExternalRecordIdProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(pt.CodingSystemId))
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.CodingSystemProperty, ObjectId.Parse(pt.CodingSystemId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.CodingSystemProperty, BsonNull.Value));
                    }
                    if (!string.IsNullOrEmpty(pt.Code))
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.CodeProperty, pt.Code));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.CodeProperty, BsonNull.Value));
                    }
                    if (pt.Notes != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.NotesProperty, pt.Notes));
                    }
                    if (pt.SystemName != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.SystemProperty, pt.SystemName));
                    }
                    uv.Add(MB.Update.Set(MEPatientAllergy.DeleteFlagProperty, pt.DeleteFlag));
                    DataAuditType type;
                    if (pt.DeleteFlag)
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.TTLDateProperty, System.DateTime.UtcNow.AddDays(_expireDays)));
                        type = DataAuditType.Delete;
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientAllergy.TTLDateProperty, BsonNull.Value));
                        type = DataAuditType.Update;
                    }
                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientAllergies.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientAllergy.ToString(),
                                             pt.Id,
                                             type,
                                             pa.ContractNumber);

                    result = true;
                }
                return(result as object);
            }
            catch (Exception) { throw; }
        }
Пример #3
0
        public object Update(object entity)
        {
            PatientUtilizationData pn = entity as PatientUtilizationData;

            try
            {
                PatientUtilizationData result;
                using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                {
                    var q = MB.Query <MEPatientUtilization> .EQ(b => b.Id, ObjectId.Parse(pn.Id));

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientUtilization.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientUtilization.LastUpdatedOnProperty, DateTime.UtcNow));

                    uv.Add(MB.Update.Set(MEPatientUtilization.AdmittedProperty, pn.Admitted));
                    if (pn.OtherType != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherTypeProperty, Trim(pn.OtherType, 100)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherTypeProperty, BsonNull.Value));
                    }

                    if (pn.OtherLocation != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherLocationProperty, Trim(pn.OtherLocation, 100)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherLocationProperty, BsonNull.Value));
                    }

                    if (pn.Reason != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.ReasonProperty, Trim(pn.Reason, 5000)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.ReasonProperty, BsonNull.Value));
                    }

                    if (pn.OtherDisposition != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherDispositionProperty, Trim(pn.OtherDisposition, 100)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.OtherDispositionProperty, BsonNull.Value));
                    }

                    if (pn.DataSource != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DataSourceProperty, Trim(pn.DataSource, 50)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DataSourceProperty, BsonNull.Value));
                    }

                    if (pn.AdmitDate != null && !pn.AdmitDate.Equals(new DateTime()))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.AdmitDateProperty, pn.AdmitDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.AdmitDateProperty, BsonNull.Value));
                    }

                    if (pn.DischargeDate != null && !pn.DischargeDate.Equals(new DateTime()))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DischargeDateProperty, pn.DischargeDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DischargeDateProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.PatientId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.PatientIdProperty, ObjectId.Parse(pn.PatientId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.PatientIdProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.VisitTypeId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.VisitTypeProperty, ObjectId.Parse(pn.VisitTypeId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.VisitTypeProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.LocationId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.LocationProperty, ObjectId.Parse(pn.LocationId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.LocationProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.DispositionId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DispositionProperty, ObjectId.Parse(pn.DispositionId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.DispositionProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.SourceId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.SourceIdProperty, ObjectId.Parse(pn.SourceId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.SourceIdProperty, BsonNull.Value));
                    }

                    if (!string.IsNullOrEmpty(pn.TypeId))
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.NoteTypeProperty, ObjectId.Parse(pn.TypeId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.NoteTypeProperty, BsonNull.Value));
                    }

                    if (pn.ProgramIds != null && pn.ProgramIds.Count > 0)
                    {
                        uv.Add(MB.Update.SetWrapped <List <ObjectId> >(MEPatientUtilization.ProgramsProperty,
                                                                       Helper.ConvertToObjectIdList(pn.ProgramIds)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientUtilization.ProgramsProperty, BsonNull.Value));
                    }


                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientUtilizations.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientUtilization.ToString(),
                                             pn.Id,
                                             DataAuditType.Update,
                                             ContractDBName);

                    result = FindByID(pn.Id) as PatientUtilizationData;
                }
                return(result as object);
            }
            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; }
        }
        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; }
        }
Пример #6
0
        /// <summary>
        /// Orchestrates common block reading procedures for the <see cref="ReadBlock"/> and
        /// <see cref="ReadBlockStreamed"/> methods.
        /// </summary>
        protected virtual T OrchestrateBlockReading <T>(TTransfer transfer, long blockNumber,
                                                        Func <TTransfer, long, DataBlockInfo, T> readerImplFunc) where T : IDataBlock
        {
            const FileSystemTask context = FileSystemTask.DataBlockDownloadRequest;

            if (blockNumber < 0)
            {
                string msg = "Invalid block number [{0}] requested - block numbers cannot be negative.";
                msg = String.Format(msg, blockNumber);
                throw new DataBlockException(msg);
            }

            if (blockNumber >= transfer.Token.TotalBlockCount)
            {
                string msg = "Invalid block number [{0}] requested - the total number of blocks is [{1}].";
                msg = String.Format(msg, blockNumber, transfer.Token.TotalBlockCount);
                throw new DataBlockException(msg);
            }

            //make sure the file still exists
            if (!transfer.FileItem.Exists)
            {
                AuditHelper.AuditRequestedFileNotFound(Auditor, transfer.FileItem, context);

                string msg = "Resource [{0}] of transfer [{1}] was not found.";
                msg = String.Format(msg, transfer.Token.ResourceName, transfer.TransferId);
                throw new VirtualResourceNotFoundException(msg)
                      {
                          IsAudited = true
                      };
            }

            lock (transfer.SyncRoot) {
                //make sure the transfer is active
                if (!transfer.Status.Is(TransferStatus.Starting, TransferStatus.Running, TransferStatus.Paused))
                {
                    string msg = String.Format("Transfer [{0}] is not active anymore - status is [{1}].", transfer.TransferId,
                                               transfer.Status);

                    if (transfer.AbortReason.HasValue)
                    {
                        msg += String.Format(" Transfer abort reason: [{0}].", transfer.AbortReason);
                    }

                    AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.DownloadNoLongerActive, transfer.FileItem as IVirtualFileItem, msg);
                    throw new TransferStatusException(msg)
                          {
                              IsAudited = true, EventId = (int)AuditEvent.DownloadNoLongerActive
                          };
                }

                //check whether we already transferred this block once
                DataBlockInfo transferredBlock = transfer.TryGetTransferredBlock(blockNumber);

                T dataBlock = readerImplFunc(transfer, blockNumber, transferredBlock);

                //update status
                transfer.Status = TransferStatus.Running;

                //store copy of the downloaded block that doesn't contain any data
                transfer.RegisterBlock(DataBlockInfo.FromDataBlock(dataBlock));

                //audit download
                AuditHelper.AuditTransferOperation(Auditor, context, AuditEvent.FileBlockDownloaded, transfer.TransferId, transfer.FileItem as IVirtualFileItem);

                return(dataBlock);
            }
        }
Пример #7
0
        private TTransfer InitTransferImpl(string submittedResourceFilePath, bool overwrite, long resourceLength, string contentType)
        {
            const FileSystemTask context = FileSystemTask.UploadTokenRequest;

            //validate maximum file size
            var maxFileSize = GetMaxFileUploadSize();

            if (maxFileSize.HasValue && maxFileSize < resourceLength)
            {
                string msg = "Upload for file [{0}] denied: Resource length of [{1}] is above the maximum upload limit of [{2}] bytes.";
                msg = String.Format(msg, submittedResourceFilePath, resourceLength, maxFileSize.Value);
                throw new ResourceAccessException(msg);
            }

            //of course, the length cannot be negative
            if (resourceLength < 0)
            {
                string msg = "Upload for file [{0}] denied: Resource length cannot be negative [{1}].";
                msg = String.Format(msg, submittedResourceFilePath, resourceLength);
                throw new ResourceAccessException(msg);
            }


            TFile fileItem = CreateFileItemImpl(submittedResourceFilePath, false, context);

            if (fileItem.Exists && !overwrite)
            {
                AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.FileAlreadyExists, fileItem as IVirtualResourceItem <VirtualFileInfo>);

                string msg = String.Format("Cannot upload file [{0}] without overwriting existing data - a file already exists at this location.", submittedResourceFilePath);
                throw new ResourceOverwriteException(msg)
                      {
                          IsAudited = true
                      };
            }

            //get authorization
            TFolder parentFolder = GetParentFolder(fileItem, context);

            //validate file system specific restrictions
            VerifyCanUploadFileToFileSystemLocation(submittedResourceFilePath, parentFolder, fileItem);

            //get parent folder and check whether files can be added
            FolderClaims folderClaims = GetParentFolderClaims(fileItem, parentFolder);

            if (!folderClaims.AllowAddFiles)
            {
                //deny adding a file to that folder
                AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.CreateFileDenied, fileItem as IVirtualFileItem);

                string msg = "Cannot create file at [{0}] - adding files to the folder is not permitted.";
                msg = String.Format(msg, submittedResourceFilePath);
                throw new ResourceAccessException(msg)
                      {
                          IsAudited = true
                      };
            }


            //only overwrite a file if explicitly requested
            FileClaims claims = GetFileClaims(fileItem);

            if (fileItem.Exists)
            {
                if (!claims.AllowOverwrite)
                {
                    AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.FileDataOverwriteDenied, fileItem as IVirtualFileItem);

                    string msg = "Overwriting file [{0}] was denied due to missing permission.";
                    msg = String.Format(msg, submittedResourceFilePath);
                    throw new ResourceOverwriteException(msg)
                          {
                              IsAudited = true
                          };
                }
            }


            //try to get lock
            ResourceLockGuard writeLock = LockResourceForUpload(fileItem);

            if (writeLock != null && !writeLock.IsLockEnabled)
            {
                AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.FileReadLockDenied, fileItem as IVirtualFileItem);

                string msg = "The file [{0}] is currently locked and cannot be accessed.";
                msg = String.Format(msg, submittedResourceFilePath);
                throw new ResourceLockedException(msg)
                      {
                          IsAudited = true
                      };
            }

            //create upload token
            UploadToken token = CreateUploadToken(submittedResourceFilePath, fileItem, resourceLength, contentType);

            //create expiration job if we have an expiration time
            Job <UploadToken> job = null;

            if (token.ExpirationTime.HasValue)
            {
                job = ScheduleExpiration(token);
            }

            //create and cache transfer instance
            TTransfer transfer = CreateTransfer(submittedResourceFilePath, fileItem, parentFolder, token, claims, writeLock, job);

            TransferStore.AddTransfer(transfer);

            AuditHelper.AuditResourceOperation(Auditor, context, AuditEvent.UploadTokenIssued, fileItem as IVirtualFileItem);
            return(transfer);
        }
Пример #8
0
        public object Update(object entity)
        {
            bool result = false;
            UpdatePatientNoteDataRequest request = (UpdatePatientNoteDataRequest)entity;
            PatientNoteData pn = request.PatientNoteData;

            try
            {
                using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                {
                    var q = MB.Query <MEPatientNote> .EQ(b => b.Id, ObjectId.Parse(pn.Id));

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientNote.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientNote.VersionProperty, request.Version));
                    uv.Add(MB.Update.Set(MEPatientNote.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    if (pn.PatientId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.PatientIdProperty, ObjectId.Parse(pn.PatientId)));
                    }
                    if (pn.Text != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.TextProperty, pn.Text));
                    }
                    if (pn.TypeId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.NoteTypeProperty, ObjectId.Parse(pn.TypeId)));
                    }
                    if (pn.ProgramIds != null && pn.ProgramIds.Count > 0)
                    {
                        uv.Add(MB.Update.SetWrapped <List <ObjectId> >(MEPatientNote.ProgramProperty, Helper.ConvertToObjectIdList(pn.ProgramIds)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.ProgramProperty, BsonNull.Value));
                    }
                    if (pn.MethodId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.MethodIdProperty, ObjectId.Parse(pn.MethodId)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.MethodIdProperty, BsonNull.Value));
                    }
                    if (pn.WhoId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.WhoIdProperty, pn.WhoId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.WhoIdProperty, BsonNull.Value));
                    }
                    if (pn.SourceId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.SourceIdProperty, pn.SourceId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.SourceIdProperty, BsonNull.Value));
                    }
                    if (pn.OutcomeId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.OutcomeIdProperty, pn.OutcomeId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.OutcomeIdProperty, BsonNull.Value));
                    }
                    if (pn.Duration != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.DurationProperty, pn.Duration));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.DurationProperty, BsonNull.Value));
                    }
                    uv.Add(MB.Update.Set(MEPatientNote.ValidatedIdentityProperty, pn.ValidatedIdentity));
                    if (pn.ContactedOn != null && !pn.ContactedOn.Equals(new DateTime()))
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.ContactedOnProperty, pn.ContactedOn));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.ContactedOnProperty, BsonNull.Value));
                    }

                    if (pn.DataSource != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.DataSourceProperty, Helper.TrimAndLimit(pn.DataSource, 50)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientNote.DataSourceProperty, BsonNull.Value));
                    }

                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientNotes.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientNote.ToString(),
                                             pn.Id,
                                             DataAuditType.Update,
                                             request.ContractNumber);

                    result = true;
                }
                return(result as object);
            }
            catch (Exception) { throw; }
        }
        object IRepository.Update(object entity)
        {
            bool result = false;
            PutUpdateObservationDataRequest odr  = (PutUpdateObservationDataRequest)entity;
            PatientObservationRecordData    pord = odr.PatientObservationData;

            try
            {
                using (PatientObservationMongoContext ctx = new PatientObservationMongoContext(_dbName))
                {
                    var q = MB.Query <MEPatientObservation> .EQ(b => b.Id, ObjectId.Parse(pord.Id));

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientObservation.DeleteFlagProperty, pord.DeleteFlag));
                    if (pord.DeleteFlag)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.TTLDateProperty, System.DateTime.UtcNow.AddDays(_expireDays)));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.TTLDateProperty, BsonNull.Value));
                    }
                    uv.Add(MB.Update.Set(MEPatientObservation.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientObservation.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    uv.Add(MB.Update.Set(MEPatientObservation.VersionProperty, odr.Version));

                    if (pord.NonNumericValue != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.NonNumericValueProperty, pord.NonNumericValue));
                    }
                    if (pord.Value != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.NumericValueProperty, BsonDouble.Create(pord.Value)));
                    }
                    if (pord.Units != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.UnitsProperty, pord.Units));
                    }
                    if (pord.StartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.StartDateProperty, pord.StartDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.StartDateProperty, BsonNull.Value));
                    }
                    if (pord.EndDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.EndDateProperty, pord.EndDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.EndDateProperty, BsonNull.Value));
                    }
                    if (pord.DisplayId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.DisplayProperty, pord.DisplayId));
                    }
                    if (pord.StateId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.ObservationStateProperty, pord.StateId));
                    }
                    if (pord.Source != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.SourceProperty, pord.Source));
                    }

                    if (pord.DataSource != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.DataSourceProperty, pord.DataSource));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.DataSourceProperty, BsonNull.Value));
                    }

                    if (pord.ExternalRecordId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.ExternalRecordIdProperty, pord.ExternalRecordId));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientObservation.ExternalRecordIdProperty, BsonNull.Value));
                    }

                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientObservations.Collection.Update(q, update);
                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientObservation.ToString(),
                                             pord.Id,
                                             Common.DataAuditType.Update,
                                             odr.ContractNumber);

                    result = true;
                }
                return(result as object);
            }
            catch (Exception ex) { throw new Exception("PatientObservationDD:MongoPatientBarrierRepository:Update()::" + ex.Message, ex.InnerException); }
        }
Пример #10
0
        public object Update(object entity)
        {
            bool result = false;
            PutUpdateTaskRequest ptr = (PutUpdateTaskRequest)entity;
            PatientTaskData      pt  = ptr.Task;

            try
            {
                using (PatientGoalMongoContext ctx = new PatientGoalMongoContext(_dbName))
                {
                    var q = MB.Query <MEPatientTask> .EQ(b => b.Id, ObjectId.Parse(pt.Id));

                    // Set the StatusDate to Now if the status is changed.
                    MEPatientTask existingPB = ctx.PatientTasks.Collection.Find(q).SetFields(MEPatientTask.StatusProperty).FirstOrDefault();
                    if (existingPB != null)
                    {
                        if ((int)existingPB.Status != pt.StatusId)
                        {
                            pt.StatusDate = DateTime.UtcNow;
                        }
                    }
                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientTask.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientTask.VersionProperty, ptr.Version));
                    uv.Add(MB.Update.Set(MEPatientTask.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    if (pt.Description != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.DescriptionProperty, pt.Description));
                    }
                    if (pt.StartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.StartDateProperty, pt.StartDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.StartDateProperty, BsonNull.Value));
                    }
                    if (pt.StatusDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.StatusDateProperty, pt.StatusDate));
                    }
                    if (pt.StatusId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.StatusProperty, pt.StatusId));
                    }
                    if (pt.TargetDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.TargetDateProperty, pt.TargetDate));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.TargetDateProperty, BsonNull.Value));
                    }
                    if (pt.TargetValue != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.TargetValueProperty, pt.TargetValue));
                    }
                    if (pt.CustomAttributes != null)
                    {
                        uv.Add(MB.Update.SetWrapped <List <MAttribute> >(MEPatientTask.AttributesProperty, DTOUtil.GetAttributes(pt.CustomAttributes)));
                    }
                    if (pt.BarrierIds != null)
                    {
                        uv.Add(MB.Update.SetWrapped <List <ObjectId> >(MEPatientTask.BarriersProperty, DTOUtil.ConvertObjectId(pt.BarrierIds)));
                    }
                    if (pt.PatientGoalId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.PatientGoalIdProperty, ObjectId.Parse(pt.PatientGoalId)));
                    }

                    uv.Add(MB.Update.Set(MEPatientTask.ClosedDateProperty, pt.ClosedDate));
                    uv.Add(MB.Update.Set(MEPatientTask.DeleteFlagProperty, pt.DeleteFlag));
                    DataAuditType type;
                    if (pt.DeleteFlag)
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.TTLDateProperty, System.DateTime.UtcNow.AddDays(_expireDays)));
                        type = Common.DataAuditType.Delete;
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientTask.TTLDateProperty, BsonNull.Value));
                        type = Common.DataAuditType.Update;
                    }
                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientTasks.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientTask.ToString(),
                                             pt.Id,
                                             type,
                                             ptr.ContractNumber);

                    result = true;
                }
                return(result as object);
            }
            catch (Exception) { throw; }
        }
Пример #11
0
        public override bool OnReceiveRequest(ClearCanvas.Dicom.Network.DicomServer server,
                                              ServerAssociationParameters association, byte presentationID, DicomMessage message)
        {
            string   studyInstanceUid;
            string   seriesInstanceUid;
            DicomUid sopInstanceUid;

            bool ok = message.DataSet[DicomTags.SopInstanceUid].TryGetUid(0, out sopInstanceUid);

            if (ok)
            {
                ok = message.DataSet[DicomTags.SeriesInstanceUid].TryGetString(0, out seriesInstanceUid);
            }
            if (ok)
            {
                ok = message.DataSet[DicomTags.StudyInstanceUid].TryGetString(0, out studyInstanceUid);
            }

            if (!ok)
            {
                Platform.Log(LogLevel.Error, "Unable to retrieve UIDs from request message, sending failure status.");

                server.SendCStoreResponse(presentationID, message.MessageId, sopInstanceUid.UID,
                                          DicomStatuses.ProcessingFailure);

                return(true);
            }

            if (_importContext == null)
            {
                _importContext = new DicomReceiveImportContext(association.CallingAE, GetRemoteHostName(association), StudyStore.GetConfiguration(), EventSource.CurrentProcess);

                // Publish new WorkItems as they're added to the context
                lock (_importContext.StudyWorkItemsSyncLock)
                {
                    _importContext.StudyWorkItems.ItemAdded += delegate(object sender, DictionaryEventArgs <string, WorkItem> args)
                    {
                        Platform.GetService(
                            (IWorkItemActivityMonitorService service) =>
                            service.Publish(new WorkItemPublishRequest
                        {
                            Item =
                                WorkItemDataHelper
                                .FromWorkItem(
                                    args.Item)
                        }));


                        var auditedInstances = new AuditedInstances();
                        var request          =
                            args.Item.Request as DicomReceiveRequest;
                        if (request != null)
                        {
                            auditedInstances.AddInstance(request.Patient.PatientId, request.Patient.PatientsName,
                                                         request.Study.StudyInstanceUid);
                        }

                        AuditHelper.LogReceivedInstances(
                            association.CallingAE, GetRemoteHostName(association),
                            auditedInstances, EventSource.CurrentProcess,
                            EventResult.Success, EventReceiptAction.ActionUnknown);
                    }
                    ;

                    _importContext.StudyWorkItems.ItemChanged += (sender, args) => Platform.GetService(
                        (IWorkItemActivityMonitorService service) =>
                        service.Publish(new WorkItemPublishRequest {
                        Item = WorkItemDataHelper.FromWorkItem(args.Item)
                    }));
                }
            }

            var importer = new ImportFilesUtility(_importContext);

            var result = importer.Import(message, BadFileBehaviourEnum.Ignore, FileImportBehaviourEnum.Save);

            if (result.Successful)
            {
                if (!String.IsNullOrEmpty(result.AccessionNumber))
                {
                    Platform.Log(LogLevel.Info, "Received SOP Instance {0} from {1} to {2} (A#:{3} StudyUid:{4})",
                                 result.SopInstanceUid, association.CallingAE, association.CalledAE, result.AccessionNumber,
                                 result.StudyInstanceUid);
                }
                else
                {
                    Platform.Log(LogLevel.Info, "Received SOP Instance {0} from {1} to {2} (StudyUid:{3})",
                                 result.SopInstanceUid, association.CallingAE, association.CalledAE,
                                 result.StudyInstanceUid);
                }
                server.SendCStoreResponse(presentationID, message.MessageId, message.AffectedSopInstanceUid, result.DicomStatus);
            }
            else
            {
                if (result.DicomStatus == DicomStatuses.ProcessingFailure)
                {
                    Platform.Log(LogLevel.Error, "Failure importing sop: {0}", result.ErrorMessage);
                }

                //OnReceiveError(message, result.ErrorMessage, association.CallingAE);
                server.SendCStoreResponse(presentationID, message.MessageId, message.AffectedSopInstanceUid,
                                          result.DicomStatus, result.ErrorMessage);
            }

            return(true);
        }
        /// <summary>
        /// Main Processing routine.
        /// </summary>
        public override void Process()
        {
            bool stillProcessing = ProcessUidList();

            if (CancelPending)
            {
                Proxy.Cancel();
                return;
            }

            if (StopPending)
            {
                Proxy.Idle();
                return;
            }

            if (!stillProcessing)
            {
                bool failed       = false;
                bool complete     = true;
                bool filesMissing = false;
                foreach (WorkItemUid sop in WorkQueueUidList)
                {
                    if (sop.Failed)
                    {
                        //If any items failed simply because the file doesn't exist, then fail outright.
                        if (!File.Exists(GetFilePath(sop)))
                        {
                            filesMissing = true;
                        }

                        failed = true;
                        break;
                    }

                    if (!sop.Complete)
                    {
                        complete = false;
                        break;
                    }
                }

                DateTime now = Platform.Time;

                if (failed)
                {
                    var failureType = filesMissing ? WorkItemFailureType.Fatal : WorkItemFailureType.NonFatal;
                    Proxy.Fail(failureType);

                    if (Proxy.Item.Status == WorkItemStatusEnum.Failed)
                    {
                        var auditedInstances = new AuditedInstances();

                        auditedInstances.AddInstance(Request.Patient.PatientId, Request.Patient.PatientsName, Request.Study.StudyInstanceUid);

                        AuditHelper.LogImportStudies(auditedInstances,
                                                     string.IsNullOrEmpty(Request.UserName)
                                                                                ? EventSource.CurrentProcess
                                                                                : EventSource.GetUserEventSource(Request.UserName),
                                                     EventResult.MajorFailure);
                    }
                }
                else if (!complete)
                {
                    Proxy.Idle();
                }
                else if (now > Proxy.Item.ExpirationTime)
                {
                    if (Study == null)
                    {
                        Study = LoadRelatedStudy();
                    }

                    var ruleOptions = new RulesEngineOptions
                    {
                        ApplyDeleteActions = true,
                        ApplyRouteActions  = true
                    };
                    RulesEngine.Create().ApplyStudyRules(Study.ToStoreEntry(), ruleOptions);

                    Proxy.Complete();

                    var auditedInstances = new AuditedInstances();

                    auditedInstances.AddInstance(Request.Patient.PatientId, Request.Patient.PatientsName,
                                                 Request.Study.StudyInstanceUid);

                    AuditHelper.LogImportStudies(auditedInstances,
                                                 string.IsNullOrEmpty(Request.UserName)
                                                                        ? EventSource.CurrentProcess
                                                                        : EventSource.GetUserEventSource(Request.UserName),
                                                 EventResult.Success);
                }
                else
                {
                    Proxy.Idle();
                }
            }
            else
            {
                Proxy.Idle();
            }
        }
Пример #13
0
        public object Insert(object newEntity)
        {
            bool result               = false;
            ProgramAttributeData pa   = (ProgramAttributeData)newEntity;
            MEProgramAttribute   mepa = null;

            try
            {
                using (ProgramMongoContext ctx = new ProgramMongoContext(_dbName))
                {
                    mepa = new MEProgramAttribute(this.UserId)
                    {
                        Status         = (Status)pa.Status,
                        RemovedReason  = pa.OverrideReason,
                        Population     = pa.Population,
                        PlanElementId  = ObjectId.Parse(pa.PlanElementId),
                        OverrideReason = pa.OverrideReason,
                        //OptOutReason = pa.OptOutReason,
                        //OptOutDate = pa.OptOutDate,
                        OptOut           = pa.OptOut,
                        Locked           = (Locked)pa.Locked,
                        IneligibleReason = pa.IneligibleReason,
                        Completed        = (Completed)pa.Completed,
                        //AssignedOn = pa.AssignedOn, Sprint 12
                        CompletedBy        = pa.CompletedBy,
                        DateCompleted      = pa.DateCompleted,
                        DidNotEnrollReason = pa.DidNotEnrollReason,
                        //DisEnrollReason = pa.DisEnrollReason,
                        Eligibility = (EligibilityStatus)pa.Eligibility,
                        //EligibilityEndDate = pa.EligibilityEndDate,
                        //EligibilityOverride = (EligibilityOverride)pa.EligibilityOverride,
                        //EligibilityRequirements = pa.EligibilityRequirements,
                        //EligibilityStartDate = pa.EligibilityStartDate,
                        // EndDate = pa.AttrEndDate, , Sprint 12
                        Enrollment    = (EnrollmentStatus)pa.Enrollment,
                        GraduatedFlag = (Graduated)pa.GraduatedFlag,
                        //  StartDate = pa.AttrStartDate, Sprint 12
                        DeleteFlag = false
                                     //,LastUpdatedOn = DateTime.UtcNow,
                                     //UpdatedBy = ObjectId.Parse(this.UserId)
                    };

                    //if(pa.AssignedBy != null) Sprint 12
                    //{
                    //    mepa.AssignedBy = ObjectId.Parse(pa.AssignedBy);
                    //}

                    //if (pa.AssignedTo != null) Sprint 12
                    //{
                    //    mepa.AssignedTo = ObjectId.Parse(pa.AssignedTo);
                    //}

                    ctx.ProgramAttributes.Collection.Insert(mepa);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientProgramAttribute.ToString(),
                                             mepa.Id.ToString(),
                                             Common.DataAuditType.Insert,
                                             _dbName);

                    result = true;
                }
                return(result);
            }
            catch (Exception ex)
            {
                throw new Exception("DD:PatientProgramAttributeRepository:Insert()::" + ex.Message, ex.InnerException);
            }
        }
Пример #14
0
        public object Update(object entity)
        {
            ProgramAttributeData mepa = (ProgramAttributeData)entity;
            bool result = false;

            try
            {
                using (ProgramMongoContext ctx = new ProgramMongoContext(_dbName))
                {
                    var q = MB.Query <MEProgramAttribute> .EQ(b => b.PlanElementId, ObjectId.Parse(mepa.PlanElementId));

                    var uv = new List <MB.UpdateBuilder>();
                    // state
                    //if (mepa.AssignedBy != null) uv.Add(MB.Update.Set(MEProgramAttribute.AssignByProperty, mepa.AssignedBy));
                    //if (mepa.AssignedTo != null) uv.Add(MB.Update.Set(MEProgramAttribute.AssignToProperty, mepa.AssignedTo));
                    //if (mepa.AssignedOn != null) uv.Add(MB.Update.Set(MEProgramAttribute.AssignDateProperty, mepa.AssignedOn));
                    if (mepa.Population != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.PopulationProperty, mepa.Population));
                    }
                    if (mepa.Completed != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.CompletedProperty, mepa.Completed));
                    }
                    if (mepa.CompletedBy != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.CompletedByProperty, mepa.CompletedBy));
                    }
                    if (mepa.DateCompleted != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.CompletedOnProperty, mepa.DateCompleted));
                    }
                    if (mepa.RemovedReason != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.RemovedReasonProperty, mepa.RemovedReason));
                    }
                    if (mepa.GraduatedFlag != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.GraduatedFlagProperty, mepa.GraduatedFlag));
                    }
                    if (mepa.Locked != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.LockedProperty, mepa.Locked));
                    }
                    if (mepa.OverrideReason != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.OverrideReasonProperty, mepa.OverrideReason));
                    }
                    if (mepa.Status != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.StatusProperty, (Status)mepa.Status));
                    }
                    // eligibility
                    //if (mepa.EligibilityEndDate != null) uv.Add(MB.Update.Set(MEProgramAttribute.EligibilityEndDateProperty, mepa.EligibilityEndDate));
                    //if (mepa.EligibilityRequirements != null) uv.Add(MB.Update.Set(MEProgramAttribute.EligibilityRequirementsProperty, mepa.EligibilityRequirements));
                    //if (mepa.EligibilityStartDate != null) uv.Add(MB.Update.Set(MEProgramAttribute.EligibilityStartDateProperty, mepa.EligibilityStartDate));
                    if (mepa.IneligibleReason != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.IneligibleReasonProperty, mepa.IneligibleReason));
                    }
                    //if (mepa.EligibilityOverride != 0) uv.Add(MB.Update.Set(MEProgramAttribute.EligibilityOverrideProperty, (EligibilityOverride)mepa.EligibilityOverride));
                    if (mepa.Eligibility != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.EligibilityProperty, (EligibilityStatus)mepa.Eligibility));
                    }
                    // optout
                    //if (mepa.OptOutDate != null) uv.Add(MB.Update.Set(MEProgramAttribute.OptOutDateProperty, mepa.OptOutDate));
                    if (mepa.OptOut != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.OptOutProperty, mepa.OptOut));
                    }
                    //if (mepa.OptOutReason != null) uv.Add(MB.Update.Set(MEProgramAttribute.OptOutReasonProperty, mepa.OptOutReason));
                    // dates
                    //if (mepa.AttrStartDate != null) uv.Add(MB.Update.Set(MEProgramAttribute.StartDateProperty, mepa.AttrStartDate)); Sprint 12
                    //if (mepa.AttrEndDate != null) uv.Add(MB.Update.Set(MEProgramAttribute.EndDateProperty, mepa.AttrEndDate)); Sprint 12
                    // enrollment
                    if (mepa.Enrollment != 0)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.EnrollmentProperty, (EnrollmentStatus)mepa.Enrollment));
                    }
                    if (mepa.DidNotEnrollReason != null)
                    {
                        uv.Add(MB.Update.Set(MEProgramAttribute.DidNotEnrollReasonProperty, mepa.DidNotEnrollReason));
                    }
                    //if (mepa.DisEnrollReason != null) uv.Add(MB.Update.Set(MEProgramAttribute.DisEnrollReasonProperty, mepa.DisEnrollReason));

                    uv.Add(MB.Update.Set(MEProgramAttribute.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEProgramAttribute.LastUpdatedOnProperty, DateTime.UtcNow));

                    if (uv.Count > 0)
                    {
                        IMongoUpdate update = MB.Update.Combine(uv);
                        ctx.ProgramAttributes.Collection.Update(q, update);

                        AuditHelper.LogDataAudit(this.UserId,
                                                 MongoCollectionName.PatientProgramAttribute.ToString(),
                                                 mepa.PlanElementId,
                                                 MEProgramAttribute.PlanElementIdProperty,
                                                 Common.DataAuditType.Update,
                                                 _dbName);

                        result = true;
                    }
                }
                return(result);
            }
            catch (Exception ex)
            {
                throw new Exception("DD:PatientProgramAttributeRepository:Update()::" + ex.Message, ex.InnerException);
            }
        }
        public bool SaveAll(bool promptForLocation)
        {
            // warn if there appear to be any reports or attachments in the files being edited
            if (!WarnSaveEditedReportsOrAttachments())
            {
                return(false);
            }

            // prompt for destination if requested or any files are from local data store
            var filenameMap = (Dictionary <string, string>)null;

            if ((promptForLocation || AnyFilesFromLocalStore()) && !PromptSaveDestination(out filenameMap))
            {
                return(false);
            }

            // if destination was not prompted, warn user that files will be overwritten
            if (filenameMap == null && !WarnOverwriteFiles())
            {
                return(false);
            }

            var modifiedInstances = new AuditedInstances();
            var failureCount      = 0;

            for (int i = 0; i < _loadedFiles.Count; i++)
            {
                var file = _loadedFiles[i];
                try
                {
                    var studyInstanceUid = file.DataSet[DicomTags.StudyInstanceUid].ToString();
                    var patientId        = file.DataSet[DicomTags.PatientId].ToString();
                    var patientsName     = file.DataSet[DicomTags.PatientsName].ToString();

                    var filename = filenameMap != null ? filenameMap[file.Filename] : file.Filename;
                    file.Save(filename, DicomWriteOptions.Default);
                    _dirtyFlags[i] = false;

                    modifiedInstances.AddInstance(patientId, patientsName, studyInstanceUid);
                }
                catch (Exception ex)
                {
                    ++failureCount;

                    if (file != null && !string.IsNullOrEmpty(file.Filename))
                    {
                        Platform.Log(LogLevel.Warn, ex, "An exception was encountered while trying to update the file \'{0}\'.", file.Filename);
                    }
                    else
                    {
                        Platform.Log(LogLevel.Warn, ex, "An unexpected error was encountered while trying to update a file.");
                    }
                }
            }

            if (failureCount > 0)
            {
                Host.DesktopWindow.ShowMessageBox(SR.MessageErrorUpdatingSomeFiles, MessageBoxActions.Ok);
            }

            AuditHelper.LogUpdateInstances(new string[0], modifiedInstances, EventSource.CurrentUser, EventResult.Success);
            return(true);
        }
Пример #16
0
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity targetServer)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");
            Platform.CheckForNullReference(targetServer, "targetServer");

            var selectedServer = targetServer.ToServiceNode();

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8 = "ISO_IR 192";
            var          requestCollection = new DicomAttributeCollection {
                SpecificCharacterSet = utf8
            };

            requestCollection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            requestCollection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            requestCollection[DicomTags.StudyInstanceUid].SetStringValue("");

            requestCollection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            requestCollection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            requestCollection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
            requestCollection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
            requestCollection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
            requestCollection[DicomTags.StudyTime].SetStringValue("");
            requestCollection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
            requestCollection[DicomTags.PatientsBirthDate].SetStringValue("");
            requestCollection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
            requestCollection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
            requestCollection[DicomTags.InstanceAvailability].SetEmptyValue();             // must not be included in request

            requestCollection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
            var codeValue   = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
            var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");

            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
            codeValue   = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
            codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
            requestCollection[DicomTags.ResponsiblePersonRole].SetStringValue("");
            requestCollection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            IList <DicomAttributeCollection> results = Query(selectedServer, requestCollection);

            StudyItemList studyItemList = new StudyItemList();

            foreach (DicomAttributeCollection result in results)
            {
                StudyItem item = new StudyItem(result[DicomTags.StudyInstanceUid].GetString(0, ""), selectedServer);

                //TODO: add DicomField attributes to the StudyItem class (implement typeconverter for PersonName class).
                item.PatientsBirthDate       = result[DicomTags.PatientsBirthDate].GetString(0, "");
                item.AccessionNumber         = result[DicomTags.AccessionNumber].GetString(0, "");
                item.StudyDescription        = result[DicomTags.StudyDescription].GetString(0, "");
                item.StudyDate               = result[DicomTags.StudyDate].GetString(0, "");
                item.StudyTime               = result[DicomTags.StudyTime].GetString(0, "");
                item.PatientId               = result[DicomTags.PatientId].GetString(0, "");
                item.PatientsName            = new PersonName(result[DicomTags.PatientsName].GetString(0, ""));
                item.ReferringPhysiciansName = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
                item.ModalitiesInStudy       = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
                DicomAttribute attribute = result[DicomTags.NumberOfStudyRelatedInstances];
                if (!attribute.IsEmpty && !attribute.IsNull)
                {
                    item.NumberOfStudyRelatedInstances = attribute.GetInt32(0, 0);
                }

                item.SpecificCharacterSet = result.SpecificCharacterSet;
                item.InstanceAvailability = result[DicomTags.InstanceAvailability].GetString(0, "");
                if (String.IsNullOrEmpty(item.InstanceAvailability))
                {
                    item.InstanceAvailability = "ONLINE";
                }

                item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
                var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
                if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
                    item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientSpeciesCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
                var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
                if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                    item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientBreedCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.ResponsiblePerson       = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
                item.ResponsiblePersonRole   = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
                item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");
                studyItemList.Add(item);
            }

            AuditHelper.LogQueryIssued(selectedServer.AETitle, selectedServer.ScpParameters.HostName, EventSource.CurrentUser,
                                       EventResult.Success, SopClass.StudyRootQueryRetrieveInformationModelFindUid,
                                       requestCollection);

            return(studyItemList);
        }
Пример #17
0
        public InsertBatchPatientsDataResponse InsertBatchPatients(InsertBatchPatientsDataRequest request)
        {
            InsertBatchPatientsDataResponse response = new InsertBatchPatientsDataResponse();

            if (request.PatientsData != null && request.PatientsData.Count > 0)
            {
                List <HttpObjectResponse <PatientData> > list = new List <HttpObjectResponse <PatientData> >();
                IPatientRepository repo   = Factory.GetRepository(request, RepositoryType.Patient);
                BulkInsertResult   result = (BulkInsertResult)repo.InsertAll(request.PatientsData.Cast <object>().ToList());
                if (result != null)
                {
                    if (result.ProcessedIds != null && result.ProcessedIds.Count > 0)
                    {
                        // Get the patients that were newly inserted.
                        List <PatientData> insertedPatients = repo.Select(result.ProcessedIds);
                        if (insertedPatients != null && insertedPatients.Count > 0)
                        {
                            List <string> insertedPatientIds = insertedPatients.Select(p => p.Id).ToList();

                            #region DataAudit for Patients
                            AuditHelper.LogDataAudit(request.UserId, MongoCollectionName.Patient.ToString(), insertedPatientIds, Common.DataAuditType.Insert, request.ContractNumber);
                            #endregion

                            #region BulkInsert CohortPatientView
                            List <CohortPatientViewData> cpvList = getMECohortPatientView(insertedPatients);
                            IPatientRepository           cpvRepo = Factory.GetRepository(request, RepositoryType.CohortPatientView);
                            cpvRepo.InsertAll(cpvList.Cast <object>().ToList());
                            #endregion

                            #region BulkInsert EngagePatientSystems.
                            List <string>            processedPatientSystemIds = insertBatchEngagePatientSystem(insertedPatientIds, request);
                            List <PatientSystemData> insertedPatientSystems    = getPatientSystems(processedPatientSystemIds, request);

                            #region DataAudit for EngagePatientSystems
                            List <string> insertedPatientSystemIds = insertedPatientSystems.Select(p => p.Id).ToList();
                            AuditHelper.LogDataAudit(request.UserId, MongoCollectionName.PatientSystem.ToString(), insertedPatientSystemIds, Common.DataAuditType.Insert, request.ContractNumber);
                            #endregion

                            insertedPatients.ForEach(r =>
                            {
                                string engageValue = string.Empty;
                                var x = insertedPatientSystems.Where(s => s.PatientId == r.Id).FirstOrDefault();
                                if (x != null)
                                {
                                    engageValue = x.Value;
                                }
                                list.Add(new HttpObjectResponse <PatientData> {
                                    Code = HttpStatusCode.Created, Body = (PatientData) new PatientData {
                                        Id = r.Id, ExternalRecordId = r.ExternalRecordId, EngagePatientSystemValue = engageValue
                                    }
                                });
                            });
                            #endregion
                        }
                    }
                    result.ErrorMessages.ForEach(e =>
                    {
                        list.Add(new HttpObjectResponse <PatientData> {
                            Code = HttpStatusCode.InternalServerError, Message = e
                        });
                    });
                }
                response.Responses = list;
            }

            return(response);
        }
Пример #18
0
        private TTransfer InitTransferImpl(string submittedResourceFilePath, int?clientMaxBlockSize, bool includeFileHash)
        {
            const FileSystemTask context = FileSystemTask.DownloadTokenRequest;
            TFile fileItem = CreateFileItemImpl(submittedResourceFilePath, false, context);

            if (!fileItem.Exists)
            {
                AuditHelper.AuditRequestedFileNotFound(Auditor, fileItem, context);

                string msg = String.Format("Resource [{0}] not found.", submittedResourceFilePath);
                throw new VirtualResourceNotFoundException(msg)
                      {
                          IsAudited = true
                      };
            }

            //get authorization
            FileClaims claims = GetFileClaims(fileItem);

            if (!claims.AllowReadData)
            {
                AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.FileDataDownloadDenied, fileItem as IVirtualFileItem);

                string msg = "Read request for file [{0}] was denied - you are not authorized to read the resource.";
                msg = String.Format(msg, submittedResourceFilePath);
                throw new ResourceAccessException(msg)
                      {
                          IsAudited = true
                      };
            }

            //try to get lock
            ResourceLockGuard readLock = LockResourceForDownload(fileItem, claims);

            if (readLock != null && !readLock.IsLockEnabled)
            {
                AuditHelper.AuditDeniedOperation(Auditor, context, AuditEvent.FileReadLockDenied, fileItem as IVirtualFileItem);

                string msg = "The requested file [{0}] is currently locked and thus cannot be accessed.";
                msg = String.Format(msg, submittedResourceFilePath);
                throw new ResourceLockedException(msg)
                      {
                          IsAudited = true
                      };
            }

            //create download token
            DownloadToken token = CreateDownloadToken(submittedResourceFilePath, fileItem, clientMaxBlockSize, includeFileHash);

            //create expiration job if we have an expiration time
            Job <DownloadToken> job = null;

            if (token.ExpirationTime.HasValue)
            {
                job = ScheduleExpiration(token);
            }

            //create transfer instance
            TTransfer transfer = CreateTransfer(submittedResourceFilePath, fileItem, token, claims, readLock, job);

            //cache transfer
            TransferStore.AddTransfer(transfer);

            //audit issued token
            AuditHelper.AuditResourceOperation(Auditor, context, AuditEvent.DownloadTokenIssued, fileItem as IVirtualFileItem);

            return(transfer);
        }