def testStockoutSupplyFlow(self): hsa, ic = self._setup_users()[0:2] report_stock(self, hsa, "zi 10 la 15", [ic], "zi 190, la 345") a = """ 16175551001 > os 261601 16175551000 < %(hsa_notice)s 16175551003 < %(district)s 16175551002 < %(district)s 16175551001 < %(confirm)s """ % {"confirm": config.Messages.HF_UNABLE_RESTOCK_EO %\ {"reporter": "sally", "products": "zi, la"}, "hsa_notice": config.Messages.HSA_UNABLE_RESTOCK_ANYTHING % {"hsa": "wendy"}, "district": config.Messages.DISTRICT_UNABLE_RESTOCK_NORMAL % \ {"contact": "sally", "supply_point": "Ntaja", "products": "zi, la"}} self.runScript(a) self.assertEqual(2, StockRequest.objects.count()) for req in StockRequest.objects.all(): self.assertEqual(req.supply_point, SupplyPoint.objects.get(code="261601")) self.assertEqual(StockRequestStatus.STOCKED_OUT, req.status) self.assertEqual(StockRequestStatus.STOCKED_OUT, req.response_status) self.assertTrue(req.is_pending()) zi = ProductStock.objects.get(product__sms_code="zi", supply_point=SupplyPoint.objects.get(code="261601")) la = ProductStock.objects.get(product__sms_code="la", supply_point=SupplyPoint.objects.get(code="261601")) self.assertEqual(zi.quantity, 10) self.assertEqual(la.quantity, 15)
def testSOHBeforeReceipt(self): hsa, ic, sh = self._setup_users()[0:3] report_stock(self, hsa, "zi 10 la 15", [ic,sh], "zi 190, la 345") zi = ProductStock.objects.get(product__sms_code="zi", supply_point=SupplyPoint.objects.get(code="261601")) la = ProductStock.objects.get(product__sms_code="la", supply_point=SupplyPoint.objects.get(code="261601")) self.assertEqual(2, StockRequest.objects.filter(status=StockRequestStatus.REQUESTED).count()) b = """ 16175551001 > ready 261601 16175551001 < %(confirm)s 16175551000 < %(hsa_notice)s """ % {"confirm": config.Messages.APPROVAL_RESPONSE % \ {"hsa": "wendy"}, "hsa_notice": config.Messages.APPROVAL_NOTICE % \ {"hsa": "wendy"}} self.runScript(b) self.assertEqual(2, StockRequest.objects.filter(status=StockRequestStatus.APPROVED).count()) report_stock(self, hsa, "zi 10 la 15", [ic,sh], "zi 190, la 345") self.assertEqual(2, StockRequest.objects.filter(status=StockRequestStatus.REQUESTED).count()) c = """ 16175551000 > rec zi 190 la 345 16175551000 < Thank you, you reported receipts for zi la. """ self.runScript(c) self.assertEqual(200, ProductStock.objects.get(pk=zi.pk).quantity) self.assertEqual(360, ProductStock.objects.get(pk=la.pk).quantity) self.assertEqual(2, StockRequest.objects.filter(status=StockRequestStatus.RECEIVED).count())
def testAppendStockOnHand(self): hsa, ic, sh = self._setup_users()[0:3] report_stock(self, hsa, "zi 10 la 15", [ic,sh], "zi 190, la 345") self.assertEqual(2, StockRequest.objects.count()) report_stock(self, hsa, "zi 5 lb 20", [ic,sh], "la 345, lb 172, zi 195") self.assertEqual(4, StockRequest.objects.count()) self.assertEqual(3, StockRequest.objects.filter(status=StockRequestStatus.REQUESTED).count()) self.assertEqual(1, StockRequest.objects.filter(status=StockRequestStatus.CANCELED).count()) b = """ 16175551001 > ready 261601 16175551001 < %(confirm)s 16175551000 < %(hsa_notice)s """ % {"confirm": config.Messages.APPROVAL_RESPONSE % \ {"hsa": "wendy"}, "hsa_notice": config.Messages.APPROVAL_NOTICE % \ {"hsa": "wendy"}} self.runScript(b) self.assertEqual(3, StockRequest.objects.filter(status=StockRequestStatus.APPROVED).count()) self.assertEqual(1, StockRequest.objects.filter(status=StockRequestStatus.CANCELED).count())
def testManagerLeave(self): hsa = create_hsa(self, "555555", "somehsa", products="la zi") ic = create_manager(self, "666666", "somemanager") super = create_manager(self, "777777", "somesuper", config.Roles.HSA_SUPERVISOR) report_stock(self, hsa, "zi 10 la 15", [ic, super], "zi 190, la 345") b = """ 666666 > leave 666666 < %(left)s """ % {"left": config.Messages.LEAVE_CONFIRM} self.runScript(b) failed = False try: report_stock(self, hsa, "zi 10 la 15", [ic, super], "zi 190, la 345") except Exception: # this is expected failed = True if not failed: self.fail("Reporting stock should not have notified the supervisor") report_stock(self, hsa, "zi 10 la 15", [super], "zi 190, la 345")
def testManagerLeave(self): hsa = create_hsa(self, "555555", "somehsa", products="la zi") ic = create_manager(self, "666666", "somemanager") super = create_manager(self, "777777", "somesuper", config.Roles.HSA_SUPERVISOR) report_stock(self, hsa, "zi 10 la 15", [ic, super], "zi 190, la 345") b = """ 666666 > leave 666666 < %(left)s """ % { "left": config.Messages.LEAVE_CONFIRM } self.runScript(b) failed = False try: report_stock(self, hsa, "zi 10 la 15", [ic, super], "zi 190, la 345") except Exception: # this is expected failed = True if not failed: self.fail( "Reporting stock should not have notified the supervisor") report_stock(self, hsa, "zi 10 la 15", [super], "zi 190, la 345")
def testBasicSupplyFlow(self): hsa, ic, sh = self._setup_users()[0:3] report_stock(self, hsa, "zi 10 la 15", [ic,sh], "zi 190, la 345") self.assertEqual(2, StockRequest.objects.count()) for req in StockRequest.objects.all(): self.assertEqual(req.supply_point, SupplyPoint.objects.get(code="261601")) self.assertEqual(StockRequestStatus.REQUESTED, req.status) self.assertEqual("", req.response_status) self.assertTrue(req.is_pending()) self.assertFalse(req.is_emergency) zi = ProductStock.objects.get(product__sms_code="zi", supply_point=SupplyPoint.objects.get(code="261601")) la = ProductStock.objects.get(product__sms_code="la", supply_point=SupplyPoint.objects.get(code="261601")) self.assertEqual(zi.quantity, 10) self.assertEqual(la.quantity, 15) b = """ 16175551001 > ready 261601 16175551001 < %(confirm)s 16175551000 < %(hsa_notice)s """ % {"confirm": config.Messages.APPROVAL_RESPONSE % \ {"hsa": "wendy"}, "hsa_notice": config.Messages.APPROVAL_NOTICE % \ {"hsa": "wendy"}} self.runScript(b) self.assertEqual(2, StockRequest.objects.count()) for req in StockRequest.objects.all(): self.assertEqual(StockRequestStatus.APPROVED, req.status) self.assertEqual(StockRequestStatus.APPROVED, req.response_status) self.assertTrue(req.is_pending()) self.assertEqual(Contact.objects.get(name="sally"), req.responded_by) self.assertEqual(req.amount_requested, req.amount_approved) self.assertTrue(req.responded_on > req.requested_on) # stocks shouldn't get updated self.assertEqual(ProductStock.objects.get(pk=zi.pk).quantity, 10) self.assertEqual(ProductStock.objects.get(pk=la.pk).quantity, 15) c = """ 16175551000 > rec zi 190 la 345 16175551000 < Thank you, you reported receipts for zi la. """ self.runScript(c) self.assertEqual(2, StockRequest.objects.count()) for req in StockRequest.objects.all(): self.assertEqual(StockRequestStatus.RECEIVED, req.status) self.assertEqual(StockRequestStatus.APPROVED, req.response_status) self.assertFalse(req.is_pending()) self.assertEqual(Contact.objects.get(name="wendy"), req.received_by) self.assertEqual(req.amount_received, req.amount_requested) self.assertTrue(req.received_on > req.responded_on > req.requested_on) # stocks should now be updated self.assertEqual(ProductStock.objects.get(pk=zi.pk).quantity, 200) self.assertEqual(ProductStock.objects.get(pk=la.pk).quantity, 360) # Second receipt should increase normally c = """ 16175551000 > rec zi 190 la 345 16175551000 < Thank you, you reported receipts for zi la. """ self.runScript(c) self.assertEqual(ProductStock.objects.get(pk=zi.pk).quantity, 390) self.assertEqual(ProductStock.objects.get(pk=la.pk).quantity, 705)