コード例 #1
0
        /// <summary>
        /// Method to load uncomplete grid
        /// </summary>
        /// <param name="tillNumber">Till number</param>
        /// <param name="error">Error</param>
        /// <returns>Uncomplete prepay response</returns>
        public UnCompletePrepayResponse LoadUncompleteGrid(int tillNumber, out ErrorMessage error)
        {
            var result = new UnCompletePrepayResponse();

            error = new ErrorMessage();
            string[] prepayBasket = null;
            var      offSet       = _policyManager.LoadStoreInfo().OffSet;

            if (TCPAgent.Instance.IsConnected)
            {
                result.UnCompleteSale = new List <UnCompleteSale>();
                result.Caption        = _resourceManager.GetResString(offSet, Convert.ToInt16(36 * 100 + 4));

                if (!GetPrepayBasket(ref prepayBasket))
                {
                    result.IsChangeEnabled      = false;
                    result.IsOverPaymentEnabled = false;
                    return(result);
                }

                short i;
                for (i = 0; i < prepayBasket.Length - 1; i++)
                {
                    if (!string.IsNullOrEmpty(prepayBasket[i]))
                    {
                        var uncompleteSale = LoadUncompletePrepay(prepayBasket[i], tillNumber, out error);
                        if (uncompleteSale != null)
                        {
                            result.UnCompleteSale.Add(uncompleteSale);
                        }
                    }
                }
                if (result.UnCompleteSale.Count > 0)
                {
                    result.IsChangeEnabled      = true;
                    result.IsOverPaymentEnabled = true;
                }
                result.IsDeleteVisible = false;
            }
            else
            {
                result.UnCompleteSale = LoadMyUnlockedPrepay(tillNumber, out error);
                //Click on the  sale to select it , then click Delete button.
                result.Caption = _resourceManager.GetResString(offSet, Convert.ToInt16(36 * 100 + 5));

                result.IsDeleteVisible      = true;
                result.IsDeleteEnabled      = result.UnCompleteSale?.Count != 1;
                result.IsChangeEnabled      = false;
                result.IsOverPaymentEnabled = false;
            }

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Method to get payout vendor
        /// </summary>
        /// <param name="error">Error</param>
        /// <returns>Vendor payout</returns>
        public VendorPayout GetPayoutVendor(out ErrorMessage error)
        {
            error = new ErrorMessage();
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            if (!_policyManager.DO_PAYOUTS)
            {
                MessageType temp_VbStyle8 = (int)MessageType.Exclamation + MessageType.OkOnly;
                error.MessageStyle = _resourceManager.CreateMessage(offSet, 38, 54, null, temp_VbStyle8);
                return(null);
            }
            var vendorPayout = new VendorPayout();
            var po           = new Payout();
            var taxes        = po.Payout_Taxes;

            _taxManager.Load_Taxes(ref taxes);
            int totals = 0;

            foreach (Payout_Tax tax in taxes)
            {
                if (totals >= 4)
                {
                    MessageType temp_VbStyle = (int)MessageType.Information + MessageType.OkOnly;
                    vendorPayout.Message = _resourceManager.CreateMessage(offSet, 23, 90, null, temp_VbStyle);
                    break;
                }

                if (tax.Tax_Active)
                {
                    vendorPayout.Taxes.Add(new Tax
                    {
                        Description = _resourceManager.GetResString(offSet, 194) + tax.Tax_Name,
                        Code        = tax.Tax_Name,
                        Amount      = 0
                    });
                    totals++;
                }
            }
            var vendors = _stockService.GetAllVendors();

            foreach (var vendor in vendors)
            {
                vendorPayout.Vendors.Add(new PayoutVendor
                {
                    Code = vendor.Code,
                    Name = vendor.Name
                });
            }
            var reasons = _reasonService.GetReasons((char)ReasonType.Payouts);

            foreach (Return_Reason reason in reasons)
            {
                vendorPayout.Reasons.Add(new VendorReason
                {
                    Code        = reason.Reason,
                    Description = reason.Description
                });
            }
            return(vendorPayout);
        }
コード例 #3
0
        /// <summary>
        /// Method to get reasons
        /// </summary>
        /// <param name="reasonType">Reason type</param>
        /// <returns>List of reasons</returns>
        public List <Return_Reason> GetReasons(ReasonType reasonType)
        {
            var dateStart = DateTime.Now;

            Performancelog.Debug($"Start,ReasonManager,GetReasons,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}");

            var type    = (char)reasonType;
            var reasons = new List <Return_Reason>();
            var store   = CacheManager.GetStoreInfo();
            var offSet  = store?.OffSet ?? 0;

            if (type != '\0')
            {
                reasons = _reasonService.GetReasons(type);
            }
            if (reasons == null || reasons.Count == 0)
            {
                reasons = new List <Return_Reason>
                {
                    new Return_Reason
                    {
                        Description = _resourceManager.GetResString(offSet, 207), //"<No reasons defined>"
                        Reason      = "0"
                    }
                };
            }
            Performancelog.Debug($"End,ReasonManager,GetReasons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

            return(reasons);
        }
コード例 #4
0
        public HttpResponseMessage GetLoginPolicies(string ipAddress)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,PolicyController,GetLoginPolicies,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}");

            ErrorMessage error;
            string       message;
            var          posId = _loginManager.Authenticate(ipAddress, out message, out error);

            if (!string.IsNullOrEmpty(error.MessageStyle.Message))
            {
                _performancelog.Debug($"End,PolicyController,GetLoginPolicies,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(Request.CreateResponse(
                           error.StatusCode,
                           new InvalidLoginReponseModel
                {
                    Error = error.MessageStyle,
                    ShutDownPOS = error.ShutDownPos
                }));
            }

            if (posId == 0)
            {
                var offSet = _policyManager.LoadStoreInfo().OffSet;
                _performancelog.Debug($"End,PolicyController,GetLoginPolicies,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(Request.CreateResponse(
                           HttpStatusCode.Unauthorized,
                           new InvalidLoginReponseModel
                {
                    Error = new MessageStyle {
                        Message = _resourceManager.GetResString(8198, offSet)
                    },
                    ShutDownPOS = error.ShutDownPos
                }));
            }

            if (!_tillManager.IsActiveTillAvailable(posId, out error))
            {
                _performancelog.Debug($"End,PolicyController,GetLoginPolicies,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(Request.CreateResponse(
                           error.StatusCode,
                           new InvalidLoginReponseModel
                {
                    Error = error.MessageStyle,
                    ShutDownPOS = error.ShutDownPos
                }));
            }

            var policies = _policyManager.GetLoginPolicies(ipAddress, posId);

            _performancelog.Debug($"End,PolicyController,GetLoginPolicies,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

            return(Request.CreateResponse(HttpStatusCode.OK, new
            {
                policies,
                message
            }));
        }
コード例 #5
0
        public void SetVendorCoupon(ref Vendor vendor, string code)
        {
            var vendorDetails = _stockService.GetVendorByCode(code);

            if (vendorDetails != null)
            {
                vendor.Code    = code;
                vendor.Name    = vendorDetails.Name;
                vendor.Address = vendorDetails.Address;
            }
            else
            {
                var offSet = _policyManager.LoadStoreInfo().OffSet;
                vendor.Code = code;
                vendor.Name = _resourceManager.GetResString(offSet, 288);
            }
        }
コード例 #6
0
        /// <summary>
        /// Method to get list of all messages
        /// </summary>
        /// <returns></returns>
        public List <MessageButton> GetMessages()
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,MessageManager,GetMessages,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
            var store    = CacheManager.GetStoreInfo();
            var offSet   = store?.OffSet ?? 0;
            var messages = new List <MessageButton>
            {
                new MessageButton
                {
                    Index   = 0,
                    Caption = _resourceManager.GetResString(offSet, 1803),
                    Message = string.Empty
                }
            };

            messages.AddRange(_utilityService.GetAllMessageButtons());
            _performancelog.Debug($"End,MessageManager,GetMessages,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

            return(messages);
        }
コード例 #7
0
        /// <summary>
        /// Method to get propane pumps by grade Id
        /// </summary>
        /// <param name="gradeId">Grade Id</param>
        /// <param name="error">Error message</param>
        /// <returns>Propane pumps</returns>
        public List <PropanePump> GetPropanePumpsByGradeId(int gradeId, out ErrorMessage error)
        {
            var grades = CacheManager.GetPropaneGrades();
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            if (grades == null)
            {
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 38, 76, null)
                };
                return(null);
            }
            var firstOrdDefault = grades.FirstOrDefault(p => p.Id == gradeId);

            if (firstOrdDefault == null)
            {
                error = new ErrorMessage
                {
                    MessageStyle = new MessageStyle
                    {
                        Message     = "Invalid Request",
                        MessageType = MessageType.Critical
                    }
                };
                return(null);
            }

            var stockCode = firstOrdDefault.StockCode;

            var pumps = _fuelPumpService.GetPumpsByPropaneGradeId(gradeId);

            error = new ErrorMessage();
            if (pumps.Count == 0)
            {
                // "There's no Pump set for " & Stock_Code(index) & ". Please set it in Fuel Control at first.", vbinformation+vbokonly
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 38, 12, stockCode, InformationOkMessageType)
                };
                return(null);
            }

            foreach (PropanePump propanePump in pumps)
            {
                propanePump.Name = _resourceManager.GetResString(offSet, (short)323) + " " + propanePump.Id;
            }
            return(pumps);
        }
コード例 #8
0
        // Load all the promotions in the Promos collection. Can load a specified promo or all of them
        /// <summary>
        /// Method to load all promos
        /// </summary>
        /// <param name="optPromoId">PromoID</param>
        /// <returns>Promos</returns>
        public Promos Load_Promos(string optPromoId)
        {
            var dateStart = DateTime.Now;

            Performancelog.Debug($"Start,PromoManager,Load_Promos,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}");

            var promos = CacheManager.GetPromosForPromoId(optPromoId);

            if (promos != null && promos.Count != 0)
            {
                return(promos);
            }
            promos = new Promos();
            var store        = CacheManager.GetStoreInfo();
            var offSet       = store?.OffSet ?? 0;
            var none         = _resourceManager.GetResString(offSet, 347);
            var promoHeaders = _promoService.GetPromoHeadersForToday(optPromoId);

            foreach (var promoHeader in promoHeaders)
            {
                var promo      = promoHeader;
                var promoLines = new Promo_Lines();

                //promo.MaxLink = _promoService.GetMaxLink(promo.PromoID);
                //var noOfLinks = _promoService.GetNumberOfLinks(promo.PromoID);
                //foreach (var noOfLink in noOfLinks)
                //{
                //    if (noOfLink > 1)
                //    {
                //        promo.MultiLink = true;
                //        break;
                //    }
                //}

                var promoDetails = _promoService.GetPromoLines(promo.PromoID, none);
                foreach (var promoDetail in promoDetails)
                {
                    promoLines.AddLine(promoDetail, "");
                }
                promo.Promo_Lines = promoLines;
                promos.Add(promo, promo.PromoID);
            }
            Performancelog.Debug($"End,PromoManager,Load_Promos,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
            CacheManager.AddPromos(optPromoId, promos);
            return(promos);
        }
コード例 #9
0
        /// <summary>
        /// Sale Summary
        /// </summary>
        /// <param name="sale"></param>
        /// <returns></returns>
        private Dictionary <string, string> SaleSummary(Sale sale)
        {
            Dictionary <string, string> result = new Dictionary <string, string>();
            Sale_Tax saleTaxRenamed;
            decimal  curTotalTaxes = 0;
            var      offSet        = _policyManager.LoadStoreInfo().OffSet;

            if (sale.Sale_Totals.Gross < 0)
            {
                result.Add(_resourceManager.GetResString(offSet, 266), sale.Sale_Totals.Net.ToString("###,##0.00"));

                foreach (Sale_Tax tempLoopVarSaleTaxRenamed in sale.Sale_Totals.Sale_Taxes)
                {
                    saleTaxRenamed = tempLoopVarSaleTaxRenamed;
                    if ((double)Math.Abs(saleTaxRenamed.Tax_Added_Amount) > 0.005)
                    {
                        curTotalTaxes = curTotalTaxes + saleTaxRenamed.Tax_Added_Amount;
                    }
                }

                result.Add(_resourceManager.GetResString(offSet, 137), curTotalTaxes.ToString("###,##0.00"));

                if (sale.Sale_Totals.Charge != 0)
                {
                    result.Add(_resourceManager.GetResString(offSet, 138), sale.Sale_Totals.Charge.ToString("###,##0.00"));
                }

                result.Add(_resourceManager.GetResString(offSet, 210), sale.Sale_Totals.Gross.ToString("###,##0.00"));
            }
            else
            {
                result.Add(_resourceManager.GetResString(offSet, 267), sale.Sale_Totals.Net.ToString("###,##0.00"));

                foreach (Sale_Tax tempLoopVarSaleTaxRenamed in sale.Sale_Totals.Sale_Taxes)
                {
                    saleTaxRenamed = tempLoopVarSaleTaxRenamed;
                    if ((double)Math.Abs(saleTaxRenamed.Tax_Added_Amount) > 0.005)
                    {
                        curTotalTaxes = curTotalTaxes + saleTaxRenamed.Tax_Added_Amount;
                    }
                }
                result.Add(_resourceManager.GetResString(offSet, 137), curTotalTaxes.ToString("###,##0.00"));

                if (sale.Sale_Totals.Charge != 0)
                {
                    result.Add(_resourceManager.GetResString(offSet, 138), sale.Sale_Totals.Charge.ToString("###,##0.00"));
                }
                result.Add(_resourceManager.GetResString(offSet, 210), sale.Sale_Totals.Gross.ToString("###,##0.00"));
            }

            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Method to construct the reciept of wex tranaction
        /// </summary>
        /// <param name="width"></param>
        /// <param name="name"></param>
        /// <param name="saleNumber"></param>
        /// <param name="terminalId"></param>
        /// <param name="cardNumber"></param>
        /// <param name="sequenceNumber"></param>
        /// <param name="approvalCode"></param>
        /// <param name="tenders"></param>
        /// <returns></returns>
        private string CreateWexReciept(short width, string name, string saleNumber, string terminalId, string cardNumber, string sequenceNumber, string approvalCode, Tenders tenders)
        {
            var wexReciept      = "";
            var tempStringArray = new string[5];

            wexReciept         = "";
            tempStringArray[0] = terminalId;
            tempStringArray[1] = PosId.ToString();
            tempStringArray[2] = System.Convert.ToString(_encryptDecryptManager.Encrypt(cardNumber, "C"));
            tempStringArray[3] = sequenceNumber;
            tempStringArray[4] = approvalCode;
            wexReciept         = wexReciept + "\r\n" + modStringPad.PadR(name, width);
            if (Strings.Left(System.Convert.ToString(_policyManager.LoadStoreInfo().Language), 1).ToUpper() == "F")
            {
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Terminal Id: " + tempStringArray[0], width) + "\r\n";
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Acc#: " + tempStringArray[2], width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("PD Seq#: " + tempStringArray[3], width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Récupération Numéro de référence: " + saleNumber, width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Code d\'autorisation: " + tempStringArray[4], width);

                wexReciept = wexReciept + "\r\n" + "\r\n" + "\r\n" + modStringPad.PadR(_resourceManager.GetResString(_policyManager.LoadStoreInfo().OffSet, (short)247) + ":  ", width, "_"); //Signature
                wexReciept = wexReciept + "\r\n" + "    Le Titulaire versera ce montant a  ";
                wexReciept = wexReciept + "\r\n" + "        L\'emetteur conformement au    ";
                wexReciept = wexReciept + "\r\n" + "             contrat adherent  ";
            }
            else
            {
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Terminal Id: " + tempStringArray[0], width) + "\r\n";
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Acc#: " + tempStringArray[2], width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("PD Seq#: " + tempStringArray[3], width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Retrieval Reference Number: " + saleNumber, width);
                wexReciept = wexReciept + "\r\n" + modStringPad.PadR("Approval Code: " + tempStringArray[4], width);

                wexReciept = wexReciept + "\r\n" + "\r\n" + "\r\n" + modStringPad.PadR(_resourceManager.GetResString(_policyManager.LoadStoreInfo().OffSet, (short)247) + ":  ", 40, "_"); //Signature
                wexReciept = wexReciept + "\r\n" + "CUSTOMER AGREES TO PAY THE ABOVE AMOUNT";
                wexReciept = wexReciept + "\r\n" + " ACCORDING TO THE CARD ISSUER AGREEMENT";
            }
            wexReciept = wexReciept + "\r\n";
            return(wexReciept);
        }
コード例 #11
0
        /// <summary>
        /// Return Sale
        /// </summary>
        /// <param name="user">User</param>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="tillNumber">Till number</param>
        /// <param name="saleTillNumber"></param>
        /// <param name="correction">Correction sale or not</param>
        /// <param name="reasonCode">Reason code</param>
        /// <param name="message">Error</param>
        /// <param name="reasonType">Reason type</param>
        /// <param name="saleLineMessages">Sale line messages</param>
        /// <param name="report"></param>
        /// <param name="fileName"></param>
        /// <returns>Sale</returns>
        public Sale ReturnSale(User user, int saleNumber, int tillNumber, int saleTillNumber, bool correction,
                               string reasonType, string reasonCode, out ErrorMessage message, out List <ErrorMessage>
                               saleLineMessages, out Report report, out string fileName)
        {
            Sale     sale     = new Sale();
            DateTime saleDate = DateTime.Now.AddDays(-Convert.ToInt16(_policyManager.GetPol("RES_DAYS", null)));

            saleLineMessages = new List <ErrorMessage>();
            report           = null;
            fileName         = string.Empty;
            if (!IsUserAbleToReturn(user, out message))
            {
                return(sale);
            }

            Sale_Line sl;
            var       blnRecReason = false;
            bool      isReturnable;
            bool      isSaleFound;

            sale = _returnSaleService.GetSaleBySaleNumber(saleNumber, saleTillNumber, saleDate, _policyManager.TE_Type, _policyManager.TE_GETNAME, _policyManager.TAX_EXEMPT_GA, _policyManager.DefaultCust, _policyManager.DEF_CUST_CODE, out isSaleFound, out isReturnable);
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            if (!isSaleFound)
            {
                message = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 40, 98, null)
                };
                return(sale);
            }

            if (!isReturnable)
            {
                message = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 40, 95, saleDate)
                };
                return(sale);
            }
            var sal = _saleService.GetSaleByTillNumber(tillNumber);// _saleService.GetSalesFromDbTemp(tillNumber);

            sale.Sale_Num   = sal?.Sale_Num ?? _saleManager.GetCurrentSaleNo(tillNumber, user.Code, out message);
            sale.TillNumber = (byte)tillNumber;
            _saleHeadManager.SetSalePolicies(ref sale);
            var saleLines = _returnSaleService.GetSaleLineBySaleNumber(saleNumber, saleTillNumber, saleDate, sale.Customer.DiscountType, _policyManager.TE_Type, _policyManager.TAX_EXEMPT);

            //_suspendedSaleService.RemovePreviousTransactionFromDbTemp(tillNumber);

            foreach (var saleLine in saleLines)
            {
                saleLine.PRICE_DEC = CommonUtility.GetShortValue(_policyManager.GetPol("PRICE_DEC", saleLine));
                saleLine.QUANT_DEC = CommonUtility.GetShortValue(_policyManager.GetPol("QUANT_DEC", saleLine));
                if (_policyManager.GetPol("ACCEPT_RET", saleLine) && saleLine.GiftType != "GiveX")
                {
                    var newSaleLine = saleLine;
                    newSaleLine.Till_Num = sale.TillNumber;
                    var          quantity     = saleLine.Quantity;
                    var          price        = saleLine.price;
                    var          amount       = saleLine.Amount;
                    var          discountRate = saleLine.Discount_Rate;
                    var          discountType = saleLine.Discount_Type;
                    ErrorMessage error;
                    _saleLineManager.SetPluCode(ref sale, ref newSaleLine, newSaleLine.PLU_Code, out error);

                    if (newSaleLine.ProductIsFuel && !newSaleLine.IsPropane)
                    {
                        newSaleLine.Regular_Price = Convert.ToDouble(newSaleLine.price);
                    }

                    if (newSaleLine.Gift_Certificate && newSaleLine.GiftType == "LocalGift")
                    {
                        newSaleLine.Description = _resourceManager.GetResString(offSet, 8124) + newSaleLine.Gift_Num;
                    }
                    _saleManager.Add_a_Line(ref sale, newSaleLine, user.Code, sale.TillNumber, out message, adjust: false, tableAdjust: false,
                                            forRefund: true);

                    newSaleLine.No_Loading = false;
                    if (newSaleLine.ScalableItem)
                    {
                        newSaleLine.Regular_Price = newSaleLine.price;
                    }

                    _saleLineManager.SetPrice(ref newSaleLine, price);
                    _saleLineManager.SetQuantity(ref newSaleLine, quantity);
                    _saleLineManager.SetAmount(ref newSaleLine, amount);
                    saleLine.Discount_Type = discountType;
                    _saleLineManager.SetDiscountRate(ref newSaleLine, discountRate);
                    newSaleLine.No_Loading = false; // It has to be set back to false, otherwise if the user changes the qty or price in the POS screen after unsuspend, the amount will not be right
                }
                else
                {
                    saleLineMessages.Add(new ErrorMessage
                    {
                        MessageStyle = _resourceManager.CreateMessage(offSet, 0, 8109, saleLine.Stock_Code + " " + saleLine.Description,
                                                                      CriticalOkMessageType)
                    });
                }
            }

            _saleManager.Sale_Discount(ref sale, Convert.ToDecimal(sale.Sale_Totals.Invoice_Discount),
                                       Convert.ToString(sale.Sale_Totals.Invoice_Discount_Type), false);
            sale.ForCorrection = correction; // 06/24/05 Nancy added ForCorrection
                                             //    CL = "" ' code
                                             //SaleMain.Default.lblCustName.Text = sale.Customer.Name;
            foreach (var tempLoopVarSl in saleLines)
            {
                sl            = tempLoopVarSl;
                sl.No_Loading = false;
            }
            sale.LoadingTemp = false;

            foreach (var tempLoopVarSl in saleLines)
            {
                sl = tempLoopVarSl;
                if (!_policyManager.GetPol("RET_REASON", sl))
                {
                    continue;
                }
                blnRecReason = true;
                break;
            }

            if (blnRecReason)
            {
                ReasonType rType;
                Enum.TryParse(reasonType, true, out rType);
                var returnReason = (char)rType != '\0' ? _reasonService.GetReturnReason(reasonCode, (char)rType) : new Return_Reason {
                    RType = "R"
                };
                foreach (var tempLoopVarSl in saleLines)
                {
                    sl = tempLoopVarSl;
                    _saleManager.Line_Reason(ref sale, ref sl, returnReason);
                }
            }
            _saleManager.SaveTemp(ref sale, tillNumber);
            //Update Sale object in Cache
            sale.ReverseRunaway  = sale.Sale_Type == "RUNAWAY" && sale.Sale_Amount > 0;  //
            sale.ReversePumpTest = sale.Sale_Type == "PUMPTEST" && sale.Sale_Amount > 0; //
            if (sale.ReverseRunaway)
            {
                var newLineMessage = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 11, 25, null)
                };
                saleLineMessages.Add(newLineMessage);
                Tenders nullTenders = null;
                fileName = Constants.RunAwayFile;
                var    file    = "Runaway";
                var    rePrint = false;
                Stream signature;
                sale.Sale_Type = "RUNAWAY";
                report         = _receiptManager.Print_Receipt(tillNumber, null, ref sale, ref nullTenders, true, ref file,
                                                               ref rePrint, out signature, user.Code);
                _saleManager.Clear_Sale(sale, sale.Sale_Num, sale.TillNumber, user.Code, "RUNAWAY", null, false, true, false, out message);

                ErrorMessage error;
                sale = _saleManager.InitializeSale(tillNumber, sale.Register, user.Code, out error);
            }
            if (sale.ReversePumpTest)
            {
                var newLineMessage = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 11, 27, null)
                };
                saleLineMessages.Add(newLineMessage);
                Tenders nullTenders = null;
                fileName = Constants.PumpTestFile;
                var    file    = "PumpTest";
                var    rePrint = false;
                Stream signature;
                sale.Sale_Type = "PUMPTEST";
                report         = _receiptManager.Print_Receipt(tillNumber, null, ref sale, ref nullTenders, true, ref file, ref rePrint, out signature, user.Code);
                _saleManager.Clear_Sale(sale, sale.Sale_Num, sale.TillNumber, user.Code, "PUMPTEST", null, false, true, false, out message);
                ErrorMessage error;
                sale = _saleManager.InitializeSale(tillNumber, sale.Register, user.Code, out error);
            }
            CacheManager.AddCurrentSaleForTill(sale.TillNumber, sale.Sale_Num, sale);
            return(sale);
        }
コード例 #12
0
        /// <summary>
        /// Method to create sale model
        /// </summary>
        /// <param name="sale">Sale</param>
        /// <param name="editLines"></param>
        /// <param name="enableExactExchange">Enable exact exchange button or not</param>
        /// <param name="writeOff">Write off</param>
        /// <param name="message">Message</param>
        /// <returns>Sale model</returns>
        public static SaleModel CreateSaleModel(Sale sale, List <SaleLineEdit> editLines,
                                                bool enableExactExchange, bool writeOff, List <object> message = null)
        {
            var store  = CacheManager.GetStoreInfo();
            var offSet = store?.OffSet ?? 0;

            sale.HasCarwashProducts = false;
            foreach (Sale_Line sl in sale.Sale_Lines)
            {
                if (sl.IsCarwashProduct)
                {
                    sale.HasCarwashProducts = true;
                }
            }

            var saleModel = new SaleModel
            {
                TillNumber         = sale.TillNumber,
                SaleNumber         = sale.Sale_Num,
                Customer           = sale.Customer.Name,
                EnableExactChange  = enableExactExchange,
                TotalAmount        = sale.Sale_Totals.TotalLabel,
                Summary            = sale.Sale_Totals.SummaryLabel,
                SaleLineErrors     = message,
                HasCarwashProducts = sale.HasCarwashProducts
            };

            var writeOffSaleLine = true;

            foreach (Sale_Line saleLine in sale.Sale_Lines)
            {
                var lineEdit    = editLines.FirstOrDefault(e => e.LineNumber == saleLine.Line_Num);
                var newSaleLine = new SaleLine
                {
                    LineNumber = saleLine.Line_Num,
                    StockCode  = saleLine.Stock_Code
                };
                //Tony 03/19/2019
                newSaleLine.Dept = saleLine.Dept;
                if (saleLine.ProductIsFuel)
                {
                    //shiny end
                    if (saleLine.IsPropane)
                    {
                        //shiny end
                        if (saleLine.IsPropane)
                        {
                            newSaleLine.Description = saleLine.Description + " " + ResourceManager.GetResString(371, offSet);
                        }
                        else
                        {
                            newSaleLine.Description = saleLine.Description + " " + ResourceManager.GetResString(281, offSet) + " " + Convert.ToString(saleLine.pumpID);
                        }
                    }
                    else
                    {
                        newSaleLine.Description = saleLine.Description + " " + ResourceManager.GetResString(281, offSet) +
                                                  " " + Convert.ToString(saleLine.pumpID);
                    }
                }
                else
                {
                    newSaleLine.Description = saleLine.Description;
                }

                // Derive the format strings for quantity and price.

                var fs = Convert.ToString(saleLine.QUANT_DEC == 0 ? "0" : "0." + new string('0', saleLine.QUANT_DEC));
                newSaleLine.Quantity = saleLine.Quantity.ToString(fs);
                //WriteToLogFile "Qty changed on main screen for index " & Index & " to " & SL.Quantity
                fs = Convert.ToString(saleLine.PRICE_DEC == 0 ? "0" : "0." + new string('0', saleLine.PRICE_DEC));
                newSaleLine.Price = saleLine.NoPriceFormat ? saleLine.price.ToString(CultureInfo.InvariantCulture) : saleLine.price.ToString(fs);

                // Show % or $ discounts
                if (saleLine.Discount_Rate > 0)
                {
                    newSaleLine.DiscountRate = saleLine.Discount_Type == "%" ? saleLine.Discount_Rate.ToString("#0.00") : saleLine.Discount_Rate.ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    newSaleLine.DiscountRate = "";
                }

                newSaleLine.Amount = saleLine.Amount == 0 ? "0.00" : (saleLine.Amount - Convert.ToDecimal(saleLine.Line_Discount)).ToString("###,##0.00");
                if (saleLine.ProductIsFuel || saleLine.Gift_Certificate)
                {
                    writeOffSaleLine = false;
                }
                newSaleLine.DiscountType        = saleLine.Discount_Type;
                newSaleLine.AllowPriceChange    = lineEdit != null && lineEdit.AllowPriceChange;
                newSaleLine.AllowQuantityChange = lineEdit != null && lineEdit.AllowQuantityChange;
                newSaleLine.AllowDiscountChange = lineEdit != null && lineEdit.AllowDiscountChange && !(saleLine.FuelRebateEligible && sale.Customer.UseFuelRebate && sale.Customer.UseFuelRebateDiscount);
                newSaleLine.AllowDiscountReason = lineEdit != null && lineEdit.AllowDiscountReason;
                newSaleLine.AllowPriceReason    = lineEdit != null && lineEdit.AllowPriceReason;
                newSaleLine.AllowReturnReason   = lineEdit != null && lineEdit.AllowReturnReason;
                newSaleLine.ConfirmDelete       = lineEdit != null && lineEdit.ConfirmDelete;
                saleModel.SaleLines.Add(newSaleLine);
            }
            saleModel.EnableWriteOffButton = writeOff && sale.Sale_Lines.Count != 0 && writeOffSaleLine;
            saleModel.CustomerDisplayText  = sale.CustomerDisplay;
            return(saleModel);
        }
コード例 #13
0
        /// <summary>
        /// Get Stock Price details
        /// </summary>
        /// <param name="stockCode">Stock code</param>
        /// <param name="tillNumber">Till number</param>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="registerNumber">Register number</param>
        /// <param name="userCode">User code</param>
        /// <param name="error">Error message</param>
        /// <returns>Stock price</returns>
        public StockPriceCheck GetStockPriceDetails(string stockCode, int tillNumber, int saleNumber, byte registerNumber, string userCode, out ErrorMessage error)
        {
            StockPriceCheck result = new StockPriceCheck {
                SpecialPriceTypes = GetSpecialPriceTypes()
            };
            Sale_Line slPrices = new Sale_Line();
            string    txtCode  = stockCode;
            var       offSet   = _policyManager.LoadStoreInfo().OffSet;
            var       sale     = _saleManager.GetCurrentSale(saleNumber, tillNumber, registerNumber, userCode, out error);

            if (!string.IsNullOrEmpty(error.MessageStyle.Message))
            {
                return(null);
            }

            slPrices.PriceCheck = true;
            //Stock_Br.Requery '  - To have the latest numbers; form
            // SLPrices.PLU_Code = cStock;
            //updated PLU setter
            _saleLineManager.SetPluCode(ref sale, ref slPrices, stockCode, out error);

            //  - For alternate codes change to the real stock code
            stockCode = slPrices.Stock_Code;

            float tePrice = 0;

            if (!string.IsNullOrEmpty(slPrices.Stock_Code))
            {
                var pd = slPrices.PRICE_DEC;
                result.IsPriceVisible = true;
                if ((slPrices.Stock_Type == 'V' || slPrices.Stock_Type == 'O') && !slPrices.ProductIsFuel)
                {
                    result.IsAvQtyVisible    = true;
                    result.AvailableQuantity = slPrices.AvailItems.ToString(CultureInfo.InvariantCulture);
                }


                var productTaxExempt = _stockService.GetProductTaxExemptByProductCode(stockCode);
                if (productTaxExempt != null)
                {
                    result.TaxExemptPrice = GetTaxFreePrice(stockCode, (float)slPrices.Regular_Price, slPrices.ProductIsFuel, ref tePrice) ? tePrice.ToString(CultureInfo.InvariantCulture) : "";
                    //
                    //                    If Policy.TE_Type = "AITE" Then ' Shiny added the if condition we are tracking separate inventory for TE product only for AITE
                    if (_policyManager.TAX_EXEMPT && _policyManager.TAX_EXEMPT && (_policyManager.TE_Type == "AITE" || (_policyManager.TE_Type != "AITE" && _policyManager.TRACK_TEINV))) //  - Only for AITE we need to track inventory separately for TE products 'If TaxExempt Then
                    {
                        if ((slPrices.Stock_Type == 'V' || slPrices.Stock_Type == 'O') && !slPrices.ProductIsFuel)
                        {
                            result.TaxExemptAvailable = productTaxExempt.Available.ToString();
                        }
                    }
                    result.IsTaxExemptVisible = true;
                }
                else
                {
                    result.IsTaxExemptVisible = false;
                }

                result.StockCode        = stockCode;
                result.Description      = slPrices.Description;
                result.RegularPriceText = slPrices.Regular_Price.ToString("#,##0." + new string('0', pd));
                var intSpPrices = (short)slPrices.SP_Prices.Count;
                if (intSpPrices != 0)
                {
                    result.FromDate = (slPrices.SP_Prices[1].FromDate).ToString("MM/dd/yyyy");
                    if (slPrices.SP_Prices[1].ToDate != System.DateTime.FromOADate(0))
                    {
                        result.IsToDateVisible  = true;
                        result.ToDate           = (slPrices.SP_Prices[1].ToDate).ToString("MM/dd/yyyy");
                        result.IsEndDateChecked = false;
                    }
                    else
                    {
                        result.IsToDateVisible  = false;
                        result.IsEndDateChecked = true;
                    }
                    if (slPrices.Price_Units == '$')
                    {
                        result.IsPerDollarChecked = true;
                    }
                    else
                    {
                        result.IsPerPercentageChecked = true;
                    }
                }
                // Get the active vendor used to pick the prices and the price type
                result.VendorId = slPrices.Vendor;

                result.IsActiveVendorPrice = _stockService.IsActiveVendorPrice(stockCode, result.VendorId);
                var type = slPrices.Price_Units == '$' ? 1 : 2;

                SP_Price sp;
                switch (slPrices.Price_Type)
                {
                case 'R':
                    result.PriceTypeText = _resourceManager.CreateCaption(offSet, 3, 39, null, 2);     // "R - Regular Price"
                    break;

                case 'S':
                    result.SalePrice = new SalePriceType {
                        Columns = 1, SalePrices = new List <PriceGrid>()
                    };
                    result.PriceTypeText        = _resourceManager.CreateCaption(offSet, 3, 39, null, 3);// "S - Sale Price"
                    result.SalePrice.ColumnText = _resourceManager.CreateCaption(offSet, 4, 39, null, (short)type);
                    foreach (SP_Price tempLoopVarSp in slPrices.SP_Prices)
                    {
                        sp = tempLoopVarSp;
                        result.SalePrice.SalePrices.Add(new PriceGrid {
                            Column1 = sp.Price.ToString("#,##0." + new string('0', pd))
                        });
                    }
                    result.IsAddButtonVisible    = false;
                    result.IsRemoveButtonVisible = false;
                    break;

                case 'F':
                    result.FirstUnitPrice = new FirstUnitPriceType {
                        Columns = 2, FirstUnitPriceGrids = new List <PriceGrid>()
                    };
                    result.PriceTypeText              = _resourceManager.CreateCaption(offSet, 3, 39, null, 4);           // "F - First Unit Price"
                    result.FirstUnitPrice.ColumnText  = _resourceManager.GetResString(offSet, 230);                       // Quantity
                    result.FirstUnitPrice.ColumnText2 = _resourceManager.CreateCaption(offSet, 4, 39, null, (short)type); // Prices


                    foreach (SP_Price tempLoopVarSp in slPrices.SP_Prices)
                    {
                        sp = tempLoopVarSp;
                        result.FirstUnitPrice.FirstUnitPriceGrids.Add(new PriceGrid {
                            Column1 = sp.From_Quantity.ToString(CultureInfo.InvariantCulture), Column2 = sp.Price.ToString("#,##0." + new string('0', pd))
                        });
                    }
                    result.IsAddButtonVisible    = true;
                    result.IsRemoveButtonVisible = true;
                    break;

                case 'I':
                    result.IncrementalPrice = new IncrementalPriceType {
                        Columns = 3, IncrementalPriceGrids = new List <PriceGrid>()
                    };

                    result.PriceTypeText = _resourceManager.CreateCaption(offSet, 3, 39, null, 5);                          // "I - Incremental Price"
                    result.IncrementalPrice.ColumnText  = _resourceManager.CreateCaption(offSet, 4, 39, null, 3);           //From
                    result.IncrementalPrice.ColumnText2 = _resourceManager.CreateCaption(offSet, 4, 39, null, 4);           // To
                    result.IncrementalPrice.ColumnText3 = _resourceManager.CreateCaption(offSet, 4, 39, null, (short)type); // Prices


                    foreach (SP_Price tempLoopVarSp in slPrices.SP_Prices)
                    {
                        sp = tempLoopVarSp;
                        result.IncrementalPrice.IncrementalPriceGrids.Add(new PriceGrid {
                            Column1 = sp.From_Quantity.ToString(CultureInfo.InvariantCulture), Column2 = sp.To_Quantity.ToString(CultureInfo.InvariantCulture), Column3 = sp.Price.ToString("#,##0." + new string('0', pd))
                        });
                    }
                    result.IsAddButtonVisible    = true;
                    result.IsRemoveButtonVisible = true;
                    break;

                case 'X':
                    result.XForPrice = new XForPriceType {
                        Columns = 2, XForPriceGrids = new List <PriceGrid>()
                    };
                    result.PriceTypeText         = _resourceManager.CreateCaption(offSet, 3, 39, null, 6);           // "X - 'X' for Price"
                    result.XForPrice.ColumnText  = _resourceManager.GetResString(offSet, 230);                       // Quantity
                    result.XForPrice.ColumnText2 = _resourceManager.CreateCaption(offSet, 4, 39, null, (short)type); // Prices


                    foreach (SP_Price tempLoopVarSp in slPrices.SP_Prices)
                    {
                        sp = tempLoopVarSp;
                        result.XForPrice.XForPriceGrids.Add(new PriceGrid {
                            Column1 = sp.From_Quantity.ToString(CultureInfo.InvariantCulture), Column2 = sp.Price.ToString("#,##0." + new string('0', pd))
                        });
                    }
                    result.IsAddButtonVisible    = true;
                    result.IsRemoveButtonVisible = true;
                    break;
                }

                if (slPrices.Group_Price == false && _policyManager.U_CHGPRICE)
                {
                    result.IsChangePriceEnable = true;
                }
                else
                {
                    result.IsChangePriceEnable = false;
                }


                result.RegularPriceText = string.Format(result.RegularPriceText, "#,##0." + new string('0', pd));
                Register register = new Register();
                _mainManager.SetRegister(ref register, registerNumber);
                if (register.Customer_Display)
                {
                    result.CustomerDisplay = _mainManager.DisplayMsgLcd(register,
                                                                        _mainManager.FormatLcdString(register, result.Description,
                                                                                                     result.RegularPriceText), System.Convert.ToString(intSpPrices != 0 ?
                                                                                                                                                       _mainManager.FormatLcdString(register, _resourceManager.GetResString(offSet, 362), "") : ""));
                }

                //  - If  sell inactive product policy is true , even if the product is inactive we can sell the same. It is only for inactive  for Purchase and ordering)
                var days = _stockService.IsStockByDayAvailable(slPrices.Stock_Code);
                if (days.Count != 0)
                {
                    // processing
                    var dayOfWeek =
                        Convert.ToString(DateAndTime.Weekday(DateAndTime.Today));
                    if (!days.Contains(dayOfWeek))
                    {
                        slPrices.Active_StockCode = true;
                        // to avoid inactive stock item message in the main screen, saleLine item is not added to the sale anyway
                        slPrices.Active_DayOfWeek = false;
                        //PM to fix the issue related to Hot Buttons on August 27, 2012
                        var msg = _resourceManager.CreateMessage(offSet, 0, 8890, txtCode.Trim());
                        result.Message             = msg.Message;
                        result.IsChangePriceEnable = false;
                        // no Else required, if it is found the product can be sold today, continue processing
                    }
                }
                else
                {
                    slPrices.Active_DayOfWeek = true; //PM on August 27, 2012
                }
                if (!slPrices.Active_StockCode || (!slPrices.Active_StockCode && !_policyManager.Sell_Inactive))
                {
                    error.MessageStyle = _resourceManager.CreateMessage(offSet, 0, 1141, txtCode.Trim());
                    error.StatusCode   = HttpStatusCode.NotFound;
                    return(null);
                }

                if (slPrices.Price_Type == 'R')
                {
                    result.IsSpecialPricingVisible = false;
                    result.IsAddButtonVisible      = false;
                    result.IsRemoveButtonVisible   = false;
                    return(result);
                }
                result.IsSpecialPricingVisible = true;
            }
            else // not a valid stock code
            {
                //Chaps_Main.DisplayMessage(this, (short)91, temp_VbStyle2, txtCode.Trim(), (byte)0);
                error.MessageStyle = _resourceManager.CreateMessage(offSet, 39, 91, txtCode.Trim());
                error.StatusCode   = HttpStatusCode.NotFound;
                return(null);
            }
            return(result);
        }
コード例 #14
0
        /// <summary>
        /// Get Report of the Dip input values for print
        /// </summary>
        /// <param name="tillNumber">Till number</param>
        /// <param name="shiftNumber">Shift number</param>
        /// <param name="registerNumber">Register number</param>
        /// <param name="userCode">User code</param>
        /// <param name="error">Error message</param>
        /// <returns>Dip input report</returns>
        public Report PrintDipReport(int tillNumber, int shiftNumber, int registerNumber, string userCode, out ErrorMessage error)
        {
            error = new ErrorMessage();
            var user   = _loginManager.GetExistingUser(userCode);
            var report = new Report {
                ReportName = Utilities.Constants.TankDipFile, Copies = 1
            };
            var    offSet        = _policyManager.LoadStoreInfo().OffSet;
            string timeFormatHm  = string.Empty;
            string timeFormatHms = string.Empty;

            GetTimeFormats(ref timeFormatHm, ref timeFormatHms);
            var store = _policyManager.LoadStoreInfo();

            var strDate     = DateAndTime.Year(DateAndTime.Today) + Strings.Right("00" + Convert.ToString(DateAndTime.Month(DateAndTime.Today)), 2) + Strings.Right("00" + Convert.ToString(DateAndTime.Day(DateAndTime.Today)), 2);
            var strFileName = Path.GetTempPath() + "\\Dip" + $"{DateTime.Now:yyyy-MM-dd_hh-mm-ss-tt}.txt";
            var dipInputs   = _dipInputService.GetDipInputsForReport(strDate);

            if (dipInputs.Count > 0)
            {
                short sWidth = 20;
                short aWidth = 20;
                short hWidth = 40;


                var just = Strings.Left(Convert.ToString(_policyManager.REC_JUSTIFY), 1).ToUpper();

                var nH = FileSystem.FreeFile();
                FileSystem.FileOpen(nH, strFileName, OpenMode.Output, OpenAccess.Write);

                //  - store code printing should be based on policy - Gasking will enter store code as part of store name - so they don't want to see store code in the beginning
                //   If Policy.PRN_CO_NAME Then Print #nH, PadIt(Just, Store.Code & "  " & Store.Name, H_Width)

                if (_policyManager.PRN_CO_NAME)
                {
                    FileSystem.PrintLine(nH, modStringPad.PadIt(just, (_policyManager.PRN_CO_CODE ? store.Code + "  " : "") + store.Name, hWidth));
                }

                if (_policyManager.PRN_CO_ADDR)
                {
                    FileSystem.PrintLine(nH, modStringPad.PadIt(just, Convert.ToString(store.Address.Street1), hWidth));

                    if (store.Address.Street2 != "")
                    {
                        FileSystem.PrintLine(nH, modStringPad.PadIt(just, Convert.ToString(store.Address.Street2), hWidth));
                    }
                    FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.Address.City)) + ", " + store.Address.ProvState, hWidth) + "\r\n" + modStringPad.PadIt(just, Convert.ToString(store.Address.PostalCode), hWidth));
                }

                if (_policyManager.PRN_CO_PHONE)
                {
                    foreach (Phone tempLoopVarPhoneRenamed in store.Address.Phones)
                    {
                        var phoneRenamed = tempLoopVarPhoneRenamed;
                        if (phoneRenamed.Number.Trim() != "")
                        {
                            FileSystem.PrintLine(nH, modStringPad.PadC(phoneRenamed.PhoneName + " " + phoneRenamed.Number, hWidth));
                        }
                    }
                }

                FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.RegName)) + " " + store.RegNum, hWidth)); //& vbCrLf

                if (store.SecRegName != "")
                {
                    FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.SecRegName)) + " " + store.SecRegNum, hWidth));
                }
                FileSystem.PrintLine(nH);

                FileSystem.PrintLine(nH,
                                     _policyManager.PRN_UName
                        ? modStringPad.PadIt(just,
                                             _resourceManager.GetResString(offSet, 225) + ": " + user.Name + " (" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 132), 1) + Convert.ToString(registerNumber) + "/" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 131), 1) + Convert.ToString(tillNumber) + "/" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 346), 1) + Convert.ToString(shiftNumber) + ")",
                                             hWidth)
                        : modStringPad.PadIt(just,
                                             _resourceManager.GetResString(offSet, 225) + ": " + user.Code + " (" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 132), 1) + Convert.ToString(registerNumber) + "/" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 131), 1) + Convert.ToString(tillNumber) + "/" +
                                             Strings.Left(_resourceManager.GetResString(offSet, 346), 1) + Convert.ToString(shiftNumber) + ")",
                                             hWidth));
                //

                FileSystem.PrintLine(nH, modStringPad.PadIt(just, DateAndTime.Today.ToString("dd-MMM-yyyy") + _resourceManager.GetResString(offSet, 208) + DateAndTime.TimeOfDay.ToString(timeFormatHm), hWidth) + "\r\n"); //" at " '
                FileSystem.PrintLine(nH, modStringPad.PadIt(just, _resourceManager.GetResString(offSet, 3403) + " " + DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss"), hWidth));                                               //"DIP READING @ "
                FileSystem.PrintLine(nH, modStringPad.PadL("=", hWidth, "=") + "\r\n");
                FileSystem.PrintLine(nH, modStringPad.PadC(_resourceManager.GetResString(offSet, 3401), sWidth) + modStringPad.PadC(_resourceManager.GetResString(offSet, 3402), aWidth));                                  //"Tank ID","DIP Value"
                FileSystem.PrintLine(nH, modStringPad.PadL("-", hWidth, "-"));                                                                                                                                              //& vbCrLf

                foreach (DipInput dipInput in dipInputs)
                {
                    FileSystem.PrintLine(nH, modStringPad.PadC(dipInput.TankId, sWidth) + modStringPad.PadC(dipInput.DipValue, aWidth));
                }

                // Advance the specified number of lines.
                short i;
                for (i = 1; i <= _policyManager.ADV_LINES; i++)
                {
                    FileSystem.PrintLine(nH);
                }
                FileSystem.FileClose(nH);
                var stream = File.OpenRead(strFileName);
                report.ReportContent = Helper.CreateBytes(stream);
                report.Copies        = 1;
                //modPrint.Dump_To_Printer((new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\" + File_Name, 1, true, true, false);
            }
            else
            {
                //MsgBoxStyle temp_VbStyle = (int)MsgBoxStyle.Critical + MsgBoxStyle.OkOnly;
                //Chaps_Main.DisplayMessage(this, 60, temp_VbStyle, null, 0);
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 34, 60, null, CriticalOkMessageType),
                    StatusCode   = HttpStatusCode.NotFound
                };
            }

            return(report);
        }
コード例 #15
0
        /// <summary>
        /// Get AR Customer By Card Number
        /// </summary>
        /// <param name="cardNumberString"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public Customer GetArCustomerByCardNumber(string cardNumberString, out ErrorMessage error)
        {
            error = new ErrorMessage();
            string       strCustomer;
            string       strStatus = "";
            bool         boolCardClient;
            DateTime     dExpDate = default(DateTime);
            Customer     customer;
            string       tempAvoidedValuesString = "";
            MessageStyle message;
            var          cardNumber = EvaluateCardString(cardNumberString, out message);

            if (!string.IsNullOrEmpty(message.Message))
            {
                error.MessageStyle = message;
                return(null);
            }
            SqlQueryCheck(ref cardNumber, ref tempAvoidedValuesString);

            ClientCard clientCard = _customerService.GetClientCardByCardNumber(cardNumber);

            if (clientCard != null)
            {
                strCustomer    = clientCard.ClientCode;
                strStatus      = clientCard.CardStatus.ToString();
                dExpDate       = clientCard.ExpirationDate;
                boolCardClient = true;
            }
            else
            {
                boolCardClient = false;
                strCustomer    = cardNumber.Trim();
            }

            var blnFoundCst = _customerService.IsArCustomer(strCustomer);
            var offSet      = _policyManager.LoadStoreInfo().OffSet;

            if (!blnFoundCst)
            {
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 41, 99, strCustomer, OkMessageType)
                };
                return(null);
            }
            if (strStatus == "V" && boolCardClient && _policyManager.CUST_EXPDATE &&
                dExpDate != DateTime.Parse("12:00:00 AM") && dExpDate < DateAndTime.Today)
            {
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 0, 1492, dExpDate, OkMessageType)
                };
                return(null);
            }


            // If the customer is found and has a card, verify that the card is valid
            if (strStatus != "V" && boolCardClient)
            {
                switch (strStatus)
                {
                case "C":
                    error = new ErrorMessage
                    {
                        MessageStyle =
                            _resourceManager.CreateMessage(offSet, 0, 1708, _resourceManager.GetResString(offSet, 1710),
                                                           OkMessageType)
                    };
                    break;

                case "D":
                    error = new ErrorMessage
                    {
                        MessageStyle =
                            _resourceManager.CreateMessage(offSet, 0, 1708, _resourceManager.GetResString(offSet, 8158),
                                                           OkMessageType)
                    };
                    break;

                case "E":
                    error = new ErrorMessage
                    {
                        MessageStyle =
                            _resourceManager.CreateMessage(offSet, 0, 1708, _resourceManager.GetResString(offSet, 1709),
                                                           OkMessageType)
                    };
                    break;

                default:
                    error = new ErrorMessage
                    {
                        MessageStyle = _resourceManager.CreateMessage(offSet, 0, 3884, null, OkMessageType)
                    };
                    break;
                }
                blnFoundCst = false;
            }

            if (blnFoundCst)
            {
                customer = new Customer {
                    Code = strCustomer
                };
                customer = LoadCustomer(customer.Code);
            }
            else
            {
                return(null);
            }
            return(customer);
        }
コード例 #16
0
        /// <summary>
        /// Unsuspend Sale
        /// </summary>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="tillNumber">Till number</param>
        /// <param name="userCode">User code</param>
        /// <param name="errorMessage">Error</param>
        /// <returns>Sale</returns>
        public Sale UnsuspendSale(int saleNumber, int tillNumber, string userCode, out ErrorMessage errorMessage)
        {
            var dateStart = DateTime.Now;

            Performancelog.Debug($"Start,SuspendedSaleManager,UnsuspendSale,{string.Empty},{dateStart:hh.mm.ss.ffffff}");

            if (!CanUserSuspendSale(userCode, out errorMessage))
            {
                return(new Sale());
            }

            string sqlQuery;
            var    shareSusp = _policyManager.SHARE_SUSP;

            if (shareSusp)
            {
                sqlQuery = "SELECT * FROM   SusHead  WHERE  SusHead.Sale_No = " + Convert.ToString(saleNumber);
            }
            else
            {
                sqlQuery = "SELECT * FROM   SusHead  WHERE  SusHead.Sale_No = " + Convert.ToString(saleNumber) + " AND SusHead.TILL=" + tillNumber;
            }

            var susHead = _suspendedSaleService.GetAllSuspendedSale(sqlQuery);
            var offSet  = _policyManager.LoadStoreInfo().OffSet;

            if (susHead == null || susHead.Count == 0)
            {
                //"Not a Suspended Sale"
                errorMessage = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 0, 8107, saleNumber),
                    StatusCode   = HttpStatusCode.NotFound
                };
                return(null);
            }

            _suspendedSaleService.UpdateCardSaleForUnSuspend(shareSusp, tillNumber, saleNumber);
            var sale = _suspendedSaleService.GetSuspendedSale(tillNumber, saleNumber, shareSusp);

            sale.Customer = _customerManager.LoadCustomer(sale.Customer.Code);
            if (string.IsNullOrEmpty(sale.CouponID))
            {
                _saleManager.ReCompute_Coupon(ref sale);
            }
            var saleLines = sale.Sale_Lines;

            if (sale.Sale_Totals.Sale_Taxes != null)
            {
                _saleHeadManager.Load_Taxes(ref sale);
            }
            sale.Sale_Lines = new Sale_Lines();
            _suspendedSaleService.RemovePreviousTransactionFromDbTemp(tillNumber);
            foreach (Sale_Line saleLine in saleLines)
            {
                var          sl           = saleLine;
                var          quantity     = saleLine.Quantity;
                var          price        = saleLine.price;
                var          amount       = saleLine.Amount;
                var          discountRate = saleLine.Discount_Rate;
                var          discountType = saleLine.Discount_Type;
                ErrorMessage error;
                _saleLineManager.SetPluCode(ref sale, ref sl, sl.PLU_Code, out error);

                if (sl.ProductIsFuel && !sl.IsPropane)
                {
                    sl.Regular_Price = Convert.ToDouble(sl.price);
                }

                if (sl.Gift_Certificate && sl.GiftType == "LocalGift")
                {
                    sl.Description = _resourceManager.GetResString(offSet, 8124) + sl.Gift_Num;
                }
                if (sale.Void_Num != 0)
                {
                    _saleManager.Add_a_Line(ref sale, sl, userCode, tillNumber, out errorMessage, adjust: false, tableAdjust: false, forRefund: true);
                }
                else
                {
                    _saleManager.Add_a_Line(ref sale, sl, userCode, tillNumber, out errorMessage, false, false);
                }

                sl.No_Loading = false;
                if (sl.ScalableItem)
                {
                    sl.Regular_Price = sl.price;
                }

                _saleLineManager.SetPrice(ref sl, price);
                _saleLineManager.SetQuantity(ref sl, quantity);
                _saleLineManager.SetAmount(ref sl, amount);
                saleLine.Discount_Type = discountType;
                _saleLineManager.SetDiscountRate(ref sl, discountRate);
                sl.No_Loading = false; // It has to be set back to false, otherwise if the user changes the qty or price in the POS screen after unsuspend, the amount will not be right

                if (shareSusp)
                {
                    // modGlobalFunctions.Load_CardSales(Chaps_Main.dbTill, (short)0, saleNumber, SL.Line_Num);
                }
            }

            _saleManager.Sale_Discount(ref sale, Convert.ToDecimal(sale.Sale_Totals.Invoice_Discount),
                                       Convert.ToString(sale.Sale_Totals.Invoice_Discount_Type), false);
            _suspendedSaleService.DeleteUnsuspend(shareSusp, tillNumber, saleNumber);
            _suspendedSaleService.DeleteCardSaleFromDbTemp(saleNumber);
            sale.Sale_Type = "CANCEL";
            //Update Sale object in Cache
            CacheManager.AddCurrentSaleForTill(tillNumber, sale.Sale_Num, sale);
            Performancelog.Debug($"End,SuspendedSaleManager,UnsuspendSale,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
            Register register = new Register();

            _mainManager.SetRegister(ref register, sale.Register);
            //Added to display invoice# to customer display
            if (register.Customer_Display)
            {
                sale.CustomerDisplay = _mainManager.DisplayMsgLcd(register,
                                                                  _mainManager.FormatLcdString(register, _resourceManager.GetResString(offSet, 414) + "#:",
                                                                                               Conversion.Str(saleNumber).Trim()), "");
            }
            return(sale);
        }
コード例 #17
0
        public HttpResponseMessage GetActiveTheme(string ipAddress)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,ThemeV1Controller,GetActiveTheme,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}");

            ErrorMessage error;
            string       message;

            var posId = _loginManager.Authenticate(ipAddress, out message, out error);

            if (!string.IsNullOrEmpty(error.MessageStyle.Message))
            {
                _performancelog.Debug($"End,ThemeV1Controller,GetActiveTheme,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(Request.CreateResponse(
                           error.StatusCode,
                           new InvalidLoginReponseModel
                {
                    Error = error.MessageStyle,
                    ShutDownPOS = error.ShutDownPos
                }));
            }

            if (posId == 0)
            {
                _performancelog.Debug($"End,ThemeV1Controller,GetActiveTheme,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                var store  = CacheManager.GetStoreInfo();
                var offSet = store?.OffSet ?? 0;
                return(Request.CreateResponse(
                           HttpStatusCode.Unauthorized,
                           new InvalidLoginReponseModel
                {
                    Error = new MessageStyle {
                        Message = _resourceManager.GetResString(8198, offSet)
                    },
                    ShutDownPOS = error.ShutDownPos
                }));
            }

            var theme = _themeManager.GetActiveTheme();

            if (theme != null)
            {
                return(Request.CreateResponse
                           (HttpStatusCode.OK,
                           new ThemeModel
                {
                    BackgroundColor1Light = theme.Data.FirstOrDefault(x => x.Name == "BackgroundColor1Light")?.ColorCode,
                    BackgroundColor1Dark = theme.Data.FirstOrDefault(x => x.Name == "BackgroundColor1Dark")?.ColorCode,
                    BackgroundColor2 = theme.Data.FirstOrDefault(x => x.Name == "BackgroundColor2")?.ColorCode,
                    ButtonFooterConfirmationColor = theme.Data.FirstOrDefault(x => x.Name == "ButtonFooterConfirmationColor")?.ColorCode,
                    ButtonFooterWarningColor = theme.Data.FirstOrDefault(x => x.Name == "ButtonFooterWarningColor")?.ColorCode,
                    HeaderBackgroundColor = theme.Data.FirstOrDefault(x => x.Name == "ButtonBackgroundColor")?.ColorCode,
                    HeaderForegroundColor = theme.Data.FirstOrDefault(x => x.Name == "ButtonForegroundColor")?.ColorCode,
                    ButtonFooterColor = theme.Data.FirstOrDefault(x => x.Name == "ButtonFooterColor")?.ColorCode,
                    LabelTextForegroundColor = theme.Data.FirstOrDefault(x => x.Name == "LabelTextForegroundColor")?.ColorCode
                }));
            }

            return(Request.CreateResponse(
                       HttpStatusCode.NotFound,
                       new ErrorResponse
            {
                Error = new MessageStyle {
                    Message = "There are no themes defined!"
                }
            }));
        }
コード例 #18
0
        /// <summary>
        /// Add update tier level
        /// </summary>
        /// <param name="pumpIds"></param>
        /// <param name="tierId"></param>
        /// <param name="levelId"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public TierLevelResponse AddUpdateTierLevel(List <int> pumpIds, int tierId, int levelId, out ErrorMessage error)
        {
            error = new ErrorMessage();
            var result = new TierLevelResponse
            {
                Tiers  = GetAllTiers(),
                Levels = GetAllLevels()
            };

            object i;
            string tierLevel    = "";
            bool   pumpSelected = false;
            var    store        = CacheManager.GetStoreInfo();
            var    offSet       = store?.OffSet ?? 0;
            float  timeIn       = 0;

            for (i = 1; (int)i <= (int)Variables.gPumps.PumpsCount; i = (int)i + 1)
            {
                if (tierId == 0)
                {
                    //        MsgBox ("Please select Tier!") '21
                    //MsgBoxStyle temp_VbStyle = (int)MsgBoxStyle.OkOnly + MsgBoxStyle.Critical;
                    //Chaps_Main.DisplayMessage(this, (short)21, temp_VbStyle, null, (byte)0);
                    error = new ErrorMessage
                    {
                        MessageStyle = _resourceManager.CreateMessage(offSet, 44, 21, null, CriticalOkMessageType)
                    };
                    return(null);
                }
                if (levelId == 0)
                {
                    //        MsgBox ("Please select Level!") '22
                    //MsgBoxStyle temp_VbStyle2 = (int)MsgBoxStyle.OkOnly + MsgBoxStyle.Critical;
                    //Chaps_Main.DisplayMessage(this, (short)22, temp_VbStyle2, null, (byte)0);
                    error = new ErrorMessage
                    {
                        MessageStyle = _resourceManager.CreateMessage(offSet, 44, 22, null, CriticalOkMessageType)
                    };
                    return(null);
                }

                switch (tierId + levelId.ToString())
                {
                case "11":
                    tierLevel = "0";
                    break;

                case "12":
                    tierLevel = "1";
                    break;

                case "21":
                    tierLevel = "2";
                    break;

                case "22":
                    tierLevel = "3";
                    break;
                }

                if (pumpIds.Contains((int)i))
                {
                    pumpSelected = true;
                    //lblinformation.Caption = "Setting in Process... Please Wait..." 'Resource.DisplayCaption(lblinformation.Tag, Me.Tag, , 2) '24-4
                    //lblinformation.Text = Chaps_Main.Resource.DisplayCaption(System.Convert.ToInt16(lblinformation.Tag), System.Convert.ToInt16(this.Tag), null, (short)4); //24-4
                    result.PageCaption = _resourceManager.CreateCaption(offSet, 24, 44, null, 4);

                    if (TCPAgent.Instance.PortOpened)
                    {
                        var response  = "";
                        var strRemain = "";


                        var cmd = "STL" + Strings.Right("00" + System.Convert.ToString(i), 2) + tierLevel;
                        TCPAgent.Instance.Send_TCP(ref cmd, true);
                        if (timeIn > DateAndTime.Timer)
                        {
                            timeIn = 0; //reset on midnight
                        }
                        else
                        {
                            timeIn = (float)DateAndTime.Timer;
                        }

                        while (!(DateAndTime.Timer - timeIn > Variables.gPumps.CommunicationTimeOut))
                        {
                            var strBuffer = System.Convert.ToString(TCPAgent.Instance.NewPortReading);
                            WriteToLogFile("TCPAgent.PortReading: " + strBuffer + " from waiting STL" + Strings.Right("00" + System.Convert.ToString(i), 2));
                            if (!string.IsNullOrEmpty(strBuffer))
                            {
                                modStringPad.SplitResponse(strBuffer, "STL" + Strings.Right("00" + System.Convert.ToString(i), 2), ref response, ref strRemain); //strBuffer<>""
                                if (!string.IsNullOrEmpty(response))                                                                                             //got what we are waiting
                                {
                                    TCPAgent.Instance.PortReading = strRemain;                                                                                   //& ";" & TCPAgent.PortReading
                                    WriteToLogFile("modify TCPAgent.PortReading from Get Totalizer: " + strRemain);
                                    break;
                                }
                            }
                            Variables.Sleep(100);
                            if (DateAndTime.Timer < timeIn)
                            {
                                timeIn = (float)DateAndTime.Timer;
                            }
                        }


                        if (Strings.Left(response, 7) != "STL" + Strings.Right("00" + System.Convert.ToString(i), 2) + "OK")
                        {
                            string tempCommandRenamed = "ENDPOS";
                            TCPAgent.Instance.Send_TCP(ref tempCommandRenamed, true);
                            //  lblinformation.Caption = "Setting TierLevel failed !" 'Resource.DisplayCaption(lblinformation.Tag, Me.Tag, , 2) '24-3
                            //(System.Convert.ToInt16(lblinformation.Tag), System.Convert.ToInt16(this.Tag), null, (short)3); //24-3
                            result.PageCaption = _resourceManager.CreateCaption(offSet, 24, 44, null, 3);
                            return(result);
                        }


                        _fuelPumpService.UpdateTierLevelForPump((int)i, tierId, levelId);



                        Variables.gPumps.get_Pump(System.Convert.ToByte(i)).TierID = (byte)tierId;

                        Variables.gPumps.get_Pump(System.Convert.ToByte(i)).LevelID = (byte)levelId;


                        if (Variables.Pump[(int)i].cashUP == null)
                        {
                            Variables.Pump[(int)i].cashUP = new float[10];
                        }

                        if (Variables.Pump[(int)i].creditUP == null)
                        {
                            Variables.Pump[(int)i].creditUP = new float[10];
                        }

                        if (Variables.Pump[(int)i].Stock_Code == null)
                        {
                            Variables.Pump[(int)i].Stock_Code = new string[10];
                        }


                        short j;
                        for (j = 1; j <= Variables.gPumps.get_PositionsCount(System.Convert.ToByte(i)); j++)
                        {
                            Variables.Pump[(int)i].cashUP[j] = Variables.gPumps.get_FuelPrice(System.Convert.ToByte(Variables.gPumps.get_Assignment(System.Convert.ToByte(i), (byte)j).GradeID), (byte)(Conversion.Val(tierId)), (byte)(Conversion.Val(levelId))).CashPrice;

                            Variables.Pump[(int)i].creditUP[j] = Variables.gPumps.get_FuelPrice(System.Convert.ToByte(Variables.gPumps.get_Assignment(System.Convert.ToByte(i), (byte)j).GradeID), (byte)(Conversion.Val(tierId)), (byte)(Conversion.Val(levelId))).CreditPrice;
                        }
                    }
                    else
                    {
                        //            lblinformation.Caption = "Please select pump and corresponding Tier/Level, then press 'SET TO PUMP' button to set!"  '24-1
                        //lblinformation.Text = Chaps_Main.Resource.DisplayCaption(System.Convert.ToInt16(lblinformation.Tag), System.Convert.ToInt16(this.Tag), null, (short)1); //24-1
                        result.PageCaption    = _resourceManager.CreateCaption(offSet, 24, 44, null, 1);
                        result.PumpTierLevels = GetPumpsTierLevel();
                        //MsgBox "No TCP connection to Host !!!", vbCritical
                        //MsgBoxStyle temp_VbStyle3 = (int)MsgBoxStyle.OkOnly + MsgBoxStyle.Critical;
                        //Chaps_Main.DisplayMessage(this, (short)92, temp_VbStyle3, null, (byte)0);
                        error.MessageStyle = new MessageStyle
                        {
                            Message     = _resourceManager.GetResString(offSet, 3892),
                            MessageType = MessageType.OkOnly
                        };
                        return(result);
                    }
                }
            }

            if (!pumpSelected) //if no pump is selected
            {
                //    MsgBox ("Please select Pump!") '23
                //Chaps_Main.DisplayMessage(this, (short)23, temp_VbStyle4, null, (byte)0);
                error = new ErrorMessage
                {
                    MessageStyle = _resourceManager.CreateMessage(offSet, 44, 23, null, CriticalOkMessageType)
                };
                //    lblinformation.Caption = "Please select pump and corresponding Tier/Level, then press 'SET TO PUMP' button to set!" '24-1
                //lblinformation.Text = Chaps_Main.Resource.DisplayCaption(System.Convert.ToInt16(lblinformation.Tag), System.Convert.ToInt16(this.Tag), null, (short)1); //24-1
                result.PageCaption    = _resourceManager.CreateCaption(offSet, 24, 44, null, 1);
                result.PumpTierLevels = GetPumpsTierLevel();
                return(result);
            }
            //    lblinformation.Caption = "Setting TierLevel is Done successfully !" 'Resource.DisplayCaption(lblinformation.Tag, Me.Tag, , 2) '24-2
            //lblinformation.Text = Chaps_Main.Resource.DisplayCaption(System.Convert.ToInt16(lblinformation.Tag), System.Convert.ToInt16(this.Tag), null, (short)2); //24-2
            result.PageCaption    = _resourceManager.CreateCaption(offSet, 24, 44, null, 2);
            result.PumpTierLevels = GetPumpsTierLevel();
            return(result);
        }
コード例 #19
0
        /// <summary>
        /// Method to close batch
        /// </summary>
        /// <param name="posId">Pos Id</param>
        /// <param name="tillNumber">Till number</param>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="registerNumber">Register number</param>
        /// <param name="error">Error message</param>
        /// <returns>List of report</returns>
        public List <Report> CloseBatch(byte posId, int tillNumber, int saleNumber, byte registerNumber, out ErrorMessage error)
        {
            var   reports = new List <Report>();
            short termNos = 0;

            string[,] Terminals = new string[3, 3];
            short    i               = 0;
            string   rFileName       = "";
            DateTime batchDate       = default(DateTime);
            bool     blnNoDebitTrans = false;
            var      emvProcess      = _policyManager.EMVVersion;
            var      offSet          = _policyManager.LoadStoreInfo().OffSet;
            var      sale            = _saleManager.GetCurrentSale(saleNumber, tillNumber, registerNumber, UserCode, out error);

            if (!string.IsNullOrEmpty(error?.MessageStyle?.Message))
            {
                return(null);
            }
            var rFileNumber = (short)(FileSystem.FreeFile());

            try
            {
                if (GetConnection())
                {
                    var terminals = _maintenanceService.GetTerminalIds(posId);
                    if (terminals == null)
                    {
                        WriteToLogFile("***PROBLEM WITH CLOSE BATCH*** " + " " + _resourceManager.GetResString(offSet, 1287)); // Shiny Mar6, 2008 -EKO
                                                                                                                               //MsgBoxStyle temp_VbStyle = (int)MsgBoxStyle.Critical + MsgBoxStyle.OkOnly;
                                                                                                                               //Chaps_Main.DisplayMessage(12, (short)87, temp_VbStyle, null, (byte)0);
                        error = new ErrorMessage
                        {
                            MessageStyle = _resourceManager.CreateMessage(offSet, 12, 87, null, CriticalOkMessageType)
                        };
                        return(null);
                    }
                    //ButtonsEnabled(false);
                    rFileName = Path.GetTempPath() + "BankEod_ " + PosId + ".txt";
                    FileSystem.FileOpen(rFileNumber, rFileName, OpenMode.Append);
                    termNos = 0;
                    foreach (Terminal terminal in terminals)
                    {
                        if (string.IsNullOrEmpty(terminal.TerminalType) || string.IsNullOrEmpty(terminal.TerminalId))
                        {
                            WriteToLogFile("***PROBLEM WITH CLOSE BATCH***" + " " + _resourceManager.GetResString(offSet, 1287)); // Shiny Mar6, 2008 -EKO
                                                                                                                                  //MsgBoxStyle temp_VbStyle2 = (int)MsgBoxStyle.Critical + MsgBoxStyle.OkOnly;
                                                                                                                                  //Chaps_Main.DisplayMessage(this, (short)87, temp_VbStyle2, null, (byte)0);
                            error = new ErrorMessage
                            {
                                MessageStyle = _resourceManager.CreateMessage(offSet, 12, 87, null, CriticalOkMessageType)
                            };
                            FileSystem.FileClose(rFileNumber);
                            return(null);
                        }

                        modTPS.cc = new Credit_Card();

                        WriteToLogFile("EMVprocess:" + Convert.ToString(emvProcess));
                        SendToTps(_cardManager.GetRequestString(ref modTPS.cc, sale, "EODTerminal", terminal.TerminalType, 0, terminal.TerminalId), ref modTPS.cc, emvProcess);
                        var eodTimer = DateAndTime.Timer;
                        while (Convert.ToInt32(DateAndTime.Timer - Convert.ToDouble(eodTimer)) < 120) // shiny changed this waiting to 2 minutes- 4 is too much 240)
                        {
                            if (modTPS.cc.Response.Length > 0)
                            {
                                break;
                            }
                        }

                        if (modTPS.cc.Response.ToUpper() == "APPROVED")
                        {
                            termNos++;
                            Terminals[termNos, 1] = modTPS.cc.TerminalID;
                            Terminals[termNos, 2] = modTPS.cc.Sequence_Number;
                            FileSystem.PrintLine(rFileNumber, modTPS.cc.Report);
                            batchDate = modTPS.cc.Trans_Date;
                            WriteToLogFile("SUCCESS WITH CLOSE BATCH"); // Shiny Mar6, 2008 -EKO

                            //  - added as part of Datawire Integeration (added by Mina)
                            //#:5:TPS does handshake after sending EOD for debit. If there weren’t any debit transactions between closes batches, POS has to send special indication that there weren’t any debit transactions. Having gotten that flag, TPS doesn’t do handshake.
                            if (Strings.UCase(Convert.ToString(_policyManager.BankSystem)) == "GLOBAL")
                            {
                                blnNoDebitTrans = modTPS.cc.Report.IndexOf("No Transactions", StringComparison.Ordinal) + 1 > 0;
                            }
                            _maintenanceService.SetCloseBatchNumber(modTPS.cc);
                        }
                        else // Behrooz Jan-09
                        {
                            if (modTPS.cc.Receipt_Display.Length > 0)
                            {
                                WriteToLogFile("***PROBLEM WITH CLOSE BATCH***" + " " + modTPS.cc.Receipt_Display); // Shiny Mar6, 2008 -EKO
                                                                                                                    //Chaps_Main.DisplayMsgForm(modTPS.cc.Receipt_Display, (short)100, null, (byte)0, (byte)0, "", "", "", "");
                                error = new ErrorMessage
                                {
                                    MessageStyle = new MessageStyle
                                    {
                                        Message     = modTPS.cc.Receipt_Display,
                                        MessageType = MessageType.OkOnly
                                    }
                                };
                                FileSystem.FileClose(rFileNumber);
                                return(null);
                            }
                            else
                            {
                                WriteToLogFile("***PROBLEM WITH CLOSE BATCH***" + " " + _resourceManager.GetResString(offSet, 1284)); // Shiny Mar6, 2008 -EKO
                                                                                                                                      //Chaps_Main.DisplayMsgForm((Convert.ToDouble(12)) * 100 + 84, (short)99, null, (byte)0, (byte)0, "", "", "", "");
                                error = new ErrorMessage
                                {
                                    MessageStyle = new MessageStyle
                                    {
                                        Message     = _resourceManager.GetResString(offSet, 1284),
                                        MessageType = MessageType.OkOnly
                                    }
                                };
                                FileSystem.FileClose(rFileNumber);
                                return(null);
                            }
                        }
                        modTPS.cc = null;
                        i++;
                    }
                }
                else
                {
                    WriteToLogFile("***PROBLEM WITH CLOSE BATCH***" + " " + _resourceManager.GetResString(offSet, 1296)); // Shiny Mar6, 2008 -EKO
                                                                                                                          //Chaps_Main.DisplayMsgForm((Convert.ToDouble(12)) * 100 + 96, (short)99, null, (byte)0, (byte)0, "", "", "", "");
                    error = new ErrorMessage
                    {
                        MessageStyle = new MessageStyle
                        {
                            Message     = _resourceManager.GetResString(offSet, 1296),
                            MessageType = MessageType.OkOnly
                        }
                    };
                    //return;
                }

                FileSystem.FileClose(rFileNumber);
                if (!string.IsNullOrEmpty(rFileName))
                {
                    var stream = File.OpenRead(rFileName);
                    FileSystem.FileClose(rFileNumber);
                    var bytes = new byte[stream.Length];
                    stream.Read(bytes, 0, Convert.ToInt32(stream.Length));
                    stream.Close();
                    var content = Convert.ToBase64String(bytes);
                    reports.Add(new Report
                    {
                        ReportName    = "BankEod.txt",
                        ReportContent = content,
                        Copies        = 1
                    });
                }
                if (termNos == i)
                {
                    if (GetConnection()) //Nancy
                    {
                        //  - Datawire Integration (Added by Mina)
                        //#5: TPS does handshake after sending EOD for debit. If there weren’t any debit transactions between closes batches, POS has to send special indication that there weren’t any debit transactions. Having gotten that flag, TPS doesn’t do handshake.
                        if (Strings.UCase(Convert.ToString(_policyManager.BankSystem)) == "GLOBAL")
                        {
                            if (blnNoDebitTrans) //Added by Mina
                            {
                                SendToTps(_cardManager.GetRequestString(ref modTPS.cc, sale, "CloseBatchInside", "NoDebit", 0, ""), ref modTPS.cc, emvProcess);
                            }
                            else
                            {
                                SendToTps(_cardManager.GetRequestString(ref modTPS.cc, sale, "CloseBatchInside", "Credit", 0, ""), ref modTPS.cc, emvProcess);
                            }
                        }
                        else
                        {
                            SendToTps(_cardManager.GetRequestString(ref modTPS.cc, sale, "CloseBatchInside", "Credit", 0, ""), ref modTPS.cc, emvProcess);
                        }
                    }
                    else
                    {
                        return(null); //Call DisplayMsgForm(Me.Tag * 100 + 96, 99)
                    }
                }
                if (termNos > 0)
                {
                    //modPrint.Dump_To_Printer(RFileName, (short)1, true, true, false);
                    //FileStream fs = new FileStream(RFileName, FileMode.Open, FileAccess.Read);
                    var date      = DateTime.Parse("12:00:00 AM");
                    var eodReport = _tillCloseManager.PrintEodDetails(tillNumber, ref date, ref date, Terminals[1, 1],
                                                                      Terminals[1, 2], Terminals[2, 1], Terminals[2, 2], false, batchDate);
                    reports.Add(eodReport);
                }
                return(reports);
            }
            finally
            {
                if (!string.IsNullOrEmpty(rFileName))
                {
                    FileSystem.Kill(rFileName);
                }
            }
        }
コード例 #20
0
        public HttpResponseMessage GetShifts(UserModel user)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,TillController,GetShifts,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}");
            ErrorMessage errorMessage;

            if (_loginManager.IsValidUser(user.UserName, user.Password, out errorMessage))
            {
                if (!string.IsNullOrEmpty(_loginManager.GetIpAddress((byte)user.PosId)))
                {
                    bool    shiftsUsedForDay;
                    decimal floatAmount;
                    var     shifts = _tillManager.GetShifts(user.UserName, user.TillNumber, user.PosId, out errorMessage,
                                                            out shiftsUsedForDay, out floatAmount);
                    if (errorMessage.StatusCode == HttpStatusCode.OK && errorMessage.TillNumber != 0)
                    {
                        _performancelog.Debug($"End,TillController,GetShifts,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

                        //if shift is forced
                        return(Request.CreateResponse(HttpStatusCode.OK,
                                                      new ActiveShiftResponseModel
                        {
                            Shifts = shifts,
                            ShiftsUsedForDay = shiftsUsedForDay,
                            CashFloat = floatAmount,
                            ForceShift = true
                        }));
                    }
                    //if we get all shifts
                    if (string.IsNullOrEmpty(errorMessage.MessageStyle.Message))
                    {
                        _performancelog.Debug($"End,TillController,GetShifts,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

                        return(Request.CreateResponse(HttpStatusCode.OK, new ActiveShiftResponseModel
                        {
                            Shifts = shifts,
                            ShiftsUsedForDay = shiftsUsedForDay,
                            CashFloat = floatAmount,
                            ForceShift = false
                        }));
                    }
                    //if there is next shift that can be defined
                    if (shifts != null && shifts.Count != 0)
                    {
                        _performancelog.Debug($"End,TillController,GetShifts,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

                        return(Request.CreateResponse(HttpStatusCode.OK, new ActiveShiftResponseModel
                        {
                            Shifts = shifts,
                            ShiftsUsedForDay = shiftsUsedForDay,
                            CashFloat = floatAmount,
                            ForceShift = false
                        }));
                    }
                    _performancelog.Debug($"End,TillController,GetShifts,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

                    //if there is any message
                    return(Request.CreateResponse(errorMessage.StatusCode,
                                                  new InvalidLoginReponseModel
                    {
                        Error = errorMessage.MessageStyle,
                        ShutDownPOS = errorMessage.ShutDownPos
                    }));
                }
                _performancelog.Debug($"End,TillController,GetShifts,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                var store  = CacheManager.GetStoreInfo();
                var offSet = store?.OffSet ?? 0;
                //invalid ip address
                return(Request.CreateResponse(HttpStatusCode.Unauthorized,
                                              new InvalidLoginReponseModel()
                {
                    Error = new MessageStyle
                    {
                        Message = _resourceManager.GetResString(8198, offSet),
                        MessageType = MessageType.OkCancel
                    },
                    ShutDownPOS = true
                }));
            }
            //invalid user
            return(Request.CreateResponse(errorMessage.StatusCode,
                                          new InvalidLoginReponseModel
            {
                Error = errorMessage.MessageStyle,
                ShutDownPOS = errorMessage.ShutDownPos
            }));
        }
コード例 #21
0
        /// <summary>
        /// Method to check whether valid profile time limit exists or not
        /// </summary>
        /// <param name="cardProfile">Card profile</param>
        /// <returns>True or false</returns>
        public bool ValidProfileTimeLimit(ref CardProfile cardProfile) // checking whether purchase is in a valid time period for the card
        {
            var sTime     = DateTime.Now;
            var sdate     = DateTime.Now;
            var dayOfWeek = (byte)DateAndTime.Weekday(sdate);
            //sTime = DateTime.Parse(Sdate.ToString("hh:mm:ss"));
            var timeLimit = _cardService.GetCardProfileTimeLimit(cardProfile.ProfileID, dayOfWeek);
            var offSet    = _policyManager.LoadStoreInfo().OffSet;

            if (timeLimit == null)
            {
                return(false);
            }
            if (timeLimit.AllowPurchase == false)
            {
                cardProfile.Reason = _resourceManager.GetResString(offSet, 466) + " " + DateAndTime.WeekdayName(dayOfWeek, FirstDayOfWeekValue: FirstDayOfWeek.Sunday); //" Purchase is not allowed  with this card on "
            }
            else
            {
                if (!timeLimit.TimeRestriction)
                {
                    return(true);
                }

                if (sTime.TimeOfDay >= timeLimit.StartTime.TimeOfDay &&
                    sTime.TimeOfDay <= timeLimit.EndTime.TimeOfDay)
                {
                    return(true);
                }
                //                    mvarreason = " Purchase is allowed  with this card on " & WeekdayName(DayOfWeek, , vbSunday) & " only between " & !starttime & " and " & !EndTime
                cardProfile.Reason = _resourceManager.GetResString(offSet, 467) + " "
                                     + DateAndTime.WeekdayName(dayOfWeek, FirstDayOfWeekValue: FirstDayOfWeek.Sunday)
                                     + " " + _resourceManager.GetResString(offSet, 468) + " "
                                     + timeLimit.StartTime.ToString("hh:mm tt") + " "
                                     + _resourceManager.GetResString(offSet, 469) + " "
                                     + timeLimit.EndTime.ToString("hh:mm tt");
            }

            return(false);
        }