diff options
Diffstat (limited to 'gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py')
-rw-r--r-- | gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py | 350 |
1 files changed, 240 insertions, 110 deletions
diff --git a/gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py b/gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py index 7f2a66a..c90530a 100644 --- a/gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py +++ b/gnowsys-ndf/gnowsys_ndf/ndf/views/batch.py @@ -1,6 +1,6 @@ from django.http import HttpResponseRedirect -#from django.http import HttpResponse -from django.shortcuts import render_to_response #render uncomment when to use +from django.http import HttpResponse +from django.shortcuts import render_to_response # render uncomment when to use from django.template import RequestContext from django.core.urlresolvers import reverse from django.contrib.auth.decorators import login_required @@ -12,10 +12,11 @@ try: except ImportError: # old pymongo from pymongo.objectid import ObjectId -from gnowsys_ndf.settings import GAPPS, MEDIA_ROOT -from gnowsys_ndf.ndf.models import GSystemType, Node +# from gnowsys_ndf.settings import GAPPS, MEDIA_ROOT +# from gnowsys_ndf.ndf.models import GSystemType, Node +from gnowsys_ndf.ndf.models import NodeJSONEncoder from gnowsys_ndf.ndf.models import node_collection, triple_collection -from gnowsys_ndf.ndf.views.methods import create_grelation,get_execution_time +from gnowsys_ndf.ndf.views.methods import create_grelation, get_execution_time, get_group_name_id GST_BATCH = node_collection.one({"_type": "GSystemType", 'name': "Batch"}) app = GST_BATCH @@ -26,59 +27,64 @@ def batch(request, group_id): """ * Renders a list of all 'batches' available within the database. """ - ins_objectid = ObjectId() - st_student = node_collection.one({'_type':'GSystemType','name':'Student'}) - if ins_objectid.is_valid(group_id) is False : - group_ins = node_collection.find_one({'_type': "Group","name": group_id}) - auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) - if group_ins: - group_id = str(group_ins._id) - else : - auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) - if auth : - group_id = str(auth._id) - else : - pass + group_name, group_id = get_group_name_id(group_id) + # ins_objectid = ObjectId() + # st_student = node_collection.one({'_type':'GSystemType','name':'Student'}) + # if ins_objectid.is_valid(group_id) is False : + # group_ins = node_collection.find_one({'_type': "Group","name": group_id}) + # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) + # if group_ins: + # group_id = str(group_ins._id) + # else : + # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) + # if auth : + # group_id = str(auth._id) + # else : + # pass nussd_course_type_name = "" announced_course_name = "" - print group_id if request.method == "POST": - announced_course_name = request.POST.get("announced_course_name", "") - nussd_course_type_name = request.POST.get("nussd_course_name","") - colg_gst = node_collection.one({'_type': "GSystemType", 'name': 'College'}) - req_colg_id = node_collection.one({'member_of':colg_gst._id,'relation_set.has_group':ObjectId(group_id)}) - batch_coll = node_collection.find({'member_of':GST_BATCH._id,'relation_set.has_course':ObjectId(announced_course_name)}) - # for each_batch in batch_coll: - # each_batch['batch_name_human_readble'] = (each_batch.name).replace('_',' ') + announced_course_name = request.POST.get("announced_course_name", "") + nussd_course_type_name = request.POST.get("nussd_course_name", "") + # colg_gst = node_collection.one({'_type': "GSystemType", 'name': 'College'}) + # req_colg_id = node_collection.one({'member_of': colg_gst._id, 'relation_set.has_group': ObjectId(group_id)}) + batch_coll = node_collection.find({'member_of': GST_BATCH._id, 'relation_set.has_course': ObjectId(announced_course_name)}) + # for each_batch in batch_coll: + # each_batch['batch_name_human_readble'] = (each_batch.name).replace('_',' ') else: - batch_coll = node_collection.find({'member_of': GST_BATCH._id,'relation_set.batch_in_group':ObjectId(group_id)}) + batch_coll = node_collection.find({'member_of': GST_BATCH._id, 'relation_set.batch_in_group':ObjectId(group_id)}) fetch_ATs = ["nussd_course_type"] req_ATs = [] for each in fetch_ATs: - each = node_collection.one({'_type': "AttributeType", 'name': each}, {'_type': 1, '_id': 1, 'data_type': 1, 'complex_data_type': 1, 'name': 1, 'altnames': 1}) - - if each["data_type"] == "IS()": - dt = "IS(" - for v in each.complex_data_type: - dt = dt + "u'" + v + "'" + ", " - dt = dt[:(dt.rfind(", "))] + ")" - each["data_type"] = dt + each = node_collection.one({'_type': "AttributeType", 'name': each}, {'_type': 1, '_id': 1, 'data_type': 1, 'complex_data_type': 1, 'name': 1, 'altnames': 1}) - each["data_type"] = eval(each["data_type"]) - each["value"] = None - req_ATs.append(each) + if each["data_type"] == "IS()": + dt = "IS(" + for v in each.complex_data_type: + dt = dt + "u'" + v + "'" + ", " + dt = dt[:(dt.rfind(", "))] + ")" + each["data_type"] = dt - #users_in_group = node_collection.one({'_id':ObjectId(group_id)}).author_set + each["data_type"] = eval(each["data_type"]) + each["value"] = None + req_ATs.append(each) + # users_in_group = node_collection.one({'_id':ObjectId(group_id)}).author_set template = "ndf/batch.html" - variable = RequestContext(request, {'batch_coll': batch_coll,'appId':app._id,'nussd_course_name_var':nussd_course_type_name,'announced_course_name_var':announced_course_name, 'ATs': req_ATs,'group_id':group_id, 'groupid':group_id,'title':GST_BATCH.name,'st_batch_id':GST_BATCH._id}) + variable = RequestContext(request, {'batch_coll': batch_coll, + 'appId': app._id, + 'nussd_course_name_var': nussd_course_type_name, + 'announced_course_name_var': announced_course_name, + 'ATs': req_ATs, 'group_id': group_id, + 'groupid': group_id, 'title': GST_BATCH.name, + 'st_batch_id': GST_BATCH._id}) return render_to_response(template, variable) @get_execution_time def new_create_and_edit(request, group_id, _id=None): - node = "" - count = "" + # node = "" + # count = "" batch = "" batch_count = 1 ac = None @@ -87,14 +93,14 @@ def new_create_and_edit(request, group_id, _id=None): if request.method == 'POST': batch_count = int(request.POST.get('batch_count', '')) - st_student = node_collection.one({'_type':'GSystemType','name':'Student'}) + st_student = node_collection.one({'_type': 'GSystemType', 'name': 'Student'}) student_coll = node_collection.find( {'member_of': st_student._id, 'group_set': ObjectId(group_id)} ) if _id: batch = node_collection.one( - {'_id':ObjectId(_id)}, + {'_id': ObjectId(_id)}, {'relation_set.has_course': 1, 'name': 1} ) @@ -109,7 +115,8 @@ def new_create_and_edit(request, group_id, _id=None): if ac: for attr in ac.attribute_set: - if attr and attr.has_key("nussd_course_type"): + # if attr and attr.has_key("nussd_course_type"): + if attr and "nussd_course_type" in attr: nussd_course_name = attr["nussd_course_type"] break @@ -121,28 +128,29 @@ def new_create_and_edit(request, group_id, _id=None): if each["data_type"] == "IS()": dt = "IS(" for v in each.complex_data_type: - dt = dt + "u'" + v + "'" + ", " + dt = dt + "u'" + v + "'" + ", " dt = dt[:(dt.rfind(", "))] + ")" each["data_type"] = dt each["data_type"] = eval(each["data_type"]) each["value"] = None req_ATs.append(each) - + variable = RequestContext(request, { - 'group_id': group_id, 'groupid': group_id, + 'group_id': group_id, 'groupid': group_id, 'appId': app._id, 'title': GST_BATCH.name, 'ATs': req_ATs, - 'count':batch_count, 'batch_count': xrange(batch_count), 'st_batch_id': GST_BATCH._id, - 'ac_node': ac, - 'student_count': student_coll.count(), - 'nussd_course_name': nussd_course_name, + 'count': batch_count, 'batch_count': xrange(batch_count), 'st_batch_id': GST_BATCH._id, + 'ac_node': ac, + 'student_count': student_coll.count(), + 'nussd_course_name': nussd_course_name, 'node': batch }) - + template = "ndf/new_create_batch.html" return render_to_response(template, variable) -@get_execution_time + +@get_execution_time def save_students_for_batches(request, group_id): ''' This save method creates new and update existing the batches @@ -150,47 +158,68 @@ def save_students_for_batches(request, group_id): edit_batch = [] if request.method == 'POST': batch_user_list = request.POST.get('batch_user_list_dict', '') + # print "\n\n batch_user_list_dict", batch_user_list batch_user_list = json.loads(batch_user_list) ac_id = request.POST.get('ac_id', '') + # print "\n\n ac_id", ac_id + # raise Exception("batch") + for k, v in batch_user_list.items(): + save_btch(k, v, group_id, request, ac_id) + return HttpResponseRedirect(reverse('batch', kwargs={'group_id': group_id})) - for k,v in batch_user_list.items(): - save_batch(k,v, group_id, request, ac_id) - return HttpResponseRedirect(reverse('batch',kwargs={'group_id':group_id})) @get_execution_time -def save_batch(batch_name, user_list, group_id, request, ac_id): - - rt_has_batch_member = node_collection.one({'_type':'RelationType', 'name':'has_batch_member'}) - all_batches_in_grp=[] - b_node = node_collection.one({'member_of':GST_BATCH._id,'name':unicode(batch_name)}) - if not b_node: - b_node = node_collection.collection.GSystem() - b_node.member_of.append(GST_BATCH._id) - b_node.created_by = int(request.user.id) - b_node.group_set.append(ObjectId(group_id)) - b_node.name = batch_name - b_node.name = batch_name - b_node['altnames'] = batch_name.replace('_',' ') - - b_node.contributors.append(int(request.user.id)) - b_node.modified_by = int(request.user.id) - b_node.save() - all_batches_in_grp.append(b_node._id) - - rt_group_has_batch = node_collection.one({'_type':'RelationType', 'name':'group_has_batch'}) - rt_has_course = node_collection.one({'_type':'RelationType', 'name':'has_course'}) - - relation_coll = triple_collection.find({'_type':'GRelation','relation_type.$id':rt_group_has_batch._id,'subject':ObjectId(group_id)}) - - for each in relation_coll: - all_batches_in_grp.append(each.right_subject) - #to get all batches of the group - - create_grelation(b_node._id,rt_has_batch_member,user_list) +def save_batch(request, group_id): +# def save_batch(batch_name, user_list, group_id, request, ac_id): + + group_name, group_id = get_group_name_id(group_id) + response_dict = {"success": False} + # new_batch_node = None + rt_has_batch_member = node_collection.one({'_type': 'RelationType', 'name': 'has_batch_member'}) + if request.is_ajax() and request.method == "POST": + ac_id = request.POST.get("ac_id", '') + batch_name = request.POST.get("batch_name", '') + batch_id = request.POST.get("batch_id", '') + user_list = request.POST.getlist("user_list[]", '') + # create_new_batch = request.POST.get("create_new_batch", '') + # response_dict["old_batches"] = find_batches_of_ac(ac_id) + user_list = [ObjectId(each) for each in user_list] + all_batches_in_grp = [] + if not batch_id: + # b_node = node_collection.one({'member_of':GST_BATCH._id,'name':unicode(batch_name)}) + b_node = node_collection.collection.GSystem() + b_node.member_of.append(GST_BATCH._id) + b_node.created_by = int(request.user.id) + b_node.group_set.append(ObjectId(group_id)) + b_node.name = batch_name + b_node['altnames'] = batch_name.replace('_', ' ') + + b_node.contributors.append(int(request.user.id)) + b_node.modified_by = int(request.user.id) + b_node.save() + all_batches_in_grp.append(b_node._id) + + rt_group_has_batch = node_collection.one({'_type': 'RelationType', 'name': 'group_has_batch'}) + relation_coll = triple_collection.find({'_type': 'GRelation', 'relation_type.$id': rt_group_has_batch._id,'subject':ObjectId(group_id)}) + + for each in relation_coll: + all_batches_in_grp.append(each.right_subject) + # to get all batches of the group + rt_has_course = node_collection.one({'_type': 'RelationType', 'name': 'has_course'}) + + create_grelation(ObjectId(group_id), rt_group_has_batch, all_batches_in_grp) + create_grelation(b_node._id, rt_has_course, ObjectId(ac_id)) + response_dict['new_batch_created'] = True + response_dict['new_batch_node_name'] = b_node.name + response_dict['new_batch_node_id'] = str(b_node._id) + else: + response_dict['new_batch_created'] = False + b_node = node_collection.one({'_id': ObjectId(batch_id)}) + if user_list: + create_grelation(b_node._id, rt_has_batch_member, user_list) + response_dict['success'] = True + return HttpResponse(json.dumps(response_dict, cls=NodeJSONEncoder)) - create_grelation(b_node._id,rt_has_course,ObjectId(ac_id)) - - create_grelation(ObjectId(group_id),rt_group_has_batch,all_batches_in_grp) @get_execution_time def detail(request, group_id, _id): @@ -198,7 +227,7 @@ def detail(request, group_id, _id): node = node_collection.one({'_id':ObjectId(_id)}) rt_has_batch_member = node_collection.one({'_type':'RelationType','name':'has_batch_member'}) relation_coll = triple_collection.find({'_type':'GRelation','relation_type.$id':rt_has_batch_member._id,'subject':node._id,'status':u'PUBLISHED'}) - + for each in relation_coll: n = node_collection.one({'_id':ObjectId(each.right_subject)}) student_coll.append(n) @@ -207,37 +236,104 @@ def detail(request, group_id, _id): return render_to_response(template, variable) +@get_execution_time +def remove_stud_from_batch(request, group_id): + group_name, group_id = get_group_name_id(group_id) + if request.is_ajax() and request.method == "POST": + batch_id = request.POST.get("batch_id", '') + stud_id = request.POST.get("stud_id", '') + rt_has_batch_member = node_collection.one({'_type':'RelationType','name':'has_batch_member'}) + grelation_node = triple_collection.one({'_type':'GRelation', + 'relation_type.$id':rt_has_batch_member._id, + 'subject':ObjectId(batch_id),'status':u'PUBLISHED', + 'right_subject': ObjectId(stud_id)}) + rel_name = grelation_node.relation_type.name + inv_rel_name = grelation_node.relation_type.inverse_name + subj = grelation_node.subject + right_subj = grelation_node.right_subject + + # Remove right-subject-node's ObjectId from the value + # corresponding to subject-node's "relation-name" key + # referenced in relation_set field + res = node_collection.collection.update({ + '_id': subj, + 'relation_set.' + rel_name: {'$exists': True} + }, { + '$pull': {'relation_set.$.' + rel_name: right_subj} + }, + upsert=False, multi=False + ) + # Remove subject-node's ObjectId from the value corresponding + # to right-subject-node's "inverse-relation-name" key + # referenced in relation_set field + res = node_collection.collection.update({ + '_id': right_subj, + 'relation_set.' + inv_rel_name: {'$exists': True} + }, { + '$pull': {'relation_set.$.' + inv_rel_name: subj} + }, + upsert=False, multi=False + ) + + grelation_node.status = u"DELETED" + grelation_node.save() + status = "success" + return HttpResponse(json.dumps(status, cls=NodeJSONEncoder)) + + +@get_execution_time +def batch_detail(request, group_id): + group_name, group_id = get_group_name_id(group_id) + new_batch_node = None + if request.is_ajax() and request.method == "GET": + batch_id = request.GET.get("batch_id", '') + + student_coll = [] + node = node_collection.one({'_id':ObjectId(batch_id)}) + rt_has_batch_member = node_collection.one({'_type':'RelationType','name':'has_batch_member'}) + relation_coll = triple_collection.find({'_type':'GRelation','relation_type.$id':rt_has_batch_member._id,'subject':node._id,'status':u'PUBLISHED'}) + + for each in relation_coll: + n = node_collection.one({'_id':ObjectId(each.right_subject)}) + student_coll.append(n) + return HttpResponse(json.dumps(student_coll, cls=NodeJSONEncoder)) + + + @login_required @get_execution_time -def delete_batch(request,group_id,_id): - if ObjectId.is_valid(group_id) is False : - group_ins = node_collection.find_one({'_type': "Group","name": group_id}) - auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) - if group_ins: - group_id = str(group_ins._id) - else : - auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) - if auth : - group_id = str(auth._id) - else : - pass - - node = node_collection.one({ '_id': ObjectId(_id)}) - left_relations = triple_collection.find({"_type":"GRelation", "subject":node._id}) - right_relations = triple_collection.find({"_type":"GRelation", "right_subject":node._id}) - attributes = triple_collection.find({"_type":"GAttribute", "subject":node._id}) +def delete_batch(request, group_id, _id): + + group_name, group_id = get_group_name_id(group_id) + + # if ObjectId.is_valid(group_id) is False : + # group_ins = node_collection.find_one({'_type': "Group","name": group_id}) + # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) + # if group_ins: + # group_id = str(group_ins._id) + # else : + # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) + # if auth : + # group_id = str(auth._id) + # else : + # pass + + node = node_collection.one({'_id': ObjectId(_id)}) + left_relations = triple_collection.find({"_type": "GRelation", "subject": node._id}) + right_relations = triple_collection.find({"_type": "GRelation", "right_subject": node._id}) + attributes = triple_collection.find({"_type": "GAttribute", "subject": node._id}) for eachobject in right_relations: # If given node is used in relationship with any other node (as right_subject) # Then this node's ObjectId must be removed from relation_set field of other node node_collection.collection.update( - {'_id': eachobject.subject, 'relation_set.'+eachobject.relation_type.name: {'$exists': True}}, - {'$pull': {'relation_set.$.'+eachobject.relation_type.name: node._id}}, + {'_id': eachobject.subject, 'relation_set.' + eachobject.relation_type.name: {'$exists': True}}, + {'$pull': {'relation_set.$.' + eachobject.relation_type.name: node._id}}, upsert=False, multi=False ) eachobject.delete() - all_associates = list(left_relations)+list(attributes) + all_associates = list(left_relations) + list(attributes) # Deleting GAttributes and GRelations where given node is used as left subject for eachobject in all_associates: eachobject.delete() @@ -245,3 +341,37 @@ def delete_batch(request,group_id,_id): # Finally deleting given node node.delete() return HttpResponseRedirect(reverse('batch', kwargs={'group_id': group_id})) + + +@login_required +def get_possible_batches(request, group_id): + ''' + Returns: + * Batches of selected course + ''' + group_name, group_id = get_group_name_id(group_id) + response_dict = {"success": False} + new_batch_node = None + if request.is_ajax() and request.method == "POST": + ac_id = request.POST.get("ac_id", '') + create_new_batch = request.POST.get("create_new_batch", '') + response_dict["success"] = True + batch_user_list_dict = [] + list_of_members = [] + if ac_id: + batch_cur = node_collection.find({'member_of': GST_BATCH._id, + 'relation_set.has_course': ObjectId(ac_id)}) + for each_batch in batch_cur: + each_batch_dict = {} + if each_batch.relation_set: + for rel in each_batch.relation_set: + list_of_members = [] + if rel and 'has_batch_member' in rel: + list_of_members.append(rel['has_batch_member']) + list_of_members.append(str(each_batch._id)) + each_batch_dict[each_batch.name] = list_of_members + batch_user_list_dict.append(each_batch_dict) + # batch_user_list_dict.append(str(each_batch._id)) + # print "\n\nBatches----------", batch_user_list_dict + response_dict["old_batches"] = batch_user_list_dict + return HttpResponse(json.dumps(response_dict, cls=NodeJSONEncoder)) |