Esempio n. 1
0
 def test_get_case_ledger_state(self):
     for case_id in self.case_ids:
         state = LedgerAccessors(self.domain).get_case_ledger_state(case_id)
         for section, products in state.items():
             for product, state in products.items():
                 self.assertEqual(
                     state.stock_on_hand,
                     self.transactions[case_id][section][product])
Esempio n. 2
0
 def test_transactions(expected):
     state = LedgerAccessors(self.domain).get_current_ledger_state(
         list(self.case_ids))
     for case_id, sections in state.items():
         self._validate_case_data(sections, expected[case_id])
 def test_get_case_ledger_state(self):
     for case_id in self.case_ids:
         state = LedgerAccessors(self.domain).get_case_ledger_state(case_id)
         for section, products in state.items():
             for product, state in products.items():
                 self.assertEqual(state.stock_on_hand, self.transactions[case_id][section][product])
 def test_transactions(expected):
     state = LedgerAccessors(self.domain).get_current_ledger_state(self.case_ids.keys())
     for case_id, sections in state.items():
         self._validate_case_data(sections, expected[case_id])
Esempio n. 5
0
def render_case(case, options):
    """
    Uses options since Django 1.3 doesn't seem to support templatetag kwargs.
    Change to kwargs when we're on a version of Django that does.
    """
    from corehq.apps.hqwebapp.templatetags.proptable_tags import get_tables_as_rows, get_default_definition
    wrapped_case = get_wrapped_case(case)
    timezone = options.get('timezone', pytz.utc)
    timezone = timezone.localize(datetime.datetime.utcnow()).tzinfo
    _get_tables_as_rows = partial(get_tables_as_rows, timezone=timezone)
    display = options.get('display') or wrapped_case.get_display_config()
    show_transaction_export = options.get('show_transaction_export') or False
    get_case_url = options['get_case_url']

    data = copy.deepcopy(wrapped_case.to_full_dict())

    default_properties = _get_tables_as_rows(data, display)

    dynamic_data = wrapped_case.dynamic_properties()

    for section in display:
        for row in section['layout']:
            for item in row:
                dynamic_data.pop(item.get("expr"), None)

    if dynamic_data:
        dynamic_keys = sorted(dynamic_data.keys())
        definition = get_default_definition(
            dynamic_keys, num_columns=DYNAMIC_CASE_PROPERTIES_COLUMNS)

        dynamic_properties = _get_tables_as_rows(dynamic_data, definition)
    else:
        dynamic_properties = None

    the_time_is_now = datetime.datetime.utcnow()
    tz_offset_ms = int(timezone.utcoffset(the_time_is_now).total_seconds()) * 1000
    tz_abbrev = timezone.localize(the_time_is_now).tzname()

    # ledgers
    def _product_name(product_id):
        try:
            return SQLProduct.objects.get(product_id=product_id).name
        except SQLProduct.DoesNotExist:
            return (_('Unknown Product ("{}")').format(product_id))

    ledger_map = LedgerAccessors(case.domain).get_case_ledger_state(case.case_id, ensure_form_id=True)
    for section, product_map in ledger_map.items():
        product_tuples = sorted(
            (_product_name(product_id), product_map[product_id]) for product_id in product_map
        )
        ledger_map[section] = product_tuples

    return render_to_string("case/partials/single_case.html", {
        "default_properties": default_properties,
        "default_properties_options": {
            "style": "table"
        },
        "dynamic_properties": dynamic_properties,
        "dynamic_properties_options": {
            "style": "table"
        },
        "case": wrapped_case.case,
        "case_actions": mark_safe(json.dumps(wrapped_case.actions())),
        "timezone": timezone,
        "tz_abbrev": tz_abbrev,
        "case_hierarchy_options": {
            "show_view_buttons": True,
            "get_case_url": get_case_url,
            "timezone": timezone
        },
        "ledgers": ledger_map,
        "timezone_offset": tz_offset_ms,
        "show_transaction_export": show_transaction_export,
        "xform_api_url": reverse('single_case_forms', args=[case.domain, case.case_id]),
    })