Browse Source

[revolut] Add refund, implement notification subscription

Innokentiy Enikeev 3 năm trước cách đây
mục cha
commit
31a2febcf3
1 tập tin đã thay đổi với 26 bổ sung8 xóa
  1. 26 8
      plugins/revolut.lisp

+ 26 - 8
plugins/revolut.lisp

@@ -280,6 +280,19 @@
             rcv-account rcv-amount rcv-currency
             snd-account snd-amount snd-currency)))
 
+(defun params-card-refund (tr pockets)
+  (let* ((description (agets tr "description"))
+	 (snd-account (format-pocket-account (find-pocket (agets tr "account" "id")
+                                                          pockets)))
+         (snd-amount (get-amount (agets tr "amount")))
+         (snd-currency (agets tr "currency"))
+	 (rcv-account "income:refund")
+	 (rcv-amount (get-amount (* -1 (agets tr "counterpart" "amount"))))
+	 (rcv-currency (agets tr "counterpart" "currency")))
+    (values description nil
+            rcv-account rcv-amount rcv-currency
+            snd-account snd-amount snd-currency)))
+
 (defun transaction->entry (tr pockets)
   (let* ((date (get-date (agets tr "startedDate")))
          (type (keyify (agets tr "type"))))
@@ -292,7 +305,8 @@
           (:atm (params-atm tr pockets))
           (:transfer (params-transfer tr pockets))
           (:fee (params-fee tr pockets))
-          (:card-payment (params-card-payment tr pockets)))
+          (:card-payment (params-card-payment tr pockets))
+	  (:card-refund (params-card-refund tr pockets)))
       (when snd-account
         (pta-ledger:make-entry
          :date date
@@ -343,17 +357,21 @@
      (poller-cant-get-token () "Не смог получить данные. Попробуй перелогинься. /revolut <phone> <pin>"))
    :parse-mode "markdown"))
 
+(defun handle-list (enable)
+  (lists-set-entry :revolut *chat-id* enable)
+  (bot-send-message (if enable "Рассылаю обновления" "Молчу, пока не спросишь")))
+
 (def-message-cmd-handler handle-cmd-revolut (:revolut :revo)
   (let ((a0 (car *args*)))
     (cond
       ((= 2 (length *args*)) (apply 'handle-auth *args*))
+      ((equal a0 "on") (handle-list t))
+      ((equal a0 "off") (handle-list nil))
       ((or (null *args*) (equal a0 "bal")) (handle-balance))
       (:otherwise (handle-recent (parse-integer a0 :junk-allowed t))))))
 
-
-(defun process-new (changes)
-  (let ((ledger-package (find-package :chatikbot.plugins.ledger))
-        (transactions (prepare-entries changes)))
+(defun process-new (transactions)
+  (let ((ledger-package (find-package :chatikbot.plugins.ledger)))
     (if ledger-package
         (let ((new-chat-entry (symbol-function
                                (intern "LEDGER/NEW-CHAT-ENTRY" ledger-package))))
@@ -363,6 +381,6 @@
 
 (defcron process-revolut ()
   (poller-poll-lists :revolut
-                     #'get-transactions-last
-                     #'process-new
-                     :key (agetter "startedDate")))
+		     (lambda () (prepare-entries (get-transactions-last)))
+		     #'process-new
+		     :key #'pta-ledger:entry-date))