def post(self, request, *args, **kwargs): def update_dataset_map(instance, dict_): for key, value in dict_.items(): if key == 'datavalue_maps': value = [DataValueMap(**v) for v in value] instance[key] = value try: new_dataset_maps = json.loads(request.POST['dataset_maps']) current_dataset_maps = get_dataset_maps(request.domain) i = -1 for i, dataset_map in enumerate(current_dataset_maps): if i < len(new_dataset_maps): # Update current dataset maps update_dataset_map(dataset_map, new_dataset_maps[i]) dataset_map.save() else: # Delete removed dataset maps dataset_map.delete() if i + 1 < len(new_dataset_maps): # Insert new dataset maps for j in range(i + 1, len(new_dataset_maps)): dataset_map = DataSetMap(domain=request.domain) update_dataset_map(dataset_map, new_dataset_maps[j]) dataset_map.save() get_dataset_maps.clear(request.domain) return json_response({'success': _('DHIS2 DataSet Maps saved')}) except Exception as err: return json_response({'error': str(err)}, status_code=500)
def link_data_set_maps(conn_settings: ConnectionSettings): """ Links DataSetMap instances to their ConnectionSettings instance. """ for data_set_map in get_dataset_maps(conn_settings.domain): data_set_map.connection_settings_id = conn_settings.id data_set_map.save() get_dataset_maps.clear(conn_settings.domain)