def item_add(request, client_pk, job_pk): client = Client.objects.get(pk=client_pk) job = Job.objects.get(pk=job_pk, client=client) # Check if Job exists if job: if request.method == 'POST': post = request.POST.copy() num_pages = int(post['num_pages']) start_page = int(post['start_page']) name = str(post['name']) desc = str(post['desc']) post['job'] = job.pk # Save Item: item = Item.objects.create(name=name, desc=desc, job=job) print('\n\n\n' + str(item)) # Create all the neccesary pages: i = 0 for i in range(i, num_pages): page = Page.objects.create() page.save() # Create relationship to Version: base = Version.objects.create( abs_num=i + 1, rel_num=i + start_page, item=item, page=page, ) base.save() # And add a Revision to the Version: revision = Revision(rev_number=0, version=base) revision.save() message = 'You added Item: %r' % name + ' - %r' % desc + ' - %r' % num_pages return render_to_response('item_add.html', { 'message': message, 'client': client, 'job': job, }) return render_to_response('item_add.html', { 'client': client, 'job': job, }) else: raise Http404
def item_add (request, client_pk, job_pk): client = Client.objects.get(pk=client_pk) job = Job.objects.get(pk=job_pk, client=client) # Check if Job exists if job: if request.method == 'POST': post = request.POST.copy() num_pages = int(post['num_pages']) start_page = int(post['start_page']) name = str(post['name']) desc = str(post['desc']) post['job'] = job.pk # Save Item: item = Item.objects.create(name=name, desc=desc, job=job) print('\n\n\n' + str(item)) # Create all the neccesary pages: i = 0 for i in range(i, num_pages): page = Page.objects.create() page.save() # Create relationship to Version: base = Version.objects.create( abs_num=i + 1, rel_num=i + start_page, item=item, page=page, ) base.save() # Add a initial PENDING Revision to each new page: last_pages = Page.objects.filter(item=item) for page in last_pages: revision = Revision(rev_number=0, page=page) revision.save() message = 'You added Item: %r' % name + ' - %r' % desc + ' - %r' % num_pages return render_to_response('item_add.html', {'message': message, 'client': client, 'job': job, }) return render_to_response('item_add.html', { 'client': client, 'job': job, }) else: raise Http404
def comment_add(request, version, item, job, client): # This conditions also checks that POST data comes from the same page # where the send button was hit. Avoids accidentally adding comments # from a different form and receiving POST twice from different forms # (since forms share IDs in the template): if request.method == 'POST' and int( request.POST['from_page']) == version.rel_num: post = request.POST.copy() print(post) print('\nProcessing POST...') # Extract variables form POST message # TODO: sanitize entries comment = post['comment'] new_status = post['status'] pages = post.getlist('pages[]') print('\tpages: ' + str(pages) + '\n\tcomment: ' + str(comment) + '\n\tnew_status: ' + str(new_status) + '\n\tfrom_page: ' + str(post['from_page']) + '\n\tcalling_page: ' + str(version.rel_num)) # Create a comment and save it for later: new_comment = Comment(comment=comment) new_comment.save() print('\nNew Comment saved.\n') # Assign comment to a revision of its own page # and also to each page in the "affects too" list. # This revision can be: # a) if the user adding the comment belongs to providers list, the current last_rev() # b) if the user adding the comment belongs to clients list, a new revision (i.e.: last_rev()+1) print('Pages affected:') print( 'count: \tpg_abs_num: \tpg_rel_num: \tcurr_rev: \tnew_rev: \tchanges rev?' ) c = 0 for p in pages: current_page_num = int(p) current_version = Version.objects.get(rel_num=current_page_num, item=item, name=version.name) current_page = current_version.page current_rev = current_page.last_rev() # Add new revision only when status has been changed if current_rev.status != new_status: new_rev_num = current_rev.rev_number + 1 new_revision = Revision(rev_number=new_rev_num, page=current_page, status=new_status) new_revision.save() revision = new_revision changes = 'Yes' else: # Do not create a new revision revision = current_rev changes = 'No' print( str(c) + '\t\t' + str(current_version.abs_num) + '\t\t' + str(current_version.rel_num) + '\t\t' + str(current_rev.rev_number) + '\t\t' + str(revision.rev_number) + '\t\t' + str(changes)) # Associate new_comment to revision new_comment.revision.add(revision) c += 1 print('\nNew Comment \"' + str(new_comment.comment) + '\" added to pages ' + str(pages) + ' inside ' + '\"' + str(job.name) + '\"/\"' + str(item.name) + '\".') return { 'version': version, 'item': item, 'job': job, 'client': client, }
def comment_add (request, version, item, job, client): # This conditions also checks that POST data comes from the same page # where the send button was hit. Avoids accidentally adding comments # from a different form and receiving POST twice from different forms # (since forms share IDs in the template): if request.method == 'POST' and int(request.POST['from_page']) == version.rel_num: post = request.POST.copy() print(post) print('\nProcessing POST...') # Extract variables form POST message # TODO: sanitize entries comment = post['comment'] new_status = post['status'] pages = post.getlist('pages[]') print('\tpages: ' + str(pages) + '\n\tcomment: ' + str(comment) + '\n\tnew_status: ' + str( new_status) + '\n\tfrom_page: ' + str(post['from_page']) + '\n\tcalling_page: ' + str(version.rel_num)) # Create a comment and save it for later: new_comment = Comment(comment=comment) new_comment.save() print('\nNew Comment saved.\n') # Assign comment to a revision of its own page # and also to each page in the "affects too" list. # This revision can be: # a) if the user adding the comment belongs to providers list, the current last_rev() # b) if the user adding the comment belongs to clients list, a new revision (i.e.: last_rev()+1) print('Pages affected:') print('count: \tpg_abs_num: \tpg_rel_num: \tcurr_rev: \tnew_rev: \tchanges rev?') c = 0 for p in pages: current_page_num = int(p) current_version = Version.objects.get(rel_num=current_page_num, item=item, name=version.name) current_page = current_version.page current_rev = current_page.last_rev() # Add new revision only when status has been changed if current_rev.status != new_status: new_rev_num = current_rev.rev_number + 1 new_revision = Revision(rev_number=new_rev_num, page=current_page, status=new_status) new_revision.save() revision = new_revision changes = 'Yes' else: # Do not create a new revision revision = current_rev changes = 'No' print(str(c) + '\t\t' + str(current_version.abs_num) + '\t\t' + str(current_version.rel_num) + '\t\t' + str( current_rev.rev_number) + '\t\t' + str(revision.rev_number) + '\t\t' + str(changes)) # Associate new_comment to revision new_comment.revision.add(revision) c += 1 print( '\nNew Comment \"' + str(new_comment.comment) + '\" added to pages ' + str(pages) + ' inside ' + '\"' + str( job.name) + '\"/\"' + str(item.name) + '\".') return { 'version': version, 'item': item, 'job': job, 'client': client, }