//public void ClearAndSaveStates(DataItemState item) //{ // using (var projectContext = new DataAccess.MyProjectEntities()) // { // var foundDataItem = GetDataItem(projectContext, item.DataItem); // if (foundDataItem != null) // { // foundDataItem = new DataItem() { TableDrivedEntityID = item.DataItem.TargetEntityID }; // var keyColumns = item.DataItem.KeyProperties; // foreach (var keyColumn in keyColumns) // foundDataItem.DataItemKeyColumns.Add(new DataItemKeyColumns() { ColumnID = keyColumn.ColumnID, Value = keyColumn.Value }); // projectContext.DataItem.Add(foundDataItem); // } // while (foundDataItem.DataItem_EntityState.Any()) // projectContext.DataItem_EntityState.Remove(foundDataItem.DataItem_EntityState.First()); // foreach (var state in item.States.Where(x => x.Preserve)) // foundDataItem.DataItem_EntityState.Add(new DataItem_EntityState() { TableDrivedEntityStateID = state.ID }); // projectContext.SaveChanges(); // } //} public int UpdateEntityStates(EntityStateDTO EntityState) { using (var projectContext = new DataAccess.MyProjectEntities()) { //if (EntityState.RelationshipTailID != 0) //{ // var stateTail = projectContext.EntityRelationshipTail.First(x => x.ID == EntityState.RelationshipTailID); // foreach (var actionActivity in EntityState.ActionActivities) // { // var actionActivityEntity = projectContext.UIActionActivity.First(x => x.ID == actionActivity.ID); // if (actionActivityEntity.UIEnablityDetails.Any(x => stateTail.RelationshipPath == x.RelationshipID.ToString() || // stateTail.RelationshipPath.StartsWith(x.RelationshipID.ToString()))) // { // var actionItem = actionActivityEntity.UIEnablityDetails.First(x => stateTail.RelationshipPath == x.RelationshipID.ToString() || // stateTail.RelationshipPath.StartsWith(x.RelationshipID.ToString())); // var relationshipAlias = actionItem.Relationship.Alias; // throw new Exception("امکان استفاده از رابطه" + " " + relationshipAlias + " " + "در اقدام" + " " // + actionItem.UIActionActivity.Title + " " + "به علت وجود اشتراک با رشته رابطه وضعیت وجود ندارد"); // //زیرا تناقض است. از طرفی رشته رابطه جزو خصوصیات موجودیت برای تعیین وضعیت هست و از طرفی میخواهیم فقط خواندنی و یا مخفی کنیم // //اگر در لود شدن فرمهای ورود اطلاعات فرض کنیم رشته رابطه پرنت و خود موجودیت فرم چایلد باشد منطقی است اما اگر // // فرض کنیم که رشته رابطه چایلد باشد و موجودیت اصلی خود این موجودیات باشد آنوقت برای تغییر رابطه باید به صورت مصنوعی رشته رابطه را تغییر دهیم تا رابطه قابل اصلاح شود // // آنوقت با تغییر رابطه دیگر تغییراتی که در رشته رابطه یا وضعیت داده ایم هیچوقت ثبت نخواهد شد چون ریموو شده اند // // پس بهتر است اشتراکی وجود نداشته باشد و وضعیت آزادانه تغییر کند // } // } //} foreach (var condition in EntityState.StateConditions) { if (condition.RelationshipTailID == 0 && condition.ColumnID != 0) { foreach (var actionActivity in EntityState.ActionActivities) { var actionActivityEntity = projectContext.UIActionActivity.First(x => x.ID == actionActivity.ID); if (actionActivityEntity.UIEnablityDetails.Any(x => x.ColumnID == condition.ColumnID)) { var actionItem = actionActivityEntity.UIEnablityDetails.First(x => x.ColumnID == condition.ColumnID); var columnAlias = actionItem.Column.Alias; throw new Exception("امکان استفاده از ستون" + " " + columnAlias + " " + "در اقدام" + " " + actionItem.UIActionActivity.Title + " " + "به علت همسان بودن با ستون تعیین وضعیت وجود ندارد"); //ستون تعیین وضعیت نمیتواند خود مخفی یا فقط خواندنی باشد زیرا دیگر نمی تواند مقدار بگیرد // باید دسترسی مخصوص در صورت نیاز برای این ستون تعریف شود } } } } var dbEntityState = projectContext.TableDrivedEntityState.FirstOrDefault(x => x.ID == EntityState.ID); if (dbEntityState == null) { dbEntityState = new DataAccess.TableDrivedEntityState(); } //if (EntityState.ActionActivityID != 0) // dbEntityState.ActionActivityID = EntityState.ActionActivityID; //else // dbEntityState.ActionActivityID = null; dbEntityState.TableDrivedEntityID = EntityState.TableDrivedEntityID; dbEntityState.ID = EntityState.ID; // dbEntityState.Preserve = EntityState.Preserve; dbEntityState.Title = EntityState.Title; dbEntityState.ConditionOperator = (short)EntityState.ConditionOperator; while (dbEntityState.EntityState_UIActionActivity.Any()) { //dbEntityState.EntityState_ActionActivity.Remove(dbEntityState.EntityState_ActionActivity.First()); projectContext.EntityState_UIActionActivity.Remove(dbEntityState.EntityState_UIActionActivity.First()); } foreach (var actionActivity in EntityState.ActionActivities) { dbEntityState.EntityState_UIActionActivity.Add(new EntityState_UIActionActivity() { UIActionActivityID = actionActivity.ID }); } List <TableDrivedEntityStateCondition> removeList = new List <TableDrivedEntityStateCondition>(); foreach (var item in dbEntityState.TableDrivedEntityStateCondition) { if (!EntityState.StateConditions.Any(x => x.ID == item.ID)) { removeList.Add(item); } } foreach (var item in removeList) { while (item.TableDrivedEntityStateConditionValues.Any()) { item.TableDrivedEntityStateConditionValues.Remove(item.TableDrivedEntityStateConditionValues.First()); } while (item.TableDrivedEntityStateConditionSecuritySubject.Any()) { item.TableDrivedEntityStateConditionSecuritySubject.Remove(item.TableDrivedEntityStateConditionSecuritySubject.First()); } projectContext.TableDrivedEntityStateCondition.Remove(item); } foreach (var condition in EntityState.StateConditions) { TableDrivedEntityStateCondition dbCondition = null; if (condition.ID == 0) { dbCondition = new TableDrivedEntityStateCondition(); dbEntityState.TableDrivedEntityStateCondition.Add(dbCondition); } else { dbCondition = projectContext.TableDrivedEntityStateCondition.First(x => x.ID == condition.ID); } if (condition.FormulaID != 0) { dbCondition.FormulaID = condition.FormulaID; } else { dbCondition.FormulaID = null; } if (condition.ColumnID != 0) { dbCondition.ColumnID = condition.ColumnID; if (condition.RelationshipTailID == 0) { dbCondition.EntityRelationshipTailID = null; } else { dbCondition.EntityRelationshipTailID = condition.RelationshipTailID; } } else { dbCondition.ColumnID = null; dbCondition.EntityRelationshipTailID = null; } dbCondition.Title = condition.Title; dbCondition.ValueOpoerator = (short)condition.EntityStateOperator; dbCondition.SecuritySubjectInOrNotIn = (short)condition.SecuritySubjectInORNotIn; while (dbCondition.TableDrivedEntityStateConditionValues.Any()) { projectContext.TableDrivedEntityStateConditionValues.Remove(dbCondition.TableDrivedEntityStateConditionValues.First()); } foreach (var nItem in condition.Values) { dbCondition.TableDrivedEntityStateConditionValues.Add(new TableDrivedEntityStateConditionValues() { Value = nItem.Value, ReservedValue = (short)nItem.SecurityReservedValue }); } while (dbCondition.TableDrivedEntityStateConditionSecuritySubject.Any()) { projectContext.TableDrivedEntityStateConditionSecuritySubject.Remove(dbCondition.TableDrivedEntityStateConditionSecuritySubject.First()); } foreach (var nItem in condition.SecuritySubjects) { dbCondition.TableDrivedEntityStateConditionSecuritySubject.Add(new TableDrivedEntityStateConditionSecuritySubject() { SecuritySubjectID = nItem.SecuritySubjectID }); //, SecuritySubjectOperator = (short)nItem.SecuritySubjectOperator }); } } if (dbEntityState.ID == 0) { projectContext.TableDrivedEntityState.Add(dbEntityState); } projectContext.SaveChanges(); return(dbEntityState.ID); } }
public EntityStateConditionDTO ToEntityStateConditionDTO(DR_Requester requester, TableDrivedEntityStateCondition item, bool withDetails) { var result = new EntityStateConditionDTO(); result.ID = item.ID; 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.Title = item.Title; result.RelationshipTailID = item.EntityRelationshipTailID ?? 0; if (item.EntityRelationshipTail != null) { BizEntityRelationshipTail bizEntityRelationshipTail = new BizEntityRelationshipTail(); result.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail); } if (item.ValueOpoerator != null) { result.EntityStateOperator = (Enum_EntityStateOperator)item.ValueOpoerator; } foreach (var valItem in item.TableDrivedEntityStateConditionValues) { result.Values.Add(new ModelEntites.EntityStateValueDTO() { Value = valItem.Value, SecurityReservedValue = valItem.ReservedValue == null ? SecurityReservedValue.None : (SecurityReservedValue)valItem.ReservedValue }); } foreach (var valItem in item.TableDrivedEntityStateConditionSecuritySubject) { result.SecuritySubjects.Add(new ChildSecuritySubjectDTO { SecuritySubjectID = valItem.SecuritySubjectID }); //, SecuritySubjectOperator = (Enum_SecuritySubjectOperator)valItem.SecuritySubjectOperator }); } if (item.SecuritySubjectInOrNotIn == null) { result.SecuritySubjectInORNotIn = InORNotIn.In; } else { result.SecuritySubjectInORNotIn = (InORNotIn)item.SecuritySubjectInOrNotIn; } return(result); }