Browse Source

Saver add checks, remove implemented

Innokenty Enikeev 8 năm trước cách đây
mục cha
commit
0a1386a8cd
1 tập tin đã thay đổi với 21 bổ sung4 xóa
  1. 21 4
      plugins/saver.lisp

+ 21 - 4
plugins/saver.lisp

@@ -156,8 +156,10 @@
 (defun %saver/format-info (payments salary)
   (let ((payments-info
          (loop for payment in payments
+            for idx from 1
             for info = (saver/get-payment-info payment salary)
-            collect (format nil "~A on [~A]: saved ~$ of ~$, left ~$ in ~A periods"
+            collect (format nil "~D) ~A on [~A]: saved ~$ of ~$, left ~$ in ~A periods"
+                            idx
                             (saver/payment-name payment)
                             (saver/payment-schedule payment)
                             (/ (getf info :saved-amount) 100)
@@ -201,12 +203,27 @@
                                                                      #\- (elt groups 3)))
                                                           (encode-universal-time 0 0 0 day month year))
                                                         (get-universal-time)))))
-          (saver/parse-schedule (elt groups 2))
-          (db/saver/add-payment chat-id payment)
+          (saver/get-next-time (saver/parse-schedule (saver/payment-schedule payment))
+                               (get-universal-time))
+          (handler-case
+              (db/saver/add-payment chat-id payment)
+            (error (e) (send-response chat-id (format nil "Payment '~A' exists!"
+                                                      (saver/payment-name payment)))))
           (saver/send-info chat-id))
         (send-response chat-id "Bad format. /saver add <title> <amount> <cron> [started]"))))
 
-(defun saver/del-payment (chat-id args))
+(defun saver/del-payment (chat-id args)
+  (handler-case
+      (let ((payment (elt (db/saver/get-payments chat-id) (1- (parse-integer (car args)))))
+            (salary (db/saver/get-salary chat-id)))
+        (db/saver/del-payment chat-id (saver/payment-name payment))
+        (send-response chat-id
+                       (format nil "'~A' removed.~@[ Get ~$ from savings.~]"
+                               (saver/payment-name payment)
+                               (and salary
+                                    (/ (getf (saver/get-payment-info payment salary) :saved-amount)
+                                       100)))))
+    (error (e) (send-response chat-id (format nil "/saver del <idx> [~A]" e)))))
 
 (def-message-cmd-handler handler-cmd-save (:save :saver)
   (if (null args)