private int GetPalletID(string palletNumber)
 {
     Pallet plt = new Pallet();
     plt.LoadByPalletNumber(palletNumber);
     if (plt.RowCount == 0)
     {
         plt.AddNew();
         plt.PalletNo = Convert.ToInt32(palletNumber);
         plt.Save();
     }
     return plt.ID;
 }
        private bool PalletizationIsValid()
        {
            if (_dtPalletizedItemList == null)
            {
                return false;
            }
            bool valid = true;
            // check if the items are of equal quantity
            DataTable palletized = _dtPalletizedItemList.DefaultView.ToTable(); //(true, "Ordering", "Expiry Date");

            foreach (DataRow dr in palletized.Rows)
            {
                string guid = dr["GUID"].ToString();
                DataRow[] arrReceive = null;
                arrReceive = _dtRecGrid.Select(string.Format("[GUID] = '{0}'", guid));
                DataRow[] arrPalletized = null;
                arrPalletized = _dtPalletizedItemList.Select(string.Format("[GUID] = '{0}'", guid));
                DataRow[] arrNonPalletized = null;
                arrNonPalletized = _dtNonPalletizedItemList.Select(string.Format("[GUID] = '{0}'", guid));
                DataView dataView = null;
                if (grdShortageOrDamaged.DataSource != null)
                {
                    dataView = ((DataTable)grdShortageOrDamaged.DataSource).AsDataView();
                    dataView.RowFilter = string.Format("[GUID]='{0}' and [ShortageReasonID] = {1}", guid,
                        BLL.ShortageReasons.Constants.DAMAGED);
                    //Since we want to do quantity verification only, we need the damaged ones only.  This is because unlike the other type of discrepancies, the damaged adds quantity to the stock.
                }
                DataRowCollection arrDamaged = null;
                if (dataView != null)
                    arrDamaged = dataView.ToTable().Rows;

                // find sum of BU Qty in arr,
                decimal receiveQty = 0;
                decimal palletizedQty = 0;
                decimal nonPalletizedQty = 0;
                decimal damagedQty = 0;

                if (arrReceive != null)
                {
                    foreach (DataRow d in arrReceive)
                    {
                        d.ClearErrors();
                        receiveQty += Convert.ToDecimal(d["Pack Qty"]);
                    }
                }
                if (arrPalletized != null)
                {
                    foreach (DataRow d in arrPalletized)
                    {
                        d.ClearErrors();
                        palletizedQty += Convert.ToDecimal(d["Pack Qty"]);
                    }
                }

                if (arrNonPalletized != null)
                {
                    foreach (DataRow d in arrNonPalletized)
                    {
                        d.ClearErrors();
                        nonPalletizedQty += Convert.ToDecimal(d["Pack Qty"]);
                    }
                }

                if (arrDamaged != null)
                {
                    foreach (DataRow d in arrDamaged)
                    {
                        d.ClearErrors();
                        damagedQty += Convert.ToDecimal(d["Pack Qty"]);
                    }
                }

                if (receiveQty != (palletizedQty + nonPalletizedQty - damagedQty))
                {
                    foreach (DataRow d in arrPalletized)
                    {
                        d.SetColumnError("Pack Qty",
                            String.Format("Sum should be equal to what's specified in Step two({0})", receiveQty));
                    }
                    // this was an error
                    valid = false;

                }
            }

            Pallet plt = new Pallet();
            // check if the pallet # don't allow null or 0
            foreach (DataRow dr in _dtPalletizedItemList.Rows)
            {

                if (dr["PalletNumber"] == DBNull.Value || dr["PalletNumber"].ToString().Equals("") ||
                    Convert.ToInt32(dr["PalletNumber"]) == 0)
                {
                    dr.SetColumnError("PalletNumber", "The Pallet Number you specified is Already Used.");
                    valid = false;
                    continue;
                }
            }

            // check if same expiry on a single pallet location rule is held
            DataTable PalletNumbers = _dtPalletizedItemList.DefaultView.ToTable(true, "PalletNumber");
            foreach (DataRow dr in PalletNumbers.Rows)
            {
                // validate if the pallet number specified is not already used

                plt.LoadByPalletNumber(dr["PalletNumber"].ToString());

                if (plt.RowCount > 0)
                {
                    // there is an existing pallet number in the pallet list

                    DataRow[] darr =
                        _dtPalletizedItemList.Select(string.Format("PalletNumber = '{0}'", dr["PalletNumber"]));
                    foreach (DataRow d in darr)
                    {

                        if (!Convert.ToBoolean(d["Consolidate"]))
                        {
                            d.SetColumnError("PalletNumber", "The Pallet Number you specified is Already Used.");
                            valid = false;
                        }
                    }

                    continue;
                }

                DataRow[] arr1 = _dtPalletizedItemList.Select(string.Format("PalletNumber = '{0}'", dr["PalletNumber"]));
                int ItemID = 0;
                DateTime ExpiryDate = DateTime.Today;
                foreach (DataRow drw in arr1)
                {
                    if (ItemID == 0)
                    {
                        ItemID = Convert.ToInt32(drw["ID"]);
                        if (drw["Expiry Date"] != DBNull.Value)
                        {
                            ExpiryDate = Convert.ToDateTime(drw["Expiry Date"]);
                        }
                    }
                    else
                    {
                        //Validate if the same Item,with same Epiry date is in the same pallet
                        if (ItemID != Convert.ToInt32(drw["ID"]))
                        {
                            drw.SetColumnError("Item Name", "Different Items couldn't be put on the same pallet.");
                            valid = false;
                        }
                        if (drw["Expiry Date"] != DBNull.Value)
                        {
                            if (ExpiryDate.Subtract(Convert.ToDateTime(drw["Expiry Date"])).Days != 0)
                            {
                                drw.SetColumnError("Expiry Date",
                                    "Items With Different Expiry Date couldn't be put on the same pallet.");
                                valid = false;
                            }
                        }
                    }
                }
            }

            return valid;
        }