Exemple #1
0
        private static string GetPurchRequestId()
        {
            string retVal = string.Empty;

            try
            {
                InputConfirmation inputConfirmation = new InputConfirmation()
                {
                    PromptText = LSRetailPosis.ApplicationLocalizer.Language.Translate(51001), // Enter purchase request id
                };

                InteractionRequestedEventArgs request = new InteractionRequestedEventArgs(inputConfirmation, () =>
                {
                    retVal = inputConfirmation.EnteredText;
                    if (retVal.Length > 20)
                    {
                        retVal = retVal.Substring(0, 20);
                    }
                }
                                                                                          );

                InternalApplication.Services.Interaction.InteractionRequest(request);
            }
            catch (Exception ex)
            {
                NetTracer.Error(ex, "Customer::GetPurchRequestId failed");
            }

            return(retVal);
        }
        public void ShouldAddYesOrNoOptionToQuestion()
        {
            var message       = "Message";
            var name          = "Name";
            var consoleRender = Substitute.For <IScreenManager>();
            var input         = new InputConfirmation(name, message, consoleRender);

            var question = input.GetQuestion();

            question.Should().BeEquivalentTo("Message (y/n)");
        }
        public void ShouldNotAcceptAnythingDifferentThan_y_Or_n_AsAnswer(string answer)
        {
            var message       = "Message";
            var name          = "Name";
            var consoleRender = Substitute.For <IScreenManager>();
            var input         = new InputConfirmation(name, message, consoleRender);

            var isValid = input.IsValidAnswer(answer);

            isValid.Should().BeFalse();
        }
        public void ShouldAccept_y_And_n_AsAnswer(string answer)
        {
            var message       = "Message";
            var name          = "Name";
            var consoleRender = Substitute.For <IScreenManager>();
            var input         = new InputConfirmation(name, message, consoleRender);

            consoleRender.ReadLine().Returns(answer);

            var isValid = input.IsValidAnswer(answer);

            isValid.Should().BeTrue();
        }
Exemple #5
0
        public static void Run()
        {
            var options   = new string[] { "Option 1", "Option 2" };
            var listInput = new ListInput("option", "Which option?", options);
            var sureInput = new InputConfirmation("confirm", "Are you sure?");

            var inquirer = new Inquirer(listInput, sureInput);

            inquirer.Ask();

            var answer = listInput.Answer();

            Console.WriteLine($@"You have selected option: {answer} - {options[Int32.Parse(answer)-1]}");
            Console.WriteLine(sureInput.Answer() == "y" ? "And you are sure!" : "And you are not sure!");
            Console.ReadKey();
        }
Exemple #6
0
        // Input form
        private void HandleInputInteraction(InteractionRequestedEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("InteractionRequestedEventArgs");
            }
            if (string.IsNullOrEmpty(((Microsoft.Dynamics.Retail.Notification.Contracts.InputConfirmation)(e.Context)).Text))
            {
                InputConfirmation context = (InputConfirmation)e.Context;

                InputConfirmation results = InvokeInteraction <InputConfirmation, InputConfirmation>("InputForm", context, true);

                if (results != null)
                {
                    context.Confirmed   = results.Confirmed;
                    context.EnteredText = results.EnteredText;
                }
            }
        }
Exemple #7
0
        public frmInput(InputConfirmation inputConfirmation)
            : this()
        {
            if (inputConfirmation == null)
            {
                throw new ArgumentNullException("inputConfirmation");
            }

            if (useSingleLine = (inputConfirmation.MaxLength <= SINGLE_LIMIT && inputConfirmation.MaxLength != 0))
            {
                textKeyboardInput.Properties.MaxLength = inputConfirmation.MaxLength;
            }
            else
            {
                memoKeyboardInput.Properties.MaxLength = inputConfirmation.MaxLength;
            }

            this.PromptText       = inputConfirmation.PromptText;
            this.Text             = inputConfirmation.Text;
            this.CurrentInputType = inputConfirmation.InputType;
        }
Exemple #8
0
        /// <summary>
        /// Displays UI to enter a customer ID and returns the customer based on the customer ID entered.
        /// </summary>
        /// <returns>Customer if found, otherwise null</returns>
        public DE.ICustomer GetCustomer()
        {
            DE.ICustomer customer = null;

            InputConfirmation inputConfirmation = new InputConfirmation()
            {
                MaxLength  = 30,
                PromptText = LSRetailPosis.ApplicationLocalizer.Language.Translate(3060), // "Enter a customer id.";
            };

            InteractionRequestedEventArgs request = new InteractionRequestedEventArgs(inputConfirmation, () =>
            {
                if (inputConfirmation.Confirmed)
                {
                    customer = this.CustomerSystem.GetCustomerInfo(inputConfirmation.EnteredText);
                }
            }
                                                                                      );

            InternalApplication.Services.Interaction.InteractionRequest(request);

            return(customer);
        }
Exemple #9
0
        private void SelectItem()
        {
            if (grdView.RowCount > 0)
            {
                selectedDataRow = grdView.GetDataRow(grdView.GetSelectedRows()[0]);
                if (selectedDataRow != null)
                {
                    InputConfirmation inputconfirm = new InputConfirmation();
                    inputconfirm.PromptText = "SKU Release Reason ";
                    inputconfirm.InputType  = InputType.Normal;
                    if (!string.IsNullOrEmpty(Convert.ToString(selectedDataRow["REASON"])))
                    {
                        inputconfirm.Text = Convert.ToString(selectedDataRow["REASON"]);
                    }

                    Interaction.frmInput Oinput = new Interaction.frmInput(inputconfirm);
                    Oinput.ShowDialog();
                    if (!string.IsNullOrEmpty(Oinput.InputText))
                    {
                        selectedDataRow["REASON"]      = Oinput.InputText;
                        selectedDataRow["RELEASEDATE"] = DateTime.Now.Date.ToString("dd/MM/yyyy");
                        ReleaseSKU(Convert.ToDateTime(selectedDataRow["RELEASEDATE"]), Convert.ToString(selectedDataRow["REASON"]), Convert.ToString(selectedDataRow["TRANSACTIONID"]), Convert.ToString(selectedDataRow["SKU"]), 1);
                    }
                    else
                    {
                        selectedDataRow["REASON"]      = Oinput.InputText;
                        selectedDataRow["RELEASEDATE"] = "01/01/1900";
                        ReleaseSKU(null, string.Empty, Convert.ToString(selectedDataRow["TRANSACTIONID"]), Convert.ToString(selectedDataRow["SKU"]), 0);
                    }
                }
            }
            else
            {
                txtKeyboardInput.Select();
            }
        }
        public void PrePayment(IPreTriggerResult preTriggerResult, IPosTransaction posTransaction, object posOperation, string tenderId)
        {
            RetailTransaction retailTransaction = posTransaction as RetailTransaction;

            LSRetailPosis.Transaction.CustomerPaymentTransaction custTrans = posTransaction as LSRetailPosis.Transaction.CustomerPaymentTransaction;
            if (custTrans != null)
            {
                InputConfirmation inputconfirm = new InputConfirmation();
                inputconfirm.PromptText = "Remarks ";
                inputconfirm.InputType  = InputType.Normal;

                Interaction.frmInput Oinput = new Interaction.frmInput(inputconfirm);
                Oinput.ShowDialog();
                if (!string.IsNullOrEmpty(Oinput.InputText))
                {
                    custTrans.PartnerData.Remarks = Oinput.InputText;
                }
                else
                {
                    custTrans.PartnerData.Remarks = "";
                }

                if ((PosisOperations)posOperation == PosisOperations.PayCreditMemo)
                {
                    preTriggerResult.ContinueOperation = false;
                    return;
                }

                SqlConnection connection = new SqlConnection();

                if (application != null)
                {
                    connection = application.Settings.Database.Connection;
                }
                else
                {
                    connection = ApplicationSettings.Database.LocalConnection;
                }

                Enums.EnumClass oEnum       = new Enums.EnumClass();
                string          sMaxAmount  = string.Empty;
                string          sTerminalID = ApplicationSettings.Terminal.TerminalId;
                string          sMinAmt     = Convert.ToString(oEnum.ValidateMinDeposit(connection, out sMaxAmount, sTerminalID, Convert.ToDecimal((((LSRetailPosis.Transaction.CustomerPaymentTransaction)(posTransaction))).CustomerDepositItem.Amount)));
                if (Convert.ToDecimal(sMinAmt) != 0 && Convert.ToDecimal(sMaxAmount) != 0)
                {
                    if (Convert.ToDecimal(sMinAmt) > Convert.ToDecimal((((LSRetailPosis.Transaction.CustomerPaymentTransaction)(posTransaction))).CustomerDepositItem.Amount) ||
                        Convert.ToDecimal(sMaxAmount) < Convert.ToDecimal((((LSRetailPosis.Transaction.CustomerPaymentTransaction)(posTransaction))).CustomerDepositItem.Amount))
                    {
                        preTriggerResult.ContinueOperation = false;
                        preTriggerResult.MessageId         = 50448;
                        return;
                    }
                }
            }

            //start : RH on 05/11/2014
            if (retailTransaction != null)
            {
                /* InputConfirmation inC = new InputConfirmation();
                 * inC.PromptText = "Remarks";
                 * inC.InputType = InputType.Normal;
                 *
                 * Interaction.frmInput Oinput = new Interaction.frmInput(inC);
                 * Oinput.ShowDialog();
                 * if(!string.IsNullOrEmpty(Oinput.InputText))
                 *   retailTransaction.PartnerData.Remarks = Oinput.InputText;
                 * else
                 *   retailTransaction.PartnerData.Remarks = "";*/

                int iPM    = 100;
                int iCF    = 100;
                int isSale = 0;
                foreach (SaleLineItem saleLineItem in retailTransaction.SaleItems)
                {
                    if (!saleLineItem.Voided)
                    {
                        isSale = 1;
                        iPM    = getMetalType(saleLineItem.ItemId);
                        if (iPM == (int)MetalType.PackingMaterial)
                        {
                            break;
                        }
                    }
                }
                if (isSale == 1 && string.IsNullOrEmpty(retailTransaction.PartnerData.Remarks))
                {
                    InputConfirmation inC = new InputConfirmation();
                    inC.PromptText = "Remarks";
                    inC.InputType  = InputType.Normal;

                    Interaction.frmInput Oinput = new Interaction.frmInput(inC);
                    Oinput.ShowDialog();
                    if (!string.IsNullOrEmpty(Oinput.InputText))
                    {
                        retailTransaction.PartnerData.Remarks = Oinput.InputText;
                    }
                    else
                    {
                        retailTransaction.PartnerData.Remarks = "";
                    }
                }



                if ((isSale == 1 || retailTransaction.SaleIsReturnSale) && string.IsNullOrEmpty(retailTransaction.PartnerData.TouristNumber))
                {
                    using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage("Tourist VAT Applicable.", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                    {
                        LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                        //command.Parameters.Add("@GOLDFIXING", SqlDbType.Bit).Value = Convert.ToString(dialog.DialogResult).ToUpper().Trim() == "YES" ? "True" : "False";
                        if (Convert.ToString(dialog.DialogResult).ToUpper().Trim() == "YES")
                        {
                            InputConfirmation inC = new InputConfirmation();
                            inC.PromptText = "Tourist VAT Applicable";
                            inC.InputType  = InputType.Normal;
                            inC.MaxLength  = 20;

                            Interaction.frmInput Oinput = new Interaction.frmInput(inC);
                            Oinput.ShowDialog();
                            if (!string.IsNullOrEmpty(Oinput.InputText))
                            {
                                retailTransaction.PartnerData.TouristNumber = Oinput.InputText;
                            }
                            else
                            {
                                retailTransaction.PartnerData.TouristNumber = "";
                            }
                        }
                    }
                }



                string sAdjustmentId = AdjustmentItemID();
                foreach (SaleLineItem SLineItem in retailTransaction.SaleItems)
                {
                    //if(SLineItem.ItemId == sAdjustmentId && retailTransaction.SaleItems.Count == 1)
                    //{
                    //    retailTransaction.RefundReceiptId = "1";
                    //    //break;
                    //}

                    if (SLineItem.ItemId == sAdjustmentId && retailTransaction.SaleItems.Count > 0)
                    {
                        retailTransaction.RefundReceiptId = "1";
                    }
                    if (SLineItem.ItemId != sAdjustmentId)
                    {
                        retailTransaction.RefundReceiptId = "";
                        break;
                    }
                }


                foreach (SaleLineItem saleLineItem in retailTransaction.SaleItems)
                {
                    if (!saleLineItem.Voided)
                    {
                        iCF = getMetalType(saleLineItem.ItemId);
                        if (iCF == (int)MetalType.Certificate)
                        {
                            break;
                        }
                    }
                }

                foreach (SaleLineItem saleLineItem in retailTransaction.SaleItems)
                {
                    if (saleLineItem.ReturnLineId == 0)
                    {
                        if (retailTransaction.PartnerData.PackingMaterial != "Y")
                        {
                            if (IsRetailItem(saleLineItem.ItemId))
                            {
                                if (iPM != (int)MetalType.PackingMaterial)
                                {
                                    #region Commented
                                    //using(LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage("Have you issued packing material?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                                    //{
                                    //    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                                    //    if(Convert.ToString(dialog.DialogResult).ToUpper().Trim() == "NO")
                                    //    {
                                    //        preTriggerResult.ContinueOperation = false;
                                    //        return;
                                    //    }
                                    //    else
                                    //    {
                                    //        retailTransaction.PartnerData.PackingMaterial = "Y";

                                    //        if(IsCertificateItem(saleLineItem.ItemId))
                                    //        {
                                    //            if(iCF != (int)MetalType.Certificate)
                                    //            {
                                    //                using(LSRetailPosis.POSProcesses.frmMessage dialog1 = new LSRetailPosis.POSProcesses.frmMessage("Have you issued the certificate?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                                    //                {
                                    //                    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog1);
                                    //                    if(Convert.ToString(dialog1.DialogResult).ToUpper().Trim() == "NO")
                                    //                    {
                                    //                        preTriggerResult.ContinueOperation = false;
                                    //                        return;
                                    //                    }
                                    //                    else
                                    //                        retailTransaction.PartnerData.CertificateIssue = "Y";
                                    //                }
                                    //            }
                                    //            else
                                    //                retailTransaction.PartnerData.CertificateIssue = "Y";
                                    //        }
                                    //    }
                                    //}
                                    #endregion
                                    using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage("Proceed without packing material?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                                    {
                                        LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                                        if (Convert.ToString(dialog.DialogResult).ToUpper().Trim() == "NO")
                                        {
                                            preTriggerResult.ContinueOperation = false;
                                            return;
                                        }
                                    }
                                }
                                else
                                {
                                    retailTransaction.PartnerData.PackingMaterial = "Y";

                                    #region Commented
                                    //if(IsCertificateItem(saleLineItem.ItemId))
                                    //{
                                    //    if(iCF != (int)MetalType.Certificate)
                                    //    {
                                    //        using(LSRetailPosis.POSProcesses.frmMessage dialog1 = new LSRetailPosis.POSProcesses.frmMessage("Have you issued the certificate?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                                    //        {
                                    //            LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog1);
                                    //            if(Convert.ToString(dialog1.DialogResult).ToUpper().Trim() == "NO")
                                    //            {
                                    //                preTriggerResult.ContinueOperation = false;
                                    //                return;
                                    //            }
                                    //            else
                                    //                retailTransaction.PartnerData.CertificateIssue = "Y";
                                    //        }
                                    //    }
                                    //    else
                                    //        retailTransaction.PartnerData.CertificateIssue = "Y";
                                    //}
                                    #endregion
                                }
                            }
                        }
                        #region Commented
                        //    else if(retailTransaction.PartnerData.CertificateIssue != "Y")
                        //    {
                        //        if(IsCertificateItem(saleLineItem.ItemId))
                        //        {
                        //            if(iCF != (int)MetalType.Certificate)
                        //            {
                        //                using(LSRetailPosis.POSProcesses.frmMessage dialog1 = new LSRetailPosis.POSProcesses.frmMessage("Have you issued the certificate?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                        //                {
                        //                    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog1);
                        //                    if(Convert.ToString(dialog1.DialogResult).ToUpper().Trim() == "NO")
                        //                    {
                        //                        preTriggerResult.ContinueOperation = false;
                        //                        return;
                        //                    }
                        //                    else
                        //                        retailTransaction.PartnerData.CertificateIssue = "Y";
                        //                }
                        //            }
                        //            else
                        //                retailTransaction.PartnerData.CertificateIssue = "Y";
                        //        }
                        //    }
                        #endregion
                    }
                }
            }
            // end: RH on 05/11/2014

            LSRetailPosis.ApplicationLog.Log("PaymentTriggers.PrePayment", "On the start of a payment operation...", LSRetailPosis.LogTraceLevel.Trace);

            switch ((PosisOperations)posOperation)
            {
            case PosisOperations.PayCash:
                // Insert code here...
                break;

            case PosisOperations.PayCard:
                // Insert code here...
                break;

            case PosisOperations.PayCheque:
                // Insert code here...
                break;

            case PosisOperations.PayCorporateCard:
                // Insert code here...
                break;

            case PosisOperations.PayCreditMemo:
                // Insert code here...
                break;

            case PosisOperations.PayCurrency:
                // Insert code here...
                break;

            case PosisOperations.PayCustomerAccount:
                // Insert code here...
                break;

            case PosisOperations.PayGiftCertificate:
                // Insert code here...
                break;

            case PosisOperations.PayLoyalty:
                // Insert code here...
                break;

                // etc.....
            }
        }
        public void IssueCreditMemo(ICreditMemoTenderLineItem creditMemoItem, IRetailTransaction transaction)
        {
            if (creditMemoItem == null)
            {
                throw new ArgumentNullException("creditMemoItem");
            }

            RetailTransaction retailTransaction = transaction as RetailTransaction;

            if (retailTransaction == null)
            {
                throw new ArgumentNullException("retailTransaction");
            }
            else
            {
                if (retailTransaction.SaleIsReturnSale == true && retailTransaction.AmountDue < 0)
                {
                    InputConfirmation inC = new InputConfirmation();
                    inC.PromptText = "Remarks";
                    inC.InputType  = InputType.Normal;

                    Interaction.frmInput Oinput = new Interaction.frmInput(inC);
                    Oinput.ShowDialog();
                    if (!string.IsNullOrEmpty(Oinput.InputText))
                    {
                        retailTransaction.PartnerData.Remarks = Oinput.InputText;
                    }
                    else
                    {
                        retailTransaction.PartnerData.Remarks = "";
                    }
                }
            }

            try
            {
                LogMessage("Issuing a credit memo....", LogTraceLevel.Trace, "CreditMemo.IssueCreditMemo");

                bool   retVal           = false;
                string comment          = string.Empty;
                string creditMemoNumber = string.Empty;
                string currencyCode     = ApplicationSettings.Terminal.StoreCurrency;

                try
                {
                    // Begin by checking if there is a connection to the Transaction Service
                    this.Application.TransactionServices.CheckConnection();

                    // Publish the credit memo to the Head Office through the Transaction Services...
                    this.Application.TransactionServices.IssueCreditMemo(ref retVal, ref comment, ref creditMemoNumber,
                                                                         retailTransaction.StoreId,
                                                                         retailTransaction.TerminalId,
                                                                         retailTransaction.OperatorId,
                                                                         retailTransaction.TransactionId,
                                                                         retailTransaction.ReceiptId,
                                                                         "1",
                                                                         currencyCode,
                                                                         creditMemoItem.Amount * -1,
                                                                         DateTime.Now);

                    retailTransaction.CreditMemoItem.CreditMemoNumber = creditMemoNumber;
                    retailTransaction.CreditMemoItem.Amount           = creditMemoItem.Amount * -1;
                    creditMemoItem.SerialNumber = creditMemoNumber;
                    creditMemoItem.Comment      = creditMemoNumber;
                }
                catch (LSRetailPosis.PosisException px)
                {
                    // We cannot publish the credit memo to the HO, so we need to take action...

                    retailTransaction.TenderLines.RemoveLast();
                    retailTransaction.CalcTotals();

                    retailTransaction.CreditMemoItem = (CreditMemoItem)this.Application.BusinessLogic.Utility.CreateCreditMemoItem();

                    LSRetailPosis.ApplicationExceptionHandler.HandleException(this.ToString(), px);
                    throw;
                }
                catch (Exception x)
                {
                    // We cannot publish the credit memo to the HO, so we need to take action...

                    retailTransaction.TenderLines.RemoveLast();
                    retailTransaction.CalcTotals();
                    retailTransaction.CreditMemoItem = (CreditMemoItem)this.Application.BusinessLogic.Utility.CreateCreditMemoItem();

                    LSRetailPosis.ApplicationExceptionHandler.HandleException(this.ToString(), x);
                    throw new LSRetailPosis.PosisException(52300, x);
                }

                if (!retVal)
                {
                    LogMessage("Error storing the credit memo centrally...",
                               LSRetailPosis.LogTraceLevel.Error,
                               "CreditMemo.IssueCreditMemo");

                    retailTransaction.TenderLines.RemoveLast();
                    retailTransaction.CalcTotals();
                    retailTransaction.CreditMemoItem = (CreditMemoItem)this.Application.BusinessLogic.Utility.CreateCreditMemoItem();

                    throw new LSRetailPosis.PosisException(52300, new Exception(comment));
                }
            }
            catch (Exception x)
            {
                // Start :  On 14/07/2014
                foreach (SaleLineItem saleLineItem in retailTransaction.SaleItems)
                {
                    if (saleLineItem.ItemType == LSRetailPosis.Transaction.Line.SaleItem.BaseSaleItem.ItemTypes.Service)
                    {
                        updateCustomerAdvanceAdjustment(Convert.ToString(saleLineItem.PartnerData.ServiceItemCashAdjustmentTransactionID),
                                                        Convert.ToString(saleLineItem.PartnerData.ServiceItemCashAdjustmentStoreId),
                                                        Convert.ToString(saleLineItem.PartnerData.ServiceItemCashAdjustmentTerminalId), 0);
                    }
                }
                // End :  On 14/07/2014

                LSRetailPosis.ApplicationExceptionHandler.HandleException(this.ToString(), x);
                throw;
            }
        }
        public bool ProcessInfoCode(IPosTransaction posTransaction, decimal quantity, decimal amount, string refRelation, string refRelation2, string refRelation3,
                                    InfoCodeTableRefType tableRefId, string linkedInfoCodeId, IInfoCodeLineItem orgInfoCode, InfoCodeType infoCodeType)
        {
            RetailTransaction      retailTransaction      = posTransaction as RetailTransaction;
            TenderCountTransaction tenderCountTransaction = posTransaction as TenderCountTransaction;

            // Other possible transaction types at this point include CustomerPayment

            if (refRelation == null)
            {
                refRelation = string.Empty;
            }

            if (refRelation2 == null)
            {
                refRelation2 = string.Empty;
            }

            if (refRelation3 == null)
            {
                refRelation3 = string.Empty;
            }

            //Infocode
            IInfoCodeSystem infoCodeSystem = this.Application.BusinessLogic.InfoCodeSystem;

            IInfoCodeLineItem[] infoCodes = new IInfoCodeLineItem[0];

            if (!string.IsNullOrEmpty(linkedInfoCodeId))
            {
                infoCodes = infoCodeSystem.GetInfocodes(linkedInfoCodeId);
            }
            else if (tableRefId == InfoCodeTableRefType.FunctionalityProfile)
            {
                infoCodes    = infoCodeSystem.GetInfocodes(refRelation2);
                refRelation2 = string.Empty;
            }
            else if (tableRefId == InfoCodeTableRefType.PreItem)
            {
                // Pre item is just a table ref id of item, but handled during different processing
                infoCodes = infoCodeSystem.GetInfocodes(refRelation, refRelation2, refRelation3, InfoCodeTableRefType.Item);
            }
            else
            {
                infoCodes = infoCodeSystem.GetInfocodes(refRelation, refRelation2, refRelation3, tableRefId);
            }

            foreach (InfoCodeLineItem infoCode in infoCodes)
            {
                if (infoCode.InfocodeId == null)
                {
                    return(false);
                }                                                  //If no infocode is found

                // Process age limit info codes as pre item.  I.e. stop processing on this info code if it is pre item
                // and not of type age limit.
                // Low impact fix that should be reevaluated if any info code other than age limit is ever added
                // pre item.  Using continue because indentation of if/else sequence already too much.
                if (((tableRefId == InfoCodeTableRefType.PreItem) && (infoCode.InputType != InfoCodeInputType.AgeLimit)))
                {
                    continue;
                }

                //If bug in data, fixes division by zero
                if (infoCode.RandomFactor == 0)
                {
                    infoCode.RandomFactor = 100;
                }

                infoCode.OriginType   = infoCodeType;
                infoCode.RefRelation  = refRelation;
                infoCode.RefRelation2 = refRelation2;
                infoCode.RefRelation3 = refRelation3;
                switch (infoCode.OriginType)
                {
                case InfoCodeType.Header:
                    infoCode.Amount = amount;
                    break;

                case InfoCodeType.Sales:
                    infoCode.Amount = (amount * -1);
                    break;

                case InfoCodeType.Payment:
                    infoCode.Amount = amount;
                    break;

                case InfoCodeType.IncomeExpense:
                    infoCode.Amount = amount;
                    break;
                }

                int    randomFactor = (int)(100 / infoCode.RandomFactor); //infoCode.RandomFactor = 100 means ask 100% for a infocode
                Random random       = new Random();
                int    randomNumber = random.Next(randomFactor);          //Creates numbers from 0 to randomFactor-1
                //Only get the infocode if randomfactor is set to zero or generated random number is the sama as the randomfactor-1
                if (infoCode.RandomFactor == 100 || randomNumber == (randomFactor - 1))
                {
                    Boolean infoCodeNeeded = true;
                    if (infoCode.OncePerTransaction)
                    {
                        if (tenderCountTransaction != null)
                        {
                            infoCodeNeeded = tenderCountTransaction.InfoCodeNeeded(infoCode.InfocodeId);
                        }
                        else
                        {
                            infoCodeNeeded = retailTransaction.InfoCodeNeeded(infoCode.InfocodeId);
                        }
                    }

                    if (infoCodeNeeded)
                    {
                        // If the required type is negative but the quantity is positive, do not continue
                        if (infoCode.InputRequiredType == InfoCodeInputRequiredType.Negative && quantity > 0)
                        {
                            infoCodeNeeded = false;
                        }

                        // If the required type is positive but the quantity is negative, do not continue
                        if (infoCode.InputRequiredType == InfoCodeInputRequiredType.Positive && quantity < 0)
                        {
                            infoCodeNeeded = false;
                        }
                    }
                    // If there is some infocodeID existing, and infocod is needed
                    if (infoCode.InfocodeId != null && infoCodeNeeded == true)
                    {
                        #region Text and General
                        if (infoCode.InputType == InfoCodeInputType.Text || infoCode.InputType == InfoCodeInputType.General)
                        {
                            Boolean inputValid = true;
                            bool    abort      = false;
                            // Get a infocode text
                            do
                            {
                                inputValid = true;

                                InputConfirmation inputConfirmation = new InputConfirmation()
                                {
                                    MaxLength  = MaxInfocodeInformationLengh,
                                    PromptText = infoCode.Prompt,
                                };

                                InteractionRequestedEventArgs request = new InteractionRequestedEventArgs(inputConfirmation, () =>
                                {
                                    if (inputConfirmation.Confirmed)
                                    {
                                        if (string.IsNullOrEmpty(inputConfirmation.EnteredText))
                                        {
                                            abort = true;
                                            POSFormsManager.ShowPOSMessageDialog(3593);
                                        }
                                        else
                                        {
                                            int textId = 0;
                                            if (inputConfirmation.EnteredText.Length == 0 && infoCode.InputRequired)
                                            {
                                                textId     = 3590; //The input text is required
                                                inputValid = false;
                                            }

                                            if (inputValid && infoCode.MinimumLength > 0 && inputConfirmation.EnteredText.Length < infoCode.MinimumLength)
                                            {
                                                textId     = 3591; //The input text is too short.
                                                inputValid = false;
                                            }

                                            if (inputValid && infoCode.MaximumLength > 0 && inputConfirmation.EnteredText.Length > infoCode.MaximumLength)
                                            {
                                                textId     = 3592; //The input text exceeds the maximum length.
                                                inputValid = false;
                                            }

                                            if (inputValid && infoCode.AdditionalCheck == 1)
                                            {
                                                inputValid = CheckKennitala(inputConfirmation.EnteredText);
                                                if (!inputValid)
                                                {
                                                    textId = 3603;
                                                }
                                            }

                                            if (!inputValid)
                                            {
                                                POSFormsManager.ShowPOSMessageDialog(textId);
                                            }
                                        }
                                        infoCode.Information = inputConfirmation.EnteredText;
                                    }
                                    else
                                    {
                                        inputValid = infoCode.InputRequired;
                                    }
                                }
                                                                                                          );


                                Application.Services.Interaction.InteractionRequest(request);

                                if (abort)
                                {
                                    return(false);
                                }
                            } while (!inputValid);
                            //Adding the result to the infocode
                        }

                        #endregion

                        #region Date
                        else if (infoCode.InputType == InfoCodeInputType.Date)
                        {
                            Boolean inputValid = true;
                            do
                            {
                                inputValid = true;

                                string inputText;
                                //Show the input form
                                using (frmInputNumpad inputDialog = new frmInputNumpad())
                                {
                                    inputDialog.EntryTypes = NumpadEntryTypes.Date;
                                    inputDialog.PromptText = infoCode.Prompt;
                                    POSFormsManager.ShowPOSForm(inputDialog);
                                    // Quit if cancel is pressed...
                                    if (inputDialog.DialogResult == System.Windows.Forms.DialogResult.Cancel && !infoCode.InputRequired)
                                    {
                                        return(false);
                                    }

                                    inputText = inputDialog.InputText;
                                }

                                //Is input valid?
                                if (!string.IsNullOrEmpty(inputText))
                                {
                                    int      textId   = 0;
                                    bool     isDate   = true;
                                    DateTime infoDate = DateTime.Now;

                                    try
                                    {
                                        infoDate = Convert.ToDateTime(inputText, (IFormatProvider)Thread.CurrentThread.CurrentCulture.DateTimeFormat);
                                    }
                                    catch
                                    {
                                        isDate = false;
                                    }

                                    if (!isDate)
                                    {
                                        textId     = 3602; //Date entered is not valid
                                        inputValid = false;
                                    }

                                    if (inputText.Length == 0 && infoCode.InputRequired)
                                    {
                                        textId     = 3594; //A number input is required
                                        inputValid = false;
                                    }

                                    if (!inputValid)
                                    {
                                        POSFormsManager.ShowPOSMessageDialog(textId);
                                    }
                                    else
                                    {
                                        //Setting the result to the infocode
                                        infoCode.Information = infoDate.ToString(Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern);
                                    }
                                }
                                else if (infoCode.InputRequired)
                                {
                                    inputValid = false;
                                    POSFormsManager.ShowPOSMessageDialog(3597);//A number input is required
                                }
                            } while (!inputValid);
                        }

                        #endregion

                        #region Numeric and Operator/Staff

                        else if (infoCode.InputType == InfoCodeInputType.Numeric || infoCode.InputType == InfoCodeInputType.Operator)
                        {
                            Boolean inputValid = true;

                            do
                            {
                                inputValid = true;

                                string inputText = string.Empty;
                                //Show the input form
                                using (frmInputNumpad inputDialog = new frmInputNumpad())
                                {
                                    inputDialog.EntryTypes = NumpadEntryTypes.Price;
                                    inputDialog.PromptText = infoCode.Prompt;
                                    POSFormsManager.ShowPOSForm(inputDialog);
                                    // Quit if cancel is pressed and input not required...
                                    if (inputDialog.DialogResult == System.Windows.Forms.DialogResult.Cancel && !infoCode.InputRequired)
                                    {
                                        return(false);
                                    }

                                    // If input required then only valid result is Ok.
                                    if (inputDialog.DialogResult == System.Windows.Forms.DialogResult.OK)
                                    {
                                        inputText = inputDialog.InputText;
                                    }
                                }

                                //Is input empty?
                                if (!string.IsNullOrWhiteSpace(inputText))
                                {
                                    int textId = 0;
                                    if (inputText.Length == 0 && infoCode.InputRequired)
                                    {
                                        textId     = 3594; //A number input is required
                                        inputValid = false;
                                    }

                                    if (infoCode.MinimumValue != 0 && Convert.ToDecimal(inputText) < infoCode.MinimumValue)
                                    {
                                        textId     = 3595; //The number is lower than the minimum value
                                        inputValid = false;
                                    }

                                    if (infoCode.MaximumValue != 0 && Convert.ToDecimal(inputText) > infoCode.MaximumValue)
                                    {
                                        textId     = 3596; //The number exceeds the maximum value
                                        inputValid = false;
                                    }

                                    if (!inputValid)
                                    {
                                        POSFormsManager.ShowPOSMessageDialog(textId);
                                    }
                                }
                                else
                                {
                                    inputValid = false;
                                    POSFormsManager.ShowPOSMessageDialog(3597); //A number input is required
                                }

                                //Setting the result to the infocode
                                infoCode.Information = inputText;
                            } while (!inputValid);
                        }

                        #endregion

                        #region Customer

                        else if (infoCode.InputType == InfoCodeInputType.Customer)
                        {
                            bool inputValid = true;
                            do
                            {
                                inputValid = true;
                                Contracts.DataEntity.ICustomer customer = this.Application.Services.Customer.Search();
                                if (customer != null)
                                {
                                    infoCode.Information = customer.CustomerId;
                                    inputValid           = true;
                                }
                                else
                                {
                                    if (infoCode.InputRequired)
                                    {
                                        inputValid = false;
                                        POSFormsManager.ShowPOSMessageDialog(3598); //A customer needs to be selected
                                    }
                                }
                            } while (!inputValid);
                        }
                        #endregion

                        #region Item

                        else if (infoCode.InputType == InfoCodeInputType.Item)
                        {
                            Boolean inputValid = true;
                            do
                            {
                                string       selectedItemID = string.Empty;
                                DialogResult dialogResult   = this.Application.Services.Dialog.ItemSearch(500, ref selectedItemID);
                                // Quit if cancel is pressed...
                                if (dialogResult == System.Windows.Forms.DialogResult.Cancel && !infoCode.InputRequired)
                                {
                                    return(false);
                                }

                                if (!string.IsNullOrEmpty(selectedItemID))
                                {
                                    infoCode.Information = selectedItemID;
                                    inputValid           = true;
                                }
                                else
                                {
                                    if (infoCode.InputRequired)
                                    {
                                        inputValid = false;
                                        POSFormsManager.ShowPOSMessageDialog(3599);//A items needs to be selected
                                    }
                                }
                            } while (!inputValid);
                        }
                        #endregion

                        #region SubCode

                        else if ((infoCode.InputType == InfoCodeInputType.SubCodeList) || (infoCode.InputType == InfoCodeInputType.SubCodeButtons))
                        {
                            FormInfoCodeSubCodeBase infoSubCodeDialog;
                            if (infoCode.InputType == InfoCodeInputType.SubCodeList)
                            {
                                infoSubCodeDialog = new FormInfoCodeSubCodeList();
                            }
                            else
                            {
                                infoSubCodeDialog = new FormInfoSubCode();
                            }

                            using (infoSubCodeDialog)
                            {
                                bool inputValid = false;
                                do
                                {
                                    infoSubCodeDialog.InfoCodePrompt = infoCode.Prompt;
                                    infoSubCodeDialog.InfoCodeId     = infoCode.InfocodeId;
                                    infoSubCodeDialog.InputRequired  = infoCode.InputRequired;

                                    POSFormsManager.ShowPOSForm(infoSubCodeDialog);
                                    switch (infoSubCodeDialog.DialogResult)
                                    {
                                    case DialogResult.OK:
                                        inputValid = true;
                                        break;

                                    case DialogResult.No:
                                        return(false);

                                    default:
                                        if (!infoCode.InputRequired)
                                        {
                                            return(false);
                                        }
                                        break;
                                    }

                                    //if InputValid is false then nothing was selected in the dialog and there is no point in going through this code
                                    if (inputValid)
                                    {
                                        infoCode.Information = infoSubCodeDialog.SelectedDescription;
                                        infoCode.Subcode     = infoSubCodeDialog.SelectedSubcodeId;

                                        //TenderDeclarationTransaction also has infocodes but it can't have any sale items so no need
                                        //to go through this code.
                                        if (retailTransaction != null)
                                        {
                                            //Look through the information on the subcode that was selected and see if an item is to be sold
                                            //and if a discount and/or price needs to be modified
                                            //foreach (SubcodeInfo subcodeInfo in infoSubCodeDialog.SubCodes)
                                            //{
                                            if ((infoSubCodeDialog.SelectedTriggerFunction == (int)TriggerFunctionEnum.Item) && (infoSubCodeDialog.SelectedTriggerCode.Length != 0))
                                            {
                                                OperationInfo opInfo = new OperationInfo();

                                                ItemSale itemSale = new ItemSale();
                                                itemSale.OperationID    = PosisOperations.ItemSale;
                                                itemSale.OperationInfo  = opInfo;
                                                itemSale.Barcode        = infoSubCodeDialog.SelectedTriggerCode;
                                                itemSale.POSTransaction = retailTransaction;
                                                itemSale.RunOperation();

                                                //The infocode item has been added.
                                                //Look at the last item on the transaction and if it is the same item that the ItemSale was supposed to sell
                                                //then check to see if it is to have a special price or discount
                                                if (retailTransaction.SaleItems.Last.Value.ItemId == infoSubCodeDialog.SelectedTriggerCode)
                                                {
                                                    //set the property of that item to being an infocode item such that if the same item is added again, then
                                                    //these will not be aggregated (since the item as infocode item might receive a different discount than the same
                                                    //item added regularly.
                                                    retailTransaction.SaleItems.Last.Value.IsInfoCodeItem = true;

                                                    infoCode.SubcodeSaleLineId = retailTransaction.SaleItems.Last.Value.LineId;

                                                    if (infoSubCodeDialog.SelectedPriceType == (int)PriceTypeEnum.Price)
                                                    {
                                                        PriceOverride priceOverride = new PriceOverride();

                                                        opInfo.NumpadValue = infoSubCodeDialog.SelectedAmountPercent.ToString("n2");
                                                        opInfo.ItemLineId  = retailTransaction.SaleItems.Last.Value.LineId;

                                                        priceOverride.OperationInfo  = opInfo;
                                                        priceOverride.OperationID    = PosisOperations.PriceOverride;
                                                        priceOverride.POSTransaction = retailTransaction;
                                                        priceOverride.LineId         = retailTransaction.SaleItems.Last.Value.LineId;
                                                        priceOverride.RunOperation();
                                                    }
                                                    else if (infoSubCodeDialog.SelectedPriceType == (int)PriceTypeEnum.Percent)
                                                    {
                                                        LineDiscountPercent lineDiscount = new LineDiscountPercent();

                                                        opInfo.NumpadValue = infoSubCodeDialog.SelectedAmountPercent.ToString("n2");
                                                        opInfo.ItemLineId  = retailTransaction.SaleItems.Last.Value.LineId;

                                                        lineDiscount.OperationInfo  = opInfo;
                                                        lineDiscount.OperationID    = PosisOperations.LineDiscountPercent;
                                                        lineDiscount.POSTransaction = retailTransaction;
                                                        lineDiscount.RunOperation();
                                                    }
                                                }
                                            }
                                        }
                                    }
                                } while (!inputValid);
                            }
                        }
                        #endregion

                        #region Age limit

                        else if ((infoCode.InputType == InfoCodeInputType.AgeLimit))
                        {
                            int ageLimit = (int)infoCode.MinimumValue;
                            if (ageLimit >= 0)
                            {
                                //Calculate birthdate corresponding to minimum age limit
                                DateTime dtBirthDate = DateTime.Today.AddYears(-ageLimit);

                                //Convert the date time value according to the current culture information
                                string birthDate = dtBirthDate.ToString(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern);
                                string msg       = ApplicationLocalizer.Language.Translate(3606, ageLimit, birthDate);

                                // Process age limit info codes if it is pre item and prompt the message to user for processing.
                                // Also Info Code type is an item and Age Limit is a link to reason code then process the info code with prompt to user.
                                if (((tableRefId == InfoCodeTableRefType.PreItem) && (infoCode.InputType == InfoCodeInputType.AgeLimit)) || (!string.IsNullOrEmpty(linkedInfoCodeId) && tableRefId == InfoCodeTableRefType.Item))
                                {
                                    using (frmMessage frmMsg = new frmMessage(msg, MessageBoxButtons.YesNo, MessageBoxIcon.Information, false))
                                    {
                                        POSFormsManager.ShowPOSForm(frmMsg);
                                        if (frmMsg.DialogResult != DialogResult.Yes)
                                        {
                                            return(false);
                                        }
                                    }
                                }
                                infoCode.Information = msg;
                            }
                        }
                        #endregion

                        else
                        {
                            POSFormsManager.ShowPOSMessageDialog(3589);
                            return(false);
                        }

                        // Add the infocode to the transaction
                        if (infoCode.Information != null && infoCode.Information.Length > 0)
                        {
                            string infoComment = string.Empty;
                            if (infoCode.PrintPromptOnReceipt || infoCode.PrintInputOnReceipt || infoCode.PrintInputNameOnReceipt)
                            {
                                if (infoCode.PrintPromptOnReceipt && (infoCode.Prompt.Length != 0))
                                {
                                    infoComment = infoCode.Prompt;
                                }

                                if (infoCode.PrintInputOnReceipt && (infoCode.Subcode != null) && (infoCode.Subcode.Length != 0))
                                {
                                    if (infoComment.Length != 0)
                                    {
                                        infoComment += " - " + infoCode.Subcode;
                                    }
                                    else
                                    {
                                        infoComment = infoCode.Subcode;
                                    }
                                }

                                if (infoCode.PrintInputNameOnReceipt && (infoCode.Information.Length != 0))
                                {
                                    if (infoComment.Length != 0)
                                    {
                                        infoComment += " - " + infoCode.Information;
                                    }
                                    else
                                    {
                                        infoComment = infoCode.Information;
                                    }
                                }
                            }

                            if (infoCodeType == InfoCodeType.Sales)
                            {
                                int lineId;
                                if (infoCode.SubcodeSaleLineId != -1)
                                {
                                    SaleLineItem saleLineItem = retailTransaction.GetItem(infoCode.SubcodeSaleLineId - 1);
                                    saleLineItem.Add(infoCode);
                                    lineId = saleLineItem.LineId;
                                }
                                else
                                {
                                    // don't save if this is pre-item. the same infocodes will be found next pass for normal item infocodes.
                                    if (tableRefId == InfoCodeTableRefType.PreItem)
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        LinkedListNode <SaleLineItem> saleLineItem = retailTransaction.SaleItems.Last;
                                        saleLineItem.Value.Add(infoCode);
                                        lineId = saleLineItem.Value.LineId;
                                    }
                                }

                                if (infoComment.Trim().Length != 0)
                                {
                                    OperationInfo opInfo = new OperationInfo();
                                    opInfo.NumpadValue = infoComment.Trim();
                                    opInfo.ItemLineId  = lineId;

                                    ItemComment itemComment = new ItemComment();
                                    itemComment.OperationID    = PosisOperations.ItemComment;
                                    itemComment.POSTransaction = (PosTransaction)posTransaction;
                                    itemComment.OperationInfo  = opInfo;
                                    itemComment.RunOperation();
                                }
                            }
                            else if (infoCodeType == InfoCodeType.Payment)
                            {
                                if (retailTransaction != null)
                                {
                                    LinkedListNode <TenderLineItem> tenderLineItem = retailTransaction.TenderLines.Last;
                                    tenderLineItem.Value.Add(infoCode);

                                    if (infoComment.Trim().Length != 0)
                                    {
                                        tenderLineItem.Value.Comment = infoComment.Trim();
                                    }
                                }
                                else
                                {
                                    LSRetailPosis.Transaction.CustomerPaymentTransaction custPayTrans = posTransaction as LSRetailPosis.Transaction.CustomerPaymentTransaction;
                                    LinkedListNode <TenderLineItem> tenderLineItem = custPayTrans.TenderLines.Last;
                                    tenderLineItem.Value.Add(infoCode);

                                    if (infoComment.Trim().Length != 0)
                                    {
                                        tenderLineItem.Value.Comment = infoComment.Trim();
                                    }
                                }

                                //LinkedListNode<TenderLineItem> tenderLineItem = retailTransaction.TenderLines.Last; //
                                //tenderLineItem.Value.Add(infoCode);

                                //if (infoComment.Trim().Length != 0)
                                //{
                                //    tenderLineItem.Value.Comment = infoComment.Trim();
                                //}
                            }
                            else
                            {
                                if (retailTransaction != null)
                                {
                                    retailTransaction.Add(infoCode);
                                    if (infoComment.Trim().Length != 0)
                                    {
                                        retailTransaction.InvoiceComment += infoComment.Trim();
                                    }
                                }
                                else
                                {
                                    tenderCountTransaction.Add(infoCode);
                                    //No invoice comment on TenderDeclarationTransaction
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }