Esempio n. 1
0
        private DocDef FindControlAttributeDocDef(BizControl control, DocDef parentDocDef, Guid attrId)
        {
            var docControl = control as BizDocumentControl;

            if (docControl != null)
            {
                if (docControl.AttributeDefId != null)
                {
                    var docControlAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)docControl.AttributeDefId);
                    if (docControlAttrDef != null && docControlAttrDef.DocDefType != null)
                    {
                        var docDef = _docDefRepo.Find(docControlAttrDef.DocDefType.Id);
                        if (docDef != null)
                        {
                            if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null)
                            {
                                return(docDef);
                            }

                            if (docControl.Children != null)
                            {
                                foreach (var child in control.Children)
                                {
                                    var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId);
                                    if (attrDocDef != null)
                                    {
                                        return(attrDocDef);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                var docList = control as BizDocumentListForm;
                if (docList != null)
                {
                    if (docList.AttributeDefId != null)
                    {
                        var docListAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)docList.AttributeDefId);
                        if (docListAttrDef != null && docListAttrDef.DocDefType != null)
                        {
                            var docDef = _docDefRepo.Find(docListAttrDef.DocDefType.Id);
                            if (docDef != null)
                            {
                                if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null)
                                {
                                    return(docDef);
                                }

                                if (docList.Children != null)
                                {
                                    foreach (var child in control.Children)
                                    {
                                        var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId);
                                        if (attrDocDef != null)
                                        {
                                            return(attrDocDef);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        var dlForm = docList.TableForm ??
                                     (docList.FormId != null ? _formRepo.FindTableForm((Guid)docList.FormId) : null);

                        if (dlForm != null && dlForm.DocumentDefId != null)
                        {
                            var docDef = _docDefRepo.Find((Guid)dlForm.DocumentDefId);
                            if (docDef != null)
                            {
                                if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null)
                                {
                                    return(docDef);
                                }

                                if (dlForm.Children != null)
                                {
                                    foreach (var child in dlForm.Children)
                                    {
                                        var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId);
                                        if (attrDocDef != null)
                                        {
                                            return(attrDocDef);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    var tableColumn = control as BizTableColumn;
                    if (tableColumn != null && tableColumn.AttributeDefId != null)
                    {
                        var tableColumnAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)tableColumn.AttributeDefId);
                        if (tableColumnAttrDef != null && tableColumnAttrDef.DocDefType != null)
                        {
                            var docDef = _docDefRepo.Find(tableColumnAttrDef.DocDefType.Id);
                            if (docDef != null)
                            {
                                if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null)
                                {
                                    return(docDef);
                                }

                                if (tableColumn.Children != null)
                                {
                                    foreach (var child in tableColumn.Children)
                                    {
                                        var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId);
                                        if (attrDocDef != null)
                                        {
                                            return(attrDocDef);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(null);
        }