private void HandleGetSettings(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Settings = settingsRepository.GetSettings(myApiDataViewModel.Options)
     });
 }
 private void HandleGetTablesWithOrders(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Tables = tablesRepository.GetTablesWithOrders()
     });
 }
 //receipt info to print
 private void HandleGetOrderReceipt(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Receipt = ordersRepository.GetCustomerReceiptFromOrderId(request.Header.OrderId, request.Header.ReceiptOptionId)
     });
 }
 private void HandleGetOrder(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Order = ordersRepository.GetOrder(request.Header.OrderId)
     });
 }
 private void HandleGetTableOrders(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Orders = ordersRepository.GetOrdersFromTable(request.Header.TableId)
     });
 }
 private void HandleGetTableOrders(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Orders = ordersRepository.GetOrdersFromTable(request.Header.TableId)
     });
     myApiDataViewModel.CurrentTable = request.Header.TableId;
 }
        private void HandleEFTPOSCommand(POSAPIMsg request)
        {
            var patRequest = JsonConvert.DeserializeObject <PATRequest>(request.Content);

            HandleRequest(request, () => new PATResponse {
                EFTPOSCommand = eftposRepository.CreateEFTPOSCommand(patRequest.EFTPOSCommand)
            });
        }
 private void HandleGetOrder(POSAPIMsg request)
 {
     HandleRequest(request, () => new PATResponse()
     {
         Order = ordersRepository.GetOrder(request.Header.OrderId)
     });
     //myApiDataViewModel.CurrentOrder = request.Header.OrderId;
     //myApiDataViewModel.UpdateOrderStatus();
 }
        private void btnSendSettings_Click(object sender, RoutedEventArgs e)
        {
            var resp = new POSAPIMsg()
            {
                Header = new POSAPIMsgHeader()
                {
                    RequestMethod = RequestMethod.Settings, RequestType = RequestType.GET
                }
            };

            HandleGetSettings(resp);
        }
        private void HandleCreateTender(POSAPIMsg request)
        {
            var patRequest = JsonConvert.DeserializeObject <PATRequest>(request.Content);

            if (patRequest == null || patRequest.Tender == null)
            {
                Log($"Invalid Request found in: {request.Header.RequestType} {request.Header.RequestMethod}", LogType.ERROR);
                return;
            }

            HandleRequest(request, () => new PATResponse {
                Tender = tendersRepository.CreateTender(patRequest.Tender)
            });
        }
        void HandleRequest(POSAPIMsg request, Func <PATResponse> func)
        {
            Log($"Processing {request.Header.RequestType} {request.Header.RequestMethod}");

            // Get content
            ResponseCode rc      = ResponseCode.Ok;
            string       content = null;

            try
            {
                PATResponse patResponse = func.Invoke();
                content = JsonConvert.SerializeObject(patResponse);
            }
            catch (InvalidRequestException ex)
            {
                Log(ex.Message, LogType.ERROR);
                rc = ResponseCode.BadRequest;
            }
            catch (ResourceNotFoundException ex)
            {
                Log(ex.Message, LogType.ERROR);
                rc = ResponseCode.NotFound;
            }
            catch (Exception ex)
            {
                Log(ex.Message, LogType.ERROR);
                rc = ResponseCode.ServerError;
            }

            // Build response
            POSAPIMsg resp = new POSAPIMsg()
            {
                Header = new POSAPIMsgHeader()
                {
                    RequestMethod = request.Header.RequestMethod,
                    RequestType   = request.Header.RequestType,
                    ResponseCode  = content != null ? ResponseCode.Ok : rc,
                    ContentLength = content?.Length ?? 0
                },
                Content = content
            };

            var respString = resp.ToString();

            Log(new LogData(respString, $"TX (Response): {respString}"));

            eft.TxnType            = "@";
            eft.CsdReservedString1 = respString;
            eft.CsdReservedMethod3();
        }
        private void HandleGetSettings(POSAPIMsg request)
        {
            var settings = settingsRepository.GetSettings(myApiDataViewModel.Options);

            if (rdEmptyPrintOptions.IsChecked.GetValueOrDefault())
            {
                settings.ReceiptOptions.Clear();
            }

            HandleRequest(request, () => new PATResponse()
            {
                Settings = settings
            });
        }
        private void HandleUpdateTender(POSAPIMsg request)
        {
            var patRequest = JsonConvert.DeserializeObject <PATRequest>(request.Content);

            if (patRequest == null || patRequest.Tender == null)
            {
                Log($"Invalid Request found in: {request.Header.RequestType} {request.Header.RequestMethod}", LogType.ERROR);
                return;
            }

            HandleRequest(request, () => new PATResponse {
                Tender = tendersRepository.UpdateTender(patRequest.Tender)
            });
            myApiDataViewModel.CurrentOrder = patRequest.Tender.OrderId;
            myApiDataViewModel.UpdateTableData();
        }
        private void HandleGetTables(POSAPIMsg request)
        {
            IEnumerable <Server.Models.Table> tables = new List <Server.Models.Table>();

            if (!chkEmptyTableList.IsChecked.GetValueOrDefault())
            {
                tables = tablesRepository.GetTables();
            }

            if (chk3TableList.IsChecked.GetValueOrDefault())
            {
                tables = tables.Take(3);
            }
            else if (chkLess6TableList.IsChecked.GetValueOrDefault())
            {
                tables = tables.Take(5);
            }

            HandleRequest(request, () => new PATResponse()
            {
                Tables = tables
            });
        }
        private void eft_CsdReserved3(object sender, EventArgs e)
        {
            if (eft.TxnType != "@")
            {
                return;
            }

            //cpk
            // The Pay @ Table extension is asking us for some data

            Log(new LogData(eft.DataField, $"RX (Received): {eft.DataField}"));

            // Unpack request
            var requ = new POSAPIMsg();

            requ.ParseFromString(eft.DataField);

            // Handle request
            switch (requ.Header.RequestMethod)
            {
            case RequestMethod.Settings:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetSettings(requ);
                }
                break;

            case RequestMethod.Tables:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetTables(requ);
                }
                break;

            case RequestMethod.TablesWithOrders:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetTablesWithOrders(requ);
                }
                break;

            case RequestMethod.TableOrders:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetTableOrders(requ);
                }
                break;


            case RequestMethod.Order:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetOrder(requ);
                }
                break;

            case RequestMethod.OrderReceipt:
                if (requ.Header.RequestType == RequestType.GET)
                {
                    HandleGetOrderReceipt(requ);
                }
                break;

            case RequestMethod.Tender:
                if (requ.Header.RequestType == RequestType.POST)
                {
                    HandleCreateTender(requ);
                }
                else if (requ.Header.RequestType == RequestType.PUT)
                {
                    HandleUpdateTender(requ);
                }
                break;

            //cpk to do yeah probably need do this prior Tender update

            case RequestMethod.EFTPOSCommand:
                if (requ.Header.RequestType == RequestType.POST)     //looks like there are 3 of them to handle
                {
                    HandleEFTPOSCommand(requ);
                }
                break;
            }
        }