def handle(self, text): product_list = self.parse_report(text) # flatten product_list = map(str, [item for sublist in product_list for item in sublist]) #product_list = text.split() if (len(product_list) == 0) or (len(product_list) > 0 and len(product_list) % 2 != 0): self.respond(_("Sorry, invalid format. The message should be in the format 'soh <product> <amount> <product> <amount>'")) return else: reported_products = [] sdp = self.msg.contact.contactdetail.service_delivery_point reply_list = [] while len(product_list) >= 2: product_code = sub('\.', '', product_list.pop(0)) quantity = sub('\.', '', 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 'soh product amount product amount'")) return report_type = ProductReportType.objects.filter(sms_code='soh')[0:1].get() try: product = Product.get_product(product_code) except Product.DoesNotExist: self.respond(_("Sorry, invalid product code %(code)s"), code=product_code.upper()) return reported_products.append(product.sms_code) reply_list.append('%s' % (product.sms_code) ) sdp.report_product_status(product=product,report_type=report_type,quantity=quantity, message=self.msg.logger_msg) now = datetime.now() all_products = [] date_check = datetime.now() + relativedelta(days=-7) missing_products = Product.objects.filter(Q(activeproduct__service_delivery_point=sdp, activeproduct__is_active=True), ~Q(servicedeliverypointproductreport__report_date__gt=date_check) ) for dict in missing_products.values('sms_code'): all_products.append(dict['sms_code']) missing_product_list = list(set(all_products)-set(reported_products)) if missing_product_list: kwargs = {'contact_name': self.msg.contact.name, 'facility_name': sdp.name, 'product_list': ' '.join(missing_product_list)} self.respond(_('Thank you %(contact_name)s for reporting your stock on hand for %(facility_name)s. Still missing %(product_list)s.'), **kwargs) else: self.respond(_('Thank you, you reported you have %(reply_list)s. If incorrect, please resend.'), reply_list=','.join(reply_list)) self.respond(_("Please send in your adjustments in the format 'la <product> +-<amount> +-<product> +-<amount>...'")) st = ServiceDeliveryPointStatusType.objects.filter(short_name="lost_adjusted_reminder_sent_facility")[0:1].get() ns = ServiceDeliveryPointStatus(service_delivery_point=sdp, status_type=st, status_date=datetime.now()) ns.save()
def handle(self, text): product_code = text.strip().upper() try: product = Product.get_product(product_code) except Product.DoesNotExist: self.respond(_("Sorry, invalid product code %(code)s"), code=product_code) return sdp = self.msg.contact.contactdetail.service_delivery_point report_type = ProductReportType.objects.filter(sms_code='soh')[0:1].get() sdp.report_product_status(product=product,report_type=report_type,quantity=0, message=self.msg.logger_msg) kwargs = {'contact_name': self.msg.contact.name, 'facility_name': sdp.name, 'product_name': product.name} self.respond(_('Thank you %(contact_name)s for reporting a stockout of %(product_name)s for %(facility_name)s.'), **kwargs)
def handle(self, text): 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 'la <product> +-<amount> +-<product> +-<amount>...")) return else: reported_products = [] sdp = self.msg.contact.contactdetail.service_delivery_point 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 'la <product> +-<amount> +-<product> +-<amount>...")) return report_type = ProductReportType.objects.filter(sms_code='la')[0:1].get() try: product = Product.get_product(product_code) except Product.DoesNotExist: self.respond(_("Sorry, invalid product code %(code)s"), code=product_code.upper()) return reported_products.append(product.sms_code) reply_list.append('%s %s' % (product.sms_code, quantity) ) sdp.report_product_status(product=product,report_type=report_type,quantity=quantity, message=self.msg.logger_msg) now = datetime.now() all_products = [] #TODO: this needs to be fixed not to just check the last 7 days date_check = datetime.now() + relativedelta(days=-7) missing_products = Product.objects.filter(Q(activeproduct__service_delivery_point=sdp, servicedeliverypointproductreport__report_type__sms_code = 'la', activeproduct__is_active=True), ~Q(servicedeliverypointproductreport__report_date__gt=date_check) ) for dict in missing_products.values('sms_code'): all_products.append(dict['sms_code']) missing_product_list = list(set(all_products)-set(reported_products)) if missing_product_list: kwargs = {'contact_name': self.msg.contact.name, 'facility_name': sdp.name, 'product_list': ', '.join(missing_product_list), 'reply_list': ','.join(reply_list)} self.respond(_('Thank you, you reported your losses/adjustments: %(reply_list)s. Still missing %(product_list)s.'), **kwargs) else: self.respond(_('Thank you, you reported your losses/adjustments: %(reply_list)s. If incorrect, please resend.'), reply_list=','.join(reply_list))
def handle(self, text): product_code, quantity = text.split() product_code = sub('m|M', '', product_code) if not product_code and quantity: self.respond(_("Sorry, invalid format. The message should be in the format 'si <MSD product code> <amount>'")) return else: sdp = self.msg.contact.contactdetail.service_delivery_point try: product = Product.get_product(product_code) except Product.DoesNotExist: self.respond(_("Sorry, invalid product code %(code)s"), code=product_code.upper()) return if not is_number(quantity): self.respond(_("Sorry, invalid format. The message should be in the format 'si <MSD product code> <amount>'")) return report_type = ProductReportType.objects.filter(sms_code='soh')[0:1].get() sdp.report_product_status(product=product,report_type=report_type,quantity=quantity, message=self.msg.logger_msg) self.respond(_('Thank you, you reported you have %(quantity)s %(product_name)s. If incorrect, please resend.'), product_name=product.name, quantity=quantity)
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))