Пример #1
0
    def test_all(self):
        sdp = ServiceDeliveryPoint(name="Test SDP")
        self.assertEqual(sdp.name, "Test SDP")
        sdp.save()

        self.assertFalse(
            sdp.received_reminder_after(
                "r_and_r_reminder_sent_facility",
                datetime(datetime.now().year,
                         datetime.now().month, 1) - timedelta(seconds=1)))

        #create a reminder
        st = ServiceDeliveryPointStatusType.objects.filter(
            short_name="r_and_r_reminder_sent_facility")[0:1].get()
        ns = ServiceDeliveryPointStatus(service_delivery_point=sdp,
                                        status_type=st,
                                        status_date=datetime.now())
        ns.save()

        #check reminder
        self.assertTrue(
            sdp.received_reminder_after(
                "r_and_r_reminder_sent_facility",
                datetime(datetime.now().year,
                         datetime.now().month, 1) - timedelta(seconds=1)))
Пример #2
0
 def help(self):
     service_delivery_point = self.msg.contact.contactdetail.service_delivery_point
     if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
         self.respond(
             _("How many R&R forms have you submitted to MSD for group %(group)s? Reply with 'submitted A <number of R&Rs submitted for group A> B <number of R&Rs submitted for group B>...'"
               ))
     elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
         st = ServiceDeliveryPointStatusType.objects.filter(
             short_name="r_and_r_submitted_facility_to_district")[0:1].get(
             )
         ns = ServiceDeliveryPointStatus(
             service_delivery_point=service_delivery_point,
             status_type=st,
             status_date=datetime.now())
         ns.save()
         kwargs = {
             'contact_name':
             self.msg.contact.name,
             'sdp_name':
             self.msg.contact.contactdetail.service_delivery_point.name
         }
         self.respond(
             _('Thank you %(contact_name)s for submitting your R and R form for %(sdp_name)s'
               ), **kwargs)
         return
Пример #3
0
 def help(self):
     service_delivery_point=self.msg.contact.contactdetail.service_delivery_point
     if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
         self.respond(_("How many R&R forms have you submitted to MSD for group %(group)s? Reply with 'submitted A <number of R&Rs submitted for group A> B <number of R&Rs submitted for group B>...'"))
     elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
         st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_submitted_facility_to_district")[0:1].get()
         ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
         ns.save()
         kwargs = {'contact_name': self.msg.contact.name,
                   'sdp_name': self.msg.contact.contactdetail.service_delivery_point.name}
         self.respond(_('Thank you %(contact_name)s for submitting your R and R form for %(sdp_name)s'), **kwargs)
         return
Пример #4
0
 def test_all(self):
     sdp = ServiceDeliveryPoint(name="Test SDP")
     self.assertEqual(sdp.name, "Test SDP")
     sdp.save() 
     
     self.assertFalse(sdp.received_reminder_after("r_and_r_reminder_sent_facility", datetime(datetime.now().year, datetime.now().month, 1) - timedelta(seconds=1)))
     
     #create a reminder
     st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_reminder_sent_facility")[0:1].get()
     ns = ServiceDeliveryPointStatus(service_delivery_point=sdp, status_type=st, status_date=datetime.now())
     ns.save()
        
     #check reminder
     self.assertTrue(sdp.received_reminder_after("r_and_r_reminder_sent_facility", datetime(datetime.now().year, datetime.now().month, 1) - timedelta(seconds=1)))
Пример #5
0
    def handle(self, text):
        service_delivery_point=self.msg.contact.contactdetail.service_delivery_point
        if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
            st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_submitted_district_to_msd")[0:1].get()
            ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
            ns.save()
            
            delivery_groups_list = text.split()
            if len(delivery_groups_list) > 0 and len(delivery_groups_list) % 2 != 0:
                 self.respond(_("Sorry, invalid format.  The message should be in the format 'submitted A <quantity  of R&R forms for group A> B <quantity  of R&R forms for group B>...'"))
                 return
            else:    
                sdp = self.msg.contact.contactdetail.service_delivery_point
                while len(delivery_groups_list) >= 2:
                    quantity = delivery_groups_list.pop(0)
                    delivery_group_name = delivery_groups_list.pop(0)
                    if not is_number(quantity):
                        if is_number(delivery_group_name):
                            temp = delivery_group_name
                            delivery_group_name = quantity
                            quantity = temp
                        else:                        
                            self.respond(_("Sorry, invalid format.  The message should be in the format 'submitted A <quantity  of R&R forms for group A> B <quantity  of R&R forms for group B>...'"))
                            return
                                        
                    try:
                        delivery_group = DeliveryGroup.objects.filter(name__iexact=delivery_group_name)[0:1].get()   
                    except DeliveryGroup.DoesNotExist:
                        kwargs = {'delivery_group_name': delivery_group_name.upper()}
                        self.respond(_("Sorry, invalid Delivery Group %(delivery_group_name)s. Please try again"), **kwargs)
                        return
                    if float(quantity) > service_delivery_point.child_sdps().filter(delivery_group__name__iexact=delivery_group_name).count():
                        kwargs = {'quantity': quantity,
                                  'delivery_group_name': delivery_group_name.upper()}
                        self.respond(_("You reported %(quantity)s forms submitted for group %(delivery_group_name)s, which is more than the number of facilities in group %(delivery_group_name)s. Please try again."), **kwargs)
                        return

                    sdp.report_delivery_group_status(delivery_group=delivery_group,quantity=quantity, message=self.msg.logger_msg)
            kwargs = {'contact_name': self.msg.contact.name,
                      'sdp_name': self.msg.contact.contactdetail.service_delivery_point.name}
            self.respond(_('Thank you %(contact_name)s for reporting your R&R form submissions for %(sdp_name)s'), **kwargs)
            self._send_randr_alert_to_facilities(service_delivery_point)
            return
        elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
            st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_submitted_facility_to_district")[0:1].get()
            ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
            ns.save()
            kwargs = {'contact_name': self.msg.contact.name,
                      'sdp_name': self.msg.contact.contactdetail.service_delivery_point.name}
            self.respond(_('Thank you %(contact_name)s for submitting your R and R form for %(sdp_name)s'), **kwargs)
            return
        else:
            self.respond(_("Sorry, you need to register."))
Пример #6
0
 def help(self):
     service_delivery_point=self.msg.contact.contactdetail.service_delivery_point
     if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
         st = ServiceDeliveryPointStatusType.objects.filter(short_name="delivery_received_district")[0:1].get()
         ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
         ns.save()
         kwargs={'contact_name': self.msg.contact.name,
                 'facility_name': service_delivery_point.name}
         self.respond(_('Thank you %(contact_name)s for reporting your delivery for %(facility_name)s'), **kwargs)
         self._send_delivery_alert_to_facilities(service_delivery_point)
     elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
         st = ServiceDeliveryPointStatusType.objects.filter(short_name="delivery_received_facility")[0:1].get()
         ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
         ns.save()
         self.respond(_("To record a delivery, respond with \"delivered product amount product amount...\""))
Пример #7
0
 def handle(self, text):
     service_delivery_point=self.msg.contact.contactdetail.service_delivery_point
     if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
         st = ServiceDeliveryPointStatusType.objects.filter(short_name="delivery_received_district")[0:1].get()
         ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
         ns.save()
         kwargs={'contact_name': self.msg.contact.name,
                 'facility_name': service_delivery_point.name}
         self.respond(_('Thank you %(contact_name)s for reporting your delivery for %(facility_name)s'), **kwargs)
         self._send_delivery_alert_to_facilities(service_delivery_point)
     elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
         product_list = text.split()
         if len(product_list) > 0 and len(product_list) % 2 != 0:
              self.respond(_("Sorry, invalid format.  The message should be in the format 'delivered product amount product amount'"))
              return
         else:
             reply_list = []
             while len(product_list) >= 2:
                 product_code = product_list.pop(0)
                 quantity = product_list.pop(0)
                 if not is_number(quantity):
                     if is_number(product_code):
                         temp = product_code
                         product_code = quantity
                         quantity = temp
                     else:                        
                         self.respond(_("Sorry, invalid format.  The message should be in the format 'delivered product amount product amount'"))
                         return
                 
                 report_type = ProductReportType.objects.filter(sms_code='dlvd')[0:1].get()
                 try:
                     product = Product.get_product(product_code)      
                 except Product.DoesNotExist:
                     self.respond(_('Sorry, invalid product code %(code)s'), code=product_code)
                     return
                 reply_list.append('%s %s' % (product.sms_code, quantity) )
                 service_delivery_point.report_product_status(product=product,report_type=report_type,quantity=quantity, message=self.msg.logger_msg)
             
             st = ServiceDeliveryPointStatusType.objects.filter(short_name="delivery_quantities_reported")[0:1].get()
             ns = ServiceDeliveryPointStatus(service_delivery_point=service_delivery_point, status_type=st, status_date=datetime.now())
             ns.save()
             self.respond(_('Thank you, you reported a delivery of %(reply_list)s. If incorrect, please resend.'), reply_list=','.join(reply_list))             
Пример #8
0
    def handle(self, text):
        service_delivery_point = self.msg.contact.contactdetail.service_delivery_point
        if service_delivery_point.service_delivery_point_type.name == "DISTRICT":
            st = ServiceDeliveryPointStatusType.objects.filter(
                short_name="r_and_r_submitted_district_to_msd")[0:1].get()
            ns = ServiceDeliveryPointStatus(
                service_delivery_point=service_delivery_point,
                status_type=st,
                status_date=datetime.now())
            ns.save()

            delivery_groups_list = text.split()
            if len(delivery_groups_list
                   ) > 0 and len(delivery_groups_list) % 2 != 0:
                self.respond(
                    _("Sorry, invalid format.  The message should be in the format 'submitted A <quantity  of R&R forms for group A> B <quantity  of R&R forms for group B>...'"
                      ))
                return
            else:
                sdp = self.msg.contact.contactdetail.service_delivery_point
                while len(delivery_groups_list) >= 2:
                    quantity = delivery_groups_list.pop(0)
                    delivery_group_name = delivery_groups_list.pop(0)
                    if not is_number(quantity):
                        if is_number(delivery_group_name):
                            temp = delivery_group_name
                            delivery_group_name = quantity
                            quantity = temp
                        else:
                            self.respond(
                                _("Sorry, invalid format.  The message should be in the format 'submitted A <quantity  of R&R forms for group A> B <quantity  of R&R forms for group B>...'"
                                  ))
                            return

                    try:
                        delivery_group = DeliveryGroup.objects.filter(
                            name__iexact=delivery_group_name)[0:1].get()
                    except DeliveryGroup.DoesNotExist:
                        kwargs = {
                            'delivery_group_name': delivery_group_name.upper()
                        }
                        self.respond(
                            _("Sorry, invalid Delivery Group %(delivery_group_name)s. Please try again"
                              ), **kwargs)
                        return
                    if float(quantity) > service_delivery_point.child_sdps(
                    ).filter(delivery_group__name__iexact=delivery_group_name
                             ).count():
                        kwargs = {
                            'quantity': quantity,
                            'delivery_group_name': delivery_group_name.upper()
                        }
                        self.respond(
                            _("You reported %(quantity)s forms submitted for group %(delivery_group_name)s, which is more than the number of facilities in group %(delivery_group_name)s. Please try again."
                              ), **kwargs)
                        return

                    sdp.report_delivery_group_status(
                        delivery_group=delivery_group,
                        quantity=quantity,
                        message=self.msg.logger_msg)
            kwargs = {
                'contact_name':
                self.msg.contact.name,
                'sdp_name':
                self.msg.contact.contactdetail.service_delivery_point.name
            }
            self.respond(
                _('Thank you %(contact_name)s for reporting your R&R form submissions for %(sdp_name)s'
                  ), **kwargs)
            self._send_randr_alert_to_facilities(service_delivery_point)
            return
        elif service_delivery_point.service_delivery_point_type.name == "FACILITY":
            st = ServiceDeliveryPointStatusType.objects.filter(
                short_name="r_and_r_submitted_facility_to_district")[0:1].get(
                )
            ns = ServiceDeliveryPointStatus(
                service_delivery_point=service_delivery_point,
                status_type=st,
                status_date=datetime.now())
            ns.save()
            kwargs = {
                'contact_name':
                self.msg.contact.name,
                'sdp_name':
                self.msg.contact.contactdetail.service_delivery_point.name
            }
            self.respond(
                _('Thank you %(contact_name)s for submitting your R and R form for %(sdp_name)s'
                  ), **kwargs)
            return
        else:
            self.respond(_("Sorry, you need to register."))
Пример #9
0
    def handle(self, text):
        result = text.lower().split()
        command = result.pop(0)
        msd_code = result.pop(0)
        extra = ''
        while len(result) > 0:
            extra = extra + ' ' + result.pop(0)
            
        if command != 'send_inquiry_message':
            try:
                sdp = ServiceDeliveryPoint.objects.get(msd_code=msd_code.upper())
            except:
                self.respond("Invalid msd code %s" % msd_code)
                return
            contact_details_to_remind = ContactDetail.objects.filter(service_delivery_point=sdp)

        if command in ['la']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(default_connection, _("Please send in your adjustments in the format 'la <product> +-<amount> +-<product> +-<amount>...'"))
                    m.send() 
                    st = ServiceDeliveryPointStatusType.objects.filter(short_name="lost_adjusted_reminder_sent_facility")[0:1].get()
                    ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        if command in ['fw']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(default_connection, _(extra))
                    m.send() 
            self.respond("Sent '%s'" % _(extra))
        if command in ['supervision']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(default_connection, _("Have you received supervision this month? Please reply 'supervision yes' or 'supervision no'"))
                    m.send() 
                    st = ServiceDeliveryPointStatusType.objects.filter(short_name="supervision_reminder_sent_facility")[0:1].get()
                    ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        if command in ['soh','hmk']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(default_connection, _("Please send in your stock on hand information in the format 'soh <product> <amount> <product> <amount>...'"))
                    m.send() 
                    st = ServiceDeliveryPointStatusType.objects.filter(short_name="soh_reminder_sent_facility")[0:1].get()
                    ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        elif command in ['si']:
            product = Product.objects.get(product_code=addl_parameter)
            if not product:
                self.respond("Invalid product code %s" % addl_parameter)
                return
            if sdp.service_delivery_point_type.name == "FACILITY":
                contact_details_to_remind = ContactDetail.objects.filter(service_delivery_point=sdp)                
                for contact_detail in contact_details_to_remind:
                    default_connection = contact_detail.default_connection
                    if default_connection:
                        m = OutgoingMessage(default_connection, _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'" % (product.name, addl_parameter, addl_parameter) ))
                        m.send() 
                self.respond("Sent")
            else:
                self.respond("Can only initiate product inquiry for a single facility via SMS - %s is a %s" % (sdp.name, sdp.service_delivery_point_type.name) )
                return
                
        elif command in ['send_inquiry_message']:
            product = Product.objects.get(product_code=addl_parameter)
            if not product:
                self.respond("Invalid product code %s" % addl_parameter)
                return
            try:
                sdp = ServiceDeliveryPoint.objects.get(id=msd_code)
            except:
                self.respond("Invalid ID %s" % msd_code)
                return
            
            if sdp.service_delivery_point_type.name == "FACILITY":
                contact_details_to_remind = ContactDetail.objects.filter(service_delivery_point=sdp)                
                for contact_detail in contact_details_to_remind:
                    default_connection = contact_detail.default_connection
                    if default_connection:
                        m = OutgoingMessage(default_connection, _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'" % (product.name, addl_parameter, addl_parameter) ))
                        m.send() 
            elif sdp.service_delivery_point_type.name == "DISTRICT":
                for facility_sdp in sdp.child_sdps():
                    contact_details_to_remind = ContactDetail.objects.filter(service_delivery_point=facility_sdp)                
                    for contact_detail in contact_details_to_remind:
                        default_connection = contact_detail.default_connection
                        if default_connection:
                            m = OutgoingMessage(default_connection, _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'" % (product.name, addl_parameter, addl_parameter) ))
                            m.send() 
            elif sdp.service_delivery_point_type.name == "REGION":
                for district_sdp in sdp.child_sdps():
                    for facility_sdp in district_sdp.child_sdps:
                        contact_details_to_remind = ContactDetail.objects.filter(service_delivery_point=facility_sdp)                
                        for contact_detail in contact_details_to_remind:
                            default_connection = contact_detail.default_connection
                            if default_connection:
                                m = OutgoingMessage(default_connection, _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'" % (product.name, addl_parameter, addl_parameter) ))
                                m.send()

        elif command in ['randr']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    if sdp.service_delivery_point_type.name == "DISTRICT":
                        m = OutgoingMessage(default_connection, _("How many R&R forms have you submitted to MSD? Reply with 'submitted A <number of R&Rs submitted for group A> B <number of R&Rs submitted for group B>'"))
                        m.send() 
                    elif sdp.service_delivery_point_type.name == "FACILITY":
                        m = OutgoingMessage(default_connection, _("Have you sent in your R&R form yet for this quarter? Please reply \"submitted\" or \"not submitted\""))
                        m.send() 
                        st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_reminder_sent_facility")[0:1].get()
                        ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                        ns.save()        
            self.respond("Sent")
        elif command in ['delivery']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    if contact_detail.service_delivery_point.service_delivery_point_type.name == "FACILITY":
                        m = OutgoingMessage(default_connection, _("Did you receive your delivery yet? Please reply 'delivered <product> <amount> <product> <amount>...'"))
                        m.send() 
                        st = ServiceDeliveryPointStatusType.objects.filter(short_name="delivery_received_reminder_sent_facility")[0:1].get()
                        ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                        ns.save()
                    elif contact_detail.service_delivery_point.service_delivery_point_type.name == "DISTRICT": 
                        m = OutgoingMessage(default_connection, _("Did you receive your delivery yet? Please reply 'delivered' or 'not delivered'"))
                        m.send() 
                        st = ServiceDeliveryPointStatusType.objects.filter(short_name="r_and_r_reminder_sent_district")[0:1].get()
                        ns = ServiceDeliveryPointStatus(service_delivery_point=contact_detail.service_delivery_point, status_type=st, status_date=datetime.now())
                        ns.save()
                    else:
                        self.respond("Sorry there was a problem with your service delivery point setup. Please check via the admin.")
            self.respond("Sent")
        elif command in ['latedelivery']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    service_delivery_point = contact_detail.service_delivery_point
                    kwargs = {"group_name": current_delivering_group(), 
                              "group_total": service_delivery_point.child_sdps().filter(delivery_group__name=current_delivering_group()).count(), 
                              "not_responded_count": service_delivery_point.child_sdps_not_responded_delivery_this_month(), 
                              "not_received_count": service_delivery_point.child_sdps_not_received_delivery_this_month()}
                    m = OutgoingMessage(default_connection, 
                                        _("Facility deliveries for group %(group_name)s (out of %(group_total)d): %(not_responded_count)d haven't responded and %(not_received_count)d have reported not receiving. See ilsgateway.com"),
                                        **kwargs) 
                    m.send()         
            self.respond("Sent")
                        
Пример #10
0
    def handle(self, text):
        result = text.lower().split()
        command = result.pop(0)
        msd_code = result.pop(0)
        extra = ''
        while len(result) > 0:
            extra = extra + ' ' + result.pop(0)

        if command != 'send_inquiry_message':
            try:
                sdp = ServiceDeliveryPoint.objects.get(
                    msd_code=msd_code.upper())
            except:
                self.respond("Invalid msd code %s" % msd_code)
                return
            contact_details_to_remind = ContactDetail.objects.filter(
                service_delivery_point=sdp)

        if command in ['la']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(
                        default_connection,
                        _("Please send in your adjustments in the format 'la <product> +-<amount> +-<product> +-<amount>...'"
                          ))
                    m.send()
                    st = ServiceDeliveryPointStatusType.objects.filter(
                        short_name="lost_adjusted_reminder_sent_facility"
                    )[0:1].get()
                    ns = ServiceDeliveryPointStatus(
                        service_delivery_point=contact_detail.
                        service_delivery_point,
                        status_type=st,
                        status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        if command in ['fw']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(default_connection, _(extra))
                    m.send()
            self.respond("Sent '%s'" % _(extra))
        if command in ['supervision']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(
                        default_connection,
                        _("Have you received supervision this month? Please reply 'supervision yes' or 'supervision no'"
                          ))
                    m.send()
                    st = ServiceDeliveryPointStatusType.objects.filter(
                        short_name="supervision_reminder_sent_facility"
                    )[0:1].get()
                    ns = ServiceDeliveryPointStatus(
                        service_delivery_point=contact_detail.
                        service_delivery_point,
                        status_type=st,
                        status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        if command in ['soh', 'hmk']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    m = OutgoingMessage(
                        default_connection,
                        _("Please send in your stock on hand information in the format 'soh <product> <amount> <product> <amount>...'"
                          ))
                    m.send()
                    st = ServiceDeliveryPointStatusType.objects.filter(
                        short_name="soh_reminder_sent_facility")[0:1].get()
                    ns = ServiceDeliveryPointStatus(
                        service_delivery_point=contact_detail.
                        service_delivery_point,
                        status_type=st,
                        status_date=datetime.now())
                    ns.save()
            self.respond("Sent")
        elif command in ['si']:
            product = Product.objects.get(product_code=addl_parameter)
            if not product:
                self.respond("Invalid product code %s" % addl_parameter)
                return
            if sdp.service_delivery_point_type.name == "FACILITY":
                contact_details_to_remind = ContactDetail.objects.filter(
                    service_delivery_point=sdp)
                for contact_detail in contact_details_to_remind:
                    default_connection = contact_detail.default_connection
                    if default_connection:
                        m = OutgoingMessage(
                            default_connection,
                            _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'"
                              %
                              (product.name, addl_parameter, addl_parameter)))
                        m.send()
                self.respond("Sent")
            else:
                self.respond(
                    "Can only initiate product inquiry for a single facility via SMS - %s is a %s"
                    % (sdp.name, sdp.service_delivery_point_type.name))
                return

        elif command in ['send_inquiry_message']:
            product = Product.objects.get(product_code=addl_parameter)
            if not product:
                self.respond("Invalid product code %s" % addl_parameter)
                return
            try:
                sdp = ServiceDeliveryPoint.objects.get(id=msd_code)
            except:
                self.respond("Invalid ID %s" % msd_code)
                return

            if sdp.service_delivery_point_type.name == "FACILITY":
                contact_details_to_remind = ContactDetail.objects.filter(
                    service_delivery_point=sdp)
                for contact_detail in contact_details_to_remind:
                    default_connection = contact_detail.default_connection
                    if default_connection:
                        m = OutgoingMessage(
                            default_connection,
                            _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'"
                              %
                              (product.name, addl_parameter, addl_parameter)))
                        m.send()
            elif sdp.service_delivery_point_type.name == "DISTRICT":
                for facility_sdp in sdp.child_sdps():
                    contact_details_to_remind = ContactDetail.objects.filter(
                        service_delivery_point=facility_sdp)
                    for contact_detail in contact_details_to_remind:
                        default_connection = contact_detail.default_connection
                        if default_connection:
                            m = OutgoingMessage(
                                default_connection,
                                _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'"
                                  % (product.name, addl_parameter,
                                     addl_parameter)))
                            m.send()
            elif sdp.service_delivery_point_type.name == "REGION":
                for district_sdp in sdp.child_sdps():
                    for facility_sdp in district_sdp.child_sdps:
                        contact_details_to_remind = ContactDetail.objects.filter(
                            service_delivery_point=facility_sdp)
                        for contact_detail in contact_details_to_remind:
                            default_connection = contact_detail.default_connection
                            if default_connection:
                                m = OutgoingMessage(
                                    default_connection,
                                    _("How much %s (msd code %s) do you have in stock?  Please respond 'si %s <amount>'"
                                      % (product.name, addl_parameter,
                                         addl_parameter)))
                                m.send()

        elif command in ['randr']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    if sdp.service_delivery_point_type.name == "DISTRICT":
                        m = OutgoingMessage(
                            default_connection,
                            _("How many R&R forms have you submitted to MSD? Reply with 'submitted A <number of R&Rs submitted for group A> B <number of R&Rs submitted for group B>'"
                              ))
                        m.send()
                    elif sdp.service_delivery_point_type.name == "FACILITY":
                        m = OutgoingMessage(
                            default_connection,
                            _("Have you sent in your R&R form yet for this quarter? Please reply \"submitted\" or \"not submitted\""
                              ))
                        m.send()
                        st = ServiceDeliveryPointStatusType.objects.filter(
                            short_name="r_and_r_reminder_sent_facility"
                        )[0:1].get()
                        ns = ServiceDeliveryPointStatus(
                            service_delivery_point=contact_detail.
                            service_delivery_point,
                            status_type=st,
                            status_date=datetime.now())
                        ns.save()
            self.respond("Sent")
        elif command in ['delivery']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    if contact_detail.service_delivery_point.service_delivery_point_type.name == "FACILITY":
                        m = OutgoingMessage(
                            default_connection,
                            _("Did you receive your delivery yet? Please reply 'delivered <product> <amount> <product> <amount>...'"
                              ))
                        m.send()
                        st = ServiceDeliveryPointStatusType.objects.filter(
                            short_name="delivery_received_reminder_sent_facility"
                        )[0:1].get()
                        ns = ServiceDeliveryPointStatus(
                            service_delivery_point=contact_detail.
                            service_delivery_point,
                            status_type=st,
                            status_date=datetime.now())
                        ns.save()
                    elif contact_detail.service_delivery_point.service_delivery_point_type.name == "DISTRICT":
                        m = OutgoingMessage(
                            default_connection,
                            _("Did you receive your delivery yet? Please reply 'delivered' or 'not delivered'"
                              ))
                        m.send()
                        st = ServiceDeliveryPointStatusType.objects.filter(
                            short_name="r_and_r_reminder_sent_district"
                        )[0:1].get()
                        ns = ServiceDeliveryPointStatus(
                            service_delivery_point=contact_detail.
                            service_delivery_point,
                            status_type=st,
                            status_date=datetime.now())
                        ns.save()
                    else:
                        self.respond(
                            "Sorry there was a problem with your service delivery point setup. Please check via the admin."
                        )
            self.respond("Sent")
        elif command in ['latedelivery']:
            for contact_detail in contact_details_to_remind:
                default_connection = contact_detail.default_connection
                if default_connection:
                    service_delivery_point = contact_detail.service_delivery_point
                    kwargs = {
                        "group_name":
                        current_delivering_group(),
                        "group_total":
                        service_delivery_point.child_sdps().filter(
                            delivery_group__name=current_delivering_group(
                            )).count(),
                        "not_responded_count":
                        service_delivery_point.
                        child_sdps_not_responded_delivery_this_month(),
                        "not_received_count":
                        service_delivery_point.
                        child_sdps_not_received_delivery_this_month()
                    }
                    m = OutgoingMessage(
                        default_connection,
                        _("Facility deliveries for group %(group_name)s (out of %(group_total)d): %(not_responded_count)d haven't responded and %(not_received_count)d have reported not receiving. See ilsgateway.com"
                          ), **kwargs)
                    m.send()
            self.respond("Sent")