def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() from eums.fixtures.end_user_questions import seed_questions questions, options = seed_questions() po_item = PurchaseOrderItemFactory(quantity=100, value=1000) end_user_node_one = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=10, item=po_item) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED']) self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() distribution_plan = DeliveryFactory(programme=self.programme, track=True) self.today = FakeDate.today() self.end_user_node_two = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=20, item=po_item, distribution_plan=distribution_plan) MultipleChoiceAnswerFactory(run=RunFactory( runnable=self.end_user_node_two, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED']) end_user_node_three = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=30, item=po_item, distribution_plan=distribution_plan, ip=self.ip, consignee=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_three, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) end_user_node_four = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=40, item=po_item) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_four, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) end_user_node_five = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=50, item=po_item) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_five, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) non_response_node = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, track=True, quantity=60, item=po_item) RunFactory(runnable=non_response_node, status=Run.STATUS.scheduled)
def test_should_schedule_flow_to_start_after_buffer_when_calculated_send_time_is_in_past(self): some_date = FakeDate.today() - datetime.timedelta(days=10) node = NodeFactory(delivery_date=some_date) node.build_contact = MagicMock(return_value=self.contact) schedule_run_for(node) self.assertEqual(mock_celery.invoked_after, 10.0)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() from eums.fixtures.end_user_questions import seed_questions questions, options = seed_questions() po_item = PurchaseOrderItemFactory(quantity=100, value=1000) end_user_node_one = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=10, item=po_item, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED'] ) self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() distribution_plan = DeliveryFactory(programme=self.programme, track=True) self.today = FakeDate.today() self.end_user_node_two = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=20, item=po_item, distribution_plan=distribution_plan, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=self.end_user_node_two, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED'] ) end_user_node_three = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=30, item=po_item, distribution_plan=distribution_plan, ip=self.ip, consignee=self.ip, delivery_date=self.today + datetime.timedelta(days=3), track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_three, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) end_user_node_four = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=40, item=po_item, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_four, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) end_user_node_five = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=50, item=po_item, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_five, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) non_response_node = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, track=True, quantity=60, item=po_item) RunFactory(runnable=non_response_node, status=Run.STATUS.scheduled)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() self.today = FakeDate.today() po_item = PurchaseOrderItemFactory(quantity=100, value=1000) ip_delivery_one = DeliveryFactory(location='some location', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=10, item=po_item, distribution_plan=ip_delivery_one, consignee=self.ip) other_delivery = DeliveryFactory(location='Other location', delivery_date=self.today, track=True) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=20, item=po_item, distribution_plan=other_delivery) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) non_response_delivery_one = DeliveryFactory(delivery_date=self.today + datetime.timedelta(days=4), location='some location', track=True) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=30, item=po_item, distribution_plan=non_response_delivery_one) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
class RunQueueFactory(factory.DjangoModelFactory): class Meta: model = RunQueue runnable = factory.SubFactory(DeliveryNodeFactory) contact_person_id = 'b8f951a0-4d5a-11e4-9af8-0002a5d5c51b' run_delay = 0.0 status = RunQueue.STATUS.not_started start_time = FakeDate.today()
def test_should_schedule_flow_to_start_after_buffer_when_calculated_send_time_is_in_past( self): some_date = FakeDate.today() - datetime.timedelta(days=10) node = NodeFactory(delivery_date=some_date) node.build_contact = MagicMock(return_value=self.contact) self.flow_scheduler.schedule_run_for(node) self.assertEqual(self.mock_celery.invoked_after, 10.0)
class RunnableFactory(factory.DjangoModelFactory): class Meta: model = Runnable consignee = factory.SubFactory(ConsigneeFactory) location = "Kampala" contact_person_id = factory.Sequence(lambda n: "{0}".format(n)) track = False delivery_date = FakeDate.today() remark = "In good condition"
class DeliveryNodeFactory(factory.DjangoModelFactory): class Meta: model = DistributionPlanNode distribution_plan = factory.SubFactory(DeliveryFactory) programme = factory.SubFactory(ProgrammeFactory) consignee = factory.SubFactory(ConsigneeFactory) tree_position = DistributionPlanNode.END_USER location = "Kampala" contact_person_id = factory.Sequence(lambda n: "{0}".format(n)) item = factory.SubFactory(PurchaseOrderItemFactory) track = False delivery_date = FakeDate.today() remark = "In good condition" quantity = 10
def test_should_assemble_csv_data_for_delivery_alert(self): with patch('eums.models.alert.Alert.date_received', new_callable=PropertyMock) as mock_date_received: mock_date_received.return_value = FakeDate.today() with patch('eums.models.alert.Alert.contact', new_callable=PropertyMock) as mock_contact: mock_contact.return_value = {'contact_name': 'Stephen Curry', 'contact_phone': '+256777654321'} exporter = AlertCSVExporter('host_name', 'delivery') alert_by_delivery_csv = exporter.assemble_csv_data([self.delivery_alert]) expected_csv = [ ['STATUS', 'ALERT DATE', 'PO/WAYBILL', 'DATE SHIPPED', 'VALUE', 'REPORTED BY', 'IMPLEMENTING PARTNER', 'DISTRICT', 'UNICEF REMARKS', 'RESOLVED', 'RETRIGGERED'], ['Damaged', datetime.date.today(), 81025778, datetime.date.today(), 0, 'Stephen Curry\n+256777654321', 'MUBENDE DHO', 'Kampala', 'Goods', False, False]] self.assertEqual(alert_by_delivery_csv, expected_csv)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory(name='Some Na') self.today = FakeDate.today() po_item = PurchaseOrderItemFactory(quantity=100, value=1000) ip_delivery_one = DeliveryFactory( location='someLocation', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=10, item=po_item, distribution_plan=ip_delivery_one, consignee=self.ip) other_delivery = DeliveryFactory(location='someLocation', delivery_date=self.today, track=True) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=20, item=po_item, distribution_plan=other_delivery, consignee=self.ip) MultipleChoiceAnswerFactory(run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory(run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) MultipleChoiceAnswerFactory(run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['SATISFIED_WITH_DELIVERY'], value=options['SATISFIED']) non_response_delivery_one = DeliveryFactory(delivery_date=self.today + datetime.timedelta(days=4), location='someLocation', track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=other_delivery, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_NOT_RECEIVED']) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=30, item=po_item, distribution_plan=non_response_delivery_one) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
def test_should_assemble_csv_data_for_distribution_alert(self): with patch('eums.models.alert.Alert.date_received', new_callable=PropertyMock) as mock_date_received: mock_date_received.return_value = FakeDate.today() with patch('eums.models.alert.Alert.contact', new_callable=PropertyMock) as mock_contact: mock_contact.return_value = {'contact_name': 'Lebron James', 'contact_phone': '+256776666666'} exporter = AlertCSVExporter('host_name', 'distribution') alert_by_distribution_csv = exporter.assemble_csv_data([self.distribution_alert]) expected_csv = [ ['DISTRIBUTION DEADLINE', 'PO/WAYBILL', 'DATE SHIPPED', 'DATE RECEIVED', 'VALUE', 'REPORTED BY', 'IMPLEMENTING PARTNER', 'DISTRICT', 'UNICEF REMARKS', 'RESOLVED'], [datetime.date.today(), 81034568, datetime.date.today(), FakeDate(2014, 9, 25), 0, 'Lebron James\n+256776666666', 'NAPAK DHO', 'Kampala', 'Medicine', False]] self.assertEqual(alert_by_distribution_csv, expected_csv)
def test_for_direct_delivery_filtered_by_date(self): fake_today = FakeDate.today() fake_last_week = fake_today - datetime.timedelta(days=7) po_one = PurchaseOrderFactory(order_number=12345, last_shipment_date=fake_today) po_two = PurchaseOrderFactory(order_number=9876, last_shipment_date=fake_last_week) fake_two_days_ago = fake_today - datetime.timedelta(days=2) PurchaseOrderItemFactory(purchase_order=po_one, quantity=1000) PurchaseOrderItemFactory(purchase_order=po_two, quantity=100) from_two_days_ago = PurchaseOrder.objects.for_direct_delivery(from_date=fake_two_days_ago) self.assertEquals(len(from_two_days_ago), 1) self.assertEquals(from_two_days_ago.first().id, po_one.id) to_two_days_ago = PurchaseOrder.objects.for_direct_delivery(to_date=fake_two_days_ago) self.assertEquals(len(to_two_days_ago), 1) self.assertEquals(to_two_days_ago.first().id, po_two.id)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() self.today = FakeDate.today() ip_delivery_one = DeliveryFactory(location='some location', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryFactory(location='Other location', delivery_date=self.today, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) non_response_delivery_one = DeliveryFactory(delivery_date=self.today + datetime.timedelta(days=4), location='some location', track=True) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() self.today = FakeDate.today() ip_delivery_one = DeliveryFactory( location='some location', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryFactory( location='Other location', delivery_date=self.today, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) non_response_delivery_one = DeliveryFactory( delivery_date=self.today + datetime.timedelta(days=4), location='some location', track=True) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() from eums.fixtures.end_user_questions import seed_questions questions, options = seed_questions() self.programme = ProgrammeFactory(name='my-program') distribution_plan = DeliveryFactory(programme=self.programme, track=True, location='someLocation') item_one = ItemFactory(description='desc_one', material_code='code_one') item_two = ItemFactory(description='desc_two', material_code='code_two') item_three = ItemFactory(description='desc_three', material_code='code_three') po_item_one = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_one) po_item_two = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_two) po_item_three = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_three) end_user_node_one = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=6, location='someLocation', distribution_plan=distribution_plan, item=po_item_one, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED'] ) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['QUALITY_OF_PRODUCT'], value=options['DAMAGED'] ) NumericAnswerFactory( run=RunFactory(runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['AMOUNT_RECEIVED'], value=4 ) self.ip = ConsigneeFactory() self.today = FakeDate.today() self.end_user_node_two = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=9, location='someLocation', track=True, item=po_item_two, distribution_plan=distribution_plan) MultipleChoiceAnswerFactory( run=RunFactory(runnable=self.end_user_node_two, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) end_user_node_three = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=10, item=po_item_three, location='someLocation', distribution_plan=distribution_plan, ip=self.ip, track=True, consignee=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_three, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) end_user_node_four = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=40, item=po_item_one, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_four, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) end_user_node_five = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, quantity=50, item=po_item_one, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=end_user_node_five, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED'] ) non_response_node = DeliveryNodeFactory(tree_position=DeliveryNode.END_USER, track=True, quantity=60, item=po_item_one) RunFactory(runnable=non_response_node, status=Run.STATUS.scheduled)
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() from eums.fixtures.end_user_questions import seed_questions questions, options = seed_questions() self.programme = ProgrammeFactory(name='my-program') distribution_plan = DeliveryFactory(programme=self.programme, track=True, location='someLocation') item_one = ItemFactory(description='desc_one', material_code='code_one') item_two = ItemFactory(description='desc_two', material_code='code_two') item_three = ItemFactory(description='desc_three', material_code='code_three') po_item_one = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_one) po_item_two = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_two) po_item_three = PurchaseOrderItemFactory(quantity=100, value=1000, item=item_three) end_user_node_one = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=6, location='someLocation', distribution_plan=distribution_plan, item=po_item_one) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_RECEIVED']) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['QUALITY_OF_PRODUCT'], value=options['DAMAGED']) NumericAnswerFactory(run=RunFactory(runnable=end_user_node_one, status=Run.STATUS.scheduled), question=questions['AMOUNT_RECEIVED'], value=4) self.ip = ConsigneeFactory() self.today = FakeDate.today() self.end_user_node_two = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=9, location='someLocation', item=po_item_two, distribution_plan=distribution_plan) MultipleChoiceAnswerFactory(run=RunFactory( runnable=self.end_user_node_two, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) end_user_node_three = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=10, item=po_item_three, location='someLocation', distribution_plan=distribution_plan, ip=self.ip, consignee=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_three, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) end_user_node_four = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=40, item=po_item_one) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_four, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) end_user_node_five = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, quantity=50, item=po_item_one) MultipleChoiceAnswerFactory(run=RunFactory( runnable=end_user_node_five, status=Run.STATUS.scheduled), question=questions['WAS_PRODUCT_RECEIVED'], value=options['PRODUCT_WAS_NOT_RECEIVED']) non_response_node = DeliveryNodeFactory( tree_position=DeliveryNode.END_USER, track=True, quantity=60, item=po_item_one) RunFactory(runnable=non_response_node, status=Run.STATUS.scheduled)