Exemplo n.º 1
0
    def handle(self, *args, **options):
        councils = Council.objects.all()
        accepte_credit =  get_credit()
        for council in councils:
            for event in council.events.all():
                if event.sent_datetime == None and (event.event_datetime - timedelta(days=1)) < datetime.now():
                    if accepte_credit > 0:

                        recipients = event.sms_recipients()
                        sendsms(event.originator, recipients, event.message, datetime.now())
                        event.sent_datetime = datetime.now()
                        event.save()
                        accepte_credit = accepte_credit - len(recipients)

                    else:
                        message = 'ERROR: Accepte has not enough credit bought to send queued sms\'s. Buy credits imediately! To identify how many, run credits_left command. Then Purchase required amount. Then Manually run sms_send command again.'

                        send_email(
                                'Credits Negative -- Error',
                                '*****@*****.**',
                                '*****@*****.**',
                                {'message': message },
                                {'plain': 'elections/credits_low.txt'},
                        )
                        return False
        return True
Exemplo n.º 2
0
    def handle(self, *args, **options):
        councils = Council.objects.all()
        accepte_credit = get_credit()
        for council in councils:
            for event in council.events.all():
                if event.sent_datetime == None and (
                        event.event_datetime -
                        timedelta(days=1)) < datetime.now():
                    if accepte_credit > 0:

                        recipients = event.sms_recipients()
                        sendsms(event.originator, recipients, event.message,
                                datetime.now())
                        event.sent_datetime = datetime.now()
                        event.save()
                        accepte_credit = accepte_credit - len(recipients)

                    else:
                        message = 'ERROR: Accepte has not enough credit bought to send queued sms\'s. Buy credits imediately! To identify how many, run credits_left command. Then Purchase required amount. Then Manually run sms_send command again.'

                        send_email(
                            'Credits Negative -- Error',
                            '*****@*****.**',
                            '*****@*****.**',
                            {'message': message},
                            {'plain': 'elections/credits_low.txt'},
                        )
                        return False
        return True
Exemplo n.º 3
0
    def handle(self, *args, **options):
        accepte_credits = get_credit()
        for election_instance in ElectionInstance.objects.all():
            if election_instance.modules.filter(slug='SMS').count() != 0:

                phone_nums = VisitorResult.objects.filter(election_instance=election_instance).exclude(telephone=None).values('telephone').distinct()
                for phone_num in phone_nums:
                    if accepte_credits > 0:
                        visitor_results = VisitorResult.objects.filter(election_instance=election_instance, telephone=phone_num['telephone']).latest()
                        if visitor_results.sent == None:
                            #get(election_instance=election_instance, telephone=phone_num).
                            top_3 = visitor_results.candidate_answers.order_by('-candidates_score')[:3]
                            message = 'Voting is tomorrow, your top three candidates were '
                            for candidate in top_3:

                                message= message + str(candidate.candidate.profile.full_name()) + ', score: ' + str(candidate.candidates_score) + ' '

                            sendsms(election_instance.council.name[0:11], phone_num['telephone'], message, datetime.now())
                            visitor_results.sent = datetime.now()
                            visitor_results.save()
                            accepte_credits = accepte_credits - 1


                    else:
                        message = 'ERROR: Accepte has not enough credit bought to send queued sms\'s. Buy credits imediately! To identify how many, run credits_left command. Then Purchase required amount. Then Manually run sms_results command again.'

                        send_email(
                                'Credits Negative -- Error',
                                '*****@*****.**',
                                '*****@*****.**',
                                {'message': message },
                                {'plain': 'elections/credits_low.txt'},
                        )
                        return False
        return True
Exemplo n.º 4
0
    def handle(self, *args, **options):

        list_eis = options.get('list')
        send = options.get('send')
        fake = options.get('fake')

        accepte_credit = get_credit()

        if list_eis:
            for ei in ElectionInstance.objects.filter(
                    modules__slug='SMS').filter(
                        visitor_results__sent__isnull=True).distinct().all():
                print "%s - %s" % (ei.pk, ei.name)
            return True

        if fake or send:
            id = fake or send
            try:
                ei = ElectionInstance.objects.get(pk=id)
            except:
                print "Election Instance not found"
                return False

            if ei.modules.filter(
                    slug='SMS').count() == 0 or ei.visitor_results.filter(
                        sent__isnull=True).count() == 0:
                print "Nothing to do"
                return False

            if accepte_credit > 0:

                recipients = ei.visitor_results.filter(
                    sent__isnull=True).distinct('telephone').filter(
                        telephone__isnull=False).values_list('telephone',
                                                             flat=True)
                recipients = list(set(recipients))

                if send:
                    for r in recipients:
                        sendsms(
                            'Wiekiesjij', [r],
                            'Vandaag: Tweede Kamerverkiezingen! U kunt stemmen in ieder stemlokaal (binnen uw eigen gemeente). Vergeet uw stempas en ID-bewijs niet!',
                            datetime.now())
                    ei.visitor_results.update(sent=datetime.now())
                    accepte_credit = accepte_credit - len(recipients)
                elif fake:
                    print "Would send %s messages for the election instance" % (
                        len(recipients))
            else:
                print "Not enough credits"
                return False
            return True
Exemplo n.º 5
0
def credit_left():
    councils_credit = 0
    over_drawn = 0

    for council in Council.objects.all():
        if council.election_instances:
            councils_credit_left = council.credit_left()
            councils_credit = councils_credit + council.credit
            if councils_credit_left < 0:
                over_drawn = over_drawn - councils_credit_left

    credit_left = get_credit()

    margin = credit_left - councils_credit - over_drawn

    if margin < 0:
        message = (
            "WARINING: Accepte has not enough credit bought. Currently Accepte has %s credits left. Councils have reserved: %s. %s credits have not been reserved. Total (Acceptes credits - reserver - non_reserved): %s"
            % (str(credit_left), str(councils_credit), str(over_drawn), str(margin))
        )

        send_email(
            "Credits Negative -- IMPORTANT",
            "*****@*****.**",
            "*****@*****.**",
            {"message": message},
            {"plain": "elections/credits_low.txt"},
        )

        return False
    elif margin < 2000:

        message = (
            "Accepte may not have enough credit bought. Currently Accepte has %s credits left. Councils have reserved: %s. %s credits have not been reserved. Total (Acceptes credits - reserver - non_reserved): %s"
            % (str(credit_left), str(councils_credit), str(over_drawn), str(margin))
        )

        send_email(
            "Credits Low",
            "*****@*****.**",
            "*****@*****.**",
            {"message": message},
            {"plain": "elections/credits_low.txt"},
        )

    else:
        pass
    return True
Exemplo n.º 6
0
    def handle(self, *args, **options):
        council_costs = {}
        councils = Council.objects.all()
        accepte_credit = get_credit()

        for council in councils:
            try:
                ei = council.election_instances.get(
                    election_event__id=ELECTION_EVENT_ID)
            except:
                ei = None

            if ei is not None and ei.modules.filter(
                    slug='Event-SMS').count() == 0:
                continue

            council_count = 0
            for event in council.events.filter(
                    sent_datetime__isnull=True).all():
                council_count += len(event.sms_recipients())

            council_costs.update({council.pk: council_count})

        #VisitorResult texts
        for ei in ElectionInstance.objects.filter(modules__slug__in=['SMS']):
            council_count = council_costs.get(ei.council.pk, 0)

            recipients = []
            for vr in ei.visitor_results.filter(
                    telephone__isnull=False).filter(sent__isnull=True).all():
                if vr.telephone:
                    recipients.append(vr.telephone)

            council_count += len(list(set(recipients)))
            council_costs.update({ei.council.pk: council_count})

        credit_costs = 0
        for council in councils:
            if council.pk in council_costs:
                credit_costs += council_costs.get(council.pk, 0)
                print council, 'credits used:', council_costs.get(
                    council.pk, 0)

        print '---'
        print 'Total:', credit_costs
        print 'Currently available:', accepte_credit
        return
Exemplo n.º 7
0
def credit_left():
    councils_credit = 0
    over_drawn = 0

    for council in Council.objects.all():
        if council.election_instances:
            councils_credit_left = council.credit_left()
            councils_credit = councils_credit + council.credit
            if councils_credit_left < 0:
                over_drawn = over_drawn - councils_credit_left

    credit_left = get_credit()

    margin = credit_left - councils_credit - over_drawn

    if margin < 0:
        message = 'WARINING: Accepte has not enough credit bought. Currently Accepte has %s credits left. Councils have reserved: %s. %s credits have not been reserved. Total (Acceptes credits - reserver - non_reserved): %s' % (
            str(credit_left), str(councils_credit), str(over_drawn),
            str(margin))

        send_email(
            'Credits Negative -- IMPORTANT',
            '*****@*****.**',
            '*****@*****.**',
            {'message': message},
            {'plain': 'elections/credits_low.txt'},
        )

        return False
    elif margin < 2000:

        message = 'Accepte may not have enough credit bought. Currently Accepte has %s credits left. Councils have reserved: %s. %s credits have not been reserved. Total (Acceptes credits - reserver - non_reserved): %s' % (
            str(credit_left), str(councils_credit), str(over_drawn),
            str(margin))

        send_email(
            'Credits Low',
            '*****@*****.**',
            '*****@*****.**',
            {'message': message},
            {'plain': 'elections/credits_low.txt'},
        )

    else:
        pass
    return True
Exemplo n.º 8
0
    def handle(self, *args, **options):
        accepte_credits = get_credit()
        for election_instance in ElectionInstance.objects.all():
            if election_instance.modules.filter(slug='SMS').count() != 0:

                phone_nums = VisitorResult.objects.filter(
                    election_instance=election_instance).exclude(
                        telephone=None).values('telephone').distinct()
                for phone_num in phone_nums:
                    if accepte_credits > 0:
                        visitor_results = VisitorResult.objects.filter(
                            election_instance=election_instance,
                            telephone=phone_num['telephone']).latest()
                        if visitor_results.sent == None:
                            #get(election_instance=election_instance, telephone=phone_num).
                            top_3 = visitor_results.candidate_answers.order_by(
                                '-candidates_score')[:3]
                            message = 'Voting is tomorrow, your top three candidates were '
                            for candidate in top_3:

                                message = message + str(
                                    candidate.candidate.profile.full_name(
                                    )) + ', score: ' + str(
                                        candidate.candidates_score) + ' '

                            sendsms(election_instance.council.name[0:11],
                                    phone_num['telephone'], message,
                                    datetime.now())
                            visitor_results.sent = datetime.now()
                            visitor_results.save()
                            accepte_credits = accepte_credits - 1

                    else:
                        message = 'ERROR: Accepte has not enough credit bought to send queued sms\'s. Buy credits imediately! To identify how many, run credits_left command. Then Purchase required amount. Then Manually run sms_results command again.'

                        send_email(
                            'Credits Negative -- Error',
                            '*****@*****.**',
                            '*****@*****.**',
                            {'message': message},
                            {'plain': 'elections/credits_low.txt'},
                        )
                        return False
        return True
Exemplo n.º 9
0
    def handle(self, *args, **options):
        council_costs = {}
        councils = Council.objects.all()
        accepte_credit = get_credit()

        for council in councils:
            try:
                ei = council.election_instances.get(election_event__id=ELECTION_EVENT_ID)
            except:
                ei = None

            if ei is not None and ei.modules.filter(slug="Event-SMS").count() == 0:
                continue

            council_count = 0
            for event in council.events.filter(sent_datetime__isnull=True).all():
                council_count += len(event.sms_recipients())

            council_costs.update({council.pk: council_count})

        # VisitorResult texts
        for ei in ElectionInstance.objects.filter(modules__slug__in=["SMS"]):
            council_count = council_costs.get(ei.council.pk, 0)

            recipients = []
            for vr in ei.visitor_results.filter(telephone__isnull=False).filter(sent__isnull=True).all():
                if vr.telephone:
                    recipients.append(vr.telephone)

            council_count += len(list(set(recipients)))
            council_costs.update({ei.council.pk: council_count})

        credit_costs = 0
        for council in councils:
            if council.pk in council_costs:
                credit_costs += council_costs.get(council.pk, 0)
                print council, "credits used:", council_costs.get(council.pk, 0)

        print "---"
        print "Total:", credit_costs
        print "Currently available:", accepte_credit
        return
Exemplo n.º 10
0
    def handle(self, *args, **options):

        list_eis = options.get('list')
        send = options.get('send')
        fake = options.get('fake')

        accepte_credit = get_credit()

        if list_eis:
            for ei in ElectionInstance.objects.filter(modules__slug='SMS').filter(visitor_results__sent__isnull=True).distinct().all():
                print "%s - %s" % (ei.pk, ei.name)
            return True

        if fake or send:
            id = fake or send
            try:
                ei = ElectionInstance.objects.get(pk=id)
            except:
                print "Election Instance not found"
                return False

            if ei.modules.filter(slug='SMS').count() == 0 or ei.visitor_results.filter(sent__isnull=True).count() == 0:
                print "Nothing to do"
                return False

            if accepte_credit > 0:

                recipients = ei.visitor_results.filter(sent__isnull=True).distinct('telephone').filter(telephone__isnull=False).values_list('telephone', flat=True)
                recipients = list(set(recipients))

                if send:
                    for r in recipients:
                        sendsms('Wiekiesjij', [r], 'Vandaag: Tweede Kamerverkiezingen! U kunt stemmen in ieder stemlokaal (binnen uw eigen gemeente). Vergeet uw stempas en ID-bewijs niet!', datetime.now())
                    ei.visitor_results.update(sent=datetime.now())
                    accepte_credit = accepte_credit - len(recipients)
                elif fake:
                    print "Would send %s messages for the election instance" % (len(recipients))
            else:
                print "Not enough credits"
                return False
            return True
Exemplo n.º 11
0
    def handle(self, *args, **options):

        list_events = options.get('list')
        send = options.get('send')
        fake = options.get('fake')

        accepte_credit = get_credit()

        if list_events:
            for event in CouncilEvent.objects.filter(
                    sent_datetime__isnull=True).all():
                print '%s - %s for %s' % (event.pk, event.title, event.council)
            return True

        if fake or send:
            id = fake or send
            try:
                event = CouncilEvent.objects.get(pk=id)
            except:
                print "Event not found"
                return False

            if event.sent_datetime == None:
                if accepte_credit > 0:
                    recipients = event.sms_recipients()

                    if send:
                        for r in recipients:
                            sendsms(event.originator, [r], event.message,
                                    datetime.now())
                        event.sent_datetime = datetime.now()
                        event.save()
                        accepte_credit = accepte_credit - len(recipients)
                    elif fake:
                        print "Would send %s messages for the event" % (
                            len(recipients))
                else:
                    print "Not enough credits"
                    return False
            return True
Exemplo n.º 12
0
 def handle(self, *args, **options):
     
     list_events = options.get('list')
     send = options.get('send')
     fake = options.get('fake')
     
     accepte_credit = get_credit()
     
     if list_events:
         for event in CouncilEvent.objects.filter(sent_datetime__isnull=True).all():
             print '%s - %s for %s' % (event.pk, event.title, event.council)
         return True
     
     if fake or send:
         id = fake or send
         try:
             event = CouncilEvent.objects.get(pk=id)
         except:
             print "Event not found"
             return False
         
     
         if event.sent_datetime == None:
             if accepte_credit > 0:
                 recipients = event.sms_recipients()
                 
                 if send:
                     for r in recipients:
                         sendsms(event.originator, [r], event.message, datetime.now())
                     event.sent_datetime = datetime.now()
                     event.save()
                     accepte_credit = accepte_credit - len(recipients)
                 elif fake:
                     print "Would send %s messages for the event" % (len(recipients))
             else:
                 print "Not enough credits"
                 return False
         return True