Пример #1
0
 public async void ProcessQueuedBaskets()
 {
     log.Debug("PosManager: Process queued baskets.");
     while (true)
     {
         try
         {
             var basket = basketQueue.Dequeue();
             await OnBasketReceived(basket);
         }
         catch (InvalidOperationException ex)
         {
             log.DebugException("PosManager: Queue is empty.", ex);
             break;
         }
     }
 }
Пример #2
0
        private void ExecuteQuery(string connectionString,
                                  string queryString,
                                  Action <SqlDataReader> action,
                                  List <SqlParameter> parameters = null,
                                  bool isStoredProcedure         = false)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand sqlCommand = new SqlCommand(queryString, connection))
                {
                    if (isStoredProcedure)
                    {
                        sqlCommand.CommandType = CommandType.StoredProcedure;
                    }

                    if (parameters != null)
                    {
                        foreach (var param in parameters)
                        {
                            sqlCommand.Parameters.Add(param);
                        }
                    }
                    try
                    {
                        connection.Open();
                        using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
                        {
                            action(dataReader);
                            dataReader.Close();
                        }
                    }
                    catch (Exception ex)
                    {
                        log.DebugException(string.Format("DBAccess: {0}", ex.Message), ex);
                        throw ex;
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
        }
Пример #3
0
        private async Task <string> SendAsync(string data, CancellationToken token)
        {
            string result      = "";
            bool   pendingData = true;

            try
            {
                if (awaitaiblePeer?.RemoteTcpPeer != null)
                {
                    log.Debug("TpsService: RemoteTcpPeer is not null.Encode data as bytes.");
                    var bytes = Encoding.UTF8.GetBytes(data);
                    log.Debug("TpsService: Send the bytes to remoteTcpPeer.");
                    await awaitaiblePeer.RemoteTcpPeer.SendAsync(bytes, token);

                    log.Debug("TpsService: Get the response as frame by frame.");

                    do
                    {
                        var response = await awaitaiblePeer.ReadFrameAsync(token).ConfigureAwait(false);

                        log.Debug("TpsService: Encode the response as string.");
                        result += Encoding.UTF8.GetString(response);
                        var trimmedResult = result.TrimEnd('\r', '\n');
                        if (trimmedResult.EndsWith("END-DATA"))
                        {
                            pendingData = false;
                            result      = trimmedResult;
                        }
                    } while (pendingData);
                }
                else
                {
                    throw new Exception("TpsService: Problem while sending data: peer is null");
                }
            }
            catch (Exception ex)
            {
                log.DebugException("TpsService: Exception: ", ex);
                return("");
            }

            log.Debug("TpsService: Encoded result: {0}.", result);
            return(result);
        }
Пример #4
0
 public static void Debug(this IMvxLog logger, Exception exception, string message, params object[] args)
 {
     logger.DebugException(message, exception, args);
 }
Пример #5
0
        public FcsMessageDeserializationResult Deserialize(byte[] data)
        {
            log.Debug("FcsMessageSerializer: Deserializing Message..");
            FcsMessageDeserializationResult result = new FcsMessageDeserializationResult();
            int processedBytes = 0;

            using (MemoryStream memoryStream = new MemoryStream(data))
            {
                BinaryReader reader = new BinaryReader(memoryStream);

                try
                {
                    byte headerStart = reader.ReadByte();
                    processedBytes++;
                    if (headerStart != 0X01)
                    {
                        //Todo: handle error
                        log.Error("FcsMessageSerializer: Error in headerStart byte {0}", headerStart);
                    }
                    byte sequenceNumber = reader.ReadByte();
                    processedBytes++;
                    byte[] bytes = reader.ReadBytes(4);
                    processedBytes += 4;
                    bytes           = bytes.Reverse().ToArray();
                    int xmlLength = BitConverter.ToInt32(bytes, 0);
                    log.Debug("FcsMessageSerializer: Seq#: {0}, XmlLength: {1}", sequenceNumber, xmlLength);
                    bytes           = reader.ReadBytes(xmlLength);
                    processedBytes += xmlLength;
                    string xmlMessage = System.Text.Encoding.UTF8.GetString(bytes);
                    log.Debug("FcsMessageSerializer: Received xml message from Fcs: {0}", xmlMessage);

                    if (xmlLength != xmlMessage.Length)
                    {
                        //Todo: something wrong
                    }

                    byte messageEnd = reader.ReadByte();
                    processedBytes++;

                    if (messageEnd != 0x04)
                    {
                        //Todo: something wrong
                        log.Error("FcsMessageSerializer: Message end ({0} didn't match", messageEnd);
                    }

                    result.IsSuccessful = true;

                    XElement messageElement = XElement.Parse(xmlMessage);
                    XElement commandElement = messageElement.FirstNode as XElement;
                    if (messageElement.Name == "FCSCommand")
                    {
                        log.Debug("FcsMessageSerializer: Message element name:FcsCommand.");
                        if (commandElement.Name == "Basket")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:Basket.");
                            FcsCommand <BasketRequest> fcsCommand = new FcsCommand <BasketRequest>();
                            fcsCommand.XmlCommand = commandElement;
                            result.MessageType    = FcsMessageType.BasketCommand;
                            result.FcsMessage     = fcsCommand;
                        }
                        else if (commandElement.Name == "Configuration")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: Configuration");
                            FcsCommand <ConfigurationRequest> fcsCommand = new FcsCommand <ConfigurationRequest>();

                            //Todo: We need to remove this after FCS is fixed
                            ReplaceDescendantAttributeName(commandElement, "Grade", "Type", "type");

                            fcsCommand.XmlCommand = commandElement;
                            result.MessageType    = FcsMessageType.ConfigurationCommand;
                            result.FcsMessage     = fcsCommand;
                        }
                    }
                    else if (messageElement.Name == "FCSResponse")
                    {
                        log.Debug("FcsMessageSerializer: Message element name:FcsResponse.");
                        if (commandElement.Name == "SignOnResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:SignOnResp.");
                            FcsResponse <SignOnResponse> fcsResponse = new FcsResponse <SignOnResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.SignOnResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "SignOnTPOSResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:SignOnTPOSResp.");
                            FcsResponse <SignOnTPosResponse> fcsResponse = new FcsResponse <SignOnTPosResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.SignOnTPosResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "SignOffTPOSResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:SignOffTPOSResp.");
                            FcsResponse <SignOffTPosResponse> fcsResponse = new FcsResponse <SignOffTPosResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.SignOffTPosResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "PrepayResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:PrepayResp.");
                            FcsResponse <PrepayResponse> fcsResponse = new FcsResponse <PrepayResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.PrepayResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "BasketResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:BasketResp.");
                            FcsResponse <BasketResponse> fcsResponse = new FcsResponse <BasketResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.BasketResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "SetPumpResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: SetPumpResp");
                            FcsResponse <SetPumpResponse> fcsResponse = new FcsResponse <SetPumpResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.SetPumpResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "SetPriceResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: SetPriceResp");
                            FcsResponse <SetPriceResponse> fcsResponse = new FcsResponse <SetPriceResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.SetPriceResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "GetReportResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: GetReportResp");
                            FcsResponse <GetReportResponse> fcsResponse = new FcsResponse <GetReportResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.GetReportResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "GetReceiptResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: GetReceiptResp");
                            FcsResponse <GetReceiptResponse> fcsResponse = new FcsResponse <GetReceiptResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.GetReceiptResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                        else if (commandElement.Name == "GetReceiptDataResp")
                        {
                            log.Debug("FcsMessageSerializer: Command element name: GetReceiptDataResp");
                            FcsResponse <GetReceiptDataResponse> fcsResponse = new FcsResponse <GetReceiptDataResponse>();
                            fcsResponse.XmlCommand = commandElement;
                            result.MessageType     = FcsMessageType.GetReceiptDataResponse;
                            result.FcsMessage      = fcsResponse;
                        }
                    }
                    else if (messageElement.Name == "FCSEvent")
                    {
                        log.Debug("FcsMessageSerializer: Message element name:FcsEvent.");
                        if (commandElement.Name == "Status")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:Status.");
                            FcsEvent <FcsStatus> fcsEvent = new FcsEvent <FcsStatus>();
                            fcsEvent.XmlCommand = commandElement;
                            result.MessageType  = FcsMessageType.EventStatus;
                            result.FcsMessage   = fcsEvent;
                        }
                        else if (commandElement.Name == "PriceChanged")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:PriceChanged.");
                            FcsEvent <PriceChangedEvent> fcsEvent = new FcsEvent <PriceChangedEvent>();
                            fcsEvent.XmlCommand = commandElement;
                            result.MessageType  = FcsMessageType.EventPriceChanged;
                            result.FcsMessage   = fcsEvent;
                        }
                        else if (commandElement.Name == "Prepay")
                        {
                            log.Debug("FcsMessageSerializer: Command element name:Prepay.");
                            FcsEvent <PrepayEvent> fcsEvent = new FcsEvent <PrepayEvent>();
                            fcsEvent.XmlCommand = commandElement;
                            result.MessageType  = FcsMessageType.EventPrepay;
                            result.FcsMessage   = fcsEvent;
                        }
                    }
                }
                catch (EndOfStreamException eos)
                {
                    log.DebugException("FcsMessageSerializer: exception{0}.", eos);
                    processedBytes      = 0;
                    result.IsSuccessful = false;
                }
                catch (XmlException xmlException)
                {
                    log.DebugException("FcsMessageSerializer: exception{0}.", xmlException);
                    processedBytes      = 0;
                    result.IsSuccessful = false;
                }
            }

            result.ByteProcessed = processedBytes;
            log.Debug("FcsMessageSerializer: Return DeSerialized data.");
            return(result);
        }
Пример #6
0
        public override async void ViewAppeared()
        {
            log.Debug("CardRefundViewModel: View is appeared.");
            base.ViewAppeared();

            try
            {
                SubscribeAllEvents();
                IsTpsConnected = App.IsTpsConnected;
                IsFcsConnected = App.IsFcsConnected;

                if (!IsTpsConnected)
                {
                    log.Debug("CardRefundViewModel: TPS is not connected.Go to tender selection page.");
                    await NavigateToTenderSelection();
                }
                else
                {
                    log.Debug("CardRefundViewModel: TPS is connected.Process sale for refund.");
                    double refundAmount = posManager.ActiveSale.GetAvailableRefund();
                    posManager.ActiveSale.TotalPaid = posManager.ActiveSale.Amount;
                    posManager.ActiveSale.Change    = refundAmount;
                    log.Debug("CardRefundViewModel: RefundAmount: {0}, TotalPaid: {1}, Change: {2}", refundAmount, posManager.ActiveSale.TotalPaid, posManager.ActiveSale.Change);

                    CancellationTokenSource tokenSource = new CancellationTokenSource(appSettings.DelayForTPSResponse);
                    CancellationToken       token       = tokenSource.Token;
                    log.Debug("CardRefundViewModel: Request for refund.");
                    var response = await tpsService.RefundRequestAsync("Credit",
                                                                       this.pumpId,
                                                                       posManager.ActiveSale.InvoiceNo,
                                                                       refundAmount,
                                                                       token);

                    if (response != null && response.RequestApproved)
                    {
                        log.Debug("CardRefundViewModel: RefundRequest response is not null and refund is approved.");
                        posManager.ActiveSale.RefundStatus = Enums.RefundApprovalStatus.RefundApproved;
                    }
                    else if (response == null)
                    {
                        log.Debug("CardRefundViewModel: Task is canceled.");
                        await this.navigationService.Close(this);
                    }
                    else
                    {
                        log.Debug("CardRefundViewModel: Refund is not approved.");
                        posManager.ActiveSale.RefundStatus = Enums.RefundApprovalStatus.RefundNotApproved;
                    }

                    if (response != null)
                    {
                        log.Debug("CardRefundViewModel: RefundRequest response is not null.Generate and print receipt.");
                        posManager.ActiveSale.RefundResponse = response;
                        posManager.ActiveSale.Receipt        = response.Receipt;
                        GenerateReceipt();
                        await NavigateToPrintReceipt();
                    }
                }
            }
            catch (Exception ex)
            {
                log.DebugException(string.Format("CardRefundViewModel: Exception:{0} ", ex.Message), ex);
            }
        }