public object FindByExternalRecordId(string externalRecordId)
        {
            PatientNoteData data = null;

            try
            {
                using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                {
                    List <IMongoQuery> queries = new List <IMongoQuery>();
                    queries.Add(Query.EQ(MEPatientNote.ExternalRecordIdProperty, externalRecordId));
                    queries.Add(Query.EQ(MEPatientNote.DeleteFlagProperty, false));
                    queries.Add(Query.EQ(MEPatientNote.TTLDateProperty, BsonNull.Value));
                    IMongoQuery   mQuery = Query.And(queries);
                    MEPatientNote mePN   = ctx.PatientNotes.Collection.Find(mQuery).FirstOrDefault();
                    if (mePN != null)
                    {
                        data = new PatientNoteData
                        {
                            Id = mePN.Id.ToString(),
                        };
                    }
                }
                return(data);
            }
            catch (Exception) { throw; }
        }
        public object Insert(object newEntity)
        {
            InsertPatientNoteDataRequest request = (InsertPatientNoteDataRequest)newEntity;
            PatientNoteData noteData             = request.PatientNote;
            string          noteId = string.Empty;
            MEPatientNote   meN    = null;

            try
            {
                if (noteData != null)
                {
                    meN = new MEPatientNote(this.UserId, noteData.CreatedOn)
                    {
                        PatientId         = ObjectId.Parse(noteData.PatientId),
                        Text              = noteData.Text,
                        ProgramIds        = Helper.ConvertToObjectIdList(noteData.ProgramIds),
                        ValidatedIdentity = noteData.ValidatedIdentity,
                        ContactedOn       = noteData.ContactedOn,
                        Type              = ObjectId.Parse(noteData.TypeId),
                        DeleteFlag        = false,
                        DataSource        = Helper.TrimAndLimit(noteData.DataSource, 50),
                        LastUpdatedOn     = noteData.UpdatedOn,
                        ExternalRecordId  = noteData.ExternalRecordId,
                        Duration          = noteData.Duration,
                    };

                    if (!string.IsNullOrEmpty(noteData.MethodId))
                    {
                        meN.MethodId = ObjectId.Parse(noteData.MethodId);
                    }
                    if (!string.IsNullOrEmpty(noteData.OutcomeId))
                    {
                        meN.OutcomeId = ObjectId.Parse(noteData.OutcomeId);
                    }
                    if (!string.IsNullOrEmpty(noteData.WhoId))
                    {
                        meN.WhoId = ObjectId.Parse(noteData.WhoId);
                    }
                    if (!string.IsNullOrEmpty(noteData.SourceId))
                    {
                        meN.SourceId = ObjectId.Parse(noteData.SourceId);
                    }

                    using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                    {
                        ctx.PatientNotes.Collection.Insert(meN);

                        AuditHelper.LogDataAudit(this.UserId,
                                                 MongoCollectionName.PatientNote.ToString(),
                                                 meN.Id.ToString(),
                                                 Common.DataAuditType.Insert,
                                                 request.ContractNumber);

                        noteId = meN.Id.ToString();
                    }
                }
                return(noteId);
            }
            catch (Exception) { throw; }
        }
        public object FindByID(string entityID)
        {
            PatientNoteData noteData = null;

            try
            {
                using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                {
                    List <IMongoQuery> queries = new List <IMongoQuery>();
                    queries.Add(Query.EQ(MEPatientNote.IdProperty, ObjectId.Parse(entityID)));
                    queries.Add(Query.EQ(MEPatientNote.DeleteFlagProperty, false));
                    IMongoQuery   mQuery = Query.And(queries);
                    MEPatientNote meN    = ctx.PatientNotes.Collection.Find(mQuery).FirstOrDefault();
                    if (meN != null)
                    {
                        noteData = new PatientNoteData
                        {
                            Id                = meN.Id.ToString(),
                            PatientId         = meN.PatientId.ToString(),
                            Text              = meN.Text,
                            ProgramIds        = Helper.ConvertToStringList(meN.ProgramIds),
                            CreatedOn         = meN.RecordCreatedOn,
                            CreatedById       = meN.RecordCreatedBy.ToString(),
                            TypeId            = meN.Type.ToString(),
                            MethodId          = (meN.MethodId == null) ? null :  meN.MethodId.ToString(),
                            OutcomeId         = (meN.OutcomeId == null) ? null : meN.OutcomeId.ToString(),
                            WhoId             = (meN.WhoId == null) ? null : meN.WhoId.ToString(),
                            SourceId          = (meN.SourceId == null) ? null : meN.SourceId.ToString(),
                            Duration          = meN.Duration,
                            ValidatedIdentity = meN.ValidatedIdentity,
                            ContactedOn       = meN.ContactedOn,
                            UpdatedById       = (meN.UpdatedBy == null) ? null : meN.UpdatedBy.ToString(),
                            UpdatedOn         = meN.LastUpdatedOn,
                            DataSource        = meN.DataSource,
                            ExternalRecordId  = meN.ExternalRecordId
                        };
                    }
                }
                return(noteData);
            }
            catch (Exception) { throw; }
        }
        public object InsertAll(List <object> entities)
        {
            BulkInsertResult result        = new BulkInsertResult();
            List <string>    insertedIds   = new List <string>();
            List <string>    errorMessages = new List <string>();

            try
            {
                using (PatientNoteMongoContext ctx = new PatientNoteMongoContext(ContractDBName))
                {
                    var bulk = ctx.PatientNotes.Collection.InitializeUnorderedBulkOperation();
                    foreach (PatientNoteData data in entities)
                    {
                        MEPatientNote meN = new MEPatientNote(this.UserId, data.CreatedOn)
                        {
                            PatientId         = ObjectId.Parse(data.PatientId),
                            Text              = data.Text,
                            ProgramIds        = Helper.ConvertToObjectIdList(data.ProgramIds),
                            ValidatedIdentity = data.ValidatedIdentity,
                            ContactedOn       = data.ContactedOn,
                            Type              = ObjectId.Parse(data.TypeId),
                            DeleteFlag        = false,
                            DataSource        = Helper.TrimAndLimit(data.DataSource, 50),
                            LastUpdatedOn     = data.UpdatedOn,
                            ExternalRecordId  = data.ExternalRecordId,
                            Duration          = data.Duration
                        };

                        if (!string.IsNullOrEmpty(data.MethodId))
                        {
                            meN.MethodId = ObjectId.Parse(data.MethodId);
                        }
                        if (!string.IsNullOrEmpty(data.OutcomeId))
                        {
                            meN.OutcomeId = ObjectId.Parse(data.OutcomeId);
                        }
                        if (!string.IsNullOrEmpty(data.WhoId))
                        {
                            meN.WhoId = ObjectId.Parse(data.WhoId);
                        }
                        if (!string.IsNullOrEmpty(data.SourceId))
                        {
                            meN.SourceId = ObjectId.Parse(data.SourceId);
                        }
                        bulk.Insert(meN.ToBsonDocument());
                        insertedIds.Add(meN.Id.ToString());
                    }
                    BulkWriteResult bwr = bulk.Execute();
                }
                // TODO: Auditing.
            }
            catch (BulkWriteException bwEx)
            {
                // Get the error messages for the ones that failed.
                foreach (BulkWriteError er in bwEx.WriteErrors)
                {
                    errorMessages.Add(er.Message);
                }
            }
            catch (Exception ex)
            {
                string aseProcessID = ConfigurationManager.AppSettings.Get("ASEProcessID") ?? "0";
                Helper.LogException(int.Parse(aseProcessID), ex);
            }
            result.ProcessedIds  = insertedIds;
            result.ErrorMessages = errorMessages;
            return(result);
        }