From e9104fb87389dfc147fbc5763cd6bfc5acf29341 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Fri, 19 Feb 2016 16:41:30 +0700
Subject: [PATCH] non reload sn

---
 main.py         |  8 +++++++-
 test_xltunai.py |  6 ++++++
 xltunai.py      | 17 +++++++++++++++--
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/main.py b/main.py
index 6847618..1048de7 100755
--- a/main.py
+++ b/main.py
@@ -90,6 +90,7 @@ def handleSms(sms):
     global PRODUCTS
     global LAST_PRODUCT
     global LAST_REQUEST_ID
+    global LAST_SN
     
     logger.info(u'Incoming SMS from: {0}; Time: {1}; Message: {2}'.format(sms.number, sms.time, sms.text))
     
@@ -105,6 +106,7 @@ def handleSms(sms):
         
     if sms.text.find('Terimakasih, transaksi CASH IN ke akun') >= 0:
         logger.info('handleSms: CASH IN, aktivasi pull jika non aktif')
+        LAST_SN = xltunai.getSNFromCashInMessage(sms.text)
         enablePull()
         return
         
@@ -140,6 +142,10 @@ def handleSms(sms):
         pushTopupStatus(LAST_REQUEST_ID, '68', sms.text)
         return
     
+    elif sms.text.find('Anda terima uang XLTunai') >= 0:
+        LAST_SN = xltunai.getSNFromReceiveTransferMessage(sms.text)
+        return
+    
     destination = xltunai.getDestinationFromMessage(sms.text)
     if destination == '':
         logger.warning('handleSms: gagal parsing nomor tujuan')
@@ -301,7 +307,7 @@ def adviceLastSN(requestId, modem):
                 sleep(15)
                 adviceLastSN(requestid, modem)
                 
-        elif lastSNFromHistory == 'P2P TRANSFER':
+        elif lastSNFromHistory == 'NON RELOAD':
             topupMessage = "Topup gagal berdasarkan advice. Trx terakhir adalah P2P Transfer."
             pushTopupStatus(requestId, '40', topupMessage)
             DISABLE_SEM = 0
diff --git a/test_xltunai.py b/test_xltunai.py
index e26beab..facd2ef 100644
--- a/test_xltunai.py
+++ b/test_xltunai.py
@@ -131,3 +131,9 @@ def test_getPulsaFromUssdResponseMessage():
 def test_getLastSNFromMessage():
     assert xltunai.getLastSNFromHistoryMessage('Transaksi Terakhir : 20063778248257/5500/12-02-2016 14:37:08/M201312021528418273770285/P201511211752675316198716/RELOAD XL 5000') == '20063778248257'
     assert xltunai.getLastSNFromHistoryMessage('Transaksi Terakhir :\n20063778248257/5500/12-02-2016 14:37:08/M201312021528418273770285/P201511211752675316198716/RELOAD XL 5000') == '20063778248257'
+
+def test_getSNFromReceiveTransferMessage():
+    assert xltunai.getSNFromReceiveTransferMessage('Anda terima uang XLTunai Rp2500000  dr 6287886957792 DIDIT ARIYANTO  pada 19/02/2016 16:14:32.Cek saldo di *123*120#.RefID 49498359729433. Info hub 817') == '49498359729433'
+
+def test_getSNFromCashInMessage():
+    assert xltunai.getSNFromCashInMessage('Terimakasih, transaksi CASH IN ke akun 6287886957792 berhasil. Jumlah transaksi Rp 5000000, biaya 0. Saldo anda saat ini 5000000 . Ref ID: 96346333194106') == '96346333194106'
diff --git a/xltunai.py b/xltunai.py
index 4c493ea..f948f3c 100644
--- a/xltunai.py
+++ b/xltunai.py
@@ -82,7 +82,20 @@ def getBalanceFromMessage(message):
         return int(sn)
     except:
         return 0
+
+def getSNFromReceiveTransferMessage(message):
+    try:
+        sn = "".join(re.findall(r'RefID (\d+)', message))
+        return sn
+    except:
+        return
         
+def getSNFromCashInMessage(message):
+    try:
+        sn = "".join(re.findall(r'Ref ID: (\d+)$', message))
+        return sn
+    except:
+        return
 
 def toInternationalNumber(number):
     return re.sub(r'^0', '62', number)
@@ -150,8 +163,8 @@ def getMasaAktifFromUssdResponseMessage(message):
     return time.strftime("%Y-%m-%d", masa_aktif)
     
 def getLastSNFromHistoryMessage(message):
-    if re.findall(r"P2P TRANSFER", message):
-        return 'P2P TRANSFER'
+    if not re.findall(r"RELOAD", message):
+        return 'NON RELOAD'
         
     sn = re.findall(r"Transaksi Terakhir\s:\s(\d+)", message)
     if sn:
-- 
1.9.0