def test_get_ledger_values_for_case_as_of(self):
        case_id = uuid.uuid4().hex
        form_xml = get_simple_form_xml(uuid.uuid4().hex, case_id)
        submit_form_locally(form_xml, domain=self.domain)[1]

        # submit ledger data
        balances = (
            (self.product_a._id, 100),
            (self.product_b._id, 50),
        )
        ledger_blocks = [
            get_single_balance_block(case_id, prod_id, balance)
            for prod_id, balance in balances
        ]
        submit_case_blocks(ledger_blocks, self.domain)

        # check results
        results = get_ledger_values_for_case_as_of(domain=self.domain,
                                                   case_id=case_id,
                                                   section_id='stock',
                                                   as_of=datetime.utcnow())
        self.assertEqual(2, len(results))
        self.assertEqual(100, results[self.product_a._id])
        self.assertEqual(50, results[self.product_b._id])

        # check the date filter works
        before_data = datetime.utcnow() - timedelta(days=2)
        self.assertEqual({},
                         get_ledger_values_for_case_as_of(domain=self.domain,
                                                          case_id=case_id,
                                                          section_id='stock',
                                                          as_of=before_data))
    def test_get_ledger_values_for_case_as_of(self):
        case_id = uuid.uuid4().hex
        form_xml = get_simple_form_xml(uuid.uuid4().hex, case_id)
        submit_form_locally(form_xml, domain=self.domain)[1]

        # submit ledger data
        balances = (
            (self.product_a._id, 100),
            (self.product_b._id, 50),
        )
        ledger_blocks = [
            get_single_balance_block(case_id, prod_id, balance)
            for prod_id, balance in balances
        ]
        submit_case_blocks(ledger_blocks, self.domain)

        # check results
        results = get_ledger_values_for_case_as_of(
            domain=self.domain, case_id=case_id, section_id='stock', as_of=datetime.utcnow())
        self.assertEqual(2, len(results))
        self.assertEqual(100, results[self.product_a._id])
        self.assertEqual(50, results[self.product_b._id])

        # check the date filter works
        before_data = datetime.utcnow() - timedelta(days=2)
        self.assertEqual({}, get_ledger_values_for_case_as_of(
            domain=self.domain, case_id=case_id, section_id='stock', as_of=before_data))
 def test_get_ledger_values_for_case_as_of_no_data(self):
     self.assertEqual({},
                      get_ledger_values_for_case_as_of(
                          domain=self.domain,
                          case_id='missing',
                          section_id='stock',
                          as_of=datetime.utcnow()))
    def test_get_ledger_values_for_case_as_of_same_date(self):
        case_id = uuid.uuid4().hex
        form_xml = get_simple_form_xml(uuid.uuid4().hex, case_id)
        submit_form_locally(form_xml, domain=self.domain)[1]

        # submit ledger data
        balances = ((self.product_a._id, 100), )
        ledger_blocks = [
            get_single_balance_block(case_id, prod_id, balance)
            for prod_id, balance in balances
        ]
        submit_case_blocks(ledger_blocks, self.domain)

        # submit two transfers at the same time
        transfer_date = json_format_datetime(datetime.utcnow())
        transfers = [
            (self.product_a._id, 1, transfer_date),
            (self.product_a._id, 2, transfer_date),
        ]
        for prod_id, transfer, date in transfers:
            submit_case_blocks(
                get_single_transfer_block(case_id, None, prod_id, transfer,
                                          date), self.domain)

        # check results
        results = get_ledger_values_for_case_as_of(domain=self.domain,
                                                   case_id=case_id,
                                                   section_id='stock',
                                                   as_of=datetime.utcnow())
        self.assertEqual(1, len(results))
        self.assertEqual(97, results[self.product_a._id])
    def test_get_ledger_values_for_case_as_of_same_date(self):
        case_id = uuid.uuid4().hex
        form_xml = get_simple_form_xml(uuid.uuid4().hex, case_id)
        submit_form_locally(form_xml, domain=self.domain)[1]

        # submit ledger data
        balances = (
            (self.product_a._id, 100),
        )
        ledger_blocks = [
            get_single_balance_block(case_id, prod_id, balance)
            for prod_id, balance in balances
        ]
        submit_case_blocks(ledger_blocks, self.domain)

        # submit two transfers at the same time
        transfer_date = json_format_datetime(datetime.utcnow())
        transfers = [
            (self.product_a._id, 1, transfer_date),
            (self.product_a._id, 2, transfer_date),
        ]
        for prod_id, transfer, date in transfers:
            submit_case_blocks(get_single_transfer_block(case_id, None, prod_id, transfer, date), self.domain)

        # check results
        results = get_ledger_values_for_case_as_of(
            domain=self.domain, case_id=case_id, section_id='stock', as_of=datetime.utcnow())
        self.assertEqual(1, len(results))
        self.assertEqual(97, results[self.product_a._id])
Example #6
0
 def get_data(self):
     locations = self.locations()
     # locations at this point will only have location objects
     # that have supply points associated
     for loc in locations[:self.config.get('max_rows', 100)]:
         stock_results = get_ledger_values_for_case_as_of(
             domain=self.domain,
             case_id=loc.supply_point_id,
             section_id=SECTION_TYPE_STOCK,
             as_of=self.datetime,
             program_id=self.program_id,
         )
         yield (loc.name, {p: format_decimal(soh) for p, soh in stock_results.items()})
Example #7
0
 def get_data(self):
     locations = self.locations()
     # locations at this point will only have location objects
     # that have supply points associated
     for loc in locations[:self.config.get('max_rows', 100)]:
         stock_results = get_ledger_values_for_case_as_of(
             domain=self.domain,
             case_id=loc.supply_point_id,
             section_id=SECTION_TYPE_STOCK,
             as_of=self.datetime,
             program_id=self.program_id,
         )
         yield (loc.name, {
             p: format_decimal(soh)
             for p, soh in stock_results.items()
         })
 def test_get_ledger_values_for_case_as_of_no_data(self):
     self.assertEqual({}, get_ledger_values_for_case_as_of(domain=self.domain,
                                                           case_id='missing', section_id='stock',
                                                           as_of=datetime.utcnow()))