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
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