private static void dumpClaimResponseToDebug(
            HicapsConnectControl.HicapsConnectControl.ClaimResponse response)
        {
            Debug.WriteLine(Environment.NewLine + "Claim Response:");
            string textString = "";

            textString += "ResponseCode = " + (response.ResponseCode.NullTrim()) + Environment.NewLine;
            textString += "ResponseText = " + (response.ResponseText.NullTrim()) + Environment.NewLine;
            textString += "ExpiryDate = " + (response.ExpiryDate.NullTrim()) + Environment.NewLine;
            textString += "PrimaryAccountNumber = " + (response.PrimaryAccountNumber.NullTrim()) + Environment.NewLine;
            textString += "ProviderName = " + (response.ProviderName.NullTrim()) + Environment.NewLine;
            textString += "RrnNumber = " + (response.RrnNumber.NullTrim()) + Environment.NewLine;
            textString += "Merchant Id = " + (response.MerchantId.NullTrim()) + Environment.NewLine;
            textString += "Terminal Id = " + (response.TerminalId.NullTrim()) + Environment.NewLine;
            textString += "TransactionAmount = " + (response.TransactionAmount).ToCurrency() + Environment.NewLine;
            textString += "BenefitAmount = " + (response.BenefitAmount).ToCurrency() + Environment.NewLine;
            foreach (var ClaimDetailsLine in response.ClaimDetails)
            {
                textString += "ClaimDetailsLine = " + ClaimDetailsLine + Environment.NewLine;
            }
            foreach (var PatientNameDetailsLine in response.PatientNameDetails)
            {
                textString += "PatientNameDetailsLine = " + PatientNameDetailsLine + Environment.NewLine;
            }
            textString += "PatientNameDetailsStr = " + response.PatientNameDetailsStr.Aggregate("", (a, s) => a + s + ", ") + Environment.NewLine;
            textString += "Transaction Date = " + response.TransactionDate + Environment.NewLine;
            textString += "Response Time = " + response.ResponseTime + Environment.NewLine;
            textString += "Response Time = " + response.ResponseTime + Environment.NewLine;
            textString += "ServerURL = " + response.ServerUrl + Environment.NewLine;
            textString += "ClientVersion = " + response.ClientVersion + Environment.NewLine;
            textString += "ServerVersion = " + response.ServerVersion + Environment.NewLine;
            textString += "Membership Id = " + response.MembershipId + Environment.NewLine;

            Debug.Write(textString);
        }
Exemple #2
0
        private IEnumerable <object> getHubDetails()
        {
            List <object> l = new List <object>();

            switch (receiptType)
            {
            case ReceiptType.Claim:
            case ReceiptType.Quote:
                // QuoteResponse is a subclass of ClaimResponse so we can do this.
                HicapsConnectControl.HicapsConnectControl.ClaimResponse c = claim;
                if (receiptType == ReceiptType.Quote)
                {
                    c = quote;
                }
                l.Add(new
                {
                    MerchantNumber        = c.MerchantId,
                    Cardnumber            = c.PrimaryAccountNumber,
                    Membership            = c.MembershipId,
                    Authnumber            = c.RrnNumber,
                    CreateDatetime        = c.ResponseTime,
                    TerminalNumber        = c.TerminalId,
                    HicapsCodeDescription = c.ResponseCode + " - " + c.ResponseText,

                    // not in original RDLC file
                    Fund = getFundShortName(c.PrimaryAccountNumber)
                });
                break;

            case ReceiptType.Cancel:
                l.Add(new
                {
                    MerchantNumber        = cancel.MerchantId,
                    Cardnumber            = cancel.PrimaryAccountNumber,
                    Membership            = cancel.MembershipId,
                    Authnumber            = cancel.RrnNumber,
                    CreateDatetime        = cancel.ResponseTime,
                    TerminalNumber        = cancel.TerminalId,
                    HicapsCodeDescription = cancel.ResponseCode + " - " + cancel.ResponseText,

                    // not in original RDLC file
                    Fund = getFundShortName(cancel.PrimaryAccountNumber)
                });
                break;

            default:
                break;
            }

            return(l);
        }
        private static HicapsConnectControl.HicapsConnectControl.ClaimResponse CreateInitialLatestResponseForTesting()
        {
            HicapsConnectControl.HicapsConnectControl.ClaimResponse response
                = new HicapsConnectControl.HicapsConnectControl.ClaimResponse
                {
                ResponseCode         = "00",
                ResponseText         = "APPROVED",
                ExpiryDate           = "5012",
                PrimaryAccountNumber = "9036999801234567891",
                ProviderName         = "DANIEL CHU",
                ProviderNumberId     = "2288249B",
                RrnNumber            = "000001006600",
                MerchantId           = "33123433",
                TerminalId           = "SE101A",
                TransactionAmount    = 260,
                BenefitAmount        = 115,
                TransactionDate      = DateTime.Now,
                ResponseTime         = DateTime.Now,
                ServerUrl            = "10.1.2.6:11000:SE101A:COM1",
                ClientVersion        = "1.0.3.26",
                ServerVersion        = "1.0.3.26",
                MembershipId         = "12345678"
                };
            List <string> claimDetails = new List <string>();

            claimDetails.Add("01002200240701000000250003");
            claimDetails.Add("02053100240701000000500000");
            claimDetails.Add("02053100240701000000500000");
            List <string> nameDetails = new List <string>();

            nameDetails.Add("01Peter Pig");
            nameDetails.Add("02Pearl Pig");
            nameDetails.Add("03Paddy Pig");
            nameDetails.Add("04Patsy Pig");

            response.PatientNameDetails    = nameDetails;
            response.PatientNameDetailsStr = nameDetails.ToArray();
            response.ClaimDetails          = claimDetails;
            return(response);
        }
        private void SendButton_Click(object sender, RoutedEventArgs e)
        {
            SendButton.IsEnabled = false;
            HicapsConnectControl.HicapsConnectControl.ClaimPharmRequest request;
            //HicapsConnectControl.HicapsConnectControl.AllItemListRequest itemRequest;

            main.hicaps.DisplayStatusWindow(true);

            if (QuoteMode)
            {
                // fields of a QuoteRequest are filled identically to those of a ClaimRequest.
                request = new HicapsConnectControl.HicapsConnectControl.QuotePharmRequest();
            }
            else
            {
                request = new HicapsConnectControl.HicapsConnectControl.ClaimPharmRequest();
            }

            // set provider
            request.ProviderNumberId = Utils.getProviderNumberId(ProviderCombo.Text);
            if (request.ProviderNumberId == null || request.ProviderNumberId == "00000000")
            {
                // inform user that a correct provider is needed
                MessageBox.Show("The selected provider is not valid. Please select another one.");
                SendButton.IsEnabled = true;
                return;
            }

            // add item details
            if (claimItems.Count < 1)
            {
                MessageBox.Show("There must be at least one claim item");
                SendButton.IsEnabled = true;
                return;
            }

            int i = 0;

            foreach (ItemRow row in claimItems)
            {
                string rowNumber = "Row " + i + 1 + ": ";
                if (row.Dos == null)
                {
                    MessageBox.Show(rowNumber + "Please select a date of service");
                    ClaimDetails.SelectedIndex = i;
                    SendButton.IsEnabled       = true;
                    return;
                }
                try
                {
                    if (row.ItemNumber.Length < 3)
                    {
                        MessageBox.Show(rowNumber + "Item Number must be 3 or greater characters");
                        ClaimDetails.SelectedIndex = i;
                        SendButton.IsEnabled       = true;
                        return;
                    }
                    //else if (!row.ItemNumber.OnlyNumbers())
                    //{
                    //    MessageBox.Show(rowNumber + "Item Number must consist of digits");
                    //    ClaimDetails.SelectedIndex = i;
                    //    return;
                    //}



                    //GJ:Commented the old way to add the line as for the compound indicator should use the Compound column of each row instead of the UseAlternateBodyPart checkbox
                    //request.addClaimPharmLine(row.PatientId, row.ItemNumber, row.ScriptNumber, UseAlternateBodyPart.IsChecked != null && UseAlternateBodyPart.IsChecked.Value,
                    //    row.Dos ?? DateTime.MinValue,
                    //    row.ItemFee.ParseCurrency() ?? 0);

                    request.addClaimPharmLine(row.PatientId, row.ItemNumber, row.ScriptNumber, row.Compound == "Compound",
                                              row.Dos ?? DateTime.MinValue,
                                              row.ItemFee.ParseCurrency() ?? 0);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    SendButton.IsEnabled = true;
                    return;
                }
                i++;
            }

            request.ServerUrl              = main.currentTerminal;
            request.PmsKey                 = Utils.PMSKey;
            request.SoftwareVendorName     = Utils.VendorName;
            request.PrintReceiptOnTerminal = Properties.Settings.Default.PrintClaimReceipt;


            // send request
            HicapsConnectControl.HicapsConnectControl.ClaimPharmResponse response;
            if (QuoteMode)
            {
                // converts the request to a QuoteRequest and the response to a ClaimResponse
                // while calling sendQuoteRequest
                main.SyncStatus("Sending Quote Request...");
                response = main.hicaps.sendQuotePharmRequest((HicapsConnectControl.HicapsConnectControl.QuotePharmRequest)request);
            }
            else
            {
                main.SyncStatus("Sending Claim Request...");
                response = main.hicaps.sendClaimPharmRequest(request);
            }
            main.ResetStatus();
            if (response != null)
            {
                if (response.GetType() == typeof(HicapsConnectControl.HicapsConnectControl.ClaimPharmResponse))
                {
                    main.claimLog.LogClaim(response);
                }

                if (response.GetType() == typeof(HicapsConnectControl.HicapsConnectControl.QuotePharmResponse))
                {
                    main.claimLog.LogQuote((HicapsConnectControl.HicapsConnectControl.QuotePharmResponse)response);
                }

                main.cancel.UpdateTransactions();
                _latestResponse = response;
            }
            dumpClaimResponseToDebug(response);

            if (response.ResponseCode != "00")
            {
                new ResponseError(response.ResponseCode, response.ResponseText).ShowDialog();
            }
            else
            {
                // i.e. successful claim
                clearEntryFields(true);
                claimItems.Clear();
                ClaimDetails.Items.Refresh();
            }

            ////Display wait window
            //wait.Visibility = Visibility.Visible;
            //ForceUIToUpdate();


            // print provider receipt if needed
            if (!QuoteMode && Settings.Default.PrintProviderClaimReceiptLocal)
            {
                //Display wait window
                wait.Visibility = Visibility.Visible;
                ForceUIToUpdate();
                var rec = new PharmaceuticalReceipt(response, ReceiptFor.Provider);
                //Close wait window
                wait.Visibility = Visibility.Collapsed;
                rec.printReport(true);
            }


            // print customer receipt if needed
            bool shouldPrint = false;
            PharmaceuticalReceipt r;

            if (QuoteMode)
            {
                shouldPrint = Settings.Default.PrintQuoteReceiptLocal;
                var quoteResponse = (HicapsConnectControl.HicapsConnectControl.QuotePharmResponse)response;
                r = new PharmaceuticalReceipt(quoteResponse);
            }
            else
            {
                shouldPrint = Settings.Default.PrintCustomerClaimReceiptLocal;
                r           = new PharmaceuticalReceipt(response, ReceiptFor.Customer);
            }
            if (shouldPrint)
            {
                r.printReport(false);
            }



            if (response.ResponseCode == "00")
            {
                // process claim-to-sale
                // todo: is gap really calculated this way?
                decimal gap = response.TransactionAmount - response.BenefitAmount;
                if (gap > 0 && !QuoteMode)
                {
                    if (main.setup.ClaimToSale && main.setup.ClaimToSalePopup)
                    {
                        ClaimToSalePopup popup = new ClaimToSalePopup(gap);
                        popup.Show();
                    }
                    else if (main.setup.ClaimToSale && !main.setup.ClaimToSalePopup)
                    {
                        main.eftpos.doClaimToSale();
                    }
                    else
                    {
                        // ClaimToSale is not checked. Do nothing
                    }
                }
            }
            main.hicaps.DisplayStatusWindow(false);
            SendButton.IsEnabled = true;
        }