示例#1
0
文件: med.py 项目: yeleman/ntd
    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)
示例#2
0
文件: wmen.py 项目: yeleman/ntd
    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)
示例#3
0
文件: vil.py 项目: yeleman/ntd
    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})