def process(self):
        self.data.provider = provider = models.Provider.by_mobile(self.message.peer)
        lookup = {"ref_id": self.form.clean.child.data, "provider": provider}
        if "active" in [ f.name for f in models.Case._meta.fields ]:
            lookup["active"] = True
        try:
            case = models.Case.objects.get(**lookup)
        except models.Case.DoesNotExist:
            raise CommandError, self.error_not_registered()

        self.data.case = case

        # if there is more than one case entered on one day, remove the last
        try:
            last_report = case.reportmalnutrition_set.latest("entered_at")
            if (datetime.now() - last_report.entered_at).days == 0:
                # last report was today. so delete it before filing another.
                last_report.delete()
        except ObjectDoesNotExist:
            pass

        report = models.ReportMalnutrition(case=case, provider=provider, muac=self.form.clean.muac.data, 
            weight=self.form.clean.weight.data, height=self.form.clean.height.data)
        report.save()
        log(report, "report_taken")
        self.data.report = report
 def process(self):
     username = self.form.clean.username.data
     try:
         user = User.objects.get(username__iexact=username)
     except User.DoesNotExist:
         raise CommandError, self.error_not_registered()
         self.respond_not_registered(username)
     
     # deactivate all the old ones and activate the new ones
     for provider in models.Provider.objects.filter(mobile=self.message.peer):
         if provider.user.id == user.id:
             provider.active = True
             self.data.provider = provider
             self.data.facility = self.data.provider.clinic
             provider.save()
     
     if not self.data.provider:
         raise HandlerError, "Something went wrong with that confirmation: %s" % self.text
     
     # check the above works before disabling a bunch of people
     for provider in models.Provider.objects.filter(mobile=self.message.peer):
         if provider.user.id != user.id:
             provider.active = False
         provider.save()
         log(provider, "confirmed_join")
 def process(self):
     self.data.provider = provider = models.Provider.by_mobile(self.message.peer)
     lookup = {"ref_id": self.form.clean.child.data, "provider": provider}
     if "active" in [ f.name for f in models.Case._meta.fields ]:
         lookup["active"] = True
     try:
         case = models.Case.objects.get(**lookup)
     except models.Case.DoesNotExist:
         raise CommandError, self.error_not_exists()
     
     case.active = False
     case.save()
 
     reason = self.form.clean.reason.data.lower()
     if reason == "d":
         log(case, "case_cancelled_death")
         self.data.reason = "death"
     elif reason == "dm":
         log(case, "case_cancelled_death_malnutrition")
         self.data.reason = "death of causes related to malnutrition"
     elif reason == "do":
         log(case, "dropout")
         self.data.reason = "dropout of program"
     elif reason == "m":
         log(case, "case_cancelled_mistake")
         self.data.reason = "mistake"
         
     self.data.case = case
Ejemplo n.º 4
0
 def process(self):
     
     try:
         facility = models.Facility.objects.get(codename=self.form.clean.facility.data)
     except models.Facility.DoesNotExist:
         raise CommandError, self.error_facility_exists()
         
     # by default if we haven't got a username mangled already, then make one automatically
     if not self.data.username:
         tmp = self.data.username = (self.form.clean.first.data[0] + self.form.clean.last.data).lower()
         # if we are going to calculate usernames, we need to prevent clashes
         for x in range(1, 10):
             try:
                 models.User.objects.get(username=tmp)
                 tmp = "%s%02d" % (self.data.username, x)
             except models.User.DoesNotExist:
                 break
             
         self.data.username = tmp
     
     # if we have got a username, double check it's ok
     if models.User.objects.filter(username__iexact=self.data.username).count():
         raise CommandError, self.error_username_used()
     
     mobile = self.message.peer
     in_use = models.Provider.by_mobile(mobile)
     
     user = models.User(username=self.data.username, first_name=self.form.clean.first.data.title(), last_name=self.form.clean.last.data.title())
     user.save()
     
     # ok its not in use, save it all and respond
     provider = models.Provider(mobile=mobile, user=user, clinic=facility, active=not bool(in_use))
     provider.save()
     
     log(provider, "provider_registered")
     if not in_use:
         # all goood!
         self.data.provider = provider
         self.data.facility = facility
         return True
     else:
         # send them back a confirm message
         raise CommandError, self.error_in_use(in_use, facility)
 def process(self):
     # to do, refactor this out
     self.data.provider = provider = models.Provider.by_mobile(self.message.peer)
     lookup = {"ref_id": self.form.clean.child.data, "provider": provider}
     if "active" in [ f.name for f in models.Case._meta.fields ]:
         lookup["active"] = True
         
     try:
         case = models.Case.objects.get(**lookup)
     except models.Case.DoesNotExist:
         raise CommandError, self.error_not_exists()
     
     try:
         report = case.reportmalnutrition_set.latest()
         report.delete()
     except ObjectDoesNotExist:
         raise CommandError, self.error_no_report(case.ref_id)
         
     log(case, "report_cancelled")
     self.data.case = case