Example #1
0
def create_records_from(request, xls_data, filepath=None):
    nb_errors = nb_updated = nb_created = 0
    try:
        payload = DataRecord.batch_create(xls_data, request.user.partner)
    except Exception as e:
        payload = xls_data
        level = 'danger'
        logger.exception(e)
        message = _("Unable to record data: {exp}").format(exp=repr(e))
        nb_errors = 1
    else:
        nb_errors = len(payload['errors'])
        nb_created = sum([
            1 for v in payload.values()
            if isinstance(v, dict) and v.get('action') == 'created'
        ])
        nb_updated = sum([
            1 for v in payload.values()
            if isinstance(v, dict) and v.get('action') == 'updated'
        ])

        if nb_created or nb_updated:
            message = _("Congratulations! Your data has been recorded.")
            if nb_created:
                message += "\n" + _("{nb_created} records were created.")
            if nb_updated:
                message += "\n" + _("{nb_updated} records were updated.")
            if nb_errors:
                message += "\n" + _("{nb_errors} errors "
                                    "were found in your file.")
                level = 'warning'
            else:
                level = 'success'
        elif not nb_errors:
            message = _("Thank You for submitting! "
                        "No new data to record though.")
            level = 'info'
        else:
            message = _("Outch! Your file contains {nb_errors} errors!")
            level = 'danger'
    finally:
        if filepath is not None:
            os.unlink(filepath)
    payload['feedback'] = {
        'nb_errors':
        nb_errors,
        'nb_updated':
        nb_updated,
        'nb_created':
        nb_created,
        'text':
        message.format(nb_errors=nb_errors,
                       nb_updated=nb_updated,
                       nb_created=nb_created),
        'level':
        level,
        'redirect':
        level in ('success', 'info'),
    }
    return payload
Example #2
0
def create_records_from(request, xls_data, filepath=None):
    nb_errors = nb_updated = nb_created = 0
    try:
        payload = DataRecord.batch_create(xls_data,
                                          request.user.partner)
    except Exception as e:
        payload = xls_data
        level = 'danger'
        logger.exception(e)
        message = _("Unable to record data: {exp}").format(exp=repr(e))
        nb_errors = 1
    else:
        nb_errors = len(payload['errors'])
        nb_created = sum([1 for v in payload.values()
                          if isinstance(v, dict)
                          and v.get('action') == 'created'])
        nb_updated = sum([1 for v in payload.values()
                          if isinstance(v, dict)
                          and v.get('action') == 'updated'])

        if nb_created or nb_updated:
            message = _("Congratulations! Your data has been recorded.")
            if nb_created:
                message += "\n" + _("{nb_created} records were created.")
            if nb_updated:
                message += "\n" + _("{nb_updated} records were updated.")
            if nb_errors:
                message += "\n" + _("{nb_errors} errors "
                                    "were found in your file.")
                level = 'warning'
            else:
                level = 'success'
        elif not nb_errors:
            message = _("Thank You for submitting! "
                        "No new data to record though.")
            level = 'info'
        else:
            message = _("Outch! Your file contains {nb_errors} errors!")
            level = 'danger'
    finally:
        if filepath is not None:
            os.unlink(filepath)
    payload['feedback'] = {
        'nb_errors': nb_errors,
        'nb_updated': nb_updated,
        'nb_created': nb_created,
        'text': message.format(nb_errors=nb_errors,
                               nb_updated=nb_updated,
                               nb_created=nb_created),
        'level': level,
        'redirect': level in ('success', 'info'),
    }
    return payload
Example #3
0
    def handle_record(self, jsdata, entity, periods):

        logger.info(periods)

        missing = '0.0'
        data = {}

        # loop on rows
        indic_data = {(indic_id, pid): val
                      for indic_id, pid, val in jsdata['rows']}
        for period in periods:
            pid = period.dhis_strid

            for indicator in Indicator.get_all_dhis():

                numerator = indic_data.get((indicator.dhis_numerator_id, pid))
                denominator = indic_data.get(
                    (indicator.dhis_denominator_id, pid))

                if numerator is None or numerator == missing:
                    logger.error("Missing numerator `{}` for `{}`".format(
                        indicator.dhis_numerator_id, indicator))
                    continue

                if not indicator.is_number and (denominator is None
                                                or denominator == missing):
                    logger.error("Missing denominator `{}` for `{}`".format(
                        indicator.dhis_denominator_id, indicator))
                    continue

                logger.debug(data_ident_for(indicator, period, entity))
                data.update({
                    data_ident_for(indicator, period, entity): {
                        'slug': indicator.slug,
                        'period': period,
                        'entity': entity,
                        'numerator': numerator,
                        'denominator': denominator
                    }
                })

        d = DataRecord.batch_create(data,
                                    dhisbot,
                                    source=DataRecord.DHIS,
                                    arrival_status=DataRecord.ARRIVED,
                                    auto_validate=True)
        if self.debug:
            pp(d)
        return d
Example #4
0
    def handle_record(self, jsdata, entity, periods):

        logger.info(periods)

        missing = '0.0'
        data = {}

        # loop on rows
        indic_data = {(indic_id, pid): val
                      for indic_id, pid, val in jsdata['rows']}
        for period in periods:
            pid = period.dhis_strid

            for indicator in Indicator.get_all_dhis():

                numerator = indic_data.get((indicator.dhis_numerator_id, pid))
                denominator = indic_data.get(
                    (indicator.dhis_denominator_id, pid))

                if numerator is None or numerator == missing:
                    logger.error("Missing numerator `{}` for `{}`"
                                 .format(indicator.dhis_numerator_id,
                                         indicator))
                    continue

                if not indicator.is_number and (denominator is None
                                                or denominator == missing):
                    logger.error("Missing denominator `{}` for `{}`"
                                 .format(indicator.dhis_denominator_id,
                                         indicator))
                    continue

                logger.debug(data_ident_for(indicator, period, entity))
                data.update({data_ident_for(indicator, period, entity): {
                    'slug': indicator.slug,
                    'period': period,
                    'entity': entity,
                    'numerator': numerator,
                    'denominator': denominator}})

        d = DataRecord.batch_create(data, dhisbot,
                                    source=DataRecord.DHIS,
                                    arrival_status=DataRecord.ARRIVED,
                                    auto_validate=True)
        if self.debug:
            pp(d)
        return d