def save (self):
        if self.cleaned_data ['supervisor'] == "-1":
            supervisor = None
            role = UserRoles.OFFICIAL
        else:
            supervisor = Official.objects.get (id = self.cleaned_data ['supervisor'])
            role = UserRoles.DELEGATE

        department = ComplaintDepartment.objects.get (id = self.cleaned_data ['department'])

        user = User.objects.create (username = self.cleaned_data ['username'],
                                    first_name = self.cleaned_data ['name'])

        password = get_random_string (PASSWORD_LEN)
        user.set_password (password)
        user.save ()

        cmhuser = CmhUser.objects.create (user = user,
                                          phone = self.cleaned_data ['phone'])
        cmhuser.set_user_role (role)
        cmhuser.save ()

        message = PASSWORD_MSG % (cmhuser.user.username, password)
        queue_sms (cmhuser.phone, message)

        official = Official.objects.create (user = user, supervisor = supervisor)

        official.department = department
        official.save()
        return official
    def save (self):
        user = User.objects.create (username = self.cleaned_data ['username'],
                                    first_name = self.cleaned_data ['name'])
        password = get_random_string (PASSWORD_LEN)
        user.set_password (password)
        user.save ()

        cmhuser = CmhUser.objects.create (user = user,
                                          phone = self.cleaned_data ['phone'])

        cmhuser.set_user_role (UserRoles.CSO)

        message = PASSWORD_MSG % (cmhuser.user.username, password)
        queue_sms (cmhuser.phone, message)

        return cmhuser
    def save (self):
        dmid = self.cleaned_data ['dmid']
        dm = CmhUser.objects.get (user__approle__role = UserRoles.DM, id = dmid)

        user = dm.user
        user.first_name = self.cleaned_data ['name']

        password = get_random_string (PASSWORD_LEN)
        user.set_password (password)
        user.save ()

        dm.phone = self.cleaned_data ['phone']
        dm.save ()

        message = PASSWORD_MSG % (dm.phone, password)
        queue_sms (dm.phone, message)
    def save (self):
        user             = User.objects.get(username = self.cleaned_data['username'])

        cmhuser          = CmhUser.objects.get(id = self.cleaned_data['objid'])
        user.first_name  = self.cleaned_data['name']
        password = get_random_string (PASSWORD_LEN)
        user.set_password (password)
        user.save()

        cmhuser.user    = user
        cmhuser.phone   = self.cleaned_data ['phone']

        cmhuser.save ()

        message = PASSWORD_MSG % (cmhuser.user.username, password)
        queue_sms (cmhuser.phone, message)

        return cmhuser
    def save (self):
        dept            = ComplaintDepartment.objects.get (id = self.cleaned_data['department'].id)
        cmhuser         = CmhUser.objects.get(id = self.cleaned_data['objid'])
        official        = Official.objects.get(user__cmhuser__id = self.cleaned_data['objid'])

        user             = User.objects.get(username = self.cleaned_data['username'])
        user.first_name  = self.cleaned_data['name']
        password = get_random_string (PASSWORD_LEN)
        user.set_password (password)
        user.save ()

        cmhuser.user    = user
        cmhuser.phone   = self.cleaned_data ['phone']

        official.user   = user
        official.department = dept

        official.save()
        cmhuser.save ()

        message = PASSWORD_MSG % (cmhuser.user.username, password)
        queue_sms (cmhuser.phone, message)

        return official
def gateway(request):
    print "came in gateway"
    if request.method == "GET":
        transferreq = SMSTransferReqFormat(request.GET)
        if transferreq.is_valid() == True:
            messages = []
            for tm in TextMessage.objects.filter(processed=False):
                messages.append({"to": tm.phone, "message": tm.message})
                tm.processed = True
                tm.processed_time = datetime.now()
                tm.save()
            return HttpResponse(json.dumps({"payload": {"task": "send", "secret": "0123456789", "messages": messages}}))
        else:
            # non user generated request, just ignore this
            return HttpResponse(json.dumps({"payload": {"success": "true"}}))
    elif request.method == "POST":
        receivedform = SMSReceivedFormat(request.POST)
        # debug ("Received from: " + str (receivedform))
        if receivedform.is_valid():
            try:
                # debug ("Form is valid")
                sender_phone = receivedform.cleaned_data["from"]
                message = receivedform.cleaned_data["message"]
                rtm = ReceivedTextMessage.objects.create(sender=sender_phone, valid=False, message=message)

                matches = re.match(FORMAT, message, re.S)
                if matches != None:
                    block = str(int(matches.group("block")))
                    gramp = str(int(matches.group("gramp")))
                    villg = str(int(matches.group("villg")))
                    sender_name = matches.group("name")
                    issue_desc = matches.group("complaint")
                    citizen = get_or_create_citizen(sender_phone, sender_name)
                    location = get_location_attr(block, gramp, villg)
                    compl = Complaint.objects.create(
                        complainttype=None,
                        complaintno=None,
                        description=issue_desc,
                        department=None,
                        curstate=STATUS_NEW,
                        filedby=citizen,
                        logdate=datetime.today().date(),
                        location=location,
                        original=None,
                        creator=None,
                    )
                    update_complaint_sequence(compl)
                    ComplaintClosureMetric.objects.create(complaintno=compl.complaintno)

                    # If we reach this point, the message was properly formatted
                    rtm.valid = True
                    rtm.complaint = compl
                    rtm.save()

                    # Remove the user from blacklist in case he is there
                    for sbl in SenderBlacklist.objects.filter(sender=rtm.sender):
                        # debug ("Removing sender from blacklist: " + str (rtm.sender))
                        sbl.delete()

                    text_message = _(
                        "Your Grievance number is %s. We would revert in 36 hours to seek more details"
                        % (compl.complaintno)
                    )
                    queue_sms(sender_phone, text_message)
                    return HttpResponse(json.dumps({"payload": {"success": "true"}}))
                else:
                    itm = IgnoredTextMessage.objects.create(sender=sender_phone, valid=False, message=message)
                    raise InvalidMessageException
            except (InvalidMessageException, ObjectDoesNotExist) as e:
                # Improperly formatted
                # check if the user is black listed, keep the sender black listed and don't respond
                if not is_blacklisted(rtm.sender):
                    if not new_blacklist(rtm.sender):
                        text_message = "Call center would respond in next 36 hrs after looking into your issue"
                        queue_sms(sender_phone, text_message)
                else:
                    # debug ("Sender is blacklisted. Not sending ack: " + str (rtm.sender))
                    pass
                return HttpResponse(json.dumps({"payload": {"success": "true"}}))
        else:
            # In this case, we can safely assume that the message is not coming from
            # SMSSync so silently ignore.
            return HttpResponse(json.dumps({"payload": {"success": "true"}}))
    else:
        return HttpResponseForbidden