public void DoClose()
 {
     if (Program.m_eftposType == "nitro")
     {
         if (m_nitro != null)
         {
             m_nitro.Disconnect();
         }
         m_nitro = null;
     }
     else if (Program.m_eftposType == "verifone")
     {
         m_valut.CloseSession();
     }
 }
 public EFTPOS()
 {
     if (!Program.m_bEnableEftpos)
     {
         return;
     }
     InitializeComponent();
     try
     {
         if (Program.m_eftposType == "ingenico")
         {
             m_ee = new EFTPOS_INGENICO();
         }
         else if (Program.m_eftposType == "smartpay")
         {
             m_es            = new EFTPOS_SMARTPAY();
             m_bEnableCancel = true;
         }
         //				else if (Program.m_eftposType == "dps")
         //					m_dps = new FDps();
         else if (Program.m_eftposType == "verifone")
         {
             m_valut = new CVault();
             m_valut.OpenSession();
         }
         else if (Program.m_eftposType == "nitro")
         {
             m_nitro = new CNitro();
         }
         else if (Program.m_eftposType == "vxlink")
         {
             m_evx = new EFTPOS_VXLINK();
         }
         else if (Program.m_eftposType == "vllink")
         {
             m_evl = new EFTPOS_VLLINK();
         }
     }
     catch (Exception e)
     {
         MessageBox.Show("EFTPOS Error\r\n" + e.ToString());
         return;
     }
     printDoc.PrinterSettings.PrinterName = Program.m_sPrinterName;
     printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
 }
 public void ShowNitroCP()
 {
     if (Program.m_eftposType != "nitro")
     {
         return;
     }
     if (m_nitro == null)
     {
         m_nitro = new CNitro();
     }
     if (!m_nitro.Connect())
     {
         return;
     }
     m_nitro.DisplayControlPanel();
     Thread.Sleep(5000);
     m_nitro.Disconnect();
     m_nitro = null;
 }
        private void eftpos_Load(object sender, EventArgs e)
        {
            m_left = this.Left;

            if (Program.m_eftposType == "ingenico")
            {
                if (m_sRefNum.Length > 3)
                {
                    m_sRefNum = m_sRefNum.Substring(m_sRefNum.Length - 3, 3);
                }
                else
                {
                    m_sRefNum = Program.MyIntParse(Program.m_sStationID).ToString("D3");
                }
            }
            else
            {
                if (Program.m_eftposType != "dps" || Program.m_eftposType != "dps_hit")
                {
                    m_sRefNum = Program.MyIntParse(Program.m_sStationID).ToString("D3");
                }
            }
            if (Program.m_eftposType == "nitro")
            {
                this.Left = -16348;
                //				this.ShowInTaskbar = false;
                //				timer3.Start(); //hide main window
                if (m_nitro == null)
                {
                    m_nitro = new CNitro();
                }
                m_sReceipt = "";
            }
            if (m_bEnableCancel)
            {
                btnCancel.Visible = true;
            }
            else
            {
                btnCancel.Visible = false;
            }
            if (!m_bAdmin)
            {
                if (Program.m_eftposType == "ingenico")
                {
                    if (Program.m_sEftposCom == "0" || Program.m_sEftposCom == "" || Program.m_sEftposCom == null)
                    {
                        FormMSG fm = new FormMSG();
                        //						fm.btnNo.Visible = false;
                        //						fm.btnYes.Visible = false;
                        fm.m_sMsg = "Please check Port!";
                        fm.ShowDialog();
                        return;
                    }
                    m_ee.Purchase(m_dAmount, m_dCashOut, m_sRefNum);
                }
                else if (Program.m_eftposType == "smartpay")
                {
                    if (m_dAmount < 0)
                    {
                        m_es.Refund(0 - m_dAmount, m_sRefNum);
                    }
                    else
                    {
                        m_es.Purchase(m_dAmount, m_dCashOut, m_sRefNum);
                    }
                    txtResposneEftpos.Text = "SWIPE CARD";
                }
                else if (Program.m_eftposType == "vxlink")
                {
                    if (Program.MyCheckPrinter(Program.m_sPrinterName))
                    {
                        timer1.Stop();
                        MyMessageBox fm = new MyMessageBox();
                        fm.m_title = "Printer Error";
                        fm.m_msg   = "Printer Error, please check printer first before using EFTPOS";
                        fm.ShowDialog();
                        this.Close();
                        return;
                    }
                    m_evx.ConfigurePrinting();
                    m_evx.Purchase(m_dAmount, m_dCashOut, m_sRefNum);
                }
                else if (Program.m_eftposType == "vllink")
                {
                    m_evl.Purchase(m_dAmount, m_dCashOut, m_sRefNum);
                }
                else if (Program.m_eftposType == "dps")
                {
                    m_dps             = new FDps();
                    this.Left         = -16348;
                    m_dps.m_dPurchase = m_dAmount;
                    m_dps.m_dCashOut  = m_dCashOut;
                    m_dps.m_sRef      = m_sRefNum;
                    m_dps.ShowDialog();
                    if (m_dps.m_bAuthorized)
                    {
                        sResponseTxt = "ACCEPTED";
                        m_bAccepted  = true;
                        m_sReceipt   = m_dps.m_sReceipt;
                    }
                    this.Close();
                    return;
                }
                else if (Program.m_eftposType == "dps_hit")
                {
                    FormDPSHIT fm = new FormDPSHIT();
                    this.Left     = -16348;
                    fm.m_dAmount  = m_dAmount;
                    fm.m_dCashOut = m_dCashOut;
                    fm.m_sRef     = m_sRefNum;
                    fm.ShowDialog();
                    if (fm.m_bAuthorized)
                    {
                        sResponseTxt = "ACCEPTED";
                        m_bAccepted  = true;
                        m_sReceipt   = fm.m_sReceipt;
                    }
                    this.Close();
                    return;
                }
                else if (Program.m_eftposType == "verifone")
                {
                    this.Left = -16348;
                    string sRet = m_valut.Purchase(m_dAmount, m_dCashOut, m_dChequeAmount, m_sRefNum);
                    if (sRet == "ACCEPTED")
                    {
                        sResponseTxt = "ACCEPTED";
                        m_bAccepted  = true;
                        m_sReceipt   = m_valut.GetReceiptText();
                    }
                    else
                    {
                        sResponseTxt = "DECLINED";
                        m_bAccepted  = false;
                        m_sReceipt   = m_valut.GetReceiptText();
                    }
                    this.Close();
                    return;
                }
                else if (Program.m_eftposType == "nitro")
                {
                    Program.g_log.Info("nitro start, amount=" + m_dAmount.ToString("c"));
                    if (!m_nitro.Connect())
                    {
                        this.Left = m_left;
                        this.Close();
                        return;
                    }
                    if (m_dAmount > 0)
                    {
                        if (!m_nitro.Purchase(m_dAmount, m_dCashOut, m_dChequeAmount, m_sRefNum))
                        {
                            this.Close();
                            return;
                        }
                    }
                    else
                    {
                        if (!m_nitro.Refund(0 - m_dAmount, m_sRefNum))
                        {
                            this.Close();
                            return;
                        }
                    }
                }
                m_nCount        = 0;
                timer1.Interval = 500;
                timer1.Start();
                btnok.Visible = false;
            }
            if (m_bAdmin)
            {
                btnInt.Visible    = true;
                btnSettle.Visible = true;
            }
        }
        private void AnalyzeResponseNitro(string sResponse)
        {
            Program.g_log.Info("Eftpos AnalyzeResponseNitro\r\nbPrint=" + m_nitro.m_bPrint.ToString() + "\r\nReceipt=" + m_nitro.m_sReceipt + "\r\nReceiptCust=" + m_nitro.m_sReceiptCust + " \r\nResponse=" + sResponse);
            //handle client printing
            if (m_nitro.m_sReceiptCust != "")
            {
                m_sReceiptCust = m_nitro.m_sReceiptCust;
            }
            if (m_nitro.m_bPrint && m_nitro.m_sReceipt != "")
            {
                m_nitro.m_bPrint = false;
                m_sReceipt       = m_nitro.m_sReceipt;
                m_sPrintBuffer   = m_sReceipt;
                Program.g_log.Info("Nitro Print, text = " + m_sPrintBuffer);
                try
                {
                    printDoc.Print();
                }
                catch (Exception e)
                {
                    MessageBox.Show("Printer error, print receipt failed." + e.ToString());
                }
            }

            if (m_nitro.m_bError)
            {
                this.Left = m_left;
                txtResposneEftpos.Text   = m_nitro.m_sResponseText1;
                txtResponseEftLine2.Text = m_nitro.m_sResponseText2;
                btnok.Visible            = true;
                timer1.Stop();
                m_nitro.Disconnect();
                m_sReceipt = m_nitro.m_sReceipt;
                m_nitro    = null;
                return;
            }
            sResponse = sResponse.ToUpper();
            //			Program.g_log.Info("Nitro analyze, rest = " + sResponse);
            if (sResponse.IndexOf("ACCEPTED") >= 0)
            {
                this.Left              = m_left;
                sResponseTxt           = "ACCEPTED";
                txtResposneEftpos.Text = "ACCEPTED";
                m_bAccepted            = true;
                timer1.Stop();
                btnok.Visible = true;
                m_sReceipt    = m_nitro.m_sReceipt;
                m_nitro.Disconnect();
                m_nitro = null;
                return;
            }
            else if (sResponse.IndexOf("DECLINE") >= 0)
            {
                this.Left                = m_left;
                sResponseTxt             = "DECLINED";
                txtResposneEftpos.Text   = m_nitro.m_sResponseText1;
                txtResponseEftLine2.Text = m_nitro.m_sResponseText2;
                m_bAccepted              = false;
                timer1.Stop();
                btnok.Visible = true;
                m_sReceipt    = m_nitro.m_sReceipt;
                m_nitro.Disconnect();
                m_nitro = null;
                return;
            }
            else
            {
                txtResposneEftpos.Text   = m_nitro.m_sResponseText1;
                txtResponseEftLine2.Text = m_nitro.m_sResponseText2;
                m_sReceipt = m_nitro.m_sReceipt;
                //				if(sResponse != "")
                //					this.Left = m_left;
                return;
            }
            if (sResponse.IndexOf("CANCEL") >= 0)
            {
                this.Left = m_left;
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            m_nCount++;
            //Program.g_log.Info("Eftpose response, nCount = " + m_nCount.ToString());
            string sRet = "";

            if (Program.m_eftposType == "ingenico")
            {
                sRet = m_ee.CheckResponse();
            }
            else if (Program.m_eftposType == "vxlink")
            {
                sRet = m_evx.CheckResponse();
            }
            else if (Program.m_eftposType == "vllink")
            {
                sRet = m_evl.CheckResponse();
            }
            else if (Program.m_eftposType == "smartpay")
            {
                sRet = m_es.CheckResponse();
            }
            else if (Program.m_eftposType == "nitro")
            {
                if (m_nitro.m_bSocketFailed)
                {
                    timer1.Stop();
                    Program.MsgBox("PINpad Offline\r\nCheck PINPad and Cable\r\nat POS\r\n");
                    txtResposneEftpos.Text   = "terminal error";
                    txtResponseEftLine2.Text = "";
                    m_nCount      = 0;
                    btnok.Visible = true;
                    this.Left     = m_left;
                    //					m_nitro.Disconnect();
                    m_nitro = null;
                    return;
                }
                sRet = m_nitro.CheckResponse();
            }
            if (sRet == "")            // || Program.m_eftposType == "nitro")
            {
                int nTimeoutCount = 560;
                if (Program.m_eftposType == "vxlink")
                {
                    nTimeoutCount = 10000;                     //vxlink doesn't like timeout
                }
                if (m_nCount > nTimeoutCount)
                {
                    txtResposneEftpos.Text = "terminal timed out";
                    m_nCount      = 0;
                    btnok.Visible = true;
                    timer1.Stop();
                    //Program.g_log.Info("Eftpose timer1 stopped, (timed out)");
                    this.Left = m_left;
                    if (Program.m_eftposType == "nitro")
                    {
                        m_nitro.Disconnect();
                        m_nitro = null;
                        return;
                    }
                }
                if (Program.m_eftposType != "nitro")
                {
                    return;
                }
            }
            //Program.g_log.Info("Eftpose response, text = " + sRet);
            if (Program.m_eftposType == "ingenico")
            {
                if (m_bAccepted)
                {
                    timer1.Stop();
                    return;
                }
                AnalyzeResponseIngenico(sRet);
            }
            else if (Program.m_eftposType == "vxlink" || Program.m_eftposType == "vllink")
            {
                AnalyzeResponseVxlink(sRet);
            }
            else if (Program.m_eftposType == "smartpay")
            {
                AnalyzeResponseSmartPay(sRet);
            }
            else if (Program.m_eftposType == "nitro")
            {
                AnalyzeResponseNitro(sRet);
            }
        }