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); }
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()); }
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()); }
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); }
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()); }