/// <summary>
        /// Creates the trailer stock item.
        /// </summary>
        /// <returns>The trailer stock item.</returns>
        /// <param name="repository">Repository.</param>
        /// <param name="trailerNumber">Trailer number.</param>
        /// <param name="product">Product.</param>
        public static DriverStock CreateTrailerStockItem(Repository repository, string trailerNumber, Product product)
        {
            var profile      = repository.Profiles.First();
            var subscriberID = profile.SubscriberID;

            var id = String.Format("{0}{1}{2}", profile.CurrentTrailerNumber,
                                   product.ProductCode, profile.SubscriberID);

            var sequence = product.Sequence.GetValueOrDefault();

            var trailerStock = new DriverStock
            {
                ProductCode         = product.ProductCode,
                TrailerNumber       = trailerNumber,
                Fulls               = product.Fulls.GetValueOrDefault(),
                Empties             = product.Empties.GetValueOrDefault(),
                FaultyFulls         = product.FaultyFulls.GetValueOrDefault(),
                FaultyEmpties       = product.FaultyEmpties.GetValueOrDefault(),
                SubscriberID        = subscriberID,
                ShortDescription    = product.ShortDescription,
                GallonsKilosPerFill = product.GallonsKilosPerFill,
                GrossWeight         = product.GrossWeight,
                Sequence            = sequence,
                Id = id
            };

            return(trailerStock);
        }
        /// <summary>
        /// Inserts the driver stock.
        /// </summary>
        /// <param name="repository">Repository.</param>
        /// <param name="trailerNumber">Trailer number.</param>
        /// <param name="product">Product.</param>
        public static void InsertDriverStock(Repository repository, string trailerNumber, Product product)
        {
            DriverStock trailerStock = CreateTrailerStockItem(repository, trailerNumber, product);

            repository.DriverStock.Add(trailerStock);
            repository.SaveChanges();
        }
        /// <summary>
        /// Edit a Trailer Stock item
        /// </summary>
        /// <param name="stock">Stock item.</param>
        void EditStockItem(DriverStock stock)
        {
            var product = _repository.Products.First(x => x.ProductCode == stock.ProductCode);

            _stockItemDialog = StockItemDialog.NewTrailerStockInstance(product.ProductCode, stock.Id, OnStockItemDialogAction);
            _stockItemDialog.Show(FragmentManager, StockItemDialog.TAG);
        }
        /// <summary>
        /// Stock action
        /// </summary>
        /// <param name="adapterPosition">Adapter position.</param>
        /// <param name="action">Action.</param>
        void OnStockAction(int adapterPosition, StockAction action)
        {
            _stockItem   = _driverStock[adapterPosition];
            _stockItemId = _stockItem.Id;

            _adapterPosition = adapterPosition;

            EditStockItem(_stockItem);
        }
        /// <summary>
        /// Config
        /// </summary>
        /// <returns>The config.</returns>
        /// <param name="trailerStock">Trailer stock.</param>
        public void Config(DriverStock trailerStock)
        {
            using (var cylinderImageView = ItemView.FindViewById <ImageView>(Resource.Id.cylinderImageView))
            {
                var icon = ProductIcon.GetIcon(trailerStock.ProductCode);

                if (icon != null)
                {
                    cylinderImageView.SetImageResource(icon.Value);
                }
                else
                {
                    cylinderImageView.SetImageResource(0);
                }
            }

            using (var descriptionTextView = ItemView.FindViewById <TextView>(Resource.Id.descriptionTextView))
            {
                descriptionTextView.Text = trailerStock.ShortDescription;
            }

            using (var fullsTextView = ItemView.FindViewById <TextView>(Resource.Id.fullsTextView))
            {
                var fullsLabel = ItemView.Context.Resources.GetString(Resource.String.label_fulls);
                fullsTextView.Text       = String.Format("{0} {1}", trailerStock.Fulls, fullsLabel);
                fullsTextView.Visibility = trailerStock.Fulls > 0 ? ViewStates.Visible : ViewStates.Gone;
            }

            using (var emptiesTextView = ItemView.FindViewById <TextView>(Resource.Id.emptiesTextView))
            {
                var emptiesLabel = ItemView.Context.Resources.GetString(Resource.String.label_empties);
                emptiesTextView.Text       = String.Format("{0} {1}", trailerStock.Empties, emptiesLabel);
                emptiesTextView.Visibility = trailerStock.Empties > 0 ? ViewStates.Visible : ViewStates.Gone;
            }

            using (var faultyEmptiesTextView = ItemView.FindViewById <TextView>(Resource.Id.faultyEmptiesTextView))
            {
                var faultyEmptiesLabel = ItemView.Context.Resources.GetString(Resource.String.label_faulty_empties);
                faultyEmptiesTextView.Text       = String.Format("{0} {1}", trailerStock.FaultyEmpties, faultyEmptiesLabel);
                faultyEmptiesTextView.Visibility = trailerStock.FaultyEmpties > 0 ? ViewStates.Visible : ViewStates.Gone;
            }

            using (var faultyFullsTextView = ItemView.FindViewById <TextView>(Resource.Id.faultyFullsTextView))
            {
                var faultyFullsLabel = ItemView.Context.Resources.GetString(Resource.String.label_faulty_fulls);
                faultyFullsTextView.Text       = String.Format("{0} {1}", trailerStock.FaultyFulls, faultyFullsLabel);
                faultyFullsTextView.Visibility = trailerStock.FaultyFulls > 0 ? ViewStates.Visible : ViewStates.Gone;
            }

            using (var orderedTextView = ItemView.FindViewById <TextView>(Resource.Id.orderedTextView))
            {
                var orderedLabel = ItemView.Context.Resources.GetString(Resource.String.label_ordered);
                orderedTextView.Text       = String.Format("{0} {1}", trailerStock.OrderQuantity, orderedLabel);
                orderedTextView.Visibility = trailerStock.OrderQuantity > 0 ? ViewStates.Visible : ViewStates.Gone;
            }
        }
        /// <summary>
        /// Gets the data.
        /// </summary>
        void RefreshData(Bundle savedInstanceState)
        {
            _trailers = _repository.Trailers.OrderBy(x => x.TrailerNumber).ToList();

            if (savedInstanceState != null)
            {
                var stockItemId = savedInstanceState.GetString(BundleArguments.StockItemId);

                if (stockItemId != null)
                {
                    _stockItem = _repository.Find <DriverStock>(stockItemId);
                }
            }
        }