예제 #1
0
        private List <SenderCalculationGroup> GetGroups(SenderCalculationItem[] items)
        {
            var awbsData = _awbs.Get(items.Select(x => x.AirWaybillId ?? 0).ToArray());

            var groups = items.GroupBy(x => x.AirWaybillId).Select(g =>
            {
                var itemsGroup = g.Key.HasValue
                                        ? g.OrderBy(x => x.ClientNic).ThenByDescending(x => x.ApplicationId).ToArray()
                                        : g.OrderByDescending(x => x.ApplicationId).ToArray();

                var awb = awbsData.FirstOrDefault(x => x.Id == g.Key);

                var text = awb != null
                                        ? AwbHelper.GetAirWaybillDisplay(awb)
                                        : Pages.NoAirWaybill;

                return(new SenderCalculationGroup
                {
                    AirWaybillId = g.Key,
                    items = itemsGroup,
                    value = new { id = g.Key, text },
                    aggregates = new SenderCalculationGroup.Aggregates(itemsGroup),
                    FlightCost = awb != null
                                                ? awb.FlightCost ?? 0
                                                : 0,
                    TotalCostOfSenderForWeight = awb != null
                                                ? awb.TotalCostOfSenderForWeight ?? 0
                                                : 0
                });
            }).ToList();

            return(groups);
        }
예제 #2
0
 private static List <ClientCalculationGroup> GetGroups(
     IEnumerable <AirWaybillData> awbsData,
     IEnumerable <ClientCalculationItem> items)
 {
     return(items.GroupBy(x => x.AirWaybillId).Select(g => new ClientCalculationGroup
     {
         AirWaybillId = g.Key,
         items = g.ToArray(),
         value = AwbHelper.GetAirWaybillDisplay(awbsData.First(x => x.Id == g.Key)),
         aggregates = new ClientCalculationGroup.Aggregates(g.Sum(x => x.Profit))
     }).ToList());
 }
예제 #3
0
        private static List <CalculationGroup> GetGroups(IEnumerable <AirWaybillData> data, IEnumerable <CalculationItem> items)
        {
            return(data.Select(awb =>
            {
                var rows = items.Where(a => a.AirWaybillId == awb.Id).ToArray();

                return new CalculationGroup
                {
                    AirWaybillId = awb.Id,
                    items = rows,
                    value = new { id = awb.Id, text = AwbHelper.GetAirWaybillDisplay(awb) },
                    aggregates = new CalculationGroup.Aggregates(rows)
                };
            }).ToList());
        }
예제 #4
0
        public CalculationData Calculate(long applicationId)
        {
            var application = _applications.Get(applicationId);

            if (application.AirWaybillId == null)
            {
                throw new InvalidOperationException(
                          "For calculation an air waybill should be presented. Applicaiton id: "
                          + application.Id);
            }

            var awb = _awbs.Get(application.AirWaybillId.Value).First();

            var weight      = application.Weight ?? 0;
            var tariffPerKg = application.TariffPerKg ?? 0;
            var scotch      = GetTapeCost(application);
            var transitCost = application.TransitCostEdited ?? application.TransitCost ?? 0;
            var pickupCost  = application.PickupCostEdited ?? application.PickupCost ?? 0;

            var calculation = new CalculationData
            {
                AirWaybillDisplay  = AwbHelper.GetAirWaybillDisplay(awb),
                ApplicationDisplay = application.GetApplicationDisplay(),
                ClientId           = application.ClientId,
                FactureCost        = application.FactureCostEdited ?? application.FactureCost ?? 0,
                FactureCostEx      = application.FactureCostExEdited ?? application.FactureCostEx ?? 0,
                MarkName           = application.MarkName,
                FactoryName        = application.FactoryName,
                ScotchCost         = scotch,
                TariffPerKg        = tariffPerKg,
                Weight             = weight,
                TransitCost        = transitCost,
                PickupCost         = pickupCost,
                CreationTimestamp  = DateTimeProvider.Now,
                Count           = application.Count ?? 0,
                Invoice         = application.Invoice,
                Value           = application.Value,
                Class           = application.Class,
                InsuranceRate   = application.InsuranceRate,
                Profit          = application.CalculationProfit,
                TotalTariffCost = application.CalculationTotalTariffCost
            };

            _calculations.Add(calculation, applicationId);

            return(calculation);
        }
예제 #5
0
        private ApplicationGroup[] ByAirWaybill(IEnumerable <ApplicationListItem> applications, OrderType[] groups)
        {
            return(applications
                   .GroupBy(x => x.AirWaybillId ?? 0)
                   .Select(grouping => GetApplicationGroup(grouping, groups, OrderHelper.AwbFieldName,
                                                           delegate(IGrouping <long, ApplicationListItem> awb)
            {
                if (_airWaybills.ContainsKey(awb.Key))
                {
                    var item = _airWaybills[awb.Key];

                    return string.Format("{{\"id\":\"{0}\",\"text\":\"{1}\"}}", item.Id, AwbHelper.GetAirWaybillDisplay(item));
                }

                return null;
            }))
                   .ToArray());
        }