Esempio n. 1
0
 def handle(self, **options):
   path  = options.get('file')
   if not path:
     raise ValueError, 'Provide a path with -f --file .'
   weeks = []
   days  = []
   with open(path) as f:
     while True:
       try:
         x, y, week, day, z, a, b, text, c, d = f.readline().split('\t')
         if len(text) > 2 and text[0] == '"'[0]:  text = text[1:-1]
         rm  = None
         wk  = int(week)
         dy  = int(day)
         try:
           rm  = ReminderMessage.objects.get(week_number = wk,
                                             day_number  = dy)
           rm.reminder_text  = text
         except ReminderMessage.DoesNotExist:
           rm  = ReminderMessage(week_number   = wk,
                                 day_number    = dy,
                                 reminder_text = text)
         rm.save()
         weeks.append(wk)
         days.append(dy)
       except ValueError:
         break
       except StopIteration:
         break
   for unused in ReminderMessage.objects.exclude(week_number__in = weeks, day_number__in = days):
     sys.stderr.write('Deleting unused reminder for week %d, day %d.\n' % (unused.week_number, unused.day_number))
     unused.delete()
Esempio n. 2
0
 def handle(self, **options):
   outmsgs = ReminderMessage.as_hash()
   for week in outmsgs.keys():
     this_week = outmsgs[week]
     for day in this_week.keys():
       mother_queue  = Queue.Queue()
       this_day      = this_week[day]
       # for mother in Contact.objects.raw('''SELECT * FROM rapidsms_contact WHERE ((NOW() :: DATE) - ('%d WEEK %d DAY' :: INTERVAL)) :: DATE = last_menses :: DATE''' % (week, day)):
       # for mother in Contact.objects.raw('''SELECT * FROM rapidsms_contact WHERE (last_menses + ('%d WEEK %d DAY' :: INTERVAL)) :: DATE = NOW() :: DATE''' % (week, day)):
       # Because Django ORM speaks pidgin: “today” will be encoded as “between end of yesterday and start of tomorrow”. Hahaha. As long as it is not SQL.
       # back_then = datetime.now() - timedelta(weeks = week, days = day)
       # prior_day = back_then - timedelta(days = 1)
       # mothers   = Contact.objects.filter(interested = True, last_menses__range = (prior_day, back_then)).exclude(connection = None)
       mothers   = Contact.objects.raw('''SELECT * FROM rapidsms_contact WHERE interested AND ((NOW() :: DATE) - ('%d WEEK %d DAY' :: INTERVAL)) :: DATE = last_menses :: DATE''' % (week, day - 1))
       sending   = []
       for mother in mothers:
         if not mother.default_connection:
           continue
         sending.append(mother.default_connection.identity)
         msg     = Message.objects.create(connection = mother.default_connection, status = 'Q', direction = 'O', text = this_day)
         # msg.save() or sys.stderr.write('FAILED.\n')
         if msg:
           sys.stderr.write('%s (%s)\n' % (mother.default_connection.identity, mother.last_menses.strftime('%d-%m-%Y')))
         else:
           if sys.stderr.isatty():
             sys.stderr.write('FAILED.\n') # Colorise?
           else:
             sys.stderr.write('FAILED.\n')
       if sending:
         sys.stderr.write('Sending to %d mothers (week %d, day %d):\n%s\n\n%s\n' % (len(sending), week, day, this_day, ', '.join(sending)))
         sys.stderr.write('\n' + ('==' * 12) + '\n')
Esempio n. 3
0
    def handle(self, **options):
        outmsgs = ReminderMessage.as_hash().keys()
        outmsgs.sort()
        try:
            lastweek = outmsgs[-1]

            for mother in Contact.objects.filter(interested=True,
                last_menses__lt=(datetime.now() - timedelta(weeks=lastweek))).exclude(connection=None):
                text = 'If you want to stop receiving FREE messages from Mother Reminder please reply with STOP.'
                last_optout = Message.objects.filter(connection=mother.default_connection).filter(text=text).order_by('-date')
                if not last_optout:
                    msg = Message.objects.create(connection=mother.default_connection, direction='O', status='Q',
                        text=text)
                else:
                    if last_optout[0].date + timedelta(weeks=8) <= datetime.now():
                        msg = Message.objects.create(connection=mother.default_connection, direction='O', status='Q',
                            text=text)

                        # msg.save()
                        # application, batch, connection, date, direction, flags, id, in_response_to, poll, poll_responses, priority, responses, status, submissions, text
        except IndexError:
            pass
Esempio n. 4
0
 def perform(self, request, results):
   rmdr  = ReminderMessage(week_number = self.cleaned_data['week'],
                           day_number  = self.cleaned_data['day'],
                         reminder_text = self.cleaned_data['message'])
   rmdr.save()
   return ('Saved reminder message for week %d, day %d' % (rmdr.week_number, rmdr.day_number), 'successfully.')