/// <summary>
        /// NavBox OnAction Handler for Update Physical Description
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void updatePhysicalDescFormNavAction(object sender, object data)
        {
            if (sender == null || data == null)
            {
                throw new ApplicationException("Update Physical Desciption navigation action handler received invalid data");
            }

            NavBox             physDescNavBox = (NavBox)sender;
            UpdatePhysicalDesc physDescForm   = (UpdatePhysicalDesc)data;

            NavBox.NavAction lookupAction = physDescNavBox.Action;
            switch (lookupAction)
            {
            case NavBox.NavAction.BACK:
                this.nextState = PoliceHoldReleaseFlowState.UpdateAddress;
                break;

            case NavBox.NavAction.BACKANDSUBMIT:
                GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                this.nextState = PoliceHoldReleaseFlowState.PoliceHoldReleaseInfo;
                break;

            case NavBox.NavAction.CANCEL:
                this.nextState = PoliceHoldReleaseFlowState.Cancel;
                break;

            default:
                throw new ApplicationException("" + lookupAction.ToString() + " is not a valid state for Update Physical Description");
            }

            this.executeNextState();
        }
        /// <summary>
        /// NavBox OnAction Handler for Create Customer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void createCustFormNavAction(object sender, object data)
        {
            if (sender == null || data == null)
            {
                throw new ApplicationException("Create Customer form navigation action handler received invalid data");
            }

            NavBox         createCustNavBox = (NavBox)sender;
            CreateCustomer createCustForm   = (CreateCustomer)data;

            NavBox.NavAction lookupAction = createCustNavBox.Action;
            switch (lookupAction)
            {
            case NavBox.NavAction.BACKANDSUBMIT:
                GlobalDataAccessor.Instance.DesktopSession.HistorySession.Desktop();
                this.nextState = PoliceHoldReleaseFlowState.PoliceHoldReleaseInfo;
                break;

            case NavBox.NavAction.HIDEANDSHOW:
                createCustForm.Hide();
                this.nextState = PoliceHoldReleaseFlowState.UpdateAddress;
                break;

            case NavBox.NavAction.CANCEL:
                this.nextState = PoliceHoldReleaseFlowState.Cancel;
                break;

            default:
                throw new ApplicationException("" + lookupAction.ToString() + " is not a valid state for LookupCustomer");
            }

            this.executeNextState();
        }
 public PoliceHoldReleaseFlowExecutor(Form parentForm, FxnBlock eStateNotifier)
     : base(NAME)
 {
     this.parentForm       = parentForm;
     this.endStateNotifier = eStateNotifier;
     this.nextState        = PoliceHoldReleaseFlowState.LookupCustomer;
     this.setExecBlock(this.executorFxn);
     this.executeNextState();
 }
        /// <summary>
        /// NavBox OnAction Handler for Lookup Customer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void lookupCustFormNavAction(object sender, object data)
        {
            if (sender == null || data == null)
            {
                throw new ApplicationException("Lookup customer form navigation action handler received invalid data");
            }

            NavBox         lookupCustNavBox = (NavBox)sender;
            LookupCustomer lookupCustForm   = (LookupCustomer)data;

            NavBox.NavAction lookupAction = lookupCustNavBox.Action;
            if (lookupAction == NavBox.NavAction.BACKANDSUBMIT)
            {
                GlobalDataAccessor.Instance.DesktopSession.HistorySession.Back();
                lookupAction = NavBox.NavAction.SUBMIT;
            }
            switch (lookupAction)
            {
            case NavBox.NavAction.SUBMIT:
                if (lookupCustNavBox.IsCustom)
                {
                    string custDet = lookupCustNavBox.CustomDetail;
                    if (custDet.Equals("CreateCustomer", StringComparison.OrdinalIgnoreCase))
                    {
                        if (GlobalDataAccessor.Instance.DesktopSession.ReleaseToClaimant)
                        {
                            this.nextState = PoliceHoldReleaseFlowState.ManageCustomer;
                        }
                        else
                        {
                            MessageBox.Show("Not a valid selection in this flow");
                        }
                    }
                    else
                    {
                        this.nextState = PoliceHoldReleaseFlowState.LookupCustomerResults;
                    }
                }
                else
                {
                    this.nextState = PoliceHoldReleaseFlowState.LookupCustomerResults;
                }
                break;

            case NavBox.NavAction.CANCEL:
                this.nextState = PoliceHoldReleaseFlowState.Cancel;
                break;

            default:
                throw new ApplicationException("" + lookupAction.ToString() + " is not a valid state for LookupCustomer");
            }

            this.executeNextState();
        }
        /// <summary>
        /// NavBox OnAction Handler for Customer Hold Release Info Form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void policeHoldReleaseInfoFormNavAction(object sender, object data)
        {
            if (sender == null || data == null)
            {
                throw new ApplicationException("Police Hold Release Info form navigation action handler received invalid data");
            }

            NavBox custHoldNavBox = (NavBox)sender;

            //CustomerHoldReleaseInfo custHoldInfoForm = (CustomerHoldReleaseInfo)data;
            NavBox.NavAction lookupAction = custHoldNavBox.Action;
            if (lookupAction == NavBox.NavAction.BACKANDSUBMIT)
            {
                GlobalDataAccessor.Instance.DesktopSession.HistorySession.Back();
                lookupAction = NavBox.NavAction.SUBMIT;
            }
            switch (lookupAction)
            {
            case NavBox.NavAction.SUBMIT:
                if (custHoldNavBox.IsCustom)
                {
                    string custDet = custHoldNavBox.CustomDetail;
                    if (custDet.Equals("Back", StringComparison.OrdinalIgnoreCase))
                    {
                        this.nextState = PoliceHoldReleaseFlowState.PoliceHoldReleaseList;
                    }
                    else if (custDet.Equals("FindClaimant", StringComparison.OrdinalIgnoreCase))
                    {
                        GlobalDataAccessor.Instance.DesktopSession.ReleaseToClaimant = true;
                        this.nextState = PoliceHoldReleaseFlowState.LookupCustomer;
                    }
                    else
                    {
                        this.nextState = PoliceHoldReleaseFlowState.Cancel;
                    }
                }
                else
                {
                    this.nextState = PoliceHoldReleaseFlowState.Cancel;
                }
                break;

            case NavBox.NavAction.CANCEL:
                this.nextState = PoliceHoldReleaseFlowState.Cancel;
                break;

            default:
                throw new ApplicationException("" + lookupAction.ToString() + " is not a valid state for Police Hold Release Info");
            }

            this.executeNextState();
        }
        /// <summary>
        /// Main execution function for PoliceHoldReleaseFlowExecutor
        /// </summary>
        /// <param name="inputData"></param>
        /// <returns></returns>
        private object executorFxn(object inputData)
        {
            if (inputData == null)
            {
                return(false);
            }
            PoliceHoldReleaseFlowState inputState = (PoliceHoldReleaseFlowState)inputData;

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

                break;

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

            case PoliceHoldReleaseFlowState.PoliceHoldReleaseList:
                ShowForm custHoldRelListBlk = CommonAppBlocks.Instance.CreatePoliceHoldReleaseListShowBlock(this.parentForm, this.policeHoldReleaseListFormNavAction);
                if (!custHoldRelListBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Police Hold Release List block");
                }
                break;

            case PoliceHoldReleaseFlowState.PoliceHoldReleaseInfo:
                ShowForm custHoldRelInfoBlk = CommonAppBlocks.Instance.CreatePoliceHoldReleaseInfoShowBlock(this.parentForm, this.policeHoldReleaseInfoFormNavAction);
                if (!custHoldRelInfoBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Police Hold Release Info block");
                }
                break;

            case PoliceHoldReleaseFlowState.PoliceHoldReleaseToClaimant:
                //Clear Previous Customer Srch Data DF 0028
                GlobalDataAccessor.Instance.DesktopSession.ActiveLookupCriteria = new LookupCustomerSearchData();
                ShowForm policeHoldRelToClaimantBlk = CommonAppBlocks.Instance.CreatePoliceHoldReleaseInfoShowBlock(this.parentForm, this.policeHoldReleaseInfoFormNavAction);
                if (!policeHoldRelToClaimantBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Police Hold Release Info block");
                }
                //Set the release to claimant property to true
                ((PoliceHoldRelease)policeHoldRelToClaimantBlk.ClassForm).ReleaseToClaimant = true;
                break;

            case PoliceHoldReleaseFlowState.ManageCustomer:
                CreateCustomer createCustFrm = new CreateCustomer();
                Form           currForm      = GlobalDataAccessor.Instance.DesktopSession.HistorySession.Lookup(createCustFrm);
                if (currForm.GetType() == typeof(CreateCustomer))
                {
                    GlobalDataAccessor.Instance.DesktopSession.HistorySession.Back();
                }
                else
                {
                    ShowForm createCustBlk = CommonAppBlocks.Instance.CreateCreateCustomerBlock(this.parentForm, this.createCustFormNavAction);
                    if (!createCustBlk.execute())
                    {
                        throw new ApplicationException("Cannot execute Create Customer block");
                    }
                }
                break;

            case PoliceHoldReleaseFlowState.UpdateAddress:
                UpdateAddress addrFrm        = new UpdateAddress();
                Form          currentaddForm = GlobalDataAccessor.Instance.DesktopSession.HistorySession.Lookup(addrFrm);
                if (currentaddForm.GetType() == typeof(UpdateAddress))
                {
                    GlobalDataAccessor.Instance.DesktopSession.HistorySession.Back();
                }
                else
                {
                    ShowForm updateAddrBlk = CommonAppBlocks.Instance.UpdateAddressShowFormBlock(this.parentForm, this.updateAddressFormNavAction);
                    if (!updateAddrBlk.execute())
                    {
                        throw new ApplicationException("Cannot execute Update Addess Form block");
                    }
                }

                break;

            case PoliceHoldReleaseFlowState.UpdatePhysicalDescription:

                ShowForm updatePhysDescBlk = CommonAppBlocks.Instance.UpdatePhysDescShowFormBlock(this.parentForm, this.updatePhysicalDescFormNavAction);
                if (!updatePhysDescBlk.execute())
                {
                    throw new ApplicationException("Cannot execute Update Physical Description block");
                }


                break;

            case PoliceHoldReleaseFlowState.Cancel:
                //Clear the customer from session
                GlobalDataAccessor.Instance.DesktopSession.ClearCustomerList();

                if (this.endStateNotifier != null)
                {
                    this.endStateNotifier.execute();
                }
                break;


            default:
                throw new ApplicationException("Invalid Police Hold release flow state");
            }

            return(true);
        }