public bool Save(XObjectRelation relation)
        {
            List <SqlParameter> paramList = new List <SqlParameter>();

            paramList.Add(new SqlParameter("@Id", relation.Id));
            paramList.Add(new SqlParameter("@FromAssetId", relation.FromAssetId));
            paramList.Add(new SqlParameter("@ToAssetId", relation.ToAssetId));
            paramList.Add(new SqlParameter("@AssetRelationTypeId", Byte.Parse(relation.AssetRelationType.GetHashCode().ToString())));
            //SqlParameter p = new SqlParameter("@AssetRelationTypeId", SqlDbType.TinyInt);
            //p.Value = Byte.Parse(assetassetrelation.AssetRelationType.GetHashCode().ToString());
            //paramList.Add(p);
            paramList.Add(new SqlParameter("@Created", relation.Created));
            paramList.Add(new SqlParameter("@Approved", relation.Approved));
            paramList.Add(new SqlParameter("@CreatedBy", relation.CreatedBy));
            paramList.Add(new SqlParameter("@ApprovedBy", relation.ApprovedBy));
            paramList.Add(new SqlParameter("@DeletedBy", relation.DeletedBy));

            return(base.ExecuteSql(spAssetAssetRelation_Save, paramList));
        }
        public XObjectRelation Get(Guid Id)
        {
            XObjectRelation relation = null;

            List <SqlParameter> paramList = new List <SqlParameter>();

            paramList.Add(new SqlParameter("@Id", Id));

            using (SqlDataReader rdr = base.OpenDataReader(spAssetAssetRelation_Get, paramList))
            {
                if ((rdr == null) || (!rdr.HasRows))
                {
                    return(null);
                }

                relation = new XObjectRelation();

                rdr.Read();

                if (!rdr.IsDBNull(rdr.GetOrdinal("FromAssetId")))
                {
                    relation.FromAssetId = rdr.GetGuid(rdr.GetOrdinal("FromAssetId"));
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("ToAssetId")))
                {
                    relation.ToAssetId = rdr.GetGuid(rdr.GetOrdinal("ToAssetId"));
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("AssetRelationTypeId")))
                {
                    relation.AssetRelationType = EnumerationOps.EAssetRelationTypeFromValue((Int16)rdr.GetByte(rdr.GetOrdinal("AssetRelationTypeId")));
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("Created")))
                {
                    relation.Created = (DateTime)rdr[rdr.GetOrdinal("Created")];
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("Approved")))
                {
                    relation.Approved = (DateTime)rdr[rdr.GetOrdinal("Approved")];
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("CreatedBy")))
                {
                    relation.CreatedBy = rdr.GetGuid(rdr.GetOrdinal("CreatedBy"));
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("ApprovedBy")))
                {
                    relation.ApprovedBy = rdr.GetGuid(rdr.GetOrdinal("ApprovedBy"));
                }

                if (!rdr.IsDBNull(rdr.GetOrdinal("DeletedBy")))
                {
                    relation.DeletedBy = rdr.GetGuid(rdr.GetOrdinal("DeletedBy"));
                }

                relation.Id      = Id;
                relation.IsNew   = false;
                relation.IsDirty = false;
            }

            return(relation);
        }
        public List <XObjectRelation> AssetRelationList_GetByFromAssetId(Guid fromassetid)
        {
            List <XObjectRelation> list = new List <XObjectRelation>();

            List <SqlParameter> paramList = new List <SqlParameter>();

            paramList.Add(new SqlParameter("@Id", fromassetid));

            using (SqlDataReader drdSql = base.OpenDataReader(spAssetAssetRelationList_GetByFromAssetId, paramList))
            {
                if ((drdSql != null) && (drdSql.HasRows))
                {
                    //get the index of each property we are going to load
                    int Id                  = drdSql.GetOrdinal("Id");
                    int FromAssetId         = drdSql.GetOrdinal("FromAssetId");
                    int ToAssetId           = drdSql.GetOrdinal("ToAssetId");
                    int AssetRelationTypeId = drdSql.GetOrdinal("AssetRelationTypeId");
                    int Created             = drdSql.GetOrdinal("Created");
                    int Approved            = drdSql.GetOrdinal("Approved");
                    int CreatedBy           = drdSql.GetOrdinal("CreatedBy");
                    int ApprovedBy          = drdSql.GetOrdinal("ApprovedBy");
                    int DeletedBy           = drdSql.GetOrdinal("DeletedBy");

                    while (drdSql.Read())
                    {
                        XObjectRelation relation = new XObjectRelation();

                        if (!drdSql.IsDBNull(Id))
                        {
                            relation.Id = drdSql.GetGuid(Id);
                        }

                        if (!drdSql.IsDBNull(FromAssetId))
                        {
                            relation.FromAssetId = drdSql.GetGuid(FromAssetId);
                        }

                        if (!drdSql.IsDBNull(ToAssetId))
                        {
                            relation.ToAssetId = drdSql.GetGuid(ToAssetId);
                        }

                        if (!drdSql.IsDBNull(AssetRelationTypeId))
                        {
                            relation.AssetRelationType = EnumerationOps.EAssetRelationTypeFromValue((Int16)drdSql.GetByte(AssetRelationTypeId));
                        }

                        if (!drdSql.IsDBNull(Created))
                        {
                            relation.Created = (DateTime)drdSql.GetValue(Created);
                        }

                        if (!drdSql.IsDBNull(Approved))
                        {
                            relation.Approved = (DateTime)drdSql.GetValue(Approved);
                        }

                        if (!drdSql.IsDBNull(CreatedBy))
                        {
                            relation.CreatedBy = drdSql.GetGuid(CreatedBy);
                        }

                        if (!drdSql.IsDBNull(ApprovedBy))
                        {
                            relation.ApprovedBy = drdSql.GetGuid(ApprovedBy);
                        }

                        if (!drdSql.IsDBNull(DeletedBy))
                        {
                            relation.DeletedBy = drdSql.GetGuid(DeletedBy);
                        }

                        relation.IsNew   = false;
                        relation.IsDirty = false;

                        list.Add(relation);
                    }
                }
            }

            return(list);
        }
Beispiel #4
0
        private bool Approve(XSubmittal submittal, Guid userId)
        {
            //Helpers.Log("PropertyValueSubmittalLayer", "PropertyValueSubmittal_Approve()");

            if (submittal != null)
            {
                foreach (XValue pv in submittal.PropertyValues)
                {
                    pv.Approved   = DateTime.Now;
                    pv.ApprovedBy = userId;
                    pv.IsDirty    = true;
                }

                submittal.Approved   = DateTime.Now;
                submittal.ApprovedBy = userId;
                submittal.IsDirty    = true;

                //List<SynchTrigger> triggers = this.CreateSynchTriggers(submittal);

                this.Save(submittal, false, userId);
                //new SynchTriggerDal().Save(triggers);

                List <Guid> propIds = new List <Guid>();
                foreach (XValue pv in submittal.PropertyValues)
                {
                    if (!propIds.Contains(pv.PropertyId))
                    {
                        propIds.Add(pv.PropertyId);
                    }
                }

                IDictionary <Guid, IXProperty> properties = new XPropertyDomain().GetObjectDictionary(propIds);

                foreach (XValue pv in submittal.PropertyValues)
                {
                    IXProperty prop = properties[pv.PropertyId];

                    if (prop != null)
                    {
                        XObjectRelation relation = null;

                        if ((prop.DataType == EDataType.Relation_ParentChild) || (prop.DataType == EDataType.Relation_ChildParent))
                        {
                            #region Relations

                            // need to create a relation for this item
                            relation = new XObjectRelation();

                            if (prop.DataType == EDataType.Relation_ParentChild)
                            {
                                relation.FromAssetId = pv.AssetId;
                                relation.ToAssetId   = new Guid(pv.Value);
                            }
                            else
                            {
                                relation.FromAssetId = new Guid(pv.Value);
                                relation.ToAssetId   = pv.AssetId;
                            }

                            relation.AssetRelationType = EObjectRelationType.ParentChild;

                            #endregion
                        }
                        else if (prop.DataType == EDataType.Dependency)
                        {
                            #region Dependency
                            relation                   = new XObjectRelation();
                            relation.FromAssetId       = pv.AssetId;
                            relation.ToAssetId         = new Guid(pv.Value);
                            relation.AssetRelationType = EObjectRelationType.Dependency;
                            #endregion
                        }
                        else if ((prop.DataType == EDataType.User) && (prop.RoleId.HasValue))
                        {
                            // TODO: Complete implementation of the dynamic role-based security

                            if (!string.IsNullOrEmpty(pv.Value))
                            {
                                Guid memberId;

                                if (Guid.TryParse(pv.Value, out memberId))
                                {
                                    XRoleDomain roleLayer = new XRoleDomain();
                                    if (!roleLayer.ContainsUser(prop.RoleId.Value, memberId))
                                    {
                                        //roleLayer.AddMemberToRole(memberId, prop.RoleId.Value, Constants.MemberIds.Admin);
                                    }
                                }
                            }

                            // determine if someone else is already in this value
                            // if they are, we need to determine whether or not they are in this role for another asset
                            // if not, remove the role association
                            // if they are, do nothing
                            // determine whether or not the newly-supplied user is in this role
                            // if not, add them to the role
                            // if they are, do nothing
                        }

                        if (prop.IsSystem && (prop.SystemType == ESystemType.AssetName))
                        {
                            bool renamed = new XObjectDomain <XObject>().Rename(pv.AssetId, pv.Value);
                        }

                        if (relation != null)
                        {
                            #region more relation stuff

                            relation.Created    = DateTime.Now;
                            relation.CreatedBy  = submittal.CreatedBy;
                            relation.Approved   = relation.Created;
                            relation.ApprovedBy = submittal.CreatedBy;

                            XObjectRelationDomain relationDal = new XObjectRelationDomain();

                            // a child can only have one parent
                            // delete any previous relations
                            if (prop.DataType == EDataType.Relation_ChildParent)
                            {
                                relationDal.RemoveExistingParentRelations(relation.FromAssetId, relation.AssetRelationType.GetHashCode());
                            }

                            if (!relationDal.AssetAssetRelationExists(relation.FromAssetId, relation.ToAssetId, relation.AssetRelationType.GetHashCode()))
                            {
                                relationDal.Save(relation);
                            }

                            // TODO: Need more logic in here.  Other cases
                            // What if relation is removed?

                            #endregion
                        }
                    }
                }

                return(new XObjectDomain().MarkAsUpdated(submittal.AssetId, submittal.CreatedBy));
            }

            return(false);
        }