public dynamic addOrgIndivPos([FromBody] dynamic OrgIndivPos)
        {
            ReviveCommunicationsDBEntities3 db = new ReviveCommunicationsDBEntities3();

            db.Configuration.ProxyCreationEnabled = false;
            DbContextTransaction transaction = db.Database.BeginTransaction();
            //If no data is received return error
            dynamic toReturn = new ExpandoObject();

            if (OrgIndivPos == null)
            {
                toReturn.Error = "Cant be null";
                return(toReturn);
            }
            try
            {
                Organisational_Individual_Position o = new Organisational_Individual_Position();
                o.Decription = OrgIndivPos.form.Description;
                foreach (var goal in OrgIndivPos.form.Goal_Access)
                {
                    int         Goalid = goal.GoalAccessID;
                    Goal_Access Igoal  = db.Goal_Access.Where(x => x.GoalAccessID == Goalid).FirstOrDefault();
                    o.Goal_Access.Add(Igoal);
                }
                foreach (var uc in OrgIndivPos.form.Use_Cases)
                {
                    int       UCid = uc.UCID;
                    Use_Cases Iuc  = db.Use_Cases.Where(x => x.UCID == UCid).FirstOrDefault();
                    o.Use_Cases.Add(Iuc);
                }

                db.Organisational_Individual_Position.Add(o);

                db.SaveChanges();

                int id = db.Organisational_Individual_Position.OrderByDescending(x => x.OrgIndivPosID).Select(x => x.OrgIndivPosID).FirstOrDefault();

                Audit_Trail auditLog = new Audit_Trail();
                auditLog.PersonID         = OrgIndivPos.PersonID;
                auditLog.EventDescription = "Added Organisational Individual Position with  ID:" + id;
                auditLog.EventDateTime    = DateTime.Now;
                db.Audit_Trail.Add(auditLog);

                db.SaveChanges(); //save changes
                transaction.Commit();
                return(getAllOrgIndivPos());
            }
            catch (Exception e)
            {
                transaction.Rollback();
                //if any errors occur return error message
                toReturn.Error = e.Message + e.InnerException;
                return(toReturn);
            }
        }
        public dynamic updateOrgIndivPos([FromBody] dynamic currentOrgIndivPos)
        {
            ReviveCommunicationsDBEntities3 db = new ReviveCommunicationsDBEntities3();

            db.Configuration.ProxyCreationEnabled = false;

            try
            {
                int id = currentOrgIndivPos.form.OrgIndivPosID;
                //retrieve existing object
                Organisational_Individual_Position thisOrgIndivPos = db.Organisational_Individual_Position.Include("Use_Cases").Include("Goal_Access").Where(i => i.OrgIndivPosID == id).FirstOrDefault();

                //remove current Usecase and Goal access
                foreach (Goal_Access goal in thisOrgIndivPos.Goal_Access.ToList())
                {
                    thisOrgIndivPos.Goal_Access.Remove(goal);
                }
                foreach (Use_Cases uc in thisOrgIndivPos.Use_Cases.ToList())
                {
                    thisOrgIndivPos.Use_Cases.Remove(uc);
                }
                //assign new access

                foreach (var goal in currentOrgIndivPos.form.Goal_Access)
                {
                    int         Goalid = goal.GoalAccessID;
                    Goal_Access Igoal  = db.Goal_Access.Where(x => x.GoalAccessID == Goalid).FirstOrDefault();
                    thisOrgIndivPos.Goal_Access.Add(Igoal);
                }
                foreach (var uc in currentOrgIndivPos.form.Use_Cases)
                {
                    int       UCid = uc.UCID;
                    Use_Cases Iuc  = db.Use_Cases.Where(x => x.UCID == UCid).FirstOrDefault();
                    thisOrgIndivPos.Use_Cases.Add(Iuc);
                }



                Audit_Trail auditLog = new Audit_Trail();
                auditLog.PersonID         = currentOrgIndivPos.PersonID;
                auditLog.EventDescription = "Updated an Organisational Individual Positions Access levels with ID: " + id;
                auditLog.EventDateTime    = DateTime.Now;
                db.Audit_Trail.Add(auditLog);

                db.SaveChanges();            //save
                return(getAllOrgIndivPos()); //retrieve all
            }
            catch (Exception e)
            {
                //else return error
                dynamic toReturn = new ExpandoObject();
                toReturn.Error = e.Message + e.InnerException;
                return(toReturn);
            }
        }