File size: 8,171 Bytes
211843b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import random
from raspsendemail import RaspEmail


class RevisionBankScheduler:
    def __init__(self,importcsv) -> None:
        #self.usercardstosend = list()
        self.importcsv = importcsv
    def sendimagecard(self,user,card):
        imagecardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}
        ##print(user["sendtoemail"])
        RaspEmail.send(receiver_email = imagecardjson["email"],subject = imagecardjson["subject"],htmlmessage = imagecardjson["message"],attachment = imagecardjson["attachment"])
        
        #response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}})
        
        #print(response.text)
        #sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
    def sendtextcard(self,user,card):
        #print(user["sendtoemail"])
        #response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}})
        textcardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}
        #print(textcardjson["attachment"])
        #print(textcardjson)
        RaspEmail.send(receiver_email = textcardjson["email"],subject = textcardjson["subject"],htmlmessage = textcardjson["message"])#,attachment = textcardjson["attachment"])
        
        #sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
        #print(response.text)
    #brlvuddpzmanpidi
    def getcarddetails(self):
        # TODO Separate cards to there own collection
        userscheduledcards = list(self.importcsv.db.scheduledcards.find())
        usercardstosend = []
        for user in userscheduledcards:
            usercardstosend.append({"sendtoemail":user["sendtoemail"],"revisioncards":user["revisioncards"],"revisionscheduleinterval":user["revisionscheduleinterval"]})
        return usercardstosend
    def runschedule(self):
        def setprobabilities(revisioncard):
            try:
                revcolor = revisioncard["color"]
                if revcolor == "green":
                    return 25
                if revcolor == "amber":
                    return 50
                if revcolor == "red":
                    return 75
            except Exception as ex:
                #print(type(ex),ex)
                return 100
        
        print("Revision card loading...")
        usercardstosend = self.getcarddetails()
        #print("Revision card loaded.")
        #print(usercardstosend)
        for user in usercardstosend:
            # Creating a name list
            revisioncards = user["revisioncards"]
            #print(revisioncards)
            weights = list(map(setprobabilities,revisioncards))
            trafficlightemailsleft = 3


            for card,weight in zip(revisioncards,weights):
                #print(card)
                #print(weight)
                if weight == 100:
                    # send email
                    print("Sending revision card...")
                    #time.sleep(10)
                    #print(card)
                    #
                    if "revisioncardimage" in card :
                        if card["revisioncardimage"] != [] :
                            self.sendimagecard(user,card)

                            print("Card sent.")
                            trafficlightemailsleft -= 1
                        elif card["revisioncardimage"] == []:
                            #print("hi")
                            self.sendtextcard(user,card)
                            print("Card sent.")
                            trafficlightemailsleft -= 1

                    elif "revisioncardimage" not in card:
                        self.sendtextcard(user,card)       
                        print("Card sent.")
                        trafficlightemailsleft -= 1
                #elif 
            #print(revisioncards)
            #print(weights)
            
            #if len(revisioncards) < 3:
            try:
                # Makes sure that no duplicates are sent. Whilst also picking each card randomly with red 
                duplicates = True
                
                while duplicates == True:
                    trafficlightemails = random.choices(revisioncards, weights=weights, k=trafficlightemailsleft)
                    #print(len(trafficlightemails))
                    if trafficlightemails != []:
                        original = list(map(lambda x:x["revisioncard"],trafficlightemails))
                        duplicateset = set(original)
                        #print(len(original),len(duplicateset))
                        #print(original,duplicateset)
                        if len(duplicateset) < len(original):
                            trafficlightemails = random.choices(revisioncards, weights=weights, k=trafficlightemailsleft)
                            trafficlightemailsleft -= 1
                            #duplicates = False
                        if len(duplicateset) == len(original):
                            duplicates = False
                    elif trafficlightemails == []:
                        duplicates = False 
                        
                #print(trafficlightemailsleft)

                
                for card in trafficlightemails:
                    #user["revisionscheduleinterval"]
                    print("Sending traffic light revision card...")
                    #time.sleep(10)
                    ##192.168.0.180
                    if "revisioncardimage" in card:
                        #print([{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}])
                        imagecardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}
                        RaspEmail.send(receiver_email = imagecardjson["email"],subject = imagecardjson["subject"],htmlmessage = imagecardjson["message"],attachment = imagecardjson["attachment"])
                        
                        #response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}})
                        #sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
                        print("Traffic light card sent.")
                    elif "revisioncardimage" not in card:
                        #response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}})
                        textcardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}
                        RaspEmail.send(receiver_email = textcardjson["email"],subject = textcardjson["subject"],htmlmessage = textcardjson["message"],attachment = textcardjson["attachment"])
                        
                        #sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
                        print("Traffic light card sent.")
            except IndexError as ex:
                #print(type(ex),ex)
                continue