Exemple #1
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)
        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)
Exemple #5
0
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()
Exemple #6
0
    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)
Exemple #7
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"
Exemple #8
0
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
Exemple #9
0
    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)
Exemple #11
0
    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)
Exemple #13
0
    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)