/// <summary>
        /// This generates picklist for everything in the receivepallet entry.
        /// </summary>
        /// <param name="receiveDoc"></param>
        /// <param name="receivePallet"></param>
        /// <param name="order"></param>
        /// <param name="picklist"></param>
        /// <returns></returns>
        public PickListDetail CreatePicklistDetailWithOrder(ReceiveDoc receiveDoc, ReceivePallet receivePallet, Order order, PickList picklist)
        {
            double?      cost         = null;
            decimal      pack         = receivePallet.Balance / receiveDoc.QtyPerPack;
            OrderService orderService = new OrderService();

            orderService.CreateOrderDetail(receiveDoc, order, pack);
            if (!receiveDoc.IsColumnNull("Cost"))
            {
                cost = receiveDoc.Cost;
            }
            PickListDetail pickListDetail = PickListDetail.GeneratePickListDetail(pack, cost, receiveDoc.ID,
                                                                                  receiveDoc.ManufacturerId,
                                                                                  receivePallet.ID,
                                                                                  receiveDoc.QtyPerPack,
                                                                                  receiveDoc.StoreID, receiveDoc.UnitID,
                                                                                  receiveDoc.ItemID, picklist.ID,
                                                                                  receivePallet.PalletID,
                                                                                  receiveDoc.ExpDate.ToString(),
                                                                                  receiveDoc.BatchNo);

            ReceivePallet.ReserveQty(pack, receivePallet.ID);

            return(pickListDetail);
        }
        private int SaveOrder()
        {
            int      warehouseID;
            var      order      = GenerateOrder();
            PickList pickList   = PickList.GeneratePickList(order.ID);
            int      picklistId = pickList.ID;

            if (TransferTypeID != Transfer.Constants.HUB_TO_HUB)
            {
                warehouseID = GenerateTransfer(order.ID);
            }

            // Log
            this.LogActivity("Transfer", order.ID);


            int LineNo = 0;

            // This is a kind of initializing the data table.


            DataView dv = orderGrid.DataSource as DataView;

            foreach (DataRowView r in dv)
            {
                if (r["ApprovedPacks"] != null && r["ApprovedPacks"] != DBNull.Value && r["ApprovedPacks"].ToString() != "")
                {
                    if (Convert.ToDecimal(r["ApprovedPacks"]) != 0)
                    {
                        LineNo = LineNo + 1;
                        int     itemId           = Convert.ToInt32(r["ItemID"]);
                        int     unitId           = Convert.ToInt32(r["UnitID"]);
                        decimal pack             = Convert.ToDecimal(r["ApprovedPacks"]);
                        int     qtyPerPack       = Convert.ToInt32(r["QtyPerPack"]);
                        int     activityId       = Convert.ToInt32(lkFromActivity.EditValue);
                        int     manufacturerId   = Convert.ToInt32(Convert.ToInt32(r["ManufacturerID"]));
                        int     receivePalletId  = Convert.ToInt32(r["ReceivingLocationID"]);
                        int     palletLocationId = Convert.ToInt32(r["LocationID"]);
                        double? unitPrice;
                        string  batchNumber  = r["BatchNo"].ToString();
                        string  expireDate   = "";
                        int     receiveDocId = Convert.ToInt32(r["ReceiveDocID"]);
                        if ((r["UnitPrice"] != DBNull.Value))
                        {
                            unitPrice = Convert.ToDouble(r["UnitPrice"]);
                        }
                        else
                        {
                            unitPrice = null;
                        }

                        if (r["ExpDate"] != DBNull.Value)
                        {
                            expireDate = r["ExpDate"].ToString();
                        }

                        OrderDetail    ord            = OrderDetail.GenerateOrderDetail(unitId, activityId, pack, order.ID, qtyPerPack, itemId);
                        PalletLocation palletLocation = new PalletLocation();
                        palletLocation.LoadByPrimaryKey(palletLocationId);
                        int            palletID = palletLocation.PalletID;
                        PickListDetail pkDetail = PickListDetail.GeneratePickListDetail(pack, unitPrice, receiveDocId, manufacturerId, receivePalletId, qtyPerPack, activityId, unitId, itemId, picklistId, palletID, expireDate, batchNumber);
                        ReceivePallet.ReserveQty(pack, receivePalletId);
                        //To Print The Picklist
                        //Then reserve Items


                        Item item = new Item();
                        item.LoadByPrimaryKey(itemId);
                        DataRow drvpl = dvPickList.NewRow();
                        drvpl["FullItemName"] = item.FullItemName;
                        drvpl["StockCode"]    = item.StockCode;
                        drvpl["BatchNo"]      = batchNumber;
                        if (expireDate != "")
                        {
                            drvpl["ExpDate"] = Convert.ToDateTime(expireDate).ToString("MMM/yyyy");
                        }
                        else
                        {
                            drvpl["ExpDate"] = DBNull.Value;
                        }
                        drvpl["LineNum"] = LineNo + 1;
                        var manufacturer = new Manufacturer();
                        manufacturer.LoadByPrimaryKey(manufacturerId);
                        drvpl["ManufacturerName"] = manufacturer.Name;

                        drvpl["Pack"]      = pack;
                        drvpl["UnitPrice"] = unitPrice;
                        var unit = new ItemUnit();
                        unit.LoadByPrimaryKey(unitId);

                        drvpl["Unit"] = unit.Text;

                        drvpl["QtyInSKU"] = pack;
                        if (unitPrice != null)
                        {
                            drvpl["CalculatedCost"] = pack * Convert.ToDecimal(unitPrice);
                        }


                        palletLocation.LoadByPrimaryKey(pkDetail.PalletLocationID);
                        drvpl["PalletLocation"]    = palletLocation.Label;
                        drvpl["WarehouseName"]     = palletLocation.WarehouseName;
                        drvpl["PhysicalStoreName"] = palletLocation.PhysicalStoreName;
                        var activity = new Activity();
                        activity.LoadByPrimaryKey(pkDetail.StoreID);
                        drvpl["ActivityConcat"] = activity.FullActivityName;
                        drvpl["AccountName"]    = activity.AccountName;
                        dvPickList.Rows.Add(drvpl);
                    }
                }
            }
            if (LineNo == 0)
            {
                throw new System.ArgumentException("Please review your list,you haven't approved any Quantity");
            }
            string   receivingUnit;
            Transfer transfer = new Transfer();

            transfer.LoadByOrderID(order.ID);
            if (TransferTypeID == Transfer.Constants.ACCOUNT_TO_ACCOUNT)
            {
                var fromActivity = new Activity();
                fromActivity.LoadByPrimaryKey(transfer.FromStoreID);
                var toActivity = new Activity();
                toActivity.LoadByPrimaryKey(transfer.ToStoreID);

                receivingUnit = String.Format("Account to Account from {0} to {1}", fromActivity.FullActivityName,
                                              toActivity.FullActivityName);
            }
            else if (TransferTypeID == Transfer.Constants.STORE_TO_STORE)
            {
                var toStore = new PhysicalStore();

                toStore.LoadByPrimaryKey(transfer.ToPhysicalStoreID);
                receivingUnit = string.Format("Store to Store transfer to: {0}", toStore.WarehouseName);
            }
            else
            {
                receivingUnit = lkForHub.Text;
            }
            var plr = HCMIS.Desktop.Reports.WorkflowReportFactory.CreatePicklistReport(order, receivingUnit,
                                                                                       dvPickList.DefaultView);

            plr.PrintDialog();

            XtraMessageBox.Show("Picklist Prepared!", "Successful", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return(order.ID);
        }