示例#1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="period"></param>
        /// <param name="type"></param>
        /// <returns>Список сущностей, список детализаций</returns>
        protected Tuple<List<dynamic>, List<dynamic>> GetCalculationObjects(List<Guid> ids,  Period period, CalculationObjectType type)
        {
            CalculationObject co = null;

            if (type == CalculationObjectType.Account)
            {
                co = AccountObject;
            }
            else if (type == CalculationObjectType.ExternalTransaction)
            {
                 co = ExternalTransactionObject;
            }
            else if (type == CalculationObjectType.InternalTransaction)
            {
                 co = InternalTransactionObject;
            }

            if (co == null)
            {
                return null;
            }

            List<dynamic> details;
            List<dynamic> entities;

            if (type == CalculationObjectType.Account)
            {

                var filterForEntity = FilterCriteriaSet.And.In(ids, co.EntitySearchProperty);

                entities = DynamicRepository.GetByEntity(co.EntityName, filterForEntity);

                if (!co.EntityName.Equals(co.DetailEntityName, StringComparison.InvariantCultureIgnoreCase))
                {
                    var filterForDetails = FilterCriteriaSet.And.In(ids, co.DetailSearchProperty);

                    if (period != null && !string.IsNullOrEmpty(co.PeriodProperty))
                    {
                        filterForDetails = filterForDetails.Equal(period.Id, co.PeriodProperty);
                    }

                    details = DynamicRepository.GetByEntity(co.DetailEntityName, filterForDetails);
                }
                else
                {
                    details = entities;
                }
            }
            else
            {
                var filterForDetails = FilterCriteriaSet.And.In(ids, co.DetailSearchProperty);

                if (period != null && !string.IsNullOrEmpty(co.PeriodProperty))
                {
                    filterForDetails = filterForDetails.Equal(period.Id, co.PeriodProperty);
                }

                details = DynamicRepository.GetByEntity(co.DetailEntityName, filterForDetails);

                if (!co.EntityName.Equals(co.DetailEntityName, StringComparison.InvariantCultureIgnoreCase))
                {
                    var filterForEntity =
                        FilterCriteriaSet.And.In(
                            details.Select(d => (d as DynamicEntity).GetProperty(co.EntityIdPropertyInDetail)).ToList(),
                            co.EntitySearchProperty);

                    entities = DynamicRepository.GetByEntity(co.EntityName, filterForEntity);
                }
                else
                {
                    entities = details;
                }
            }

            return new Tuple<List<dynamic>, List<dynamic>>(entities, details);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="period"></param>
        /// <param name="type"></param>
        /// <returns>Список сущностей, список детализаций</returns>
        protected Tuple <List <dynamic>, List <dynamic> > GetCalculationObjects(List <Guid> ids, Period period, CalculationObjectType type)
        {
            CalculationObject co = null;

            if (type == CalculationObjectType.Account)
            {
                co = AccountObject;
            }
            else if (type == CalculationObjectType.ExternalTransaction)
            {
                co = ExternalTransactionObject;
            }
            else if (type == CalculationObjectType.InternalTransaction)
            {
                co = InternalTransactionObject;
            }

            if (co == null)
            {
                return(null);
            }

            List <dynamic> details;
            List <dynamic> entities;

            if (type == CalculationObjectType.Account)
            {
                var filterForEntity = FilterCriteriaSet.And.In(ids, co.EntitySearchProperty);

                entities = DynamicRepository.GetByEntity(co.EntityName, filterForEntity);

                if (!co.EntityName.Equals(co.DetailEntityName, StringComparison.InvariantCultureIgnoreCase))
                {
                    var filterForDetails = FilterCriteriaSet.And.In(ids, co.DetailSearchProperty);

                    if (period != null && !string.IsNullOrEmpty(co.PeriodProperty))
                    {
                        filterForDetails = filterForDetails.Equal(period.Id, co.PeriodProperty);
                    }

                    details = DynamicRepository.GetByEntity(co.DetailEntityName, filterForDetails);
                }
                else
                {
                    details = entities;
                }
            }
            else
            {
                var filterForDetails = FilterCriteriaSet.And.In(ids, co.DetailSearchProperty);

                if (period != null && !string.IsNullOrEmpty(co.PeriodProperty))
                {
                    filterForDetails = filterForDetails.Equal(period.Id, co.PeriodProperty);
                }

                details = DynamicRepository.GetByEntity(co.DetailEntityName, filterForDetails);

                if (!co.EntityName.Equals(co.DetailEntityName, StringComparison.InvariantCultureIgnoreCase))
                {
                    var filterForEntity =
                        FilterCriteriaSet.And.In(
                            details.Select(d => (d as DynamicEntity).GetProperty(co.EntityIdPropertyInDetail)).ToList(),
                            co.EntitySearchProperty);

                    entities = DynamicRepository.GetByEntity(co.EntityName, filterForEntity);
                }
                else
                {
                    entities = details;
                }
            }

            return(new Tuple <List <dynamic>, List <dynamic> >(entities, details));
        }