public void Setup(
            List <TenderEntryVO> existingTendOutList,
            List <TenderEntryVO> existingRefOutList,
            TenderTablePanelType tType,
            decimal remAmount)
        {
            this.tenderTableType = tType;
            //this.remainingAmount = remAmount;
            if (this.tenderTableType == TenderTablePanelType.TENDEROUT_REFUND ||
                this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND)
            {
                partialRefundTenderList.Clear();
                GetRefundTenderList.Clear();
                GetTenderList.Clear();
                if (CollectionUtilities.isNotEmpty(existingTendOutList))
                {
                    //refundTenderList.AddRange(existingTendOutList);
                    GetTenderList.AddRange(existingTendOutList);
                }

                if (this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND)
                {
                    partialRefundTenderList.AddRange(existingRefOutList);
                }
            }
        }
        public void AddTenderEntry(TenderEntryVO tenderEntry, bool addToInternalList)
        {
            if (tenderEntry == null)
            {
                return;
            }

            string       cardType = string.Empty;
            DataGridView dV;

            cardType = tenderEntry.CardTypeString ?? string.Empty;
            //Determine table to create data row from
            if (this.tenderTableType == TenderTablePanelType.TENDERIN)
            {
                dV = this.tenderInDataGridView;
            }
            else
            {
                if (this.tenderTableType == TenderTablePanelType.TENDEROUT_REFUND ||
                    this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND)
                {
                    dV = (this.tenderTableType == TenderTablePanelType.TENDEROUT_REFUND) ?
                         this.tenderOutRefundDataGridView :
                         this.tenderOutPurchaseDataGridView;
                    if (!addToInternalList)
                    {
                        if (this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND)
                        {
                            dV = this.tenderOutPartialRefundDataGridView;
                        }
                        else
                        {
                            //Initial loading of purchases noted for refund
                            dV = this.tenderOutPurchaseDataGridView;
                        }
                    }
                    else
                    {
                        if (initialTenderAdded)
                        {
                            dV = this.tenderOutRefundDataGridView;
                        }
                    }
                }
                else
                {
                    dV = this.tenderOutPurchaseDataGridView;
                }
            }

            //Add common data row types
            string tenderType = TenderTypeStrings[(int)tenderEntry.TenderType];
            //Enum.Format(typeof(TenderTypes), tenderEntry.TenderType, "g");
            string refNumber = tenderEntry.ReferenceNumber ?? string.Empty;
            string amount    = tenderEntry.Amount.ToString("C");

            //Construct data row array
            object[] rowData = null;
            rowData = new string[]
            {
                tenderType, refNumber, cardType, amount
            };

            if ((this.tenderTableType == TenderTablePanelType.TENDEROUT_REFUND ||
                 this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND) &&
                addToInternalList && initialTenderAdded)
            {
                string msg;
                if (!this.validateRefundTenderMatrix(tenderEntry, out msg))
                {
                    MessageBox.Show("Improper tender added: " + msg);
                    return;
                }
            }

            /* SR 6/15/2011 Removing coupon as a MOP
             * //SR 12/27/2010 If the current tender entry type is coupon make sure this is the
             * //first type selected
             * if (this.tenderTableType == TenderTablePanelType.TENDERIN && tenderEntry.TenderType == TenderTypes.COUPON)
             * {
             *  if (GetTenderList.Count > 0)
             *  {
             *      MessageBox.Show("Coupon Tender needs to be applied first. " + System.Environment.NewLine + "Please remove previously used tender types.", "Process Tender Warning");
             *      return;
             *  }
             * }*/

            //SR 03/12/2011 If the current tender entry for tender in is store credit ask for manager override
            //if the transaction is sale
            if (this.tenderTableType == TenderTablePanelType.TENDERIN && tenderEntry.TenderType == TenderTypes.STORECREDIT && GlobalDataAccessor.Instance.DesktopSession.CompleteSale)
            {
                var overrideTypes    = new List <ManagerOverrideType>();
                var transactionTypes = new List <ManagerOverrideTransactionType>();
                var messageToShow    = new StringBuilder();
                messageToShow.Append("Store Credit is being used ");
                overrideTypes.Add(ManagerOverrideType.SCRDT);
                transactionTypes.Add(ManagerOverrideTransactionType.SALE);
                var overrideFrm = new ManageOverrides(ManageOverrides.OVERRIDE_TRIGGER)
                {
                    MessageToShow                   = messageToShow.ToString(),
                    ManagerOverrideTypes            = overrideTypes,
                    ManagerOverrideTransactionTypes = transactionTypes
                };

                overrideFrm.ShowDialog();
                if (!overrideFrm.OverrideAllowed)
                {
                    MessageBox.Show("Manager override needed to proceed with using store credit");
                    return;
                }
            }

            //SR 12/27/2010 Check if the current tender type is cash and there is already a cash tender
            //type entered. In that case the amount needs to be added to the original row and should not
            //enter a new row
            //SR 2/23/2011 The same logic applies for Shop credit
            bool    addRow           = true;
            decimal currentRowAmount = 0.0m;

            if (RowIdx == -1)
            {
                if ((tenderTableType == TenderTablePanelType.TENDERIN && (tenderEntry.TenderType == TenderTypes.CASHIN || tenderEntry.TenderType == TenderTypes.STORECREDIT)) ||
                    ((tenderTableType == TenderTablePanelType.TENDEROUT_REFUND || tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND) &&
                     (tenderEntry.TenderType == TenderTypes.CASHOUT || (tenderEntry.TenderType == TenderTypes.STORECREDIT && addToInternalList))))
                {
                    foreach (DataGridViewRow dgvr in dV.Rows)
                    {
                        var strObjVal = (dgvr.Cells.Count > 0)
                                        ? dgvr.Cells[0].Value
                                        : null;

                        if (strObjVal != null && tenderType == strObjVal.ToString() && (tenderEntry.TenderType == TenderTypes.CASHIN || tenderEntry.TenderType == TenderTypes.CASHOUT) && (strObjVal.ToString().Equals("Cash", StringComparison.OrdinalIgnoreCase)))
                        {
                            var strObjVal2 = (dgvr.Cells.Count > 3)
                                             ? dgvr.Cells[3].Value
                                             : null;
                            if (strObjVal2 != null)
                            {
                                var cellValStr = strObjVal2.ToString();
                                if (!string.IsNullOrEmpty(cellValStr) && cellValStr.Length > 1)
                                {
                                    currentRowAmount    = Utilities.GetDecimalValue(cellValStr.Substring(1));
                                    currentCardType     = string.Empty;
                                    dgvr.Cells[3].Value = amount;
                                    addRow = false;
                                }
                            }
                        }
                        if (strObjVal != null && tenderEntry.TenderType == TenderTypes.STORECREDIT && (strObjVal.ToString().Equals("Store Credit", StringComparison.OrdinalIgnoreCase)))
                        {
                            var strObjVal2 = (dgvr.Cells.Count > 3)
                                             ? dgvr.Cells[3].Value
                                             : null;
                            if (strObjVal2 != null)
                            {
                                var cellValStr = strObjVal2.ToString();
                                if (!string.IsNullOrEmpty(cellValStr) && cellValStr.Length > 1)
                                {
                                    currentRowAmount    = Utilities.GetDecimalValue(cellValStr.Substring(1));
                                    currentCardType     = string.Empty;
                                    dgvr.Cells[3].Value = amount;
                                    addRow = false;
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                currentRowAmount = Utilities.GetDecimalValue(dV.Rows[RowIdx].Cells[3].Value.ToString().Substring(1));
                currentCardType  = Utilities.GetStringValue(dV.Rows[RowIdx].Cells[2].Value);
                dV.Rows.RemoveAt(RowIdx);
                dV.Rows.Insert(RowIdx, rowData);
                addRow = false;
            }

            //Add data row array to appropriate data grid view
            if (addRow)
            {
                dV.Rows.Add(rowData);
            }

            //Add entry to tender list

            if (addToInternalList)
            {
                if (this.tenderTableType == TenderTablePanelType.TENDERIN)
                {
                    if (!addRow)
                    {
                        int rowIdx = GetTenderList.FindIndex(tenderData => tenderData.TenderType == tenderEntry.TenderType && tenderData.CardTypeString == currentCardType);
                        if (rowIdx >= 0)
                        {
                            GetTenderList.RemoveAt(rowIdx);
                            GetTenderList.Insert(rowIdx, tenderEntry);
                            this.adjustAmount(-currentRowAmount);
                        }
                    }
                    else
                    {
                        this.GetTenderList.Add(tenderEntry);
                    }
                }
                else if (this.tenderTableType == TenderTablePanelType.TENDEROUT_REFUND || this.tenderTableType == TenderTablePanelType.TENDEROUT_PARTIALREFUND)
                {
                    if (!addRow)
                    {
                        int rowIdx = GetRefundTenderList.FindIndex(tenderData => tenderData.TenderType == tenderEntry.TenderType && tenderData.CardTypeString == currentCardType);
                        if (rowIdx >= 0)
                        {
                            GetRefundTenderList.RemoveAt(rowIdx);
                            GetRefundTenderList.Insert(rowIdx, tenderEntry);
                            this.adjustAmount(-currentRowAmount);
                        }
                    }
                    else
                    if (initialTenderAdded)
                    {
                        this.GetRefundTenderList.Add(tenderEntry);
                    }
                }

                decimal adjustTenderAmount = tenderEntry.Amount;
                if (this.tenderTableType == TenderTablePanelType.TENDERIN)
                {
                    this.adjustAmount(adjustTenderAmount);
                }
                else if (dV != this.tenderOutPurchaseDataGridView)
                {
                    this.adjustAmount(adjustTenderAmount);
                }
            }
        }