def test_should_not_create_existing_purchase_order_items_when_there_is_matching_sales_order_item(
            self):
        self.create_items()

        self.sales_order_one = SalesOrderFactory(order_number=20148031)
        self.sales_order_two = SalesOrderFactory(order_number=20147537)

        self.facade.save_records(self.imported_purchase_order_data)
        self.assertEqual(PurchaseOrderItem.objects.count(), 0)
 def create_sales_orders(self):
     self.sales_order_one = SalesOrderFactory(order_number=20153976)
     self.sales_order_two = SalesOrderFactory(order_number=20143982)
     self.sales_order_item_one = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_one,
         item_number=10,
         description='Laptop Lenovo ThinkPad T510')
     self.sales_order_item_two = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_two,
         item_number=20,
         description='Laptop bag')
 def create_sales_orders(self):
     self.sales_order_one = SalesOrderFactory(order_number=20153976)
     self.sales_order_two = SalesOrderFactory(order_number=20143982)
     self.sales_order_item_one = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_one,
         item_number=10)
     self.sales_order_item_two = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_two,
         item_number=20)
     self.sales_order_item_three = SalesOrderItemFactory(
         sales_order=self.sales_order_two,
         item=self.item_three,
         item_number=20)
예제 #4
0
    def add_a_node_with_response(self, number=1):
        delivery = DeliveryFactory(track=True)
        programme = ProgrammeFactory(name='special_program')
        sales_order = SalesOrderFactory(programme=programme)

        quantity_received_qn = NumericQuestion.objects.get(label='amountReceived')
        while number > 0:
            purchase_order = PurchaseOrderFactory(order_number=4748278 + number, sales_order=sales_order)
            po_item = PurchaseOrderItemFactory(purchase_order=purchase_order,
                                               item=ItemFactory(material_code='Code 23' + str(number),
                                                                description='Jerrycans' + str(number)))
            self.extra_ip_node = DeliveryNodeFactory(programme=delivery.programme, distribution_plan=delivery,
                                                     item=po_item,
                                                     quantity=40, acknowledged=40, balance=40, location='Amudat',
                                                     tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER)
            run = RunFactory(runnable=self.extra_ip_node)

            NumericAnswerFactory(question=quantity_received_qn, value=40, run=run)
            number -= 1

        end_node_one = DeliveryNodeFactory(programme=delivery.programme,
                                           consignee=self.end_user,
                                           parents=[(self.extra_ip_node, 30)],
                                           tree_position=DistributionPlanNode.END_USER,
                                           item=po_item)
        run_end_node_one = RunFactory(runnable=end_node_one)

        NumericAnswerFactory(question=quantity_received_qn, value=43, run=run_end_node_one)
예제 #5
0
    def test_should_create_sales_order_items_with_different_item_numbers(self):
        num_sales_order_imports = SalesOrderItem.objects.count()

        sales_order_facade = SalesOrderFacade('some/location')
        item = ItemFactory(material_code='MYCODE123',
                           description='Some Description')
        sales_order = SalesOrderFactory()

        SalesOrderItemFactory(item=item,
                              item_number=200,
                              sales_order=sales_order)

        sales_order_item_row = {
            'item_number': 220,
            'material_code': 'MYCODE123',
            'item_description': 'Some Description',
            'date': '2015-8-5',
            'net_value': 250.0,
            'quantity': 5.0
        }

        sales_order_facade._create_new_item(sales_order_item_row, sales_order)

        self.assertEqual(num_sales_order_imports + 2,
                         SalesOrderItem.objects.count())
예제 #6
0
    def test_gets_correct_last_shipment_date_value_for_stock_report(self):
        programme = ProgrammeFactory(name='special_program')
        delivery = DeliveryFactory(track=True, programme=programme)
        sales_order = SalesOrderFactory(programme=programme)
        purchase_order = PurchaseOrderFactory(order_number=4748278, sales_order=sales_order)
        po_item = PurchaseOrderItemFactory(purchase_order=purchase_order,
                                           item=ItemFactory(material_code='Code 23', description='Jerrycans'))

        ip_node_one = DeliveryNodeFactory(distribution_plan=delivery, item=po_item, quantity=40,
                                          tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER,
                                          delivery_date=FakeDate.build(2015, 03, 19))
        run_one = RunFactory(runnable=ip_node_one)
        quantity_received_qn = NumericQuestion.objects.get(label='amountReceived')
        NumericAnswerFactory(question=quantity_received_qn, value=39, run=run_one)

        last_shipment_date = FakeDate.build(2015, 10, 07)
        ip_node_two = DeliveryNodeFactory(distribution_plan=delivery, item=po_item, quantity=30,
                                          tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER,
                                          delivery_date=last_shipment_date)
        run_two = RunFactory(runnable=ip_node_two)
        NumericAnswerFactory(question=quantity_received_qn, value=40, run=run_two)

        expected_data = [
            {'document_number': purchase_order.order_number,
             'programme': programme.name,
             'last_shipment_date': str(last_shipment_date),
             'total_value_received': Decimal('79'),
             'total_value_dispensed': Decimal('0'),
             'total_value_lost': Decimal('0'),
             'balance': Decimal('79'),
             'items': [{'code': unicode(po_item.item.material_code),
                        'description': unicode(po_item.item.description),
                        'consignee': self.ip.name,
                        'location': ip_node_one.location,
                        'quantity_delivered': 3,
                        'date_delivered': str(self.ip_node_two.delivery_date),
                        'quantity_confirmed': 2,
                        'date_confirmed': '2014-01-02',
                        'quantity_dispatched': 2,
                        'quantity_lost': 0,
                        'balance': 0
                        },
                       {'code': unicode(po_item.item.material_code),
                        'description': unicode(po_item.item.description),
                        'consignee': self.ip.name,
                        'location': ip_node_two.location,
                        'quantity_delivered': 5,
                        'date_delivered': str(self.ip_node_one.delivery_date),
                        'quantity_confirmed': 4,
                        'date_confirmed': '2014-01-01',
                        'quantity_dispatched': 2,
                        'quantity_lost': 0,
                        'balance': 2
                        }]
             }]

        response = self.client.get(ENDPOINT_URL)

        self.assert_api_response_with_correct_last_shipment_date(response, expected_data)
 def create_sales_orders(self):
     self.sales_order_one = SalesOrderFactory(order_number=20148031, )
     self.sales_order_two = SalesOrderFactory(order_number=20147537)
     self.sales_order_item_one = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_one,
         item_number=10,
         description='Laptop Lenovo ThinkPad T510')
     self.sales_order_item_two = SalesOrderItemFactory(
         sales_order=self.sales_order_one,
         item=self.item_two,
         item_number=20,
         description='Laptop bag')
     self.sales_order_item_three = SalesOrderItemFactory(
         sales_order=self.sales_order_two,
         item=self.item_three,
         item_number=20,
         description='F-75 therap.diet sachet 102.5g/CAR-120')
예제 #8
0
def make_sales_order_item_details():
    item_unit = ItemUnit.objects.create(name='EA')
    item = Item.objects.create(description='Item 1', unit=item_unit)

    sales_order = SalesOrderFactory()

    return {'sales_order': sales_order.id, 'item': item.id, 'quantity': 23,
            'net_price': 12000.0, 'net_value': 100.0, 'issue_date': '2014-01-21',
            'delivery_date': '2014-01-21', 'item_number': 10}
예제 #9
0
    def setup_purchase_orders_and_items(self):
        self.programme_one = ProgrammeFactory(name='programme_one')
        self.programme_two = ProgrammeFactory(name='programme_two')
        so_one = SalesOrderFactory(programme=self.programme_one)
        so_two = SalesOrderFactory(programme=self.programme_two)

        so_item_one = SalesOrderItemFactory(sales_order=so_one, quantity=20, net_price=10, net_value=20 * 10)
        so_item_two = SalesOrderItemFactory(sales_order=so_one, quantity=5, net_price=10, net_value=5 * 10)
        so_item_three = SalesOrderItemFactory(sales_order=so_two, quantity=2, net_price=10, net_value=2 * 10)

        self.po_one = PurchaseOrderFactory(sales_order=so_one)
        self.po_two = PurchaseOrderFactory(sales_order=so_two)

        self.po_item_one = PurchaseOrderItemFactory(purchase_order=self.po_one, quantity=20,
                                                    sales_order_item=so_item_one, value=200)
        self.po_item_two = PurchaseOrderItemFactory(purchase_order=self.po_one, quantity=5,
                                                    sales_order_item=so_item_two, value=50)
        self.po_item_three = PurchaseOrderItemFactory(purchase_order=self.po_two, quantity=2,
                                                      sales_order_item=so_item_three, value=20)
예제 #10
0
 def test_fetched_purchase_orders_should_have_programme_name_and_programme_id(
         self):
     programme = ProgrammeFactory()
     purchase_order = PurchaseOrderFactory(sales_order=SalesOrderFactory(
         programme=programme))
     response = self.client.get('%s%s/' % (ENDPOINT_URL, purchase_order.id))
     self.assertDictContainsSubset(
         {
             'programme': programme.id,
             'programme_name': programme.name
         }, response.data)
예제 #11
0
    def test_should_add_node_related_to_changed_sales_order_to_sync_data(
            self, mock_scan):
        sales_order = SalesOrderFactory(description="first order")
        sales_order_item = SalesOrderItemFactory(sales_order=sales_order)
        node = DeliveryNodeFactory(item=(PurchaseOrderItemFactory(
            sales_order_item=sales_order_item)))

        self.check_update_happens(node, sales_order, {
            'field': 'description',
            'value': "Changed Order"
        }, {'term': {
            'order_item.order.sales_order.id': [sales_order.id]
        }}, mock_scan)
예제 #12
0
 def create_purchase_orders(self):
     programme = ProgrammeFactory(name='YP104 MANAGEMENT RESULTS')
     consignee = ConsigneeFactory(name='Wakiso DHO')
     date = datetime.date(2014, 07, 9)
     po_one = PurchaseOrderFactory(order_number=45143984)
     po_two = PurchaseOrderFactory(
         order_number=40141010,
         sales_order=SalesOrderFactory(programme=programme),
         last_shipment_date=date)
     po_item = PurchaseOrderItemFactory(
         purchase_order=po_two, item=ItemFactory(description="HEK2013"))
     distribution_plan = DeliveryFactory()
     DeliveryNodeFactory(item=po_item,
                         distribution_plan=distribution_plan,
                         location="Wakiso",
                         consignee=consignee)
     return po_one, po_two, programme, consignee
예제 #13
0
    def test_should_serialise_node_sales_order_under_order(self):
        sales_order = SalesOrderFactory()
        release_order = ReleaseOrderFactory(sales_order=sales_order)
        node = DeliveryNodeFactory(item=(ReleaseOrderItemFactory(
            release_order=release_order)))

        expected = {
            "programme_id": sales_order.programme.id,
            "description": sales_order.description,
            "date": sales_order.date,
            "order_number": sales_order.order_number,
            "id": sales_order.id
        }

        serialised = serialise_nodes([node])
        self.assertDictContainsSubset(
            expected, serialised[0]['order_item']['order']['sales_order'])
예제 #14
0
    def test_should_get_release_orders(self):
        sales_order = SalesOrderFactory()
        purchase_order = PurchaseOrderFactory()
        consignee = ConsigneeFactory()
        release_order_details = {
            'order_number': 232345434,
            'delivery_date': '2014-10-05',
            'sales_order': sales_order.id,
            'purchase_order': purchase_order.id,
            'consignee': consignee.id,
            'waybill': 234256
        }
        created_release_order, _ = create_release_order(
            self, release_order_details=release_order_details)

        self.assertDictContainsSubset(release_order_details,
                                      created_release_order)
        self.assertDictContainsSubset({'items': []}, created_release_order)
        self.assertDictContainsSubset(
            {'programme': sales_order.programme.name}, created_release_order)
예제 #15
0
    def create_release_orders(self):
        programme = ProgrammeFactory(name='YP104 MANAGEMENT RESULTS')
        sales_order = SalesOrderFactory(programme=programme)
        consignee = ConsigneeFactory()
        date = datetime.date(2014, 10, 05)
        purchase_order = PurchaseOrderFactory()

        ro_one = ReleaseOrderFactory(waybill=45143984)
        ro_two = ReleaseOrderFactory(waybill=234256,
                                     sales_order=sales_order,
                                     purchase_order=purchase_order,
                                     delivery_date=date)
        ro_item = ReleaseOrderItemFactory(
            release_order=ro_two, item=ItemFactory(description="HEK2013"))
        distribution_plan = DeliveryFactory()
        DeliveryNodeFactory(item=ro_item,
                            distribution_plan=distribution_plan,
                            location="Wakiso",
                            consignee=consignee)
        return ro_one, ro_two, programme, consignee
예제 #16
0
def create_release_order(test_case, release_order_details=None):
    if not release_order_details:
        sales_order = SalesOrderFactory()
        purchase_order = PurchaseOrderFactory(sales_order=sales_order)
        consignee = ConsigneeFactory()

        release_order_details = {'order_number': 232345434, 'delivery_date': datetime.date(2014, 10, 5),
                                 'sales_order': sales_order.id, 'purchase_order': purchase_order.id,
                                 'consignee': consignee.id, 'waybill': 234256, 'items': []}

    if not release_order_details.get('items', None):
        release_order_details['items'] = []

    response = test_case.client.post(RELEASE_ORDER_ENDPOINT_URL, release_order_details, format='json')

    formatted_data = response.data
    formatted_data['delivery_date'] = str(formatted_data['delivery_date'])
    test_case.assertEqual(response.status_code, 201)

    return formatted_data, formatted_data['sales_order']
예제 #17
0
def make_node_details(test_case, plan_id=None):
    item_unit = ItemUnit.objects.create(name='EA')
    item = Item.objects.create(description='Item 1', unit=item_unit)

    sales_order = SalesOrderFactory()

    sales_order_details = {'sales_order': sales_order.id, 'item': item.id, 'quantity': 23,
                           'net_price': 12000.0, 'net_value': 100.0, 'issue_date': '2014-01-21',
                           'delivery_date': '2014-01-21', 'item_number': 10}

    sales_item_id = create_sales_order_item(test_case, sales_order_details)['id']
    consignee_id = create_consignee(test_case)['id']

    if not plan_id:
        plan_id = DeliveryFactory().id

    node = {'item': sales_item_id, 'targeted_quantity': 10, 'delivery_date': '2014-01-21',
            'location': 'GULU', 'consignee': consignee_id, 'distribution_plan': plan_id,
            'contact_person_id': u'1223',
            'tracked': True, 'remark': 'Dispatched', 'tree_position': 'END_USER'}

    return node
예제 #18
0
    def test_gets_all_response_for_node_consignee(self):
        multichoice_question = MultipleChoiceQuestionFactory(
            label='productReceived')
        yes = multichoice_question.option_set.first()
        numeric_question = NumericQuestionFactory(label='AmountReceived')

        salt = ItemFactory(description='Salt')

        sales_order = SalesOrderFactory()
        sales_order_item = SalesOrderItemFactory(item=salt,
                                                 description='10 bags of salt',
                                                 sales_order=sales_order)
        item = PurchaseOrderItemFactory(sales_order_item=sales_order_item)

        node = DeliveryNodeFactory(quantity=100, item=item)
        child_node_one = DeliveryNodeFactory(parents=[(node, 50)], item=item)
        child_node_two = DeliveryNodeFactory(parents=[(node, 50)], item=item)
        child_node_three = DeliveryNodeFactory(parents=[(child_node_one, 50)],
                                               item=item)

        run = RunFactory(runnable=node, status='completed')
        run_one = RunFactory(runnable=child_node_one, status='completed')
        run_two = RunFactory(runnable=child_node_two, status='completed')
        run_three = RunFactory(runnable=child_node_three, status='completed')
        NumericAnswerFactory(run=run, value=80, question=numeric_question)
        MultipleChoiceAnswerFactory(run=run_one,
                                    question=multichoice_question,
                                    value=yes)
        MultipleChoiceAnswerFactory(run=run_two,
                                    question=multichoice_question,
                                    value=yes)
        NumericAnswerFactory(run=run_three,
                             value=80,
                             question=numeric_question)

        self.maxDiff = None
        expected_data = {
            'node':
            node.consignee.name,
            'children': [{
                'node':
                child_node_one.consignee.name,
                'children': [{
                    'node': child_node_three.consignee.name,
                    'children': [],
                    'answers': {
                        u'AmountReceived': u'80'
                    }
                }],
                'answers': {
                    u'productReceived': u'UNCATEGORISED'
                }
            }, {
                'node': child_node_two.consignee.name,
                'children': [],
                'answers': {
                    u'productReceived': u'UNCATEGORISED'
                }
            }],
            'answers': {
                u'AmountReceived': u'80'
            }
        }

        response_details_route = 'distribution-plan-responses/%s/sales_order_item/%s/'
        endpoint_url = BACKEND_URL + response_details_route % (
            node.consignee.id, item.id)

        response = self.client.get(endpoint_url)

        self.assertDictContainsSubset({'node': expected_data['node']},
                                      response.data)
        self.assertDictContainsSubset({'answers': expected_data['answers']},
                                      response.data)
        self.assertItemsEqual(expected_data['children'],
                              response.data['children'])
예제 #19
0
 def create_sales_order(self, order_number=123):
     return SalesOrderFactory(order_number=order_number)