public Domain.Request FindSingle(int requestID)
        {
            var request = new Domain.Request();
            var order   = new Order();

            order.LoadByPrimaryKey(requestID);

            request.RequestID     = order.ID;
            request.OrderNumber   = order.RefNo;
            request.LetterNumber  = !order.IsColumnNull("LetterNo") ? order.LetterNo : "";
            request.RequestedDate = order.EurDate;

            request.Client      = _clientRepository.FindSingle(order.RequestedBy);
            request.Mode        = _modeService.GetEnum(order.FromStore);
            request.PaymentTerm = _paymentTermService.FindSingle(order.PaymentTypeID);
            request.OrderStatus = _orderStatusService.GetEnum(order.OrderStatusID);

            var orderDetail = new OrderDetail();

            orderDetail.LoadAllByOrderID(requestID);
            orderDetail.Rewind();
            request.RequestDetails = new Collection <Domain.RequestDetail>();
            while (!orderDetail.EOF)
            {
                var item          = _itemRepository.FindSingle(orderDetail.ItemID);
                var unitOfIssue   = _unitOfIssueRepository.FindSingle(orderDetail.UnitID);
                var requestDetail = new Domain.RequestDetail()
                {
                    RequestDetailId   = orderDetail.ID,
                    Item              = item,
                    Unit              = unitOfIssue,
                    RequestedQuantity = orderDetail.Pack,
                    ApprovedQuantity  = !orderDetail.IsColumnNull("ApprovedQuantity") ? orderDetail.ApprovedQuantity : orderDetail.Pack,
                    IsFirstLoad       = orderDetail.IsColumnNull("ApprovedQuantity"),
                    ActivityGroup     = orderDetail.IsColumnNull(OrderDetail.ColumnNames.StoreID)?null:_activityRepository.FindSingle(orderDetail.StoreID, orderDetail.DeliveryNote),
                    ExpiryDate        =
                        !orderDetail.IsColumnNull("PreferredExpiryDate")
                                                    ? orderDetail.PreferredExpiryDate
                                                    : (DateTime?)null,
                    Manufacturer =
                        !orderDetail.IsColumnNull("PreferredManufacturerID")
                                                    ? _manufacturerRepository.FindSingle(
                            orderDetail.PreferredManufacturerID)
                                                    : null,
                    physicalStore =
                        !orderDetail.IsColumnNull("PreferredPhysicalStoreID")
                                                    ? _physicalStoreRepository.FindSingle(
                            orderDetail.PreferredPhysicalStoreID)
                                                    : null
                };
                request.RequestDetails.Add(requestDetail);
                orderDetail.MoveNext();
            }



            return(request);
        }
        //~ This Method is Obsoleted ~//
        public static bool SaveBackOrderToDatabase(BLL.Order _order)
        {
            var _orderDetail = new OrderDetail();
            _orderDetail.LoadAllByOrderID(_order.ID);

            MyGeneration.dOOdads.TransactionMgr mgr = MyGeneration.dOOdads.TransactionMgr.ThreadTransactionMgr();
            try
            {
                mgr.BeginTransaction();
                var or = new BLL.Order();

                or.AddNew();
                or.RefNo = Order.GetNextOrderReference();
                or.SetColumn("OrderTypeID", _order.GetColumn("OrderTypeID"));
                or.SetColumn("HCTSReferenceID", _order.GetColumn("HCTSReferenceID"));

                or.OrderStatusID = OrderStatus.Constant.DRAFT_WISHLIST;
                or.RequisitionTypeID = RequisitionType.CONSTANTS.DEMAND;
                or.Remark = _order.ID.ToString(); //Store the Original ID here for the backorder.  We need to have a standard way of marking backorders.

                or.EurDate = or.Date = DateTimeHelper.ServerDateTime; //Both fields are assigned dates.
                or.RequestedBy = _order.RequestedBy;
                or.FilledBy = _order.FilledBy;
                or.LetterNo = _order.LetterNo;
                or.PaymentTypeID = _order.PaymentTypeID;
                or.ContactPerson = _order.ContactPerson;
                or.FromStore = _order.FromStore;
                or.FiscalYearID = FiscalYear.Current.ID;
                or.OrderTypeID = _order.OrderTypeID == OrderType.CONSTANTS.PLITS
                                     ? _order.OrderTypeID
                                     : OrderType.CONSTANTS.BACK_ORDER;

                or.Save();
                or.LogRequisitionStatus(or.ID,null,OrderStatus.Constant.DRAFT_WISHLIST,CurrentContext.UserId);
                _orderDetail.Rewind();
                var orderDetail = new OrderDetail();

                while (!_orderDetail.EOF)
                {
                    if (_orderDetail.ApprovedQuantity >= _orderDetail.Quantity)
                    {
                        _orderDetail.MoveNext();
                        continue; //Backorder is only for those with approved quantity less than the requested quantity.
                    }
                    orderDetail.AddNew();
                    orderDetail.ItemID = _orderDetail.ItemID;
                    orderDetail.OrderID = or.ID;
                    orderDetail.Pack = (_orderDetail.Quantity - _orderDetail.ApprovedQuantity) /
                                       _orderDetail.QtyPerPack;
                    orderDetail.QtyPerPack = _orderDetail.QtyPerPack;
                    orderDetail.Quantity = orderDetail.Pack * orderDetail.QtyPerPack;
                    orderDetail.SetColumn("HACTOrderDetailID", _orderDetail.GetColumn("HACTOrderDetailID"));
                    orderDetail.UnitID = _orderDetail.UnitID;

                    _orderDetail.MoveNext();
                }

                orderDetail.Save();
                mgr.CommitTransaction();
                return true;
            }
            catch (Exception exp)
            {
                mgr.RollbackTransaction();
                return false;
            }
        }