private IEnumerable<CalculationItem> GetItems(
			ApplicationData[] applications,
			IReadOnlyDictionary<long, decimal> tariffs)
		{
			var appIds = applications.Select(x => x.Id).ToArray();
			var calculations = _applications.GetCalculations(appIds);

			return applications.Select(a => new CalculationItem
			{
				ApplicationId = a.Id,
				Value = a.Value,
				Count = a.Count,
				ClientNic = a.ClientNic,
				Factory = a.FactoryName,
				FactureCost = a.FactureCostEdited ?? a.FactureCost,
				FactureCostEx = a.FactureCostExEdited ?? a.FactureCostEx,
				Invoice = a.Invoice,
				Mark = a.MarkName,
				ScotchCost = (a.ScotchCostEdited ?? CalculationHelper.GetSenderTapeTariff(tariffs, a.SenderId)) * a.Count,
				TariffPerKg = a.TariffPerKg,
				SenderRate = a.SenderRate,
				TransitCost = a.TransitCostEdited ?? a.TransitCost,
				ValueCurrencyId = a.CurrencyId,
				Weight = a.Weight,
				PickupCost = a.PickupCostEdited ?? a.PickupCost,
				AirWaybillId = a.AirWaybillId.Value,
				DisplayNumber = a.GetApplicationDisplay(),
				InsuranceCost = CalculationHelper.GetInsuranceCost(a.Value, a.InsuranceRate),
				TotalSenderRate = CalculationHelper.GetTotalSenderRate(a.SenderRate, a.Weight),
				IsCalculated = calculations.ContainsKey(a.Id),
				ClassId = a.Class,
				TotalTariffCost = CalculationHelper.GetTotalTariffCost(a.CalculationTotalTariffCost, a.TariffPerKg, a.Weight),
				Profit = CalculationHelper.GetProfit(a, tariffs)
			}).OrderBy(x => x.ClientNic).ThenByDescending(x => x.ApplicationId).ToArray();
		}
		public ApplicationListItem[] Map(ApplicationData[] data, string language)
		{
			var appIds = data.Select(x => x.Id).ToArray();
			var stateIds = data.Select(x => x.StateId).ToArray();

			var countries = _countries.All(language).ToDictionary(x => x.Id, x => x.Name);
			var states = _states.Get(language, stateIds);
			var stateAvailability = _stateFilter.GetStateAvailabilityToSet();
			var calculations = _applications.GetCalculations(appIds);
			var cps = _files.GetInfo(appIds, ApplicationFileType.CP);
			var deliveryBills = _files.GetInfo(appIds, ApplicationFileType.DeliveryBill);
			var invoices = _files.GetInfo(appIds, ApplicationFileType.Invoice);
			var packings = _files.GetInfo(appIds, ApplicationFileType.Packing);
			var otherFiles = _files.GetInfo(appIds, ApplicationFileType.Other);
			var swifts = _files.GetInfo(appIds, ApplicationFileType.Swift);
			var torg12 = _files.GetInfo(appIds, ApplicationFileType.Torg12);
			var t1 = _files.GetInfo(appIds, ApplicationFileType.T1);
			var ex1 = _files.GetInfo(appIds, ApplicationFileType.Ex1);
			var cities = _cities.All(language).ToDictionary(x => x.Id, x => x.Name);

			return data.Select(x => new ApplicationListItem
			{
				CountryName = countries[x.CountryId],
				State = new ApplicationStateModel
				{
					StateId = x.StateId,
					StateName = states[x.StateId].LocalizedName
				},
				CanClose = x.StateId == _stateConfig.CargoOnTransitStateId,
				CanSetState = stateAvailability.Contains(x.StateId),
				AddressLoad = x.AddressLoad,
				Id = x.Id,
				FactoryName = x.FactoryName,
				Invoice = x.Invoice,
				MarkName = x.MarkName,
				Volume = x.Volume,
				Count = x.Count,
				AirWaybill = x.AirWaybill,
				Characteristic = x.Characteristic,
				ClientLegalEntity = x.ClientLegalEntity,
				ClientNic = x.ClientNic,
				ClientId = x.ClientId,
				CreationTimestamp = x.CreationTimestamp,
				DateInStock = x.DateInStock,
				DateOfCargoReceipt = x.DateOfCargoReceipt,
				FactoryContact = x.FactoryContact,
				FactoryEmail = x.FactoryEmail,
				FactoryPhone = x.FactoryPhone,
				StateChangeTimestamp = x.StateChangeTimestamp,
				StateId = x.StateId,
				TermsOfDelivery = x.TermsOfDelivery,
				TransitAddress = x.TransitAddress,
				CarrierName = x.CarrierName,
				CarrierContact = x.CarrierContact,
				CarrierAddress = x.CarrierAddress,
				CarrierPhone = x.CarrierPhone,
				TransitId = x.TransitId,
				TransitCity = cities[x.TransitCityId],
				TransitDeliveryTypeString = x.TransitDeliveryType.ToLocalString(),
				TransitMethodOfTransitString = x.TransitMethodOfTransit.ToLocalString(),
				TransitPhone = x.TransitPhone,
				TransitRecipientName = x.TransitRecipientName,
				TransitReference = x.TransitReference,
				TransitWarehouseWorkingTime = x.TransitWarehouseWorkingTime,
				WarehouseWorkingTime = x.WarehouseWorkingTime,
				Weight = x.Weight,
				MethodOfDeliveryId = (int)x.MethodOfDelivery,
				IsPickup = x.IsPickup,
				TransitMethodOfTransitId = (int)x.TransitMethodOfTransit,
				Value = x.Value,
				CurrencyId = (int)x.CurrencyId,
				AirWaybillId = x.AirWaybillId,
				PickupCost = x.GetAdjustedPickupCost(),
				FactureCost = x.GetAdjustedFactureCost(),
				FactureCostEx = x.GetAdjustedFactureCostEx(),
				ScotchCost = x.GetAdjustedScotchCost(),
				SenderName = x.SenderName,
				ForwarderName = x.ForwarderName,
				SenderScotchCost = x.SenderScotchCost,
				TariffPerKg = x.TariffPerKg,
				TransitCost = x.GetAdjustedTransitCost(),
				ForwarderTransitCost = x.TransitCost,
				CanSetTransitCost = !calculations.ContainsKey(x.Id),
				CPFiles = cps.ContainsKey(x.Id) ? cps[x.Id].ToArray() : null,
				DeliveryBillFiles = deliveryBills.ContainsKey(x.Id) ? deliveryBills[x.Id].ToArray() : null,
				InvoiceFiles = invoices.ContainsKey(x.Id) ? invoices[x.Id].ToArray() : null,
				PackingFiles = packings.ContainsKey(x.Id) ? packings[x.Id].ToArray() : null,
				OtherFiles = otherFiles.ContainsKey(x.Id) ? otherFiles[x.Id].ToArray() : null,
				SwiftFiles = swifts.ContainsKey(x.Id) ? swifts[x.Id].ToArray() : null,
				Torg12Files = torg12.ContainsKey(x.Id) ? torg12[x.Id].ToArray() : null,
				T1Files = t1.ContainsKey(x.Id) ? t1[x.Id].ToArray() : null,
				Ex1Files = ex1.ContainsKey(x.Id) ? ex1[x.Id].ToArray() : null,
				DisplayNumber = x.GetApplicationDisplay(),
				DaysInWork = x.GetDaysInWork(),
				CreationTimestampLocalString = LocalizationHelper.GetDate(x.CreationTimestamp, CultureProvider.GetCultureInfo()),
				StateChangeTimestampLocalString =
					LocalizationHelper.GetDate(x.StateChangeTimestamp, CultureProvider.GetCultureInfo()),
				DateOfCargoReceiptLocalString =
					x.DateOfCargoReceipt.HasValue
						? LocalizationHelper.GetDate(x.DateOfCargoReceipt.Value, CultureProvider.GetCultureInfo())
						: null,
				DateInStockLocalString =
					x.DateInStock.HasValue ? LocalizationHelper.GetDate(x.DateInStock.Value, CultureProvider.GetCultureInfo()) : null,
				MethodOfDeliveryLocalString = x.MethodOfDelivery.ToLocalString(),
				ValueString = GetValueString(x.Value, x.CurrencyId),
				MRN = x.MRN,
				CountInInvoce = x.CountInInvoce,
				DocumentWeight = x.DocumentWeight
			}).ToArray();
		}