initial version
commit
fda87aae24
|
|
@ -0,0 +1,72 @@
|
|||
from threading import Timer
|
||||
import json
|
||||
import datetime
|
||||
|
||||
|
||||
def json_time(x): return datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ')
|
||||
|
||||
|
||||
def seconds_remaining(r_d): return (
|
||||
r_d - datetime.datetime.now()).total_seconds()
|
||||
|
||||
|
||||
class InvoiceData(object):
|
||||
"""docstring for InvoiceData."""
|
||||
|
||||
def __init__(self, invoice_data):
|
||||
super(InvoiceData, self).__init__()
|
||||
self.customer_id = invoice_data["customer_id"]
|
||||
self.due_date = json_time(invoice_data["invoice_due_date"])
|
||||
self.amount = invoice_data["invoice_amount"]
|
||||
rem_start = invoice_data["reminder_start"]
|
||||
rem_every = invoice_data["reminder_every"]
|
||||
self.remind_before = datetime.timedelta(0, int(rem_start))
|
||||
self.reminder_interval = datetime.timedelta(0, int(rem_every))
|
||||
|
||||
def __repr__(self):
|
||||
return self.customer_id + "#" + self.due_date
|
||||
|
||||
def print_invoice(self):
|
||||
invoice_str = "INVOICE FOR CUSTOMER ID : {}\nDATE:{}\nAMOUNT:{}\n"
|
||||
print invoice_str.format(self.customer_id, self.due_date, self.amount)
|
||||
|
||||
def print_reminder(self):
|
||||
inv_str = "REMINDER FOR CUSTOMER ID : {}\nINVOICE DUE ON :{}\nAMOUNT:{}\n"
|
||||
print inv_str.format(self.customer_id, self.due_date, self.amount)
|
||||
|
||||
def schedule_reminders(self):
|
||||
current_time = datetime.datetime.now()
|
||||
reminder_start = (self.due_date - self.remind_before)
|
||||
reminder_time = self.due_date - self.reminder_interval
|
||||
|
||||
def closed_reminder():
|
||||
self.print_reminder()
|
||||
while (reminder_time >= reminder_start
|
||||
and reminder_time < self.due_date
|
||||
and seconds_remaining(reminder_time) > 0):
|
||||
inv_timer = Timer(seconds_remaining(
|
||||
reminder_time), closed_reminder)
|
||||
inv_timer.start()
|
||||
reminder_time = reminder_time - self.reminder_interval
|
||||
|
||||
def schedule_invoice(self):
|
||||
self.schedule_reminders()
|
||||
|
||||
def closed_invoice():
|
||||
self.print_invoice()
|
||||
if seconds_remaining(self.due_date) > 0:
|
||||
inv_timer = Timer(seconds_remaining(self.due_date), closed_invoice)
|
||||
inv_timer.start()
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, file_name):
|
||||
invoice_data = json.load(open(file_name, 'rb'))
|
||||
invoice_list = []
|
||||
for inv_d in invoice_data:
|
||||
invoice_list.append(cls(inv_d))
|
||||
return invoice_list
|
||||
|
||||
invoices = InvoiceData.from_json("./invoice_data.json")
|
||||
for inv in invoices:
|
||||
inv.print_invoice()
|
||||
inv.schedule_invoice()
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
[{
|
||||
"customer_id": "123",
|
||||
"invoice_due_date": "2017-07-17T12:12:00.511Z",
|
||||
"reminder_start": "10",
|
||||
"reminder_every": "5",
|
||||
"invoice_amount": "1000"
|
||||
},{
|
||||
"customer_id": "124",
|
||||
"invoice_due_date": "2017-07-17T12:21:00.511Z",
|
||||
"reminder_start": "10",
|
||||
"reminder_every": "5",
|
||||
"invoice_amount": "1000"
|
||||
},{
|
||||
"customer_id": "125",
|
||||
"invoice_due_date": "2017-07-17T12:22:00.511Z",
|
||||
"reminder_start": "60",
|
||||
"reminder_every": "20",
|
||||
"invoice_amount": "1000"
|
||||
}]
|
||||
Loading…
Reference in New Issue