Ejemplo n.º 1
0
        private void LoadFromTenderData(TenderData tenderData)
        {
            allowances = tenderData.GetAllowancesPerTender(ApplicationSettings.Terminal.StoreId);

            int counter = 0;

            if (transaction is TenderDeclarationTransaction)
            {
                counter         = tenderData.HowManyTendersNEW(ApplicationSettings.Terminal.StoreId, 0);
                attemptsDone    = new int[counter];
                tendersToCount  = tenderData.GetTenderDeclarationData(ApplicationSettings.Database.DATAAREAID, ApplicationSettings.Terminal.StoreId);
                formHeadingText = LSRetailPosis.ApplicationLocalizer.Language.Translate(3493);  // Tender Declaration
                requiredAmounts = tenderData.GetRequiredAmountsPerTender(transaction.Shift, TypeOfTransaction.TenderDeclaration);
            }
            else if (transaction is BankDropTransaction)
            {
                counter         = tenderData.HowManyTendersNEW(ApplicationSettings.Terminal.StoreId, 1);
                attemptsDone    = new int[counter];
                tendersToCount  = tenderData.GetBankDropData(ApplicationSettings.Database.DATAAREAID, ApplicationSettings.Terminal.StoreId);
                formHeadingText = LSRetailPosis.ApplicationLocalizer.Language.Translate(3923);  // Bank Drop
            }
            else if (transaction is SafeDropTransaction)
            {
                counter         = tenderData.HowManyTendersNEW(ApplicationSettings.Terminal.StoreId, 2);
                attemptsDone    = new int[counter];
                tendersToCount  = tenderData.GetSafeDropData(ApplicationSettings.Database.DATAAREAID, ApplicationSettings.Terminal.StoreId);
                formHeadingText = LSRetailPosis.ApplicationLocalizer.Language.Translate(3902);  // Safe Drop
            }
            else
            {
                tendersToCount  = new DataTable();
                formHeadingText = "Not specified operation";
                requiredAmounts = new DataTable();
            }
        }
Ejemplo n.º 2
0
        public static void GetTenderData(Int32 tenderNumber)
        {
            RequestResult <TenderData> reqResult = ApsClient.GetTenderData(tenderNumber);

            if (!reqResult.IsSuccess)
            {
                Console.WriteLine("Не удалось получить информацию о состоянии тендера");
                return;
            }
            TenderData tenderData = reqResult.Data;

            tenderData.Show();
        }
Ejemplo n.º 3
0
        /// <summary> Получить коммерческие предложения по текущему туру тендера </summary>
        /// <param name="tenderData"> Данные тендера </param>
        public List <TenderLotItemOffer> GetTenderRoundOffers(TenderData tenderData)
        {
            List <Task> tasks = new List <Task>();
            List <TenderLotItemOffer> allOffers = new List <TenderLotItemOffer>();

            foreach (TenderLot lot in tenderData.TenderLots)
            {
                foreach (TenderLotItem lotItem in lot.LotItems)
                {
                    Task <HttpResponseMessage> requestResult = HttpClient.GetAsync($"tender/getoffers?uuid={lotItem.TenderItemUuid.ToString().ToUpper()}");
                    TenderLot     tenderLot     = lot;
                    TenderLotItem tenderLotItem = lotItem;
                    tasks.Add(requestResult.ContinueWith(x => FinishInitialization(x, tenderLot, tenderLotItem, allOffers)));
                }
            }
            Task.WaitAll(tasks.ToArray());
Ejemplo n.º 4
0
        public static void SkipTaskOfTenderComitet(Int32 tenderNumber)
        {
            RequestResult <TenderData> reqResult = ApsClient.GetTenderData(tenderNumber);

            if (!reqResult.IsSuccess)
            {
                Console.WriteLine("Не удалось получить информацию о состоянии тендера");
                return;
            }
            TenderData tenderData = reqResult.Data;

            TenderStageInfo tenderStateBeforeApprovement = ApsClient.GetTenderStageInfo(tenderNumber);
            TenderStageInfo tenderStateAfterApprovement  = ApsClient.SkipTask(tenderData, SkippableTask.St8_ApprovementOfTenderCommittee);

            Console.WriteLine($"\nСостояние процесса тендера было изменено: {tenderStateBeforeApprovement != tenderStateAfterApprovement}");
            Console.WriteLine($"\nСостояние тендера после пропуска задачи:\n{tenderStateAfterApprovement}");
        }
Ejemplo n.º 5
0
        private void ResetTenderValueToZero(string currentTenderTypeID, string currentTenderName)
        {
            TenderData tenderData   = new TenderData(ApplicationSettings.Database.LocalConnection, ApplicationSettings.Database.DATAAREAID);
            string     tenderTypeID = tenderData.GetTenderID(ApplicationSettings.Terminal.StoreId, ((int)(PosisOperations.PayCurrency)).ToString());

            if (!currentTenderTypeID.Equals(tenderTypeID, StringComparison.OrdinalIgnoreCase))
            {
                gridSource.First(tender =>
                                 tender.TenderTypeId.Equals(currentTenderTypeID, StringComparison.OrdinalIgnoreCase)).Total = 0m;
            }
            else
            {
                gridSource.First(tender =>
                                 tender.TenderName.Equals(currentTenderName, StringComparison.OrdinalIgnoreCase)).Total = 0m;
            }

            gvTenders.InvalidateRows();

            UpdateTotalAmount();
        }
Ejemplo n.º 6
0
        public static void GetTenderDataAndTenderRoundOffersAndContractorFiles(Int32 tenderNumber)
        {
            RequestResult <TenderData> reqResult = ApsClient.GetTenderData(tenderNumber);

            if (!reqResult.IsSuccess)
            {
                Console.WriteLine("Не удалось получить информацию о состоянии тендера");
                return;
            }
            TenderData tenderData = reqResult.Data;

            ApsClient.GetTenderRoundOffers(tenderData);
            tenderData.Show();

            String workDir = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), $@"..\..\..\..\_Data\Tender #{tenderNumber}"));

            if (!Directory.Exists(workDir))
            {
                Directory.CreateDirectory(workDir);
            }

            ApsClient.GetFilesFromCommertialOffers(tenderData, workDir);
            Console.WriteLine($"\n\nФайлы контрагентов сохранены в папку \"{workDir}\"\n");
        }
Ejemplo n.º 7
0
        protected override void OnLoad(EventArgs e)
        {
            if (!this.DesignMode)
            {
                LogMessage("Loading frmTenderCount",
                           LSRetailPosis.LogTraceLevel.Trace,
                           this.ToString());

                TranslateLabels();


                // Check which amounts the POS will expect per tendertype
                // Start by checking which tender types to count....
                TenderData tenderData = new TenderData(
                    ApplicationSettings.Database.LocalConnection,
                    ApplicationSettings.Database.DATAAREAID);

                LoadFromTenderData(tenderData);

                LogMessage("Counting " + tendersToCount.Rows.Count + " tenders",
                           LSRetailPosis.LogTraceLevel.Trace,
                           this.ToString());

                gridSource = new System.Collections.Generic.List <TenderViewModel>();
                denominationDataSources = new Dictionary <int, List <DenominationViewModel> >();

                foreach (DataRow row in tendersToCount.Rows)
                {
                    ITender tmpTender = Dialog.InternalApplication.BusinessLogic.Utility.CreateTender();
                    tmpTender.TenderID       = row["TENDERTYPEID"].ToString();
                    tmpTender.TenderName     = row["NAME"].ToString();
                    tmpTender.PosisOperation = (PosisOperations)(row["POSOPERATION"]);

                    LSRetailPosis.ApplicationLog.Log(this.ToString(), "Counting: " + tmpTender.TenderID
                                                     + " " + tmpTender.TenderName + " "
                                                     + tmpTender.PosisOperation.ToString(),
                                                     LSRetailPosis.LogTraceLevel.Trace);

                    switch (tmpTender.PosisOperation)
                    {
                    case PosisOperations.PayCash:
                        cashCounted = true;

                        TenderViewModel cashRow = new TenderViewModel()
                        {
                            TenderTypeId        = tmpTender.TenderID,
                            TenderOperationType = tmpTender.PosisOperation,
                            TenderName          = tmpTender.TenderName,
                            DisplayName         = ApplicationLocalizer.Language.Translate(STRING_ID_TENDER_NAME, ApplicationSettings.Terminal.StoreCurrency),
                            Currency            = ApplicationSettings.Terminal.StoreCurrency
                        };

                        gridSource.Insert(0, cashRow);
                        break;

                    case PosisOperations.PayCurrency:
                        foreignCurrencyCounted = true;

                        ExchangeRateDataManager exchangeRateData = new ExchangeRateDataManager(ApplicationSettings.Database.LocalConnection, ApplicationSettings.Database.DATAAREAID);
                        //Initialize with all number of currencies avialable
                        foreach (string currency in exchangeRateData.GetCurrencyPair(
                                     ApplicationSettings.Terminal.StoreCurrency,
                                     ApplicationSettings.Terminal.ExchangeRateType,
                                     ApplicationSettings.Terminal.StorePrimaryId))
                        {
                            TenderViewModel currencyRow = new TenderViewModel()
                            {
                                TenderTypeId        = tmpTender.TenderID,
                                TenderOperationType = tmpTender.PosisOperation,
                                TenderName          = tmpTender.TenderName,
                                DisplayName         = ApplicationLocalizer.Language.Translate(STRING_ID_TENDER_NAME, currency),
                                Currency            = currency
                            };

                            gridSource.Insert(gridSource.Count > 0 ? 1 : 0, currencyRow);
                        }
                        break;

                    default:
                        otherTendersCounted = true;
                        TenderViewModel otherRow = new TenderViewModel()
                        {
                            TenderTypeId        = tmpTender.TenderID,
                            TenderOperationType = tmpTender.PosisOperation,
                            TenderName          = tmpTender.TenderName,
                            DisplayName         = tmpTender.TenderName
                        };

                        gridSource.Add(otherRow);
                        break;
                    }
                }

                this.gridTenders.DataSource = gridSource;

                this.Text = lblHeader.Text = formHeadingText;
                this.gvTenders.Appearance.HeaderPanel.ForeColor = this.ForeColor;
                this.gvTenders.Appearance.Row.ForeColor         = this.ForeColor;

                UpdateTotalAmount();
            }

            base.OnLoad(e);
        }
Ejemplo n.º 8
0
 public Tender(TestStartInfo teststartinfo, DataManager datamanager)
 {
     _Data       = new TenderData(datamanager);
     _TenderPage = new TenderPage(teststartinfo);
 }
Ejemplo n.º 9
0
        public void AddLoyaltyPayment(IRetailTransaction retailTransaction, ICardInfo cardInfo, decimal amount)
        {
            try
            {
                try
                {
                    NewMessageWindow(50051, LSPosMessageTypeButton.NoButtons, System.Windows.Forms.MessageBoxIcon.Information);

                    this.transaction = (RetailTransaction)retailTransaction;

                    // Getting the loyalty info for the card, how many points have previously been earned
                    LoyaltyItem paymentLoyaltyItem = GetLoyaltyItem(ref cardInfo);

                    if (paymentLoyaltyItem != null)
                    {
                        //customerData.
                        if (this.transaction.Customer == null || string.Equals(this.transaction.Customer.CustomerId, paymentLoyaltyItem.CustID, StringComparison.OrdinalIgnoreCase) == false)
                        {
                            UpdateTransactionWithNewCustomer(paymentLoyaltyItem.CustID);
                        }

                        // if the amount is higher than the "new" NetAmountWithTax, then it is acceptable to lower the amount
                        if (Math.Abs(amount) > Math.Abs(this.transaction.TransSalePmtDiff))
                        {
                            amount = this.transaction.TransSalePmtDiff;
                        }

                        // Getting all possible loyalty posssiblities for the found scheme id
                        DataTable loyaltyPointsTable = GetLoyaltyPointsSchemeFromDB(paymentLoyaltyItem.SchemeID);

                        decimal totalNumberOfPoints = 0;
                        bool    tenderRuleFound     = false;

                        // now we add the points needed to pay current tender
                        totalNumberOfPoints = CalculatePointsForTender(ref tenderRuleFound, cardInfo.TenderTypeId, amount, loyaltyPointsTable);

                        if (tenderRuleFound)
                        {
                            bool    cardIsValid           = false;
                            string  comment               = string.Empty;
                            int     loyaltyTenderTypeBase = 0;
                            decimal pointsEarned          = 0;

                            // check to see if the user can afford so many points
                            GetPointStatus(ref pointsEarned, ref cardIsValid, ref comment, ref loyaltyTenderTypeBase, paymentLoyaltyItem.LoyaltyCardNumber);

                            if ((cardIsValid) && ((LoyaltyTenderTypeBase)loyaltyTenderTypeBase != LoyaltyTenderTypeBase.NoTender))
                            {
                                if (pointsEarned >= (totalNumberOfPoints * -1))
                                {
                                    //customerData.
                                    if (this.transaction.Customer == null || string.Equals(this.transaction.Customer.CustomerId, paymentLoyaltyItem.CustID, StringComparison.OrdinalIgnoreCase) == false)
                                    {
                                        UpdateTransactionWithNewCustomer(paymentLoyaltyItem.CustID);
                                    }

                                    //Add loyalty item to transaction.
                                    this.transaction.LoyaltyItem           = paymentLoyaltyItem;
                                    this.transaction.LoyaltyItem.UsageType = LoyaltyItemUsageType.UsedForLoyaltyTender;

                                    // Gathering tender information
                                    TenderData tenderData = new TenderData(ApplicationSettings.Database.LocalConnection, ApplicationSettings.Database.DATAAREAID);
                                    ITender    tenderInfo = tenderData.GetTender(cardInfo.TenderTypeId, ApplicationSettings.Terminal.StoreId);

                                    // this is the grand total
                                    decimal totalAmountDue = this.transaction.TransSalePmtDiff - amount;

                                    TenderRequirement tenderRequirement = new TenderRequirement((Tender)tenderInfo, amount, true, this.transaction.TransSalePmtDiff);
                                    if (!string.IsNullOrWhiteSpace(tenderRequirement.ErrorText))
                                    {
                                        using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(tenderRequirement.ErrorText, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error))
                                        {
                                            LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                                        }
                                    }

                                    //Add a loyalty tender item to transaction.
                                    LoyaltyTenderLineItem loyaltyTenderItem = (LoyaltyTenderLineItem)this.Application.BusinessLogic.Utility.CreateLoyaltyTenderLineItem();
                                    loyaltyTenderItem.CardNumber = paymentLoyaltyItem.LoyaltyCardNumber;
                                    loyaltyTenderItem.CardTypeId = cardInfo.CardTypeId;
                                    loyaltyTenderItem.Amount     = amount;

                                    //tenderInfo.
                                    loyaltyTenderItem.Description   = tenderInfo.TenderName;
                                    loyaltyTenderItem.TenderTypeId  = cardInfo.TenderTypeId;
                                    loyaltyTenderItem.LoyaltyPoints = totalNumberOfPoints;

                                    //convert from the store-currency to the company-currency...
                                    loyaltyTenderItem.CompanyCurrencyAmount = this.Application.Services.Currency.CurrencyToCurrency(
                                        ApplicationSettings.Terminal.StoreCurrency,
                                        ApplicationSettings.Terminal.CompanyCurrency,
                                        amount);

                                    // the exchange rate between the store amount(not the paid amount) and the company currency
                                    loyaltyTenderItem.ExchrateMST = this.Application.Services.Currency.ExchangeRate(
                                        ApplicationSettings.Terminal.StoreCurrency) * 100;

                                    // card tender processing and printing require an EFTInfo object to be attached.
                                    // however, we don't want loyalty info to show up where other EFT card info would on the receipt
                                    //  because loyalty has its own receipt template fields, so we just assign empty EFTInfo object
                                    loyaltyTenderItem.EFTInfo = Application.BusinessLogic.Utility.CreateEFTInfo();
                                    // we don't want Loyalty to be 'captured' by payment service, so explicitly set not to capture to be safe
                                    loyaltyTenderItem.EFTInfo.IsPendingCapture = false;

                                    loyaltyTenderItem.SignatureData = LSRetailPosis.POSProcesses.TenderOperation.ProcessSignatureCapture(tenderInfo, loyaltyTenderItem);

                                    this.transaction.Add(loyaltyTenderItem);
                                }
                                else
                                {
                                    using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(50057, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error))
                                    {
                                        LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                                    } // Not enough points available to complete payment
                                }
                            }
                            else
                            {
                                LSRetailPosis.POSProcesses.frmMessage dialog = null;
                                try
                                {
                                    if (string.IsNullOrEmpty(comment))
                                    {
                                        dialog = new LSRetailPosis.POSProcesses.frmMessage(50058, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                                    }
                                    else
                                    {
                                        dialog = new LSRetailPosis.POSProcesses.frmMessage(comment, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                                    }

                                    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);    // Invalid loyaltycard
                                }
                                finally
                                {
                                    if (dialog != null)
                                    {
                                        dialog.Dispose();
                                    }
                                }
                            }
                        }
                        else
                        {
                            using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(50059, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error))
                            {
                                LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog); // Not enough points available to complete payment
                            }
                        }
                    }
                }
                finally
                {
                    CloseExistingMessageWindow();
                }
            }
            catch (Exception ex)
            {
                NetTracer.Error(ex, "Loyalty::AddLoyaltyPayment failed for retailTransaction {0} cardInfo {1} amount {2}", retailTransaction.TransactionId, cardInfo.CardNumber, amount);
                LSRetailPosis.ApplicationExceptionHandler.HandleException(this.ToString(), ex);
                throw;
            }
        }
Ejemplo n.º 10
0
        private void AddCorporateCardTenderLine()
        {
            try
            {
                LogMessage("Adding the tender line to the transaction",
                           LSRetailPosis.LogTraceLevel.Trace,
                           "CorporateCard.AddCorporateCardTenderLine");

                bool getAdditionalInfo = false;

                // Generate the tender line for the card
                CorporateCardTenderLineItem cardTenderLine = (CorporateCardTenderLineItem)this.Application.BusinessLogic.Utility.CreateCorporateCardTenderLineItem();
                cardTenderLine.TenderTypeId = iCardInfo.TenderTypeId;
                cardTenderLine.CardName     = iCardInfo.CardName;
                cardTenderLine.Description  = LSRetailPosis.ApplicationLocalizer.Language.Translate(50150) + " " + iCardInfo.CardName; //Card payment
                cardTenderLine.Amount       = this.amountValue;

                if (iCardInfo.CardEntryType == CardEntryTypes.MAGNETIC_STRIPE_READ)
                {
                    // We have the track, from which we need to get the card number and exp date
                    string track2Data = LSRetailPosis.Settings.HardwareProfiles.MSR.Track2Data(iCardInfo.Track2);

                    cardTenderLine.CardNumber = track2Data.Substring(0, track2Data.IndexOf("-"));
                    cardTenderLine.ExpiryDate = track2Data.Substring(track2Data.IndexOf("-") + 1, 4);
                }
                else
                {
                    // We have the card number and the exp. date
                    cardTenderLine.CardNumber = iCardInfo.CardNumber;
                    cardTenderLine.ExpiryDate = iCardInfo.ExpDate;
                    getAdditionalInfo         = true;
                }

                // Get information about the tender...
                TenderData tenderData = new TenderData(ApplicationSettings.Database.LocalConnection, ApplicationSettings.Database.DATAAREAID);
                ITender    tenderInfo = tenderData.GetTender(iCardInfo.TenderTypeId, ApplicationSettings.Terminal.StoreId);
                cardTenderLine.OpenDrawer           = tenderInfo.OpenDrawer;
                cardTenderLine.ChangeTenderID       = tenderInfo.ChangeTenderID;
                cardTenderLine.MinimumChangeAmount  = tenderInfo.MinimumChangeAmount;
                cardTenderLine.AboveMinimumTenderId = tenderInfo.AboveMinimumTenderId;

                //Get additional information on corporate card if needed
                if (getAdditionalInfo && !GetAdditionalInformation(cardTenderLine, this.Application))
                {
                    return;
                }

                //convert from the store-currency to the company-currency...
                cardTenderLine.CompanyCurrencyAmount = this.Application.Services.Currency.CurrencyToCurrency(
                    ApplicationSettings.Terminal.StoreCurrency,
                    ApplicationSettings.Terminal.CompanyCurrency,
                    this.amountValue);
                // the exchange rate between the store amount(not the paid amount) and the company currency
                cardTenderLine.ExchrateMST = this.Application.Services.Currency.ExchangeRate(
                    ApplicationSettings.Terminal.StoreCurrency) * 100;

                cardTenderLine.SignatureData = LSRetailPosis.POSProcesses.TenderOperation.ProcessSignatureCapture(tenderInfo, cardTenderLine);

                retailTransaction.Add(cardTenderLine);

                ((IPosTransactionV2)retailTransaction).LastRunOperationIsValidPayment = true;
            }
            catch (Exception x)
            {
                LSRetailPosis.ApplicationExceptionHandler.HandleException(this.ToString(), x);
                throw;
            }
        }
 private string GetTenderDescription(TenderData td)
 {
     return(Commons.GetTenderDescription(td));
 }