def post(self, request): datatype_factory = DataTypeFactory() tileid = request.POST.get("tileid") nodeid = request.POST.get("nodeid") data = request.POST.get("data") resourceid = request.POST.get("resourceinstanceid", None) try: node = models.Node.objects.get(nodeid=nodeid) datatype = datatype_factory.get_instance(node.datatype) except Exception as e: return JSONResponse(e) data = datatype.process_api_data(data) new_tile = tile_model.update_node_value(nodeid, data, tileid, resourceinstanceid=resourceid) response = JSONResponse(new_tile) return response
def post_save(self, tile, request): tile_already_exists = models.TileModel.objects.filter( resourceinstance_id=tile.resourceinstance_id).filter( nodegroup_id=self.config["selected_nodegroup"]).exists() if not tile_already_exists: try: if int(self.config['last_value']) == 0: new_number = str( int(self.config['starting_value']) + int(self.config['last_value']) + 1) else: new_number = str(int(self.config['last_value']) + 1) new_value = self.config['prefix'] + ( (7 - len(new_number)) * '0') + new_number + self.config[ 'suffix'] #EAMENA numbers are 7 digits long fn = models.FunctionXGraph.objects.get( Q(function_id="2cc07b0a-adbd-4721-86ce-dad1699caa86"), Q(graph_id=tile.resourceinstance.graph_id)) fn.config['last_value'] = new_number fn.save() nodegroup_id = self.config["selected_nodegroup"] target_node = self.config['target_node'] nodegroup = models.NodeGroup.objects.get(pk=nodegroup_id) if tile.nodegroup.nodegroupid == nodegroup.nodegroupid: tile.data[target_node] = new_value return if nodegroup.parentnodegroup_id == tile.nodegroup.nodegroupid: return else: tile = Tile.update_node_value( target_node, new_value, nodegroupid=nodegroup_id, resourceinstanceid=tile.resourceinstance_id) except Exception: logger.exception( "The incrementor function is unable to create incremented value" )