예제 #1
0
        /// <summary>
        /// Count the sum of agreements and contracts spontaneously and merge them into a table.
        /// </summary>
        private async Task <IEnumerable <AgreementSumViewModel> > GetSortedAgreementSum(int year, string customerNumber)
        {
            var weighInSumAgreements = await _weighInRepository.GetWeighInSumAgreementAsync(year.ToString(), customerNumber, _ticket) ??
                                       new WeighInSumAgreementDto[0];

            var spontaneouslyAgreementQuery = (from t in weighInSumAgreements
                                               where t.Skordear == year.ToString()
                                               select new
            {
                Sort = t.Artikelnamn,
                HarvestYear = year,
                Quantity = 0,
                QuantitySpont = t.Summa
            }).ToList();

            var agreements = await _agreementRepository.GetAgreementsListAsync(customerNumber) ?? new Agreement[0];

            var thisYearAgreements = agreements.Where(a => a.HarvestYear == year);

            // Do summation of quantitatives by grouping by sort, harvest year
            var agreementQuery = (from t in thisYearAgreements
                                  group t by new { t.Sort, t.HarvestYear }
                                  into grp
                                  select new
            {
                grp.Key.Sort,
                grp.Key.HarvestYear,
                Quantity = grp.Sum(t => t.Weighed),
                QuantitySpont = 0
            }).ToList();

            var leftAgreementSumList =
                from aq in agreementQuery
                join saq in spontaneouslyAgreementQuery on aq.Sort equals saq.Sort into lq
                from saq in lq.DefaultIfEmpty()
                select new AgreementSumViewModel
            {
                Sort          = aq?.Sort,
                Quantity      = aq?.Quantity ?? 0,
                QuantitySpont = saq?.QuantitySpont ?? 0
            };

            var rightAgreementSumList =
                from saq in spontaneouslyAgreementQuery
                join aq in agreementQuery on saq.Sort equals aq.Sort into lq
                from aq in lq.DefaultIfEmpty()
                select new AgreementSumViewModel
            {
                Sort          = saq?.Sort,
                Quantity      = aq?.Quantity ?? 0,
                QuantitySpont = saq?.QuantitySpont ?? 0
            };

            var agreementSumList = leftAgreementSumList
                                   .Union(rightAgreementSumList)
                                   .Distinct(new AgreementSumComparer())
                                   .OrderBy(x => x.Sort);

            return(agreementSumList);
        }