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
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
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
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