private bool InsertRight(OralConsultationItem item, OralConsultation entity)
        {
            foreach (var itm in db.TmpOralConsultationRights.Where(p => p.GUID == item.GUID))
            {
                OralConsultationRight dbItem = new OralConsultationRight
                {
                    OralConsultation        = entity,
                    HumanRightID            = itm.HumanRightID,
                    OralConsultationID      = itm.OralConsultationID,
                    OralConsultationRightID = itm.OralConsultationRightID
                };
                db.OralConsultationRights.Add(dbItem);
            }

            List <int> deletionTempItems = new List <int>();

            foreach (var itm3 in db.TmpOralConsultationRights.Where(p => p.GUID == item.GUID))
            {
                deletionTempItems.Add(itm3.ID);
            }
            foreach (int ID in deletionTempItems)
            {
                db.TmpOralConsultationRights.Remove(db.TmpOralConsultationRights.Find(ID));
            }
            return(true);
        }
        private bool InsertPermission(OralConsultationItem item, OralConsultation entity)
        {
            foreach (var itm in db.TmpOralConsultationPermissions.Where(p => p.GUID == item.GUID))
            {
                OralConsultationPermission dbItem = new OralConsultationPermission
                {
                    OralConsultation             = entity,
                    UserID                       = itm.UserID,
                    IsChange                     = itm.IsChange,
                    IsRead                       = itm.IsRead,
                    OralConsultationID           = itm.OralConsultationID,
                    OralConsultationPermissionID = itm.OralConsultationPermissionID
                };
                db.OralConsultationPermissions.Add(dbItem);
            }

            List <int> deletionTempItems = new List <int>();

            foreach (var itm3 in db.TmpOralConsultationPermissions.Where(p => p.GUID == item.GUID))
            {
                deletionTempItems.Add(itm3.ID);
            }
            foreach (int ID in deletionTempItems)
            {
                db.TmpOralConsultationPermissions.Remove(db.TmpOralConsultationPermissions.Find(ID));
            }
            return(true);
        }
        private OralConsultationItem UpdateOralConsultation(OralConsultationItem item)
        {
            OralConsultation entity = new OralConsultation
            {
                OralConsultationID = item.OralConsultationID,
                //ResidentID = (int)item.ResidentID,
                IssueID = (int)item.IssueID,
                OralConsultationDate    = item.OralConsultationDate,
                InvocationTypeID        = item.InvocationTypeID,
                TargetGroupID           = item.TargetGroupID,
                ProblemDescription      = item.ProblemDescription,
                ConsultationDescription = item.ConsultationDescription,
                UserID     = item.UserID,
                ChangeDate = DateTime.Now
            };

            db.OralConsultations.Attach(entity);
            db.Entry(entity).State = EntityState.Modified;

            this.UpdateConsultant(item, entity);
            this.UpdateOrganization(item, entity);
            this.UpdateRight(item, entity);
            this.UpdatePermission(item, entity);

            db.SaveChanges();

            item.OralConsultationID = entity.OralConsultationID;

            return(item);
        }
        private OralConsultationItem InsertOralConsultation(OralConsultationItem item)
        {
            OralConsultation entity = new OralConsultation
            {
                OralConsultationID = item.OralConsultationID,
                //ResidentID = (int)item.ResidentID,
                IssueID = (int)item.IssueID,
                OralConsultationDate    = item.OralConsultationDate,
                InvocationTypeID        = item.InvocationTypeID,
                TargetGroupID           = item.TargetGroupID,
                ProblemDescription      = item.ProblemDescription,
                ConsultationDescription = item.ConsultationDescription,
                UserID     = item.UserID,
                ChangeDate = DateTime.Now,
                OwnerID    = item.UserID
            };

            db.OralConsultations.Add(entity);

            this.InsertConsultant(item, entity);
            this.InsertOrganization(item, entity);
            this.InsertRight(item, entity);
            this.InsertPermission(item, entity);

            db.SaveChanges();

            item.OralConsultationID = entity.OralConsultationID;

            return(item);
        }
        public OralConsultationItem GetOralConsultationItemByIssueID(int issueID)
        {
            var      issue    = db.Issues.Find(issueID);
            Resident resident = null;

            if (issue.ResidentID != null)
            {
                resident = db.Residents.Find(issue.ResidentID);
            }
            OralConsultationItem item = new OralConsultationItem
            {
                OralConsultationID      = 0,
                IssueID                 = issue.IssueID,
                IssueName               = issue.IssueName,
                IssueDate               = issue.IssueDate,
                IssueDescription        = issue.IssueDescription,
                OralConsultationDate    = null,
                InvocationTypeID        = null,
                TargetGroupID           = null,
                ProblemDescription      = String.Empty,
                ConsultationDescription = String.Empty,
                GUID = Guid.NewGuid(),
                InitializationType = InitializationTypes.Insert,
                UserID             = String.Empty,
                ChangeDate         = null
            };

            return(item);
        }
        private bool UpdatePermission(OralConsultationItem item, OralConsultation entity)
        {
            List <int> existingItems = new List <int>();

            foreach (var itm in db.TmpOralConsultationPermissions.Where(p => p.GUID == item.GUID))
            {
                existingItems.Add(itm.OralConsultationPermissionID);
                OralConsultationPermission dbItem = new OralConsultationPermission
                {
                    OralConsultation             = entity,
                    UserID                       = itm.UserID,
                    IsChange                     = itm.IsChange,
                    IsRead                       = itm.IsRead,
                    OralConsultationID           = itm.OralConsultationID,
                    OralConsultationPermissionID = itm.OralConsultationPermissionID
                };

                if (itm.OralConsultationPermissionID == 0)
                {
                    db.OralConsultationPermissions.Add(dbItem);
                }
                else
                {
                    db.OralConsultationPermissions.Attach(dbItem);
                    db.Entry(dbItem).State = EntityState.Modified;
                }
            }

            List <int> deletedItems = new List <int>();

            foreach (var itm2 in db.OralConsultationPermissions.Where(p => p.OralConsultationID == item.OralConsultationID))
            {
                deletedItems.Add(itm2.OralConsultationPermissionID);
            }

            List <int> common = deletedItems.Except(existingItems).ToList();

            foreach (int deletionID in common)
            {
                db.OralConsultationPermissions.Remove(db.OralConsultationPermissions.Find(deletionID));
            }

            List <int> deletionTempItems = new List <int>();

            foreach (var itm3 in db.TmpOralConsultationPermissions.Where(p => p.GUID == item.GUID))
            {
                deletionTempItems.Add(itm3.ID);
            }
            foreach (int ID in deletionTempItems)
            {
                db.TmpOralConsultationPermissions.Remove(db.TmpOralConsultationPermissions.Find(ID));
            }
            return(true);
        }
        public OralConsultationItem SaveOralConsultation(OralConsultationItem item)
        {
            OralConsultationItem resultItem = null;

            switch (item.InitializationType)
            {
            case InitializationTypes.Insert:
                resultItem = this.InsertOralConsultation(item);
                break;

            case InitializationTypes.Update:
                resultItem = this.UpdateOralConsultation(item);
                break;
            }
            return(resultItem);
        }
        public OralConsultationItem GetOralConsultationItemByID(int oralConsultationID)
        {
            var oralConsultation = db.OralConsultations.Find(oralConsultationID);
            var issue            = db.Issues.Find(oralConsultation.IssueID);

            OralConsultationItem item = new OralConsultationItem
            {
                OralConsultationID      = oralConsultation.OralConsultationID,
                IssueID                 = issue.IssueID,
                IssueName               = issue.IssueName,
                IssueDate               = issue.IssueDate,
                IssueDescription        = issue.IssueDescription,
                OralConsultationDate    = oralConsultation.OralConsultationDate,
                InvocationTypeID        = oralConsultation.InvocationTypeID,
                TargetGroupID           = oralConsultation.TargetGroupID,
                ProblemDescription      = oralConsultation.ProblemDescription,
                ConsultationDescription = oralConsultation.ConsultationDescription,
                GUID = Guid.NewGuid(),
                InitializationType = InitializationTypes.Update,
                UserID             = String.Empty,
                ChangeDate         = null
            };

            foreach (var consultant in db.OralConsultationConsultants.Where(p => p.OralConsultationID == oralConsultationID))
            {
                TmpOralConsultationConsultant itm = new TmpOralConsultationConsultant();
                itm.OralConsultationConsultantID = consultant.OralConsultationConsultantID;
                itm.OralConsultationID           = consultant.OralConsultationID;
                itm.ConsultantID = consultant.ConsultantID;
                itm.GUID         = item.GUID;
                db.TmpOralConsultationConsultants.Add(itm);
            }

            foreach (var organization in db.OralConsultationOrganizations.Where(p => p.OralConsultationID == oralConsultationID))
            {
                TmpOralConsultationOrganization itm = new TmpOralConsultationOrganization();
                itm.OralConsultationOrganizationID = organization.OralConsultationOrganizationID;
                itm.OralConsultationID             = organization.OralConsultationID;
                itm.OrganizationID = organization.OrganizationID;
                itm.GUID           = item.GUID;
                db.TmpOralConsultationOrganizations.Add(itm);
            }

            foreach (var right in db.OralConsultationRights.Where(p => p.OralConsultationID == oralConsultationID))
            {
                TmpOralConsultationRight itm = new TmpOralConsultationRight();
                itm.OralConsultationRightID = right.OralConsultationRightID;
                itm.OralConsultationID      = right.OralConsultationID;
                itm.HumanRightID            = right.HumanRightID;
                itm.GUID = item.GUID;
                db.TmpOralConsultationRights.Add(itm);
            }

            foreach (var permission in db.OralConsultationPermissions.Where(p => p.OralConsultationID == oralConsultationID))
            {
                TmpOralConsultationPermission itm = new TmpOralConsultationPermission();
                itm.OralConsultationPermissionID = permission.OralConsultationPermissionID;
                itm.OralConsultationID           = permission.OralConsultationID;
                itm.UserID   = permission.UserID;
                itm.IsChange = permission.IsChange;
                itm.IsRead   = permission.IsRead;
                itm.GUID     = item.GUID;
                db.TmpOralConsultationPermissions.Add(itm);
            }

            db.SaveChanges();

            return(item);
        }