private Order CreateOrder(DateTime orderDate)
        {
            DateTime estimatedTakeOff = orderDate.AddDays(new Random().Next(7));
            DateTime estimatedLanding = estimatedTakeOff.AddHours(new Random().Next(7));

            var orderLineItems = new List<OrderLineItemDto>();
            int items = new Random().Next(30);
            if (items == 0) items++;
            for (int i = 0; i < items; i++)
            {
                var lineItemDto = new OrderLineItemDto();
                lineItemDto.ItemId = _itemIds[new Random(i).Next(_itemIds.Length)];
                lineItemDto.CurrencyId = _currencyIds[new Random(i).Next(_currencyIds.Length)];
                lineItemDto.Units = new Random(i).Next(1, 20);
                lineItemDto.Instructions = "Psylum Huft.....";
                if (!IsItemExists(orderLineItems, lineItemDto.ItemId))
                    orderLineItems.Add(lineItemDto);
            }

            // The 3rd parameter is the buyer index in the contract. It could be 0 or 1.
            int buyerIndex = new Random().Next(0, 2);
            if (buyerIndex != 0 && buyerIndex != 1)
                buyerIndex = 1;

            return
                _ordersRepository.Create(new OrderSettings(orderDate,
                                                           _contractIds[new Random(items).Next(_contractIds.Length)],
                                                           buyerIndex, // Should be 0 or 1
                                                           null, null,
                                                           _airportIds[new Random(items).Next(_airportIds.Length)],
                                                           _airportIds[new Random(items).Next(_airportIds.Length)],
                                                           _aircraftIds[new Random(items).Next(_aircraftIds.Length)],
                                                           _operators[new Random(items).Next(_operators.Length)],
                                                           Utilities.GenerateRandomNumber(4).ToUpper(), estimatedTakeOff,
                                                           estimatedLanding, orderLineItems));
        }
        private void QuoteOrder(Order order, DateTime quoteDate)
        {
            var lineItemDtos = new List<OrderLineItemDto>();
            foreach (OrderLineItem lineItem in order.LineItems)
            {
                var lineItemDto = new OrderLineItemDto();
                lineItemDto.ItemId = lineItem.Item.Id;
                lineItemDto.Units = lineItem.Units;
                lineItemDto.CurrencyId = lineItem.Currency.Id;
                lineItemDto.PricePerUnit = Utilities.GenerateRandomAmount(lineItemDto.ItemId, 500);
                lineItemDtos.Add(lineItemDto);
            }

            _ordersRepository.Quote(order.Id, quoteDate, lineItemDtos);
        }
        public OrderViewModel(int traderId, Order order)
        {
            Id = order.Id;
            OrderDate = order.OrderDate;
            QuotationDate = order.QuotationDate;
            ApprovalDate = order.ApprovalDate;
            FulfilmentDate = order.FulfilmentDate;

            Status = "Submitted";
            if (order.Status == Order.Submitted)
                Status = "Submitted";
            else if (order.Status == Order.Quoted)
                Status = "Quoted";
            else if (order.Status == Order.Approved)
                Status = "Approved";
            else if (order.Status == Order.Fulfilled)
                Status = "Fulfilled";

            Amount = order.Amount / order.GlobalPivotExchangeRate;
            AdminFee = order.AdminFee / order.GlobalPivotExchangeRate;

            TakeoffAirport = order.TakeoffAirport.Name;
            LandingAirport = order.LandingAirport.Name;
            Aircraft = order.Aircraft.Manufacturer;
            Operator = order.Operator;
            FlightNumber = order.FlightNumber;
            EstimatedTakeoffTime = order.EstimatedTakeoffTime;
            EstimatedLandingTime = order.EstimatedLandingTime;

            AircraftId = order.Aircraft.Id;
            TakeoffAirportId = order.TakeoffAirport.Id;
            LandingAirportId = order.LandingAirport.Id;

            BuyerId = order.Buyer.Id;
            Buyer = order.Buyer.Name;
            SellerId = order.Seller.Id;
            Seller = order.Seller.Name;

            IsSeller = order.Seller.Id == traderId;
            IsViewed = false; // Please see comments above

            IsQuoted = order.IsQuoted;
            IsApproved = order.IsApproved;
            IsFulfilled = order.IsFulfilled;

            Contract = new ContractViewModel(traderId, order.Contract);

            LineItems = new List<OrderLineItemDto>();
            foreach (OrderLineItem lineItem in order.LineItems)
            {
                var dto = new OrderLineItemDto();
                dto.ItemId = lineItem.Item.Id;
                dto.Category = lineItem.Item.Category;
                dto.SubCategory = lineItem.Item.SubCategory;
                dto.Item = lineItem.Item.Name;
                dto.Units = lineItem.Units;
                dto.Unit = lineItem.Item.Unit;
                dto.CurrencyId = lineItem.Currency.Id;
                dto.PricePerUnit = lineItem.PricePerUnit / lineItem.GlobalPivotExchangeRate;
                dto.Amount = dto.PricePerUnit * dto.Units;
                dto.Instructions = lineItem.Instructions;
                LineItems.Add(dto);
            }
        }