/// <summary> /// Receive purchase order. /// </summary> /// <param name="poNumber"></param> /// <param name="receiptNumber"></param> public void ReceivePurchaseOrder(string poNumber, string receiptNumber, PRCountingType prType) { if (!ApplicationSettings.Terminal.TerminalOperator.UserIsInventoryUser) { POSFormsManager.ShowPOSMessageDialog(3540); // Not allowed. } else { DialogResult result = DialogResult.Cancel; using (frmPurchaseOrderReceiving dialog = new frmPurchaseOrderReceiving()) { dialog.ReceiptNumber = receiptNumber; dialog.PONumber = poNumber; dialog.PRType = prType; this.Application.ApplicationFramework.POSShowForm(dialog); result = dialog.DialogResult; } if (result == DialogResult.OK) { this.repeatCall = true; ShowPurchaseOrderList(); } } }
private void AssignOperator() { using (ExtendedLogOnScanForm scanForm = new ExtendedLogOnScanForm()) { POSFormsManager.ShowPOSForm(scanForm); if (scanForm.DialogResult == DialogResult.OK) { try { viewModel.ExecuteAssign(scanForm.ExtendedLogOnInfo); } catch (PosisException pex) { NetTracer.Error(pex, "ExtendedLogOnForm::AssignOperator: Failed."); POSFormsManager.ShowPOSMessageDialog(pex.ErrorMessageNumber); } catch (Exception ex) { NetTracer.Error(ex, "ExtendedLogOnForm::AssignOperator: Failed."); POSFormsManager.ShowPOSMessageDialog(99412); // Generic failure. } } } }
private void ShowStockCountLines(string selectedJournalId, string selectedRecId) { DialogResult result = DialogResult.Cancel; if (ApplicationSettings.Terminal.TerminalOperator.UserIsInventoryUser) { using (frmStockCount dialog = new frmStockCount()) { dialog.SelectedJournalId = selectedJournalId; dialog.SelectedRecordId = selectedRecId; this.Application.ApplicationFramework.POSShowForm(dialog); result = dialog.DialogResult; } if (result == DialogResult.OK) { this.repeatCall = true; ShowStockCountHeaders(); } } else { POSFormsManager.ShowPOSMessageDialog(3540); // Not allowed. } }
/// <summary> /// Shows purchase order list. /// </summary> public void ShowPurchaseOrderList() { DialogResult result = DialogResult.Cancel; string selectedReceiptNumber = string.Empty; string selectedPONumber = string.Empty; PRCountingType prType; if (ApplicationSettings.Terminal.TerminalOperator.UserIsInventoryUser) { using (frmPurchaseOrderReceiptSearch dialog = new frmPurchaseOrderReceiptSearch()) { dialog.RepeatCalled = this.repeatCall; this.Application.ApplicationFramework.POSShowForm(dialog); result = dialog.DialogResult; selectedReceiptNumber = dialog.SelectedReceiptNumber; selectedPONumber = dialog.SelectedPONumber; prType = dialog.SelectedPRType; } if (result == DialogResult.OK && !string.IsNullOrEmpty(selectedReceiptNumber) && !string.IsNullOrEmpty(selectedPONumber)) { ReceivePurchaseOrder(selectedPONumber, selectedReceiptNumber, prType); } } else { POSFormsManager.ShowPOSMessageDialog(3540); // Not allowed. } }
private void ShowStockCountHeaders() { DialogResult result = DialogResult.Cancel; string selectedJournalId = null; string selectedRecId = null; if (ApplicationSettings.Terminal.TerminalOperator.UserIsInventoryUser) { using (frmStockCountJournals dialog = new frmStockCountJournals()) { dialog.RepeatCall = repeatCall; this.Application.ApplicationFramework.POSShowForm(dialog); result = dialog.DialogResult; selectedJournalId = dialog.SelectedJournalId; selectedRecId = dialog.SelectedRecordId; } if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(selectedJournalId) && !string.IsNullOrWhiteSpace(selectedRecId)) { ShowStockCountLines(selectedJournalId, selectedRecId); } } else { POSFormsManager.ShowPOSMessageDialog(3540); // Not allowed. } }
private bool GetItemInfo(string barcode, bool skipDimensionDialog) { if (string.IsNullOrEmpty(barcode)) { return(false); } this.saleLineItem = (SaleLineItem)PurchaseOrderReceiving.InternalApplication.BusinessLogic.Utility.CreateSaleLineItem( ApplicationSettings.Terminal.StoreCurrency, PurchaseOrderReceiving.InternalApplication.Services.Rounding, posTransaction); IScanInfo scanInfo = PurchaseOrderReceiving.InternalApplication.BusinessLogic.Utility.CreateScanInfo(); scanInfo.ScanDataLabel = barcode; scanInfo.EntryType = BarcodeEntryType.ManuallyEntered; IBarcodeInfo barcodeInfo = PurchaseOrderReceiving.InternalApplication.Services.Barcode.ProcessBarcode(scanInfo); if ((barcodeInfo.InternalType == BarcodeInternalType.Item) && (barcodeInfo.ItemId != null)) { // The entry was a barcode which was found and now we have the item id... this.saleLineItem.ItemId = barcodeInfo.ItemId; this.saleLineItem.BarcodeId = barcodeInfo.BarcodeId; this.saleLineItem.SalesOrderUnitOfMeasure = barcodeInfo.UnitId; this.saleLineItem.EntryType = barcodeInfo.EntryType; this.saleLineItem.Dimension.ColorId = barcodeInfo.InventColorId; this.saleLineItem.Dimension.SizeId = barcodeInfo.InventSizeId; this.saleLineItem.Dimension.StyleId = barcodeInfo.InventStyleId; this.saleLineItem.Dimension.VariantId = barcodeInfo.VariantId; } else { // It could be an ItemId this.saleLineItem.ItemId = barcodeInfo.BarcodeId; this.saleLineItem.EntryType = barcodeInfo.EntryType; } // fetch all the addtional item properties PurchaseOrderReceiving.InternalApplication.Services.Item.ProcessItem(saleLineItem, true); if (saleLineItem.Found == false) { POSFormsManager.ShowPOSMessageDialog(2611); // Item not found. return(false); } else if ((saleLineItem.Dimension != null) && (saleLineItem.Dimension.EnterDimensions || !string.IsNullOrEmpty(saleLineItem.Dimension.VariantId)) && !skipDimensionDialog) { if (!barcodeInfo.Found) { return(OpenItemDimensionsDialog(barcodeInfo)); } } return(true); }
private void btnClose_Click(object sender, EventArgs e) { if (entryTable.GetChanges() != null) { POSFormsManager.ShowPOSMessageDialog(103119); return; } this.DialogResult = DialogResult.OK; }
/// <summary> /// Executes sales invoice functionality. /// </summary> /// <param name="posTransaction"></param> public void SalesInvoices(IPosTransaction posTransaction) { // The sales invoice functionality is only allowed if a customer has already been added to the transaction if (string.IsNullOrEmpty(((RetailTransaction)posTransaction).Customer.Name)) { POSFormsManager.ShowPOSMessageDialog(57000); return; } PaySalesInvoice(posTransaction); }
/// <summary> /// Unassign extend logon for the operator. /// </summary> private void UnassignOperator() { DialogResult dialogResult = PosApplication.Instance.Services.Dialog.ShowMessage(ApplicationLocalizer.Language.Translate(99407, viewModel.SelectedResult.OperatorName), MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.Yes) { try { viewModel.ExecuteUnassign(); } catch (Exception ex) { NetTracer.Error(ex, "RevokeExtendedLogon::RevokeOperator: Failed."); POSFormsManager.ShowPOSMessageDialog(99412); // Generic failure. } } }
public decimal FindTenderRestriction(IRetailTransaction retailTransaction, ICardInfo cardInfo) { NetTracer.Information("TenderRestriction::FindTenderRestriction - Start"); RetailTransaction transaction = retailTransaction as RetailTransaction; if (transaction == null) { throw new ArgumentNullException("retailTransaction"); } if (cardInfo == null) { throw new ArgumentNullException("cardInfo"); } decimal payableAmount = 0; //the return value of total amount payd with tender id ItemStatus itemStatus; //is the item included / excluded by the tender id // Check if there are items in the transaction if (transaction.SaleItems.Count == 0) { POSFormsManager.ShowPOSMessageDialog(50251); //"There are no sales items to check." return(payableAmount); } // Calclulating how much amount of the original amount can be paid. foreach (ISaleLineItem lineItem in transaction.SaleItems) { if (string.IsNullOrEmpty(lineItem.TenderRestrictionId) && (!lineItem.Voided)) { itemStatus = CheckTenderRestriction(cardInfo.RestrictionCode, cardInfo.TenderTypeId, lineItem.ItemId, lineItem.ItemGroupId); if (itemStatus == ItemStatus.INCLUDE) { lineItem.TenderRestrictionId = cardInfo.RestrictionCode; lineItem.FleetCardNumber = cardInfo.CardNumber; lineItem.PaymentIndex = transaction.TenderLines.Count; payableAmount += lineItem.NetAmountWithTax; } } } if (payableAmount != retailTransaction.NetAmountWithTax) { // If nothing can be paid, then it can be concluded that this card is prohibited if (payableAmount == 0) { using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(50253)) { this.Application.ApplicationFramework.POSShowForm(dialog); } } else { string message = string.Format( LSRetailPosis.ApplicationLocalizer.Language.Translate(50151), this.Application.Services.Rounding.Round(payableAmount, false)); using (frmTenderRestriction frmExcluded = new frmTenderRestriction(transaction)) { frmExcluded.DisplayMsg = message; this.Application.ApplicationFramework.POSShowForm(frmExcluded); if (frmExcluded.DialogResult == DialogResult.No) { ClearTenderRestriction(retailTransaction); return(0); } } } } NetTracer.Information("TenderRestriction::FindTenderRestriction - End"); return(payableAmount); }
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); }