private void SetOwnerPart(DR_Requester requester, LetterTemplateDTO result, LetterTemplate ownerDbItem, bool withDetails)
        {
            result.TableDrivedEntityID = ownerDbItem.TableDrivedEntityID;
            result.Name             = ownerDbItem.Name;
            result.EntityListViewID = ownerDbItem.EntityListViewID;
            if (withDetails)
            {
                BizEntityListView bizEntityListView = new BizEntityListView();

                result.EntityListView = bizEntityListView.GetEntityListView(requester, ownerDbItem.EntityListViewID);
                if (result.EntityListView == null)
                {
                    throw new Exception("عدم دسترسی به لیست نمایش به شناسه" + " " + ownerDbItem.EntityListViewID);
                }

                BizFormula bizFormula = new BizFormula();
                foreach (var item in ownerDbItem.LetterTemplatePlainField)
                {
                    LetterTemplatePlainFieldDTO field = new LetterTemplatePlainFieldDTO();
                    field.FieldName = item.FieldName;
                    field.EntityListViewColumnsID = (item.EntityListViewColumnsID == null) ? 0 : item.EntityListViewColumnsID.Value;
                    if (field.EntityListViewColumnsID != 0)
                    {
                        field.EntityListViewColumns = result.EntityListView.EntityListViewAllColumns.First(x => x.ID == item.EntityListViewColumnsID);
                    }
                    field.FormulaID = (item.FormulaID == null) ? 0 : item.FormulaID.Value;
                    field.ID        = item.ID;
                    //if (item.ColumnID != null)
                    //    field.Type = LetterTemplateFieldType.Column;
                    //else if (item.ParameterID != null)
                    //    field.Type = LetterTemplateFieldType.Parameter;
                    //if (item.RelationshipID != null)
                    //    field.Type = LetterTemplateFieldType.RangeRelationship;

                    result.PlainFields.Add(field);
                }
                BizEntityRelationshipTail bizEntityRelationshipTail = new MyModelManager.BizEntityRelationshipTail();
                foreach (var item in ownerDbItem.LetterTemplateRelationshipField)
                {
                    LetterTemplateRelationshipFieldDTO field = new LetterTemplateRelationshipFieldDTO();
                    field.RelationshipTailID = item.EntityRelationshipTailID;
                    //field.EntityPreDefinedSearchID = (item.EntityPreDefinedSearchID == null) ? 0 : item.EntityPreDefinedSearchID.Value;
                    field.ID = item.ID;
                    field.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
                    //field.NextLine = item.NextLine==true;
                    field.IsRow     = item.IsRow == true;
                    field.FieldName = item.FieldName;
                    field.PartialLetterTemplateID = item.PartialLetterTemplateID;
                    field.PartialLetterTemplate   = ToPartialLetterTemplateDTO(requester, item.PartialLetterTemplate, true);
                    //field.PartialLetterTemplate = ToPartialLetterTemplate(item.PartialLetterTemplate, true);
                    result.RelationshipFields.Add(field);
                }
            }
        }
예제 #2
0
        private void SetRelatoinshipTree(LetterTemplateRelationshipFieldDTO parent, List <LetterTemplatePlainFieldDTO> plaintFields, List <LetterTemplateRelationshipFieldDTO> relationshipFields, List <Tuple <string, Field> > allFormFileds, string parentTail = "")
        {
            BizTableDrivedEntity bizTableDrivedEntity = new BizTableDrivedEntity();
            int start;
            int end;

            if (parent == null)
            {
                start = 0;
                end   = 1000000;
            }
            else
            {
                start = parent.tmpConsumedRange.Item1;
                end   = parent.tmpConsumedRange.Item2;
            }
            //TableDrivedEntityDTO entity = null;
            //if (parent == null)
            //    entity = defaultEntity;
            //else if (parent.InternalLetterTemplate.TableDrivedEntityID != 0)
            //    entity = bizTableDrivedEntity.GetTableDrivedEntity(parent.InternalLetterTemplate.TableDrivedEntityID, EntityColumnInfoType.WithSimpleColumns, EntityRelationshipInfoType.WithoutRelationships);

            foreach (var field in allFormFileds.Where(x => x.Item1.StartsWith("rel_") && x.Item1.EndsWith("_start") && x.Item2.Result.Start > start))
            {
                var splt      = field.Item1.Split('_');
                var fieldName = "";
                if (splt.Count() > 2)
                {
                    fieldName = splt[0] + "_" + splt[1] + "_" + splt[2];
                }
                else
                {
                    fieldName = splt[0] + "_" + splt[1];
                }
                var endField = GetRelationshipFieldEnd(field.Item1, allFormFileds);
                if (endField != null)
                {
                    if (ItemIsInRangeOf(endField, start, end))
                    {
                        if (!ItemIsInRangeOfChilds(field.Item2, relationshipFields))
                        {
                            var newField = new LetterTemplateRelationshipFieldDTO();
                            newField.FieldName        = fieldName;
                            newField.tmpConsumedRange = new Tuple <int, int>(field.Item2.Result.End, endField.Result.Start);
                            newField.StartLetterField = field.Item2;
                            newField.EndLetterField   = endField;
                            //////var relName = field.Name.Split('_')[1];
                            //////var relationship = entity.Relationships.FirstOrDefault(x => x.Entity2 == relName);
                            //////if (relationship != null)
                            //////{
                            //////    newField.RelationshipID = relationship.ID;
                            //////    newField.InternalLetterTemplate.TableDrivedEntityID = relationship.EntityID2;
                            //////    //SetLetterRelationshipTemplates(newField);
                            //////    //SetRelationshipFiltered(newField);
                            //////    var firstTemplate = newField.tmpInternalLetterTemplates.FirstOrDefault();
                            //////    if (firstTemplate != null)
                            //////        newField.InternalLetterTemplate.ID = firstTemplate.ID;
                            //////}
                            var tail = (parentTail == "" ? "" : parentTail + ",") + fieldName;

                            SetRelatoinshipTree(newField, newField.PartialLetterTemplate.PlainFields, newField.PartialLetterTemplate.RelationshipFields, allFormFileds, tail);
                            relationshipFields.Add(newField);
                        }
                    }
                }
            }
            foreach (var field in allFormFileds.Where(x => !x.Item1.StartsWith("rel_")))// (x.Item1.StartsWith("col_") || x.Item1.StartsWith("prm_")) && x.Item2.Result.Start > start))
            {
                var splt      = field.Item1.Split('_');
                var fieldName = field.Item1;// splt[0] + "_" + splt[1];

                if (ItemIsInRangeOf(field.Item2, start, end))
                {
                    if (!ItemIsInRangeOfChilds(field.Item2, relationshipFields))
                    {
                        var newField = new LetterTemplatePlainFieldDTO();
                        newField.FieldName     = fieldName;
                        newField.LetterField   = field.Item2;
                        newField.tmpParentTail = parentTail;
                        //if (fieldName.ToLower().StartsWith("col_"))
                        //{

                        //    //اینجا جای ست گردن مقادیر پیش فرض نیست.باید در همان فرم انجام شود
                        //    //////if (entity != null)
                        //    //////{
                        //    //////    var columnName = field.Name.Split('_')[1];
                        //    //////    var column = entity.Columns.FirstOrDefault(x => x.Name == columnName);
                        //    //////    if (column != null)
                        //    //////        newField.ColumnID = column.ID;
                        //    //////}
                        //}
                        //else if (fieldName.ToLower().StartsWith("prm_"))
                        //{
                        //    //اینجا جای ست گردن مقادیر پیش فرض نیست.باید در همان فرم انجام شود
                        //    //////int entityID = 0;
                        //    //////if (parent == null)
                        //    //////    entityID = EntityID;
                        //    //////else
                        //    //////    entityID = parent.InternalLetterTemplate.TableDrivedEntityID;
                        //    //////if (entityID != 0)
                        //    //////{
                        //    //////    var paramters = bizFormula.GetFormulaParameters(entityID);
                        //    //////    var parameterName = field.Name.Split('_')[1];
                        //    //////    var parameter = paramters.FirstOrDefault(x => x.Name == parameterName);
                        //    //////    if (parameter != null)
                        //    //////        newField.ParameterID = parameter.ID;
                        //    //////}
                        //}

                        plaintFields.Add(newField);
                    }
                }
            }
        }