示例#1
0
 public ExecuteNewLoanExistCustomer(
     ProcessTenderController pTender,
     CashlinxDesktopSession c,
     TupleType <int, LoadTestInputVO, List <TupleType <int, string, double> > > tInput) : base(NAME)
 {
     this.tender = pTender;
     this.cds    = c;
     this.input  = tInput;
 }
        /// <summary>
        /// Main execution function for SaleFlowExecutor
        /// </summary>
        /// <param name="inputData"></param>
        /// <returns></returns>
        private object executorFxn(object inputData)
        {
            if (inputData == null)
            {
                inputData = suspendedState;
            }
            SaleFlowState inputState = (SaleFlowState)inputData;

            switch (inputState)
            {
            case SaleFlowState.ItemSearch:
                if (GlobalDataAccessor.Instance.DesktopSession.ActiveRetail == null)
                {
                    GlobalDataAccessor.Instance.DesktopSession.Sales.Add(new SaleVO());
                    GlobalDataAccessor.Instance.DesktopSession.DescribeItemPawnItemIndex = -1;
                }
                //ItemSearch itemSearchFrm = new ItemSearch();
                if (GlobalDataAccessor.Instance.DesktopSession.HistorySession.HasFormName("ItemSearch"))
                {
                    GlobalDataAccessor.Instance.DesktopSession.HistorySession.VisibleForm("ItemSearch");
                }
                else
                {
                    ShowForm itemSearchBlk = CommonAppBlocks.Instance.CreateItemSearchShowBlock(this.parentForm, this.itemSearchFormNavAction);
                    if (!itemSearchBlk.execute())
                    {
                        throw new ApplicationException("Cannot execute Item Search block");
                    }
                }

                break;

            case SaleFlowState.DescribeMerchandise:
                ShowForm describeMerchBlk = CommonAppBlocks.Instance.DescribeMerchandiseBlock(this.parentForm, this.describeMerchFormAction);
                if (!describeMerchBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Describe Merchandise block");
                }

                break;

            case SaleFlowState.DescribeItem:
                ShowForm describeItemBlk = CommonAppBlocks.Instance.DescribeItemBlock(this.parentForm, this.describeItemFormAction);
                if (!describeItemBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Describe Item Block");
                }
                break;

            case SaleFlowState.LookupCustomer:

                ShowForm lookupCustBlk = CommonAppBlocks.Instance.CreateLookupCustomerShowBlock(this.parentForm, this.lookupCustFormNavAction);
                if (!lookupCustBlk.execute())
                {
                    throw new ApplicationException("Cannot execute LookupCustomer block");
                }

                break;

            case SaleFlowState.LookupCustomerResults:
                ShowForm lookupCustResBlk = CommonAppBlocks.Instance.CreateLookupCustomerResultsBlock(this.parentForm, this.lookupCustResultsFormNavAction);
                if (!lookupCustResBlk.execute())
                {
                    throw new ApplicationException("Cannot execute LookupCustomerResults block");
                }
                break;

            case SaleFlowState.LookupVendorResults:
                ShowForm lookupVendResBlk = CommonAppBlocks.Instance.CreateLookupVendorResultsBlock(this.parentForm, this.lookupVendResultsFormNavAction);
                if (!lookupVendResBlk.execute())
                {
                    throw new ApplicationException("Cannot execute LookupVendorResults block");
                }
                break;

            case SaleFlowState.AddCustomer:
                if (GlobalDataAccessor.Instance.DesktopSession.HistorySession.Trigger.Equals(Commons.TriggerTypes.NEWPAWNLOAN, StringComparison.OrdinalIgnoreCase))
                {
                    ShowForm manageCustBlk = CommonAppBlocks.Instance.CreateManagePawnApplicationBlock(this.parentForm, this.managePawnAppFormNavAction);
                    if (!manageCustBlk.execute())
                    {
                        throw new ApplicationException("Cannot execute Manage Pawn Application block");
                    }
                }
                else
                {
                    ShowForm createCustBlk = CommonAppBlocks.Instance.CreateCreateCustomerBlock(this.parentForm, this.createCustomerFormNavAction);
                    if (!createCustBlk.execute())
                    {
                        throw new ApplicationException("Cannot execute CreateCustomer block");
                    }
                }
                break;

            case SaleFlowState.AddVendor:

                ShowForm createVendBlk = CommonAppBlocks.Instance.CreateCreateVendorBlock(this.parentForm, this.createVendFormNavAction);
                if (!createVendBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Create Vendor block");
                }
                break;

            case SaleFlowState.ExistingCustomer:
                ShowForm existCustBlk = CommonAppBlocks.Instance.CreateExistingCustomerBlock(this.parentForm, this.existCustomerFormNavAction);
                if (!existCustBlk.execute())
                {
                    throw new ApplicationException("Cannot execute ExistingCustomer block");
                }
                break;

            case SaleFlowState.ManagePawnApplication:
                ShowForm managePawnAppBlk = CommonAppBlocks.Instance.CreateManagePawnApplicationBlock(this.parentForm, this.managePawnAppFormNavAction);
                if (!managePawnAppBlk.execute())
                {
                    throw new ApplicationException("Cannot execute ManagePawnApplication block");
                }
                break;

            case SaleFlowState.ViewCustomerInformation:
                ShowForm viewCustInfoBlk = CommonAppBlocks.Instance.ViewCustomerInfoShowBlock(this.parentForm, this.viewCustInfoFormNavAction);
                if (!viewCustInfoBlk.execute())
                {
                    throw new ApplicationException("Cannot execute View Customer Information block");
                }

                break;

            case SaleFlowState.ViewReadOnlyCustomerInformation:
                ShowForm viewCustInfoReadOnlyBlk = CommonAppBlocks.Instance.ViewCustomerInfoShowBlock(this.parentForm, this.viewCustInfoFormNavAction);
                if (!viewCustInfoReadOnlyBlk.execute())
                {
                    throw new ApplicationException("Cannot execute View customer information Read Only block");
                }
                ((ViewCustomerInformation)viewCustInfoReadOnlyBlk.ClassForm).ShowReadOnly = true;
                break;

            case SaleFlowState.TenderIn:
                if (this.tenderInComplete)
                {
                    GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    if (GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.LoanStatus == ProductStatus.LAY)
                    {
                        GlobalDataAccessor.Instance.DesktopSession.showProcessTender(ProcessTenderProcedures.ProcessTenderMode.LAYAWAY);
                    }
                    else
                    {
                        ProcessTenderController pCntrl = ProcessTenderController.Instance;
                        //Perform the process tender process
                        bool success = pCntrl.ExecuteProcessTender(ProcessTenderProcedures.ProcessTenderMode.RETAILSALE);
                        if (success)
                        {
                            ReceiptConfirmation rcptConf = new ReceiptConfirmation();
                            rcptConf.ShowDialog();
                        }
                        else
                        {
                            goto case SaleFlowState.CancelFlow;
                        }
                    }

                    goto case SaleFlowState.CancelFlow;
                }
                else
                {
                    if (GlobalDataAccessor.Instance.DesktopSession.HistorySession.Lookup("TenderIn"))
                    {
                        GlobalDataAccessor.Instance.DesktopSession.HistorySession.VisibleForm("TenderIn");
                    }
                    else
                    {
                        ShowForm tenderInBlk = CommonAppBlocks.Instance.TenderInShowBlock(this.parentForm, this.TenderInFormAction);
                        if (!tenderInBlk.execute())
                        {
                            throw new ApplicationException("Cannot execute Tender In block");
                        }
                    }
                }

                break;

            case SaleFlowState.CancelFlow:
                GlobalDataAccessor.Instance.DesktopSession.ClearCustomerList();
                GlobalDataAccessor.Instance.DesktopSession.ClearLoggedInUser();
                GlobalDataAccessor.Instance.DesktopSession.ClearSessionData();
                if (this.endStateNotifier != null)
                {
                    this.endStateNotifier.execute();
                }
                break;

            case SaleFlowState.ExitFlow:
                break;

            default:
                throw new ApplicationException("Invalid sale flow state");
            }

            return(true);
        }
        private void customButtonVoid_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(comboBoxReason.Text))
            {
                MessageBox.Show("You must Select a void Reason");
                comboBoxReason.Focus();
                return;
            }

            ProcessTenderProcedures.ProcessTenderMode mode;
            List <PurchaseVO> purchaseList = new List <PurchaseVO>();

            purchaseList.Add(currentPurchase);
            bool transactionStarted = false;

            bool skipped;

            try
            {
                if ((voidBuyFlow && !voidVendorBuy) || voidReturnFlow)
                {
                    if (currentPurchase.Receipts != null)
                    {
                        string rcptId;

                        if (voidReturnFlow)
                        {
                            rcptId = (from receipt in currentPurchase.Receipts
                                      where (receipt.Event == ReceiptEventTypes.RET.ToString() &&
                                             receipt.RefNumber == currentPurchase.TicketNumber.ToString())
                                      select receipt).First().ReceiptDetailNumber;
                        }
                        else
                        {
                            rcptId = (from receipt in currentPurchase.Receipts
                                      where (receipt.Event == ReceiptEventTypes.PUR.ToString() &&
                                             receipt.RefNumber == currentPurchase.TicketNumber.ToString())
                                      select receipt).First().ReceiptDetailNumber;
                        }

                        VoidLoanForm.LoanVoidDetails lvd = new VoidLoanForm.LoanVoidDetails();
                        lvd.TickNum     = labelTransactionNo.Text;
                        lvd.StoreNum    = GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber;
                        lvd.OpRef       = labelTransactionNo.Text;
                        lvd.OpCode      = voidReturnFlow ? "Return" : "Purchase";
                        lvd.OpCd        = voidReturnFlow ? ReceiptEventTypes.VRET.ToString() : ReceiptEventTypes.VPR.ToString();
                        lvd.Amount      = Utilities.GetDecimalValue(currentPurchase.Amount, 0.0M);
                        lvd.HoldType    = "";
                        lvd.RecId       = Utilities.GetLongValue(rcptId);
                        lvd.PfiEligDate = Utilities.GetDateTimeValue(currentPurchase.PfiEligible, DateTime.MaxValue);
                        lvd.CreatedBy   = Utilities.GetStringValue(currentPurchase.CreatedBy, string.Empty);

                        //BZ # 512
                        lvd.VoidReason  = Utilities.GetStringValue(comboBoxReason.Text, string.Empty);
                        lvd.VoidComment = Utilities.GetStringValue(customTextBoxComment.Text, string.Empty);
                        //BZ # 512 - end
                        string errorCode;
                        string errorText;
                        var    retValue = VoidProcedures.PerformVoid(lvd, out errorCode, out errorText);

                        if (retValue)
                        {
                            MessageBox.Show(voidReturnFlow
                                                    ? "Void purchase return completed successfully"
                                                    : "Void purchase completed successfully");
                        }
                        else
                        {
                            DialogResult dgr;
                            dgr = MessageBox.Show("Void transaction failed. Do you want to retry?", "Void Error", MessageBoxButtons.OKCancel);
                            if (dgr == DialogResult.OK)
                            {
                                return;
                            }
                        }
                        GlobalDataAccessor.Instance.DesktopSession.ClearCustomerList();
                        GlobalDataAccessor.Instance.DesktopSession.ClearSessionData();
                        Close();
                    }
                    else
                    {
                        MessageBox.Show("Error in  void transaction processing");
                        FileLogger.Instance.logMessage(LogLevel.ERROR, this, "No receipts found for purchase " + currentPurchase.TicketNumber + " to void.");
                        Close();
                    }
                }
                if (voidVendorBuy)
                {
                    string errorCode;
                    string errorText;
                    int    receiptNumber;
                    mode = ProcessTenderProcedures.ProcessTenderMode.VOIDBUY;

                    GlobalDataAccessor.Instance.beginTransactionBlock();
                    transactionStarted = true;
                    bool retValue = VoidProcedures.VoidVendorPurchase(GlobalDataAccessor.Instance.OracleDA,
                                                                      Utilities.GetIntegerValue(labelTransactionNo.Text, 0),
                                                                      GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber,
                                                                      ShopDateTime.Instance.ShopDate.ToShortDateString(),
                                                                      ShopDateTime.Instance.ShopDate.ToShortDateString() + " " + ShopDateTime.Instance.ShopTime.ToString(),
                                                                      comboBoxReason.SelectedItem.ToString(),
                                                                      customTextBoxComment.Text,
                                                                      GlobalDataAccessor.Instance.DesktopSession.LoggedInUserSecurityProfile.UserName,
                                                                      out receiptNumber,
                                                                      out errorCode,
                                                                      out errorText);

                    //here add receipt printing code
                    //here call process tender to print void receipt //
                    List <string> refDate   = new List <string>();
                    List <string> refNumber = new List <string>();
                    List <string> refType   = new List <string>();
                    List <string> refEvent  = new List <string>();
                    List <string> refAmount = new List <string>();
                    List <string> refStore  = new List <string>();
                    List <string> refTime   = new List <string>();

                    refEvent.Add(ReceiptEventTypes.VPR.ToString());
                    refStore.Add(GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber);
                    refType.Add("4");
                    refAmount.Add(currentPurchase.Amount.ToString());
                    refTime.Add(ShopDateTime.Instance.ShopTransactionTime);
                    refNumber.Add(GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.TicketNumber.ToString());
                    ReceiptDetailsVO rdVo = new ReceiptDetailsVO();
                    rdVo.ReceiptDate   = ShopDateTime.Instance.ShopDate;
                    rdVo.RefNumbers    = refNumber;
                    rdVo.ReceiptNumber = receiptNumber.ToString();
                    rdVo.RefEvents     = refEvent;
                    rdVo.RefAmounts    = refAmount;
                    rdVo.RefStores     = refStore;
                    rdVo.RefTypes      = refType;
                    //NOTE: Only use process tender controller instance, do not allocate a new one
                    ProcessTenderController pct = ProcessTenderController.Instance;
                    pct.generatePurchaseReceipt(mode, GlobalDataAccessor.Instance.DesktopSession.UserName.ToLowerInvariant(),
                                                GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer,
                                                purchaseList,
                                                GlobalDataAccessor.Instance.DesktopSession.ActiveVendor != null ? GlobalDataAccessor.Instance.DesktopSession.ActiveVendor.Name : "",
                                                rdVo);

                    if (!retValue)
                    {
                        GlobalDataAccessor.Instance.endTransactionBlock(EndTransactionType.ROLLBACK);
                        transactionStarted = false;
                        MessageBox.Show("Failed to void vendor purchase " + errorText);
                        Close();
                    }
                    GlobalDataAccessor.Instance.endTransactionBlock(EndTransactionType.COMMIT);
                    transactionStarted = false;
                    MessageBox.Show("Void vendor purchase completed successfully");
                    GlobalDataAccessor.Instance.DesktopSession.ClearSessionData();
                    this.Close();
                }
                if (voidSaleFlow || voidSaleRefundFlow)
                {
                    if (currentSale.Receipts != null)
                    {
                        string rcptId;
                        if (voidSaleFlow)
                        {
                            rcptId = (from receipt in currentSale.Receipts
                                      where (receipt.Event == ReceiptEventTypes.SALE.ToString() &&
                                             receipt.RefNumber == currentSale.TicketNumber.ToString())
                                      select receipt).First().ReceiptDetailNumber;
                        }
                        else
                        {
                            rcptId = (from receipt in currentSale.Receipts
                                      where (receipt.Event == ReceiptEventTypes.REF.ToString() &&
                                             receipt.RefNumber == currentSale.TicketNumber.ToString())
                                      select receipt).First().ReceiptDetailNumber;
                        }


                        string errorCode;
                        string errorText;
                        int    receiptNumber;
                        GlobalDataAccessor.Instance.beginTransactionBlock();
                        transactionStarted = true;
                        bool retValue;
                        // = new ProcessTenderController.ProcessTenderMode();
                        if (voidSaleFlow)
                        {
                            mode     = ProcessTenderProcedures.ProcessTenderMode.RETAILVOID;
                            retValue = VoidProcedures.VoidSale(GlobalDataAccessor.Instance.OracleDA,
                                                               Utilities.GetIntegerValue(labelTransactionNo.Text, 0),
                                                               GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber,
                                                               GlobalDataAccessor.Instance.CurrentSiteId.TerminalId,
                                                               GlobalDataAccessor.Instance.DesktopSession.CashDrawerId,
                                                               comboBoxReason.SelectedItem.ToString(),
                                                               customTextBoxComment.Text,
                                                               Utilities.GetIntegerValue(labelTransactionNo.Text, 0),
                                                               currentSale.TotalSaleAmount.ToString(),
                                                               1,
                                                               Utilities.GetIntegerValue(rcptId),
                                                               ShopDateTime.Instance.ShopDate.ToShortDateString(),
                                                               ShopDateTime.Instance.ShopTransactionTime.ToString(),
                                                               GlobalDataAccessor.Instance.DesktopSession.LoggedInUserSecurityProfile.UserName,
                                                               out receiptNumber,
                                                               out errorCode,
                                                               out errorText);
                        }
                        else
                        {
                            mode     = ProcessTenderProcedures.ProcessTenderMode.RETAILVOIDREFUND;
                            retValue = VoidProcedures.VoidSaleRefund(GlobalDataAccessor.Instance.OracleDA,
                                                                     Utilities.GetIntegerValue(labelTransactionNo.Text, 0),
                                                                     GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber,
                                                                     GlobalDataAccessor.Instance.CurrentSiteId.TerminalId,
                                                                     GlobalDataAccessor.Instance.DesktopSession.CashDrawerId,
                                                                     comboBoxReason.SelectedItem.ToString(),
                                                                     customTextBoxComment.Text,
                                                                     Utilities.GetIntegerValue(labelTransactionNo.Text, 0),
                                                                     currentSale.Amount.ToString(),
                                                                     1,
                                                                     Utilities.GetIntegerValue(rcptId),
                                                                     ShopDateTime.Instance.ShopDate.ToShortDateString(),
                                                                     ShopDateTime.Instance.ShopTransactionTime.ToString(),
                                                                     GlobalDataAccessor.Instance.DesktopSession.LoggedInUserSecurityProfile.UserName,
                                                                     out receiptNumber,
                                                                     out errorCode,
                                                                     out errorText);
                        }

                        if (retValue)
                        {
                            GlobalDataAccessor.Instance.DesktopSession.endTransactionBlock(EndTransactionType.COMMIT);
                            transactionStarted = false;
                            if (currentSale.TenderDataDetails != null)
                            {
                                ProcessPaidTenderData(currentSale.TenderDataDetails);
                            }
                            //here call process tender to print void receipt //
                            var refDate   = new List <string>();
                            var refNumber = new List <string>();
                            var refType   = new List <string>();
                            var refEvent  = new List <string>();
                            var refAmount = new List <string>();
                            var refStore  = new List <string>();
                            var refTime   = new List <string>();

                            refEvent.Add(ReceiptEventTypes.VRET.ToString());
                            refStore.Add(GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber);
                            refType.Add("4");
                            refTime.Add(ShopDateTime.Instance.ShopTransactionTime);
                            refNumber.Add(GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.TicketNumber.ToString());
                            ReceiptDetailsVO rdVo = new ReceiptDetailsVO();
                            rdVo.ReceiptDate   = ShopDateTime.Instance.ShopDate;
                            rdVo.RefNumbers    = refNumber;
                            rdVo.ReceiptNumber = receiptNumber.ToString();
                            rdVo.RefEvents     = refEvent;
                            rdVo.RefStores     = refStore;
                            rdVo.RefTypes      = refType;
                            //NOTE: Only use process tender controller instance, do not allocate a new one
                            ProcessTenderController pct = ProcessTenderController.Instance;
                            pct.GenerateSaleReceipt(mode, GlobalDataAccessor.Instance.DesktopSession.UserName.ToLowerInvariant(),
                                                    GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer,
                                                    GlobalDataAccessor.Instance.DesktopSession.ActiveRetail,
                                                    GlobalDataAccessor.Instance.DesktopSession.ActiveVendor != null ? GlobalDataAccessor.Instance.DesktopSession.ActiveVendor.Name : "",
                                                    rdVo);
                            MessageBox.Show(voidSaleFlow
                                                    ? "Void Sale completed successfully"
                                                    : "Void Sale Refund completed successfully");
                            GlobalDataAccessor.Instance.DesktopSession.ClearCustomerList();
                            GlobalDataAccessor.Instance.DesktopSession.ClearSessionData();
                            this.Close();
                        }
                        else
                        {
                            GlobalDataAccessor.Instance.DesktopSession.endTransactionBlock(EndTransactionType.ROLLBACK);
                            transactionStarted = false;
                            DialogResult dgr;
                            dgr = MessageBox.Show("Void transaction failed. Do you want to retry?", "Void Error", MessageBoxButtons.OKCancel);
                            if (dgr == DialogResult.OK)
                            {
                                return;
                            }
                            Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Error in  void transaction processing");
                        FileLogger.Instance.logMessage(LogLevel.ERROR, this, "No receipts found for sale " + currentSale.TicketNumber + " to void.");
                        Close();
                    }
                }
            }
            catch (Exception ex)
            {
                if (transactionStarted)
                {
                    GlobalDataAccessor.Instance.DesktopSession.endTransactionBlock(EndTransactionType.ROLLBACK);
                    transactionStarted = false;
                }
                if (FileLogger.Instance.IsLogError)
                {
                    FileLogger.Instance.logMessage(LogLevel.ERROR, this, "Error when voiding " + ex.Message);
                }
            }
        }
示例#4
0
        private void customButtonVoid_Click(object sender, EventArgs e)
        {
            if (currentLayaway.Receipts == null || currentLayaway.Receipts.Count == 0 || voidRow == null)
            {
                return;
            }

            try
            {
                bool retValue      = false;
                int  receiptNumber = 0;

                maxVoidPassed   = false;
                storeCreditUsed = false;

                string receiptID = string.Empty;
                switch (mode)
                {
                case ProcessTenderProcedures.ProcessTenderMode.LAYAWAYVOID:
                    VoidLayaway(out retValue, out receiptNumber, out receiptID);
                    break;

                case ProcessTenderProcedures.ProcessTenderMode.LAYPAYMENTVOID:
                    VoidLayawayPayment(out retValue, out receiptNumber, out receiptID);
                    break;

                case ProcessTenderProcedures.ProcessTenderMode.LAYFORFVOID:
                    VoidLayawayForf(out retValue, out receiptNumber, out receiptID);
                    break;
                }
                if (!retValue && maxVoidPassed)
                {
                    return;
                }
                if (!retValue && storeCreditUsed)
                {
                    return;
                }
                if (retValue)
                {
                    MessageBox.Show("Void Layaway completed successfully");
                }
                else
                {
                    DialogResult dgr;
                    dgr = MessageBox.Show("Void transaction failed. Do you want to retry?", "Void Error", MessageBoxButtons.OKCancel);
                    if (dgr == DialogResult.OK)
                    {
                        return;
                    }
                    Close();
                }
                if (mode != ProcessTenderProcedures.ProcessTenderMode.LAYFORFVOID)
                {
                    //code here to print void Layaway Receipt
                    List <string> refNumber = new List <string>();
                    List <string> refType   = new List <string>();
                    List <string> refEvent  = new List <string>();
                    List <string> refStore  = new List <string>();
                    List <string> refTime   = new List <string>();

                    if (mode == ProcessTenderProcedures.ProcessTenderMode.LAYAWAYVOID)
                    {
                        refEvent.Add(ReceiptEventTypes.LAY.ToString());
                    }
                    else if (mode == ProcessTenderProcedures.ProcessTenderMode.LAYPAYMENTVOID || mode == ProcessTenderProcedures.ProcessTenderMode.LAYFORFVOID)
                    {
                        refEvent.Add(ReceiptEventTypes.LAYPMT.ToString());
                    }
                    refStore.Add(GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber);
                    refType.Add("4");
                    refTime.Add(ShopDateTime.Instance.ShopTransactionTime);
                    refNumber.Add(currentLayaway.TicketNumber.ToString());

                    ReceiptDetailsVO rdVo = new ReceiptDetailsVO();
                    rdVo.ReceiptDate   = ShopDateTime.Instance.ShopDate;
                    rdVo.RefNumbers    = refNumber;
                    rdVo.ReceiptNumber = receiptNumber.ToString();
                    rdVo.RefEvents     = refEvent;
                    rdVo.RefStores     = refStore;
                    rdVo.RefTypes      = refType;


                    if (currentLayaway.TenderDataDetails != null)
                    {
                        ProcessPaidTenderData(currentLayaway.TenderDataDetails, receiptID);
                    }

                    //NOTE: Only use ProcessTenderController.Instance!!
                    ProcessTenderController ptCntrl = ProcessTenderController.Instance;
                    ptCntrl.GenerateLayawayPaymentReceipt(mode, GlobalDataAccessor.Instance.DesktopSession.UserName.ToLowerInvariant(),
                                                          GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer,
                                                          currentLayaway,
                                                          GlobalDataAccessor.Instance.DesktopSession.ActiveVendor != null ?
                                                          GlobalDataAccessor.Instance.DesktopSession.ActiveVendor.Name : "",
                                                          rdVo);
                }

                Close();
            }
            catch (Exception ex)
            {
                FileLogger.Instance.logMessage(LogLevel.ERROR, this, "Error in void layaway activity " + ex.Message);
                MessageBox.Show("Error occurred in void layaway activity processing.");
                Close();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ProcessTender_Load(object sender, EventArgs e)
        {
            ProcessTenderController pCntrl = ProcessTenderController.Instance;

            //Perform the process tender process
            this.loanTicketGroup.Visible = true;
            this.success = pCntrl.ExecuteProcessTender(procTendMode);
            this.Update();
            switch (this.procTendMode)
            {
            case ProcessTenderProcedures.ProcessTenderMode.NEWLOAN:
                if (!this.success ||
                    CollectionUtilities.isEmpty(pCntrl.TicketFiles))
                {
                    MessageBox.Show(
                        "New loan process tender failed.  \n" +
                        "Please call Shop System Support.  \n" +
                        "The loan number is: " + ProcessTenderController.Instance.TicketNumber,
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    this.okButton.Enabled = true;
                    //Update the labels
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.ActivePawnLoan.Amount));

                    //Update the list box
                    for (int cnt = 1;
                         cnt <= ProcessTenderController.Instance.TicketFiles.Count;
                         ++cnt)
                    {
                        string s = ProcessTenderController.Instance.TicketFiles[cnt - 1];
                        if (string.IsNullOrEmpty(s))
                        {
                            continue;
                        }
                        string ticketDesc = "Loan #" +
                                            ProcessTenderController.Instance.TicketNumber + "[" +
                                            cnt + "]";
                        this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    }
                    this.loanDocListView.Update();
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.SERVICELOAN:

                if (!this.success)
                {
                    MessageBox.Show(
                        "Servicing loan process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    if (GlobalDataAccessor.Instance.DesktopSession.TotalServiceAmount > 0)
                    {
                        this.initialProcessTenderLabel.Text = "Received From Customer:";
                    }
                    else
                    {
                        this.initialProcessTenderLabel.Text = "Cash to Customer:";
                    }
                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.TotalServiceAmount));
                    for (int cnt = 0;
                         cnt < ProcessTenderController.Instance.ProcessedTickets.Count;
                         cnt++)
                    {
                        var    ticketData = ProcessTenderController.Instance.ProcessedTickets[cnt];
                        string s          = ticketData.Right.ToString();
                        if (string.IsNullOrEmpty(s))
                        {
                            continue;
                        }
                        string ticketDesc = "Loan #" +
                                            ticketData.Left.ToString() + "[" +
                                            cnt + 1 + "]";
                        this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    }
                    this.loanDocListView.Update();
                    this.Update();
                    //this.loanTicketGroup.Visible = false;
                    //this.loanDocListView.Visible = false;
                    //this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.VOIDLOAN:
                //Shouldn't be here for void loan
                break;

            case ProcessTenderProcedures.ProcessTenderMode.PURCHASE:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Purchase process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.Amount));
                    string ticketDesc = "Purchase #" +
                                        GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.TicketNumber;
                    this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.VENDORPURCHASE:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Purchase process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveVendor.Name,
                        "",
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.Amount));
                    string ticketDesc = "Vendor Purchase #" +
                                        GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.TicketNumber;
                    this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.RETURNBUY:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Purchase process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    initialProcessTenderLabel.Text = "Received From Customer:";

                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", (from item in GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.Items
                                                select item.ItemAmount).Sum()));
                    string ticketDesc = "Return #" +
                                        GlobalDataAccessor.Instance.DesktopSession.ActivePurchase.TicketNumber;
                    this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.RETURNSALE:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Refund process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        string.IsNullOrEmpty(GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.CustomerNumber) ?
                        GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.EntityName :
                        GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.CustomerNumber == "0" ?
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.CustomerName :
                        GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.EntityName,
                        "",
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.TotalSaleAmount));
                    string ticketDesc = "Refund Ticket #" +
                                        GlobalDataAccessor.Instance.DesktopSession.ActiveRetail.TicketNumber;
                    this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.LAYAWAY:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Layaway process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    initialProcessTenderLabel.Text = "Received From Customer:";

                    this.okButton.Enabled = true;

                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.ActiveLayaway.TotalSaleAmount));
                    string ticketDesc = "Layaway Ticket #" +
                                        GlobalDataAccessor.Instance.DesktopSession.ActiveLayaway.TicketNumber;
                    this.loanDocListView.Items.Add(new ListViewItem(ticketDesc, 0));
                    this.Update();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.LAYPAYMENT:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Layaway payment process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    initialProcessTenderLabel.Text = "Received From Customer:";

                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.FirstName,
                        GlobalDataAccessor.Instance.DesktopSession.ActiveCustomer.LastName,
                        String.Format("{0:C}", GlobalDataAccessor.Instance.DesktopSession.TotalServiceAmount));
                    this.loanTicketGroup.Visible = false;
                    this.Update();
                    ReceiptConfirmation rcptConf = new ReceiptConfirmation();
                    rcptConf.ShowDialog();
                    this.Close();
                }
                break;

            case ProcessTenderProcedures.ProcessTenderMode.LAYPAYMENTREF:
                if (!this.success)
                {
                    MessageBox.Show(
                        "Layaway payment refund process failed.  \n" +
                        "Please call Shop System Support.  \n",
                        "Application Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    GlobalDataAccessor.Instance.DesktopSession.ClearPawnLoan();
                    NewDesktop nDesk =
                        (NewDesktop)GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                    nDesk.handleEndFlow(null);
                }
                else
                {
                    decimal totalAmt = GlobalDataAccessor.Instance.DesktopSession.TenderAmounts.Sum(s => Utilities.GetDecimalValue(s, 0));

                    this.okButton.Enabled = true;
                    this.setProcessTenderDetails(
                        CashlinxDesktopSession.Instance.ActiveCustomer.FirstName,
                        CashlinxDesktopSession.Instance.ActiveCustomer.LastName,
                        String.Format("{0:C}", totalAmt));
                    this.loanTicketGroup.Visible = false;
                    this.Update();

                    DisbursementConfirmation rcptConf = new DisbursementConfirmation();
                    rcptConf.ShowDialog();
                    this.Close();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(this.procTendMode.ToString());
            }
        }