def handle(self, text, keyword, lang_code): # todo: factorize this args = [self.flatten_string(arg) for arg in text.split()] #todo: rename the report model in report manager report_manager = check_against_last_report(self.msg.contact) # make update the manager date so report_manager.save() results = report_manager.results drugs_args_count = results.drugs_pack.drugs.count() * 2 require_args(args, min=drugs_args_count, max=drugs_args_count) try: args = [int(x) for x in args] for x in args: if x < 0: raise ValueError() except ValueError: return self.respond(_(u"All %(count)s values must be positive numbers") % { 'count': drugs_args_count}) for movement in results.stock_movements.all(): movement.received = args.pop(0) movement.returned = args.pop(0) if movement.returned > movement.received: return self.respond(_(u'The number of doses returned (%(returned)s) '\ u'for %(drug)s can not be greater than '\ u'the number of doses received (%(received)s).' % { 'returned': movement.returned, 'received': movement.received, 'drug': movement.drug.name })) movement.save() # todo : check if all the given pills match the one received and # the one returned ? results.report_manager.status.drug = True results.report_manager.save() results.save() # todo: prefix successeful messages by 'OK' msg = _(u"The stocks for the campaign %(campaign)s in "\ u"%(location)s are saved.") % { 'campaign': results.campaign, 'location': results.area} if report_manager.is_completed(): msg += _(u" All reports for this location are completed! Receipt: "\ u"%(receipt)s") % {'receipt': results.receipt} else: progress = results.report_manager.progress msg += _(u" You have sent %(completed)s over %(to_complete)s "\ u"reports for this location.") % {'completed': progress[0], 'to_complete': progress[1]} return self.respond(msg)
def handle(self, text, keyword, lang_code): # todo: factorize this args = [self.flatten_string(arg) for arg in text.split()] require_args(args, min=8, max=8) #todo: rename the report model in report manager report_manager = check_against_last_report(self.msg.contact) # make update the manager date so report_manager.save() results = report_manager.results try: args = [int(x) for x in args] for x in args: if x < 0: raise ValueError() except ValueError: return self.respond(_(u"All 8 values must be positive numbers")) total_wmen = sum(args) ''' if report_manager.status.men\ and report_manager.status.msc\ and report_manager.status.wsc: tot = total_wmen + results.total_untreated_females \ + results.total_treated_males + results.total_untreated_males if results.target_pop != tot: return self.respond(_(u"The sum of all the results for males and"\ u" females (%(total)s) must be equal to "\ u" the target population (%(target_pop)s)") % { 'total': tot, 'target_pop': results.target_pop}) if results.target_pop < total_wmen: return self.respond(_(u"The sum of all the results for all"\ u" females (%(total)s) can not be bigger than"\ u" the target population (%(target_pop)s)") % { 'total': total_wmen, 'target_pop': results.target_pop}) ''' results.one_dose_child_females = args[0] results.one_dose_adult_females = args[1] results.two_doses_child_females = args[2] results.two_doses_adult_females = args[3] results.three_doses_child_females = args[4] results.three_doses_adult_females = args[5] results.four_doses_child_females = args[6] results.four_doses_adult_females = args[7] results.report_manager.status.wmen = True results.report_manager.save() results.save() # todo: prefix successeful messages by 'OK' msg = _(u"The results for the campaign %(campaign)s in "\ u"%(location)s related to women are saved.") % { 'campaign': results.campaign, 'location': results.area} if report_manager.is_completed(): msg += _(u" All reports for this location are completed! Receipt: "\ u"%(receipt)s") % {'receipt': results.receipt} else: progress = results.report_manager.progress msg += _(u" You have sent %(completed)s over %(to_complete)s "\ u"reports for this location.") % {'completed': progress[0], 'to_complete': progress[1]} return self.respond(msg)
def handle(self, text, keyword, lang_code, campaign=None): args = [self.flatten_string(arg) for arg in text.split()] count = len(args) require_args(args, slices=(1, (6, 8))) # todo: check for location type here location = check_location(args[0]) if campaign: try: result = campaign.results_set.get(area=location, disabled=False) except Results.DoesNotExist: return self.respond(_(u"The location %(location)s is not part "\ u"of the campaign %(campaign)s.") % { 'location': location, 'campaign': campaign}) else: try: result = Results.objects.filter(area=location, disabled=False)\ .filter(campaign__end_date__isnull=True)\ .latest('campaign__start_date') campaign = result.campaign except Results.DoesNotExist: return self.respond(_(u"There are no active campaigns for "\ u"%(location)s right now.") % { 'location': location}) except Results.MultipleObjectsReturned: return self.respond(_(u"There are several active campaigns for "\ u"%(location)s right now. Replace 'VIL' by the "\ u"campagne code and resend your message.") % { 'location': location}) # update last sent sms result.report_manager.status.contact = self.msg.contact.pk result.report_manager.save() if count == 1: return self.respond(_(u"You are now reporting results for the "\ u"campaign %(campaign)s in %(location)s.") % { 'campaign': campaign, 'location': location }) if count == 6: if not result.drugs_pack: return self.respond(_(u"You must provide a drug package with these "\ u"results. It should be the second value alfter 'VIL'.")) args.insert(1, result.drugs_pack.code) else: result.drugs_pack = check_exists(args[1], DrugsPack) result.treatment_start_date = fix_date_year(check_date(args[2], _("%d%m"), ('-', '/'))) result.treatment_end_date = fix_date_year(check_date(args[3], _("%d%m"), ('-', '/'))) if result.treatment_start_date > result.treatment_end_date: return self.respond(_(u"Start treatment date (%(start)s) "\ u"can not be after end treatment date "\ u"(%(end)s).") % { 'start': result.treatment_start_date.strftime(_('%m/%d/%Y')), 'end': result.treatment_end_date.strftime(_('%m/%d/%Y'))}) try: data = [int(x) for x in args[4:]] for x in data: if x < 0: raise ValueError() except ValueError: return self.respond(_(u"The last 3 values must be 3 positive numbers")) if data[2] + data[1] > data[0]: return self.respond(_(u"The sum of patients under six months and "\ u"the target population %(sum)s can not be greater "\ u"than the population value (%(total_pop)s).") % { 'sum': data[2] + data[1], 'total_pop': data[0]}) result.total_pop = data[0] result.target_pop = data[1] result.treated_under_six = data[2] result.distributor = location.as_data_source.distributor result.report_manager.status.vil = True result.report_manager.save() result.save() # todo: move that in form creation # creating the empty drug stock movement if not result.stock_movements.exists(): for drug in result.drugs_pack.drugs.all(): DrugsStockMovement.objects.create(drug=drug, for_results=result) # todo: maybe this is too long... self.respond(_(u"The results for the campaign %(campaign)s in "\ u"%(location)s are saved. From %(start)s, to %(end)s "\ u"targetting %(target_pop)s/%(total_pop)s people and "\ u"%(under_six_pop)s under six months.") % {'total_pop': data[0], 'under_six_pop': data[2], 'target_pop': data[1], 'campaign': campaign, 'start': result.treatment_start_date.strftime(_('%m/%d/%Y')), 'end': result.treatment_end_date.strftime(_('%m/%d/%Y')), 'location': location})