public List <RelationshipFilterDTO> GetRelationshipFilters(DR_Requester requester, int relationshipID)
 {
     return(bizRelationshipFilter.GetRelationshipFilters(requester, relationshipID));
 }
コード例 #2
0
        public void SaveRequestFile(RequestFileDTO requestFile, DR_Requester requester)
        {
            BizRequest bizRequest = new BizRequest();

            bizRequest.SaveRequestFile(requestFile, requester);
        }
コード例 #3
0
 public List <ProcessDTO> GetProcessesForExecution(DR_Requester requester)
 {
     return(bizRequest.GetProcessesForExecution(requester));
 }
コード例 #4
0
 public List <GraphDTO> SearchGraphs(DR_Requester dR_Requester, string singleFilterValue)
 {
     return(bizGraph.SearchGraphs(dR_Requester, singleFilterValue));
 }
コード例 #5
0
        private DataMenuSettingDTO ToDataMenuSettingDTO(DR_Requester requester, DataMenuSetting entity, bool withDetails)
        {
            var result = new DataMenuSettingDTO();

            if (withDetails)
            {
                foreach (var item in entity.DataMenuSearchableReportRelationship)
                {
                    //دسترسی به خود گزارش هم کنترل شود
                    if (bizEntityRelationshipTail.DataIsAccessable(requester, item.EntityRelationshipTail))
                    {
                        if (bizEntityReport.DataIsAccessable(requester, item.EntitySearchableReport.EntityReport))
                        {
                            var tail            = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
                            var entityReportDTO = new EntitySearchableReportDTO();
                            bizEntitySearchableReport.ToEntitySearchableReportDTO(item.EntitySearchableReport, entityReportDTO, withDetails);
                            result.SearchableReportRelationships.Add(ToDataMenuSearchableReportRelationshipDTO(item, tail, entityReportDTO));
                        }
                    }
                }
                foreach (var item in entity.DataMenuDataViewRelationship)
                {
                    if (bizEntityRelationshipTail.DataIsAccessable(requester, item.EntityRelationshipTail))
                    {
                        var tail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
                        result.DataViewRelationships.Add(ToDataMenuDataViewRelationshipDTO(item, tail));
                    }
                }
                foreach (var item in entity.DataMenuGridViewRelationship)
                {
                    if (bizEntityRelationshipTail.DataIsAccessable(requester, item.EntityRelationshipTail))
                    {
                        var tail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
                        result.GridViewRelationships.Add(ToDataMenuGridViewRelationshipDTO(item, tail));
                    }
                }
                foreach (var item in entity.DataMenuDataItemReportRelationship)
                {
                    if (bizEntityReport.DataIsAccessable(requester, item.EntityDataItemReportID))
                    {
                        var entityReportDTO = new EntityDataItemReportDTO();
                        bizEntityDataItemReport.ToEntityDataItemReportDTO(item.EntityDataItemReport, entityReportDTO, false);
                        result.DataItemReports.Add(ToDataMenuDataItemReportRelationshipDTO(item, entityReportDTO));
                    }
                }
            }
            result.EntityID         = entity.TableDrivedEntityID;
            result.EntityListViewID = entity.EntityListViewID;
            result.Name             = entity.Name;
            if (entity.DataMenuForViewEntity.Any())
            {
                result.RelationshipID = entity.DataMenuForViewEntity.First().RelationshipID;
                if (withDetails)
                {
                    if (bizRelationship.DataIsAccessable(requester, entity.DataMenuForViewEntity.First().Relationship, false, true))
                    {
                        result.Relationship = bizRelationship.ToRelationshipDTO(entity.DataMenuForViewEntity.First().Relationship);
                    }
                }
                result.TargetDataMenuSettingID = entity.DataMenuForViewEntity.First().TargetDataMenuSettingID;
                if (withDetails)
                {
                    result.DataMenuSetting = ToDataMenuSettingDTO(requester, entity.DataMenuForViewEntity.First().DataMenuSetting1, false);
                }
            }
            result.ID = entity.ID;
            if (withDetails)
            {
                result.IconContent = entity.IconContent;
            }
            return(result);
        }
コード例 #6
0
        private FunctionResult CalculateFormula(string expression, DP_DataRepository mainDataItem, DR_Requester requester, List <int> usedFormulaIDs = null)
        {
            FunctionResult result = new FunctionResult();

            //result.FormulaUsageParemeters = FormulaUsageParemeters;
            //FormulaInstance formulaInstance = null;
            try
            {
                var target = FormulaInstanceInternalHelper.GetExpressionEvaluator(mainDataItem, requester, false, usedFormulaIDs);

                result.Result = target.Calculate(expression);

                //formulaInstance = new FormulaInstance(mainDataItem, requester, usedFormulaIDs);
                //formulaInstance.PropertyGetCalled += FormulaInstance_PropertyGetCalled;
                //var instanceResult = formulaInstance.CalculateExpression(expression);
                //if (formulaInstance.Exceptions.Any())
                //    throw new Exception("instance Error");
                //else
                //    result.Result = instanceResult;
                //formulaInstance.PropertyGetCalled -= FormulaInstance_PropertyGetCalled;
            }
            catch (Exception ex)
            {
                result.Exception = new Exception("خطا در محاسبه فرمول" + Environment.NewLine + ex.Message);
            }
            return(result);
        }
コード例 #7
0
 public GraphDTO GetGraph(DR_Requester dR_Requester, int ID)
 {
     return(bizGraph.GetGraph(dR_Requester, ID));
 }
コード例 #8
0
 public CommandFunctionParam(I_EditEntityArea editEntityArea, DR_Requester requester) : base(requester)
 {
     EditEntityArea = editEntityArea;
 }
コード例 #9
0
        private MyCustomSingleData GetCustomSingleData(MyPropertyInfo property, DP_DataRepository dataItem, DR_Requester requester, bool definition, Dictionary <string, MyPropertyInfo> properties, List <int> usedFormulaIDs)
        {
            var item = new MyCustomSingleData(dataItem, Requester, Definition, properties, UsedFormulaIDs);

            item.ParentCustomData = this;
            item.ParentProperty   = property;
            return(item);
        }
コード例 #10
0
        public List <Tuple <DP_DataRepository, List <QueryItem> > > GetDeleteQueryItems(DR_Requester requester, List <DP_DataRepository> items)
        {
            List <Tuple <DP_DataRepository, List <QueryItem> > > result = new List <Tuple <DP_DataRepository, List <QueryItem> > >();
            List <DP_DataRepository> rootDataItems = new List <DP_DataRepository>();

            foreach (var item in items)
            {
                DP_DataRepository rootDeleteITem = new DP_DataRepository(item.TargetEntityID, item.TargetEntityAlias);
                rootDeleteITem.SetProperties(item.GetProperties());
                rootDeleteITem.DataView       = item.DataView;
                rootDeleteITem.EntityListView = item.EntityListView;
                rootDeleteITem.IsFullData     = item.IsFullData;

                var loop = GetTreeItems(requester, rootDeleteITem, rootDeleteITem);
                if (loop)
                {
                    throw new Exception("امکان حذف بعلت وابستگی داده ها وجود ندارد");
                }
                rootDataItems.Add(rootDeleteITem);
            }
            foreach (var item in rootDataItems)
            {
                var queryItems = GetDeleteQueryQueue(requester, item);
                foreach (var queryItem in queryItems)
                {
                    if (queryItem.QueryType == Enum_QueryItemType.Delete)
                    {
                        queryItem.Query = GetDeleteQueryQueue(requester, queryItem);
                    }
                    else if (queryItem.QueryType == Enum_QueryItemType.Update)
                    {
                        EditQueryItemManager editQueryItemManage = new EditQueryItemManager();
                        queryItem.Query = editQueryItemManage.GetUpdateQuery(queryItem);
                    }
                }
                result.Add(new Tuple <DP_DataRepository, List <QueryItem> >(item, queryItems));
            }
            return(result);
        }
コード例 #11
0
        public bool GetTreeItems(DR_Requester requester, DP_DataRepository deleteDataItem, DP_DataRepository rootDeleteItem)
        {
            List <ChildRelationshipInfo> result = new List <ChildRelationshipInfo>();
            bool loop = false;
            //   DP_DataRepository resultItem = item;
            var entity = bizTableDrivedEntity.GetTableDrivedEntity(requester, deleteDataItem.TargetEntityID, EntityColumnInfoType.WithSimpleColumns, EntityRelationshipInfoType.WithRelationships);

            foreach (var relationship in entity.Relationships.Where(x => x.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign))
            {
                if (!loop)

                {
                    var searchRepository = RelationshipDataManager.GetSecondSideSearchDataItemByRelationship(deleteDataItem, relationship.ID);
                    var newrequester     = new DR_Requester();
                    newrequester.SkipSecurity = true;
                    DR_SearchViewRequest searchViewRequest = new DR_SearchViewRequest(newrequester, searchRepository);
                    var searchViewResult = SearchRequestManager.Process(searchViewRequest);
                    if (searchViewResult.ResultDataItems.Any())
                    {
                        var childRelationshipInfo = new ChildRelationshipInfo();
                        childRelationshipInfo.SourceData   = deleteDataItem;
                        childRelationshipInfo.Relationship = relationship;
                        result.Add(childRelationshipInfo);
                        childRelationshipInfo.RelationshipDeleteOption = relationship.DeleteOption;
                        deleteDataItem.ChildRelationshipInfos.Add(childRelationshipInfo);
                        if (childRelationshipInfo.RelationshipDeleteOption == RelationshipDeleteOption.SetNull)
                        {
                            foreach (var childItem in searchViewResult.ResultDataItems)
                            {
                                DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias);
                                dataItem.DataView = childItem;
                                dataItem.ParantChildRelationshipInfo = childRelationshipInfo;
                                childRelationshipInfo.RelatedData.Add(dataItem);
                            }
                        }
                        else
                        {
                            bool repeatedInParents = false;
                            foreach (var childItem in searchViewResult.ResultDataItems)
                            {//هردفعه پرنتها برای هر ایتم گرفته نشود
                                List <DP_DataRepository> parents = GetParentDataItems(childRelationshipInfo);
                                if (parents.Any(z => z.TargetEntityID == childItem.TargetEntityID && z.KeyProperties.All(x => childItem.Properties.Any(y => y.IsKey && x.ColumnID == y.ColumnID && x.Value == y.Value))))
                                {
                                    var parentRepeted = parents.First(z => z.TargetEntityID == childItem.TargetEntityID && z.KeyProperties.All(x => childItem.Properties.Any(y => y.IsKey && x.ColumnID == y.ColumnID && x.Value == y.Value)));
                                    loop = true;
                                    repeatedInParents = true;
                                    DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias);
                                    dataItem.DataView = childItem;
                                    dataItem.ParantChildRelationshipInfo = childRelationshipInfo;
                                    dataItem.Error = "وابستگی تکراری با " + parentRepeted.ViewInfo;
                                    childRelationshipInfo.RelatedData.Add(dataItem);
                                }
                            }
                            if (!repeatedInParents)
                            {
                                foreach (var childItem in searchViewResult.ResultDataItems)
                                {
                                    if (ChildItemExistInTree(rootDeleteItem, childItem))
                                    {
                                    }
                                    else
                                    {
                                        DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias);
                                        dataItem.DataView = childItem;
                                        dataItem.ParantChildRelationshipInfo = childRelationshipInfo;
                                        childRelationshipInfo.RelatedData.Add(dataItem);
                                        var innerloop = GetTreeItems(requester, dataItem, rootDeleteItem);
                                        if (innerloop)
                                        {
                                            loop = true;
                                            return(loop);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(loop);
        }
コード例 #12
0
 public IQueryable <OrganizationPost> GetDBOrganizationPosts(MyProjectEntities context, DR_Requester requester)
 {
     if (requester.PostIds.Any())
     {
         return(context.OrganizationPost.Where(x => requester.PostIds.Contains(x.ID)));
     }
     else
     {
         //BizOrganization bizOrganization = new BizOrganization();
         return(context.OrganizationPost.Where(x => x.UserID == requester.Identity));
     }
 }
コード例 #13
0
        //public void UpdateEntitySecurityInDirect(EntitySecurityInDirectDTO message)
        //{
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        var dbItem = projectContext.EntitySecurityInDirect.FirstOrDefault(x => x.ID == message.ID);
        //        if (dbItem == null)
        //        {
        //            dbItem = new DataAccess.EntitySecurityInDirect();
        //            projectContext.EntitySecurityInDirect.Add(dbItem);
        //        }
        //        dbItem.Mode = (short)message.Mode;
        //        dbItem.TableDrivedEntityID = message.TableDrivedEntityID;
        //        dbItem.EntityRelationshipTailID = message.RelationshipTailID;
        //        projectContext.SaveChanges();
        //    }
        //}
        public EntityStateDTO GetAppliableConditionsBySecuritySubject(DR_Requester requester, int entityID, DataDirectSecurityMode mode)
        {
            //var cachedItem = CacheManager.GetCacheManager().GetCachedItem(CacheItemType.ConditionalPermission, securitySubjectID.ToString(), entityID.ToString());
            //if (cachedItem != null)
            //    return (cachedItem as List<ConditionalPermissionDTO>);
            //List<int> organizationTypeIDs = new List<int>();
            //List<int> organizationIDs = new List<int>();
            //List<int> roleTypeIDs = new List<int>();
            //List<int> orgTypeRoleTypeIDs = new List<int>();
            //Tuple<EntitySecurityInDirectDTO, List<EntitySecurityDirectDTO>> result;= new Tuple<EntitySecurityInDirectDTO, List<EntitySecurityDirectDTO>>();

            BizRoleSecurity bizRoleSecurity = new BizRoleSecurity();
            List <EntityStateConditionDTO> entityStateConditions = new List <EntityStateConditionDTO>();

            //  EntitySecurityInDirectDTO indisrectSecurityDTO = null;
            //   EntityStateDTO entityState = null;
            using (var context = new MyProjectEntities())
            {
                var directSecurityEntityID      = entityID;
                var targetEntityDisrectSecurity = GetEntitySecurityDirectByEntityID(requester, entityID, mode, true);
                if (targetEntityDisrectSecurity == null)
                {
                    //var indisrectSecurity = GetEntitySecurityInDirect(context.EntitySecurityInDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID);
                    //if (indisrectSecurity == null)
                    //    return null;
                    //else
                    //{
                    //    indisrectSecurityDTO = bizRoleSecurity.ToEntitySecurityInDirectDTO(indisrectSecurity, true);
                    //    var targetEntity = indisrectSecurity.EntityRelationshipTail.TableDrivedEntity;
                    //    directSecurityEntityID = targetEntity.ID;
                    //    targetEntityDisrectSecurity = context.EntitySecurityDirect.FirstOrDefault(x => x.TableDrivedEntityID == targetEntity.ID && x.Mode == (short)DataDirectSecurityMode.FetchData);
                    //}
                    return(null);
                }


                //   entityState = bizEntityState.ToEntityStateDTO(requester, targetEntityDisrectSecurity.TableDrivedEntityState, true);
                foreach (var condition in targetEntityDisrectSecurity.EntityState.StateConditions.ToList())
                {
                    if (ConditionSecuritySubjectIsValid(requester, condition))
                    {
                        GetConditionDTOWithValues(requester, condition);
                    }
                    else
                    {
                        targetEntityDisrectSecurity.EntityState.StateConditions.Remove(condition);
                    }
                }

                return(targetEntityDisrectSecurity.EntityState);
                //var organizationPosts = GetDBOrganizationPosts(context, requester);
                //BizOrganization bizOrganization = new BizOrganization();
                //foreach (var post in organizationPosts)
                //{
                //    //  List<EntitySecurityDirectDTO> listDirectSecuritiesForPost = new List<EntitySecurityDirectDTO>();
                //    var postDto = requester.Posts.FirstOrDefault(x => x.ID == post.ID);
                //    if (postDto == null)
                //        postDto = bizOrganization.GetOrganizationPost(post.ID);
                //    var postDisrectSecurities = GetDirectSecurities(requester, postDto, targetEntityDisrectSecurities, directSecurityEntityID);
                //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.Organization.SecuritySubject.ID));
                //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.SecuritySubject.ID));
                //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.OrganizationType.SecuritySubject.ID));
                //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.RoleType.SecuritySubject.ID));


                //منطق اینجا رو نفهمیدم غیر فعال شد. بجاش بالا همه دسترسی ها تجمیع می شوند
                //////if (postDisrectSecurities.Any())
                //////    listDirectSecuritiesForPost.AddRange(postDisrectSecurities);
                //////else
                //////{
                //////    var orgTypeRoleTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.SecuritySubject.ID);
                //////    var organizationDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.Organization.SecuritySubject.ID);
                //////    if (orgTypeRoleTypeDisrectSecurities.Any())
                //////    {
                //////        //اینجا دسترسی های موازی با هم جمع میشوند زیرا معلوم نیست بروی کدام آبجکت دارند اعمال میشوند و تصمیم گیری در مورد تداخل دسترسی بروی یک آبجکت به کلاینت واگذار میشود
                //////        listDirectSecuritiesForPost.AddRange(orgTypeRoleTypeDisrectSecurities);
                //////        listDirectSecuritiesForPost.AddRange(organizationDisrectSecurities);
                //////    }
                //////    else
                //////    {
                //////        var roleTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.RoleType.SecuritySubject.ID);
                //////        if (organizationDisrectSecurities.Any())
                //////        {
                //////            listDirectSecuritiesForPost.AddRange(organizationDisrectSecurities);
                //////            listDirectSecuritiesForPost.AddRange(roleTypeDisrectSecurities);
                //////        }
                //////        else
                //////        {
                //////            var organizationTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.OrganizationType.SecuritySubject.ID);
                //////            listDirectSecuritiesForPost.AddRange(organizationTypeDisrectSecurities);
                //////            listDirectSecuritiesForPost.AddRange(roleTypeDisrectSecurities);
                //////        }
                //////    }
                //////}



                //if (listDirectSecuritiesForPost.Any())
                //{
                //اونهای که سابجکت نال دارند و عمومی هستند
                //var generalSecurityItems = GetGeneralEntitySecurityItems(requester, directSecurityEntityID);
                //if (generalSecurityItems.Any())
                //    postDisrectSecurities.AddRange(generalSecurityItems);
                //foreach (var generalSecurityItem in generalSecurityItems)
                //{
                //    foreach (var directSecurityItem in listDirectSecuritiesForPost)
                //    {
                //        directSecurityItem.Conditions.AddRange(generalSecurityItem.Conditions);
                //    }
                //}
                //}
                //listDirectSecuritiesForPost.AddRange(generalSecurityItems);
                //    allPostsDirectSecurities.Add(new PostEntityDataSecurityItems(postDto, postDisrectSecurities));
                //}
            }
            //CacheManager.GetCacheManager().AddCacheItem(result, CacheItemType.ConditionalPermission, securitySubjectID.ToString(), entityID.ToString());
            //   return new EntityDataSecurityItems(entityState, indisrectSecurityDTO, entityStateConditions);
        }
コード例 #14
0
        public EntitySecurityDirectDTO ToEntitySecurityDirectDTO(DR_Requester requester, EntitySecurityDirect item, bool withDetails)
        {
            EntitySecurityDirectDTO result = new EntitySecurityDirectDTO();

            result.ID = item.ID;
            //if (item.SecuritySubjectID != null)
            //    result.SecuritySubjectID = item.SecuritySubjectID.Value;
            //else
            //    result.SecuritySubjectID = 0;
            if (item.Mode != null)
            {
                result.Mode = (DataDirectSecurityMode)item.Mode;
            }
            //result.IgnoreSecurity = item.IgnoreSecurity;
            result.Description         = item.Description;
            result.TableDrivedEntityID = item.TableDrivedEntityID;
            //if (item.SecuritySubjectOperator != null)
            //    result.SecuritySubjectInORNotIn = (InORNotIn)item.SecuritySubjectOperator;
            //foreach (var valItem in item.EntitySecurityDirectSecuritySubject)
            //{
            //    result.SecuritySubjects.Add(new ChildSecuritySubjectDTO { SecuritySubjectID = valItem.SecuritySubjectID });//, SecuritySubjectOperator = (Enum_SecuritySubjectOperator)valItem.SecuritySubjectOperator });
            //}

            //   EntitySecurityDirectStatesDTO securityState = new EntitySecurityDirectStatesDTO();
            result.EntityStateID = item.TableDrivedEntityStateID;
            if (withDetails && result.EntityStateID != 0)
            {
                BizEntityState bizEntityState = new BizEntityState();
                result.EntityState = bizEntityState.ToEntityStateDTO(requester, item.TableDrivedEntityState, withDetails);
            }

            //foreach (var valItem in item.EntitySecurityDirectValues)
            //{
            //    result.Values.Add(new ModelEntites.EntityStateValueDTO() { Value = valItem.Value, SecurityReservedValue = valItem.ReservedValue == null ? SecurityReservedValue.None : (SecurityReservedValue)valItem.ReservedValue });
            //}

            //result.FormulaID = item.FormulaID ?? 0;
            //if (result.FormulaID != 0 && withDetails)
            //{  //??با جزئیات؟؟........................................................................
            //    var bizFormula = new BizFormula();
            //    result.Formula = bizFormula.GetFormula(requester, item.FormulaID.Value, withDetails);
            //}
            //result.ColumnID = item.ColumnID ?? 0;
            //if (item.Column != null)
            //{
            //    BizColumn bizColumn = new BizColumn();
            //    result.Column = bizColumn.ToColumnDTO(item.Column, true);

            //}
            //result.RelationshipTailID = item.EntityRelationshipTailID ?? 0;
            //if (item.EntityRelationshipTail != null)
            //{
            //    BizEntityRelationshipTail bizEntityRelationshipTail = new BizEntityRelationshipTail();
            //    result.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
            //}
            //if (item.ValueOperator != null)
            //    result.ValueOperator = (Enum_EntityStateOperator)item.ValueOperator;

            //result.EntityStates.Add(securityState);

            return(result);
        }
        public object GetValueSomeHow(DR_Requester requester, DP_DataRepository sentdata, EntityRelationshipTailDTO valueRelationshipTail, int valueColumnID, bool firstIfMultiple = false)
        {
            if (valueRelationshipTail == null)
            {
                var proprty = sentdata.GetProperty(valueColumnID);
                return(proprty?.Value);
            }
            else
            {
                DP_DataRepository relatedData = null;
                if (sentdata.ParantChildRelationshipInfo != null && sentdata.ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                {
                    if (sentdata.ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                    {
                        relatedData = sentdata.ParantChildRelationshipInfo.SourceData;
                    }
                }
                else if (sentdata.ChildRelationshipInfos.Any(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID))
                {
                    var childInfo = sentdata.ChildRelationshipInfos.First(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID);
                    if (childInfo.RelatedData.Count > 1)
                    {
                        if (firstIfMultiple)
                        {
                            relatedData = childInfo.RelatedData.First();
                        }
                        else
                        {
                            throw new Exception("asav");
                        }
                    }
                    else if (childInfo.RelatedData.Count == 1)
                    {
                        relatedData = childInfo.RelatedData.First();
                    }
                    else if (childInfo.RelatedData.Count == 0)
                    {
                        //یعنی یا داده مرتبطی وجود نداشته یا حذف شده
                        return("");
                    }
                }
                if (relatedData != null)
                {
                    return(GetValueSomeHow(requester, relatedData, valueRelationshipTail.ChildTail, valueColumnID, firstIfMultiple));
                }
                else
                {
                    //var columnValues = sentdata.KeyProperties;
                    //if (columnValues == null || columnValues.Count == 0)
                    //    throw new Exception("asasd");

                    //سکوریتی داده اعمال میشود
                    //  var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester();

                    //این شرط منطقیه؟؟
                    if (!sentdata.IsNewItem)
                    {
                        var relationshipTailDataManager  = new RelationshipTailDataManager();
                        var searchDataTuple              = relationshipTailDataManager.GetTargetSearchItemFromRelationshipTail(sentdata, valueRelationshipTail);
                        DR_SearchFullDataRequest request = new DR_SearchFullDataRequest(requester, searchDataTuple);
                        var searchResult = new SearchRequestManager().Process(request);
                        if (searchResult.ResultDataItems.Count > 1)
                        {
                            throw new Exception("asdasd");
                        }
                        else if (searchResult.ResultDataItems.Count == 1)
                        {
                            var foundDataItem = searchResult.ResultDataItems.First();
                            var prop          = foundDataItem.GetProperty(valueColumnID);
                            if (prop != null)
                            {
                                return(prop.Value);
                            }
                            else
                            {
                                return("");
                            }
                        }
                        else
                        {
                            return("");
                        }
                    }
                    else
                    {
                        return("");
                    }
                }
            }
            //return "";
        }
コード例 #16
0
        public LetterResult UpdateLetter(LetterDTO message, DR_Requester requester)
        {
            BizTableDrivedEntity bizTableDrivedEntity = new BizTableDrivedEntity();

            if (!bizTableDrivedEntity.DataIsAccessable(requester, message.DataItem.TargetEntityID, new List <SecurityAction>()
            {
                SecurityAction.LetterEdit
            }))
            {
                throw new Exception("عدم دسترسی ثبت نامه");
            }
            LetterResult result        = new LetterResult();
            bool         isNew         = message.ID == 0;
            var          letterSetting = GetLetterSetting();

            if (letterSetting != null)
            {
                if (letterSetting.BeforeLetterSaveCodeID != 0)
                {
                    var resultFunction = codeFunctionHandler.GetCodeFunctionResult(requester, letterSetting.BeforeLetterSaveCodeID, message);
                    if (resultFunction.Exception != null)
                    {
                        var logResult = bizLogManager.AddLog(GetBeforeUpdateExceptionLog(message, resultFunction.Exception, isNew ? DataLogType.LetterInsert : DataLogType.LetterUpdate), requester);
                        if (!string.IsNullOrEmpty(logResult))
                        {
                            ResultDetail logException = new ResultDetail();
                            logException.Title                = "خطای ثبت لاگ";
                            logException.Description          = "خطای لاگ برای اقدام قبل از ثبت نامه";
                            logException.TechnicalDescription = logResult;
                            result.Details.Add(logException);
                        }
                        result.Message = "اقدامات مرتبط قبل از ثبت نامه با خطا همراه بود";
                        return(result);
                    }
                }
            }
            using (var letterModel = new MyIdeaDataDBEntities())
            {
                try
                {
                    var dbLetter = letterModel.Letter.FirstOrDefault(x => x.ID == message.ID);
                    if (dbLetter == null)
                    {
                        dbLetter = new Letter();
                        dbLetter.CreationDate = DateTime.Now;
                        dbLetter.UserID       = requester.Identity;
                        //var dataItemID = bizDataItem.GetOrCreateDataItem(message.DataItem);
                        if (message.DataItem.DataItemID == 0)
                        {
                            dbLetter.MyDataItemID       = bizDataItem.GetOrCreateDataItem(message.DataItem);
                            message.DataItem.DataItemID = dbLetter.MyDataItemID;
                        }
                        else
                        {
                            dbLetter.MyDataItemID = message.DataItem.DataItemID;
                        }
                    }
                    dbLetter.ID                    = message.ID;
                    dbLetter.Desc                  = message.Desc;
                    dbLetter.LetterNumber          = message.LetterNumber;
                    dbLetter.IsGeneratedOrSelected = message.IsGeneratedOrSelected;
                    dbLetter.FromExternalSource    = message.IsExternalOrInternal;
                    dbLetter.ExternalSourceKey     = message.ExternalCode;
                    dbLetter.LetterNumber          = message.LetterNumber;
                    dbLetter.LetterDate            = message.LetterDate;
                    dbLetter.LetterTemplateID      = message.LetterTemplateID == 0 ? (int?)null : message.LetterTemplateID;
                    dbLetter.LetterTypeID          = message.LetterTypeID;
                    dbLetter.RelatedLetterID       = message.RelatedLetterID == 0 ? (int?)null : message.RelatedLetterID;
                    dbLetter.Title                 = message.Title;

                    if (dbLetter.FileRepository == null)
                    {
                        if (message.AttechedFile != null && message.AttechedFile.Content != null)
                        {
                            dbLetter.FileRepository = bizFileRepository.ToFileRepository(letterModel, message.AttechedFile);
                        }
                    }

                    if (dbLetter.ID == 0)
                    {
                        letterModel.Letter.Add(dbLetter);
                    }
                    letterModel.SaveChanges();
                    message.ID     = dbLetter.ID;
                    result.SavedID = dbLetter.ID;
                    result.Result  = true;
                }
                catch (Exception ex)
                {
                    result.Result  = false;
                    result.Message = ex.Message;
                }
                finally
                {
                    var logResult = bizLogManager.AddLog(GetUpdateLetterDataLog(message, result.Message, isNew ? DataLogType.LetterInsert : DataLogType.LetterUpdate), requester);
                    if (!string.IsNullOrEmpty(logResult))
                    {
                        ResultDetail logException = new ResultDetail();
                        logException.Title                = "خطای ثبت لاگ";
                        logException.Description          = "خطای لاگ برای ثبت نامه";
                        logException.TechnicalDescription = logResult;
                        result.Details.Add(logException);
                    }
                }
            }
            if (result.Result == false)
            {
                result.Message = "عملیات ثبت با خطا همراه بود";
                return(result);
            }
            else
            {
                bool afterSaveException = false;
                if (letterSetting != null)
                {
                    if (letterSetting.AfterLetterSaveCodeID != 0)
                    {
                        var resultFunction = codeFunctionHandler.GetCodeFunctionResult(requester, letterSetting.AfterLetterSaveCodeID, message);
                        if (resultFunction.Exception != null)
                        {
                            afterSaveException = true;
                            var logResult = bizLogManager.AddLog(GetAfterUpdateExceptionLog(message, resultFunction.Exception, isNew ? DataLogType.LetterInsert : DataLogType.LetterUpdate), requester);
                            if (!string.IsNullOrEmpty(logResult))
                            {
                                ResultDetail logException = new ResultDetail();
                                logException.Title                = "خطای ثبت لاگ";
                                logException.Description          = "خطای لاگ برای اقدام بعد از ثبت نامه";
                                logException.TechnicalDescription = logResult;
                                result.Details.Add(logException);
                            }
                            return(result);
                        }
                    }
                }
                if (afterSaveException)
                {
                    result.Message = "عملیات ثبت با موفقیت انجام شد اما اقدامات بعد از ثبت با خطا همراه بود";
                }
                else
                {
                    result.Message = "عملیات ثبت با موفقیت انجام شد";
                }

                return(result);
            }
        }
コード例 #17
0
        public FunctionResult CalculateFormulaTest(string expression, DP_DataRepository dataItem, DR_Requester requester, List <int> usedFormulaIDs = null)
        {
            var mainDataItem = GetMainDateItem(requester, dataItem);

            return(CalculateFormula(expression, mainDataItem, requester, usedFormulaIDs));
        }
コード例 #18
0
        public LetterDeleteResult DeleteLetter(DR_Requester requester, int letterID)
        {
            LetterDeleteResult result    = new LetterDeleteResult();
            string             exception = "";

            using (var context = new MyIdeaDataDBEntities())
            {
                //سکوریتی ثبت میتونه اینجا هم چک بشه
                //itemResult.ID = item.ID;
                var dbItem = context.Letter.First(x => x.ID == letterID);
                BizTableDrivedEntity bizTableDrivedEntity = new BizTableDrivedEntity();
                if (!bizTableDrivedEntity.DataIsAccessable(requester, dbItem.MyDataItem.TableDrivedEntityID, new List <SecurityAction>()
                {
                    SecurityAction.LetterEdit
                }))
                {
                    throw new Exception("عدم دسترسی ثبت نامه");
                }
                try
                {
                    if (dbItem.Letter1.Any())
                    {
                        foreach (var item in dbItem.Letter1)
                        {
                            ResultDetail relatedItemException = new ResultDetail();
                            relatedItemException.Title       = "دارای نامه مرتبط";
                            relatedItemException.Description = "نامه به شماره" + " " + item.LetterNumber + " " + "به تاریخ" + " " + item.LetterDate;
                            result.Details.Add(relatedItemException);
                        }
                        result.Message = "به علت وجود نامه های مرتبط عملیات حذف امکان پذیر نمی باشد";
                        return(result);
                    }
                    context.Letter.Remove(dbItem);

                    context.SaveChanges();
                    result.Result  = true;
                    result.Message = "عملیات حذف با موفقیت انجام شد";
                }
                catch (Exception ex)
                {
                    exception = ex.Message;
                    ResultDetail itemResult = new ResultDetail();
                    itemResult.Title                = "خطا";
                    itemResult.Description          = "حذف نامه با شناسه" + " " + letterID + " " + "با خطا همراه بود";
                    itemResult.TechnicalDescription = ex.Message;
                    result.Details.Add(itemResult);
                    result.Message = "عملیات حذف با خطا همراه بود";
                }
                finally
                {
                    var logResult = bizLogManager.AddLog(GetDeleteItemDataLog(dbItem, exception), requester);
                    if (!string.IsNullOrEmpty(logResult))
                    {
                        ResultDetail logException = new ResultDetail();
                        logException.Title                = "خطای ثبت لاگ";
                        logException.Description          = "ثبت لاگ برای حذف فایل با شناسه" + " " + dbItem.ID + " " + "با خطا همراه بود";
                        logException.TechnicalDescription = logResult;
                        result.Details.Add(logException);
                    }
                }
            }
            return(result);
        }
コード例 #19
0
 //FormulaDTO Formula { set; get; }
 public I_ExpressionEvaluator GetExpressionEvaluator(DP_DataRepository dataItem, DR_Requester requester, bool definition, List <int> usedFormulaIDs = null)
 {
     return(FormulaInstanceInternalHelper.GetExpressionEvaluator(dataItem, requester, definition, usedFormulaIDs));
 }
コード例 #20
0
        public FunctionResult GetCodeFunctionResult(DR_Requester resuester, int codeFunctionID, List <object> parameters)
        {
            var codeFunction = bizCodeFunction.GetCodeFunction(resuester, codeFunctionID);

            return(GetCodeFunctionResult(codeFunction, parameters));
        }
コード例 #21
0
 public List <GraphDTO> GetGraphs(DR_Requester dR_Requester, int entityID)
 {
     return(bizGraph.GetGraphByEntitiyID(dR_Requester, entityID));
 }
コード例 #22
0
 public List <DataLogDTO> SearchDataLogs(DR_Requester requester, int entityID, DateTime?fromDate, DateTime?toDate, DP_BaseData dataItem, DataLogType?logType,
                                         int columnID, int userID, bool?withMajorException, bool?withMinorException)
 {
     return(bizLogManager.SearchDataLogs(requester, entityID, fromDate, toDate, dataItem, logType, columnID, userID, withMajorException, withMinorException));
 }
コード例 #23
0
        public DataMenuResult GetDataMenu(DR_Requester requester, DP_DataView dataItem, int dataMenuSettingID)
        {
            DataMenuResult  result      = new DataMenuResult();
            List <DataMenu> resultMenus = new List <DataMenu>();

            result.DataMenus = resultMenus;
            var entityID     = dataItem.TargetEntityID;
            var simpleEntity = bizTableDrivedEntity.GetSimpleEntity(requester, entityID);

            if (simpleEntity == null)
            {
                return(null);
            }
            DataMenuSettingDTO dataMenuSetting = null;

            if (dataMenuSettingID != 0)
            {
                dataMenuSetting = GetDataMenuSetting(requester, dataMenuSettingID, true);
            }
            else
            {
                dataMenuSetting = GetDefaultDataMenuSetting(requester, entityID, true);
            }

            if (dataMenuSetting != null)
            {
                result.DataMenuSettingName = dataMenuSetting.Name;
            }

            if (simpleEntity.IsView)
            {
                if (dataMenuSetting != null)
                {
                    if (dataMenuSetting.RelationshipID != 0 && dataMenuSetting.TargetDataMenuSettingID != 0)
                    {
                        var relationship = bizRelationship.GetRelationship(dataMenuSetting.RelationshipID);
                        var dataView     = CreateDataView(requester, dataItem, relationship);
                        return(GetDataMenu(requester, dataView, dataMenuSetting.TargetDataMenuSettingID));
                    }
                }
                //var fullEntity = bizTableDrivedEntity.GetTableDrivedEntity(requester, entityID, EntityColumnInfoType.WithSimpleColumns, EntityRelationshipInfoType.WithRelationships);
                //if (fullEntity.Relationships.Any())
                //{
                //    foreach (var relationsip in fullEntity.Relationships)
                //    {
                //        var dataView = CreateDataView(dataItem, relationsip);
                //        var menu = AddMenu(result, relationsip.Alias, "", DataMenuType.ViewRel);
                //        menu.ViewRelTargetDataItem = dataView;
                //    }
                //}
            }
            else
            {
                var dataEntryRootMenu = AddMenu(resultMenus, "نمایش/اصلاح داده", "", DataMenuType.Form, dataItem);
                //آرشیو داده
                // BizArchive bizArchive = new BizArchive();
                if (bizTableDrivedEntity.DataIsAccessable(requester, entityID, new List <SecurityAction>()
                {
                    SecurityAction.ArchiveView, SecurityAction.ArchiveEdit
                }))
                {
                    var archiveRootMenu = AddMenu(resultMenus, "آرشیو", "", DataMenuType.Archive, dataItem);
                }


                //نامه های داده
                //  BizLetterTemplate bizLetterTemplate = new BizLetterTemplate();
                if (bizTableDrivedEntity.DataIsAccessable(requester, entityID, new List <SecurityAction>()
                {
                    SecurityAction.LetterView, SecurityAction.LetterEdit
                }))
                {
                    var letterRootMenu = AddMenu(resultMenus, "نامه ها", "", DataMenuType.Letter, dataItem);
                }
                //جریان کارهای مرتبط
                if (bizProcess.EntityHasAnyProcess(entityID))
                {
                    var workflowRootMenu = AddMenu(resultMenus, "جریان کار", "", DataMenuType.Workflow, dataItem);
                }



                ////لینک های داده
                //BizDataLink bizDataLink = new MyModelManager.BizDataLink();
                //var datalinks = bizDataLink.GetDataLinkByEntitiyID(requester, entityID);
                //if (datalinks.Any())
                //{
                //    var dataViewRootMenu = AddMenu(resultMenus, "لینک داده", "", DataMenuType.Folder,null);
                //    foreach (var datalink in datalinks)
                //    {
                //        var datalinkMenu = AddMenu(dataViewRootMenu.SubMenus, datalink.ReportTitle, "", DataMenuType.DataLink, dataItem);
                //        datalinkMenu.Datalink = datalink;
                //    }
                //}

                //گزارشهای داده های مرتبط

                if (dataMenuSetting != null)
                {
                    if (dataMenuSetting.SearchableReportRelationships.Any())
                    {
                        var relationshipReportRootMenu = AddMenu(resultMenus, "گزارش داده های مرتبط", "", DataMenuType.Folder, null);
                        foreach (var group in dataMenuSetting.SearchableReportRelationships.GroupBy(x => x.Group1 ?? ""))
                        {
                            DataMenu parentGroupMenu = GetGroupMenu(relationshipReportRootMenu, group.Key);
                            foreach (var rel in group)
                            {
                                var menu = AddMenu(parentGroupMenu.SubMenus, rel.SearchableReportReport.ReportTitle, "", DataMenuType.RelationshipTailSearchableReport, dataItem);
                                menu.SearchableReportRelationshipTail = rel;
                            }
                        }
                    }
                    //نمای داده های مرتبط
                    if (dataMenuSetting.DataViewRelationships.Any())
                    {
                        var dataViewRootMenu = AddMenu(resultMenus, "نمایش داده های مرتبط", "", DataMenuType.Folder, null);
                        foreach (var group in dataMenuSetting.DataViewRelationships.GroupBy(x => x.Group1 ?? ""))
                        {
                            DataMenu parentGroupMenu = GetGroupMenu(dataViewRootMenu, group.Key);
                            foreach (var rel in group)
                            {
                                var dataViewRelMenu = AddMenu(parentGroupMenu.SubMenus, rel.RelationshipTail.TargetEntityAlias, rel.RelationshipTail.EntityPath, DataMenuType.RelationshipTailDataView, dataItem);
                                dataViewRelMenu.DataviewRelationshipTail = rel.RelationshipTail;
                                dataViewRelMenu.TargetDataMenuSettingID  = rel.TargetDataMenuSettingID;
                            }
                        }
                    }
                    if (dataMenuSetting.GridViewRelationships.Any())
                    {
                        var gridViewRootMenu = AddMenu(resultMenus, "گرید داده های مرتبط", "", DataMenuType.Folder, null);
                        foreach (var group in dataMenuSetting.GridViewRelationships.GroupBy(x => x.Group1 ?? ""))
                        {
                            DataMenu parentGroupMenu = GetGroupMenu(gridViewRootMenu, group.Key);
                            foreach (var rel in group)
                            {
                                var gridViewRelMenu = AddMenu(parentGroupMenu.SubMenus, rel.RelationshipTail.TargetEntityAlias, rel.RelationshipTail.EntityPath, DataMenuType.RelationshipTailDataGrid, dataItem);
                                gridViewRelMenu.GridviewRelationshipTail = rel.RelationshipTail;
                                gridViewRelMenu.TargetDataMenuSettingID  = rel.TargetDataMenuSettingID;
                            }
                        }
                    }
                    if (dataMenuSetting.DataItemReports.Any())
                    {
                        var gridViewRootMenu = AddMenu(resultMenus, "گزارشات مورد داده", "", DataMenuType.Folder, null);
                        foreach (var group in dataMenuSetting.DataItemReports.GroupBy(x => x.Group1 ?? ""))
                        {
                            DataMenu parentGroupMenu = GetGroupMenu(gridViewRootMenu, group.Key);
                            foreach (var rel in group)
                            {
                                var gridViewRelMenu = AddMenu(parentGroupMenu.SubMenus, rel.EntityDataItemReport.ReportTitle, "", DataMenuType.DataItemReport, dataItem);
                                gridViewRelMenu.DataItemReport = rel.EntityDataItemReport;
                            }
                        }
                    }
                }
            }
            return(result);
        }
コード例 #24
0
 public List <DataLogDTO> SearchDataLogs(DR_Requester requester, int relatedITemID, DataLogType?logType)
 {
     return(bizLogManager.SearchDataLogs(requester, relatedITemID, logType));
 }
コード例 #25
0
        private DP_SearchRepository GetSecondSideSearchItemByRelationship(DP_BaseData firstSideDataItem, RelationshipDTO relationship)
        {
            var relationshipFirstSideColumnExist = true;

            foreach (var col in relationship.RelationshipColumns)
            {
                if (!firstSideDataItem.Properties.Any(x => x.Value != null && !string.IsNullOrEmpty(x.Value.ToString()) && x.ColumnID == col.FirstSideColumnID))
                {
                    relationshipFirstSideColumnExist = false;
                }
            }
            if (relationshipFirstSideColumnExist)
            {
                List <EntityInstanceProperty> properties     = new List <EntityInstanceProperty>();
                DP_SearchRepository           resultDataItem = new DP_SearchRepository(relationship.EntityID2);
                foreach (var col in relationship.RelationshipColumns)
                {
                    var value = firstSideDataItem.GetProperty(col.FirstSideColumnID).Value;
                    if (value == null)
                    {
                        return(null);
                    }
                    resultDataItem.Phrases.Add(new SearchProperty()
                    {
                        ColumnID = col.SecondSideColumnID, Value = value
                    });
                }
                return(resultDataItem);
            }
            else if (relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign ||
                     relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromForeignToPrimary)
            {
                DP_SearchRepository resultDataItem = new DP_SearchRepository(relationship.EntityID2);
                if (firstSideDataItem.KeyProperties.Any() && firstSideDataItem.KeyProperties.All(x => x.Value != null && !string.IsNullOrEmpty(x.Value.ToString())))
                {
                    DP_SearchRepository searchItem = new DP_SearchRepository(relationship.EntityID1);
                    foreach (var col in firstSideDataItem.KeyProperties)
                    {
                        searchItem.Phrases.Add(new SearchProperty()
                        {
                            ColumnID = col.ColumnID, Value = col.Value
                        });
                    }
                    var requester = new DR_Requester();
                    requester.SkipSecurity = true;
                    DR_SearchFullDataRequest request         = new DR_SearchFullDataRequest(requester, searchItem);
                    SearchRequestManager     searchProcessor = new SearchRequestManager();
                    var searchResult = searchProcessor.Process(request);
                    if (searchResult.Result == Enum_DR_ResultType.SeccessfullyDone)
                    {
                        firstSideDataItem = searchResult.ResultDataItems.First();
                    }
                    else if (searchResult.Result == Enum_DR_ResultType.ExceptionThrown)
                    {
                        throw (new Exception(searchResult.Message));
                    }

                    List <EntityInstanceProperty> properties = new List <EntityInstanceProperty>();

                    foreach (var col in relationship.RelationshipColumns)
                    {
                        var value = firstSideDataItem.GetProperty(col.FirstSideColumnID).Value;
                        if (value == null)
                        {
                            return(null);
                        }
                        resultDataItem.Phrases.Add(new SearchProperty()
                        {
                            ColumnID = col.SecondSideColumnID, Value = value
                        });
                    }
                    return(resultDataItem);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
コード例 #26
0
        public DataLogDTO GetDataLog(DR_Requester requester, int iD)
        {
            BizLogManager bizLogManager = new BizLogManager();

            return(bizLogManager.GetDataLog(requester, iD));
        }
コード例 #27
0
        public RequestDiagramDTO GetRequestDiagram(int requestID, DR_Requester requester)
        {
            BizRequest bizRequest = new BizRequest();

            return(bizRequest.GetRequestDiagram(requestID, requester));
        }
コード例 #28
0
        public List <DataLogDTO> GetDataLogsByPackageID(DR_Requester requester, Guid guid)
        {
            BizLogManager bizLogManager = new BizLogManager();

            return(bizLogManager.GetDataLogsByPackageID(requester, guid));
        }
コード例 #29
0
 public int CreateWorkflowRequest(CreateRequestDTO requestMessage, DR_Requester requester)
 {
     return(bizRequest.CreateWorkflowRequest(requestMessage, requester));
 }
コード例 #30
0
        public ArchiveResult CreateArchiveItems(ArchiveItemDTO message, DR_Requester requester)
        {
            ArchiveResult result = new ArchiveResult();

            try
            {
                // افزوده شدن نامه ها به آرشیو بعدا بررسی شود

                if (message.ID != 0)
                {
                    throw new Exception();
                }
                BizTableDrivedEntity bizTableDrivedEntity = new BizTableDrivedEntity();
                if (!bizTableDrivedEntity.DataIsAccessable(requester, message.DatItem.TargetEntityID, new List <SecurityAction>()
                {
                    SecurityAction.ArchiveEdit
                }))
                {
                    throw new Exception("عدم دسترسی ثبت آرشیو");
                }
                using (var context = new MyIdeaDataDBEntities())
                {
                    var dbArchiveItem = new ArchiveItem();
                    if (message.DatItem.DataItemID == 0)
                    {
                        dbArchiveItem.MyDataItemID = bizDataItem.GetOrCreateDataItem(message.DatItem);
                        message.DatItem.DataItemID = dbArchiveItem.MyDataItemID;
                    }
                    else
                    {
                        dbArchiveItem.MyDataItemID = message.DatItem.DataItemID;
                    }
                    //var dataItem = bizDataItem.GetOrCreateDataItem(message.DatItem);
                    //var archiveItemDataItem = new MyDataItem_ArchiveItem();

                    dbArchiveItem.FolderID     = message.FolderID;
                    dbArchiveItem.CreationDate = DateTime.Now;
                    dbArchiveItem.UserID       = requester.Identity;
                    dbArchiveItem.Name         = message.Name;
                    var type = GetArchiveItemType(message);
                    message.FileType       = type.Item2;
                    message.MainType       = type.Item1;
                    dbArchiveItem.FileType = (short)message.FileType;
                    dbArchiveItem.MainType = (short)message.MainType;
                    if (message.AttechedFile != null && message.AttechedFile.Content != null)
                    {
                        dbArchiveItem.FileSize        = message.AttechedFile.Content.Count();
                        dbArchiveItem.FileRepository1 = bizFileRepository.ToFileRepository(context, message.AttechedFile);
                    }
                    SetPossibleThumbnail(context, dbArchiveItem, message.MainType, message.FileType, message.AttechedFile.Content, message.AttechedFile.FileName);
                    //if (!hasThumbnail)
                    //{
                    //    dbArchiveItem.ThumbnailFileRepositoryID = null;
                    //    //    dbArchiveItem.FileRepository1 = null;
                    //}
                    foreach (var tagid in message.TagIDs)
                    {
                        dbArchiveItem.ArchiveItem_Tag.Add(new ArchiveItem_Tag()
                        {
                            TagID = tagid
                        });
                    }
                    context.ArchiveItem.Add(dbArchiveItem);
                    context.SaveChanges();
                    message.ID = dbArchiveItem.ID;

                    result.Result = true;


                    //انتیتی فرمورک قاطی داره رابطه فایل را برای تامبنیل هم میزاره

                    //context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                result.Result  = false;
                result.Message = ex.Message;
            }
            finally
            {
                var logResult = bizLogManager.AddLog(GetCreateItemDataLog(message, result.Message), requester);
                if (!string.IsNullOrEmpty(logResult))
                {
                    result.Message += (!string.IsNullOrEmpty(result.Message) ? Environment.NewLine : "") + "خطا در ثبت لاگ" + " , " + logResult;
                }
            }
            return(result);
        }