def add_work_item(request, wip_report): report = get_object_or_404(WIPReport, name=wip_report) # Some security allow_access = False for group in request.user.groups.all(): if group in report.write_acl.all(): allow_access = True if allow_access: if request.method == 'POST': form = WIPItemEditorForm(report, request.POST) if form.is_valid(): t = form.save() heading = Heading.objects.get(id=request.POST['heading']) heading.wip_items.add(t) heading.save() _add_wip_to_archive(report) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors)) else: return HttpResponse( handle_form_errors(form.errors)) else: return HttpResponse( handle_form_errors(form.errors))
def update_work_item(request, wip_report, work_item_id): wip_report = WIPReport.objects.get(name=wip_report) work_item = get_object_or_404(WIPItem, id=work_item_id) # Some security allow_access = False for group in request.user.groups.all(): if group in wip_report.read_acl.all(): allow_access = True form = WIPItemUserForm(request.POST, instance=work_item) if group in wip_report.write_acl.all(): allow_access = True form = WIPItemEditorForm(wip_report, request.POST, instance=work_item) if allow_access: if form.is_valid(): t = form.save(commit=False) if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), work_item.history ) t.save() _add_wip_to_archive(work_item.heading.all()[0].report.all()[0]) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def edit_work_item(request, project_number, wbs_id): project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to view project work_item = WorkItem.objects.get(id=wbs_id) # Give the user the correct form - WBSForm for a project admin (has write access to project) or WBSUserForm for a readonly user form_type = 'WBSUserForm' for group in request.user.groups.all(): if group in project.write_acl.all(): form_type = 'WBSForm' if request.method == 'POST': form = eval(form_type)(project, request.POST, instance=work_item) if form.is_valid(): t = form.save(commit=False) t.author = request.user if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), work_item.history ) t.save() return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_risk(request, project_number): # Some security - only allow users to view objects they are allowed to via read_acl project = get_object_or_404(Project, project_number=project_number) check_project_read_acl( project, request.user ) # Will return Http404 if user isn't allowed to view project if request.method == 'POST': form = RiskForm(request.POST) if form.is_valid(): t = form.save(commit=False) t.risk_number = '''RISK-%s-%s''' % ( request.user.username[:2].upper(), time.strftime("%Y%m%d%H%M")) t.rating = _calculate_risk(t.probability, t.impact) t.save() project.risks.add(t) project.save() request.user.message_set.create(message='''Risk %s Registered''' % t.risk_number) updateLog(request, project.project_number, '''Risk %s Registered''' % t.risk_number) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def add_engineering_day(request, project_number, wbs_id): project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to view project work_item = WorkItem.objects.get(id=wbs_id) if request.method == 'POST': form = EngineeringDayForm(request.POST) if form.is_valid(): t = form.save(commit=False) logging.debug('''resource => %s, work_date => %s, day_type => %s''' % ( t.resource, t.work_date, t.day_type )) available_resources = get_resources_for_engineering_day(request, project_number, wbs_id, t.work_date.strftime("%Y"), t.work_date.strftime("%m"), t.work_date.strftime("%d"), t.day_type, as_json=False) logging.debug('''Resource ID is: %s''' % t.resource.id ) logging.debug('''Available resources are: %s''' % available_resources ) if t.resource.id not in [ r['pk'] for r in available_resources ]: logging.debug('''User has tried to book %s on %s when he hasn't got the correct skillset''' % ( t.resource, t.work_date )) return HttpResponse( handle_generic_error("Sorry - this resource hasn't got the skillset to work on this task")) if EngineeringDay.objects.filter(work_date=t.work_date, resource=t.resource, day_type__in=[ t.day_type, 2]).count() > 0: logging.debug('''User has tried to book %s on %s when he has existing engineering days booked''' % ( t.resource, t.work_date )) return HttpResponse( handle_generic_error("Sorry - this resource is already booked at this time.")) t.save() work_item.engineering_days.add(t) work_item.save() return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def edit_rota(request): # Some security, if the user isn't allowed to edit the rota raise 404 if not request.user.has_perm('rota.can_edit'): raise Http404 form = EditRotaForm(request.POST) if form.is_valid(): c = form.cleaned_data user = User.objects.get(id=c['person_id']) requested_week = calculate_week(datetime.datetime.strptime(c['monday_date'], "%Y-%m-%d")) #Get the existing Rota objects if they exist and edit or create them days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] for d in range(0,7): # No point proceeding with this day if there isn't a rota item to create if c[days[d]]: try: r = RotaItem.objects.get(person=user, date=requested_week[d]) except RotaItem.DoesNotExist: r = RotaItem() r.person = user r.date = requested_week[d] r.activity = RotaActivity.objects.get(id=c[days[d]]) r.description = c['%s_description' % days[d]] r.author = request.user r.save() logging.debug('''Added rota item... user=>%s, date=>%s, activity=>%s''' % ( r.person, r.date, r.activity )) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_file(request, project_number): project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = FileForm(request.POST, request.FILES) if form.is_valid(): t = form.save() project.files.add(t) project.save() return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_file(request, project_number): project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = FileForm(request.POST, request.FILES) if form.is_valid(): t = form.save() project.files.add(t) project.save() return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_checkpoint_report(request, project_number, report_id): report = ExecutiveSummary.objects.get(id=report_id) project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = DialogExecutiveSummary(request.POST, instance=report) if form.is_valid(): t = form.save() request.user.message_set.create(message='''Report Edited''') return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_checkpoint_report(request, project_number, report_id): report = ExecutiveSummary.objects.get(id=report_id) project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = DialogExecutiveSummary(request.POST, instance=report) if form.is_valid(): t = form.save() request.user.message_set.create(message='''Report Edited''') return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def edit_deliverable(request, project_number, deliverable_id): project = Project.objects.get(project_number=project_number) deliverable = Deliverable.objects.get(id=deliverable_id) if request.method == "POST": form = DeliverableForm(request.POST, instance=deliverable) if form.is_valid(): t = form.save() t.save() request.user.message_set.create(message="""Deliverable %s Edited""" % t.id) for change in form.changed_data: updateLog(request, project_number, """%s changed to %s""" % (change, eval("""t.%s""" % change))) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_lesson(request, project_number, lesson_id): project = Project.objects.get(project_number=project_number) lesson = LessonLearnt.objects.get(id=lesson_id) if request.method == 'POST': form = LessonForm(request.POST, instance=lesson) if form.is_valid(): t = form.save() t.save() request.user.message_set.create(message='''Lesson %s Edited''' % t.id) for change in form.changed_data: updateLog(request, project_number, '%s changed to %s' % ( change, eval('''t.%s''' % change))) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_checkpoint_report(request, project_number): # Some security - only allow users to view objects they are allowed to via write_acl project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to write to project if request.method == 'POST': form = DialogExecutiveSummary(request.POST) if form.is_valid(): t = form.save() project.executive_summary.add(t) project.save() request.user.message_set.create(message='''Checkpoint Report added''') return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_issue(request, project_number): project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = IssueForm(request.POST) if form.is_valid(): t = form.save(commit=False) t.author = request.user t.save() project.issues.add(t) project.save() request.user.message_set.create(message='''Issue %s Registered''' % t.id) updateLog(request, project_number, '''Issue %s Registered''' % t.id) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_project_stage(request, project_number): project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to view project if request.method == 'POST': form = WBSProjectStage(request.POST) if form.is_valid(): t = form.save(commit=False) t.stage = '''%s - %s''' % ( t.stage_number, t.stage ) t.save() project.stage_plan.add(t) project.save() return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_lesson(request, project_number): project = Project.objects.get(project_number=project_number) lessons = LessonLearnt.objects.filter(project=project) if request.method == 'POST': form = LessonForm(request.POST) if form.is_valid(): t = form.save() t.save() project.lessons_learnt.add(t) project.save() request.user.message_set.create(message='''Lesson %s Registered''' % t.id) updateLog(request, project_number, '''Lesson %s Registered''' % t.id) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_work_item(request, project_number): project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to view project if request.method == 'POST': form = WBSForm(project, request.POST) if form.is_valid(): t = form.save(commit=False) number_of_items = WorkItem.objects.filter(active=True, project__id=project.id).count() t.wbs_number = number_of_items + 1 t.author = request.user t.save() project.work_items.add(t) project.save() return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_deliverable(request, project_number): # Some security - only allow users to view objects they are allowed to via read_acl project = get_object_or_404(Project, project_number=project_number) check_project_read_acl(project, request.user) # Will return Http404 if user isn't allowed to view project if request.method == "POST": form = DeliverableForm(request.POST) if form.is_valid(): t = form.save() t.save() project.deliverables.add(t) project.save() request.user.message_set.create(message="""Deliverable %s Registered""" % t.id) updateLog(request, project_number, """Deliverable %s Registered""" % t.id) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def add_lesson(request, project_number): project = Project.objects.get(project_number=project_number) lessons = LessonLearnt.objects.filter(project=project) if request.method == 'POST': form = LessonForm(request.POST) if form.is_valid(): t = form.save() t.save() project.lessons_learnt.add(t) project.save() request.user.message_set.create( message='''Lesson %s Registered''' % t.id) updateLog(request, project_number, '''Lesson %s Registered''' % t.id) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def add_issue(request, project_number): project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = IssueForm(request.POST) if form.is_valid(): t = form.save(commit=False) t.author = request.user t.save() project.issues.add(t) project.save() request.user.message_set.create(message='''Issue %s Registered''' % t.id) updateLog(request, project_number, '''Issue %s Registered''' % t.id) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_lesson(request, project_number, lesson_id): project = Project.objects.get(project_number=project_number) lesson = LessonLearnt.objects.get(id=lesson_id) if request.method == 'POST': form = LessonForm(request.POST, instance=lesson) if form.is_valid(): t = form.save() t.save() request.user.message_set.create(message='''Lesson %s Edited''' % t.id) for change in form.changed_data: updateLog( request, project_number, '%s changed to %s' % (change, eval('''t.%s''' % change))) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_project(request, project_number, form_type): # Some security - only allow users to view objects they are allowed to via write_acl project = get_object_or_404(Project, project_number=project_number) check_project_write_acl(project, request.user) # Will return Http404 if user isn't allowed to write to project if request.method == 'POST': form = eval(form_type)(request.POST, instance=project) if form.is_valid(): t = form.save() for id in request.POST['team_managers_placeholder'].split(','): t.team_managers.add(id) t.save() request.user.message_set.create(message='''Project %s Edited''' % t.project_number) for change in form.changed_data: updateLog(request, t.project_number, '%s Updated' % change) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_checkpoint_report(request, project_number): # Some security - only allow users to view objects they are allowed to via write_acl project = get_object_or_404(Project, project_number=project_number) check_project_write_acl( project, request.user ) # Will return Http404 if user isn't allowed to write to project if request.method == 'POST': form = DialogExecutiveSummary(request.POST) if form.is_valid(): t = form.save() project.executive_summary.add(t) project.save() request.user.message_set.create( message='''Checkpoint Report added''') return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def add_risk(request, project_number): # Some security - only allow users to view objects they are allowed to via read_acl project = get_object_or_404(Project, project_number=project_number) check_project_read_acl(project, request.user) # Will return Http404 if user isn't allowed to view project if request.method == 'POST': form = RiskForm(request.POST) if form.is_valid(): t = form.save(commit=False) t.risk_number = '''RISK-%s-%s''' % (request.user.username[:2].upper(), time.strftime("%Y%m%d%H%M")) t.rating = _calculate_risk(t.probability, t.impact) t.save() project.risks.add(t) project.save() request.user.message_set.create(message='''Risk %s Registered''' % t.risk_number) updateLog(request, project.project_number, '''Risk %s Registered''' % t.risk_number) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_deliverable(request, project_number): # Some security - only allow users to view objects they are allowed to via read_acl project = get_object_or_404(Project, project_number=project_number) check_project_read_acl( project, request.user ) # Will return Http404 if user isn't allowed to view project if request.method == 'POST': form = DeliverableForm(request.POST) if form.is_valid(): t = form.save() t.save() project.deliverables.add(t) project.save() request.user.message_set.create( message='''Deliverable %s Registered''' % t.id) updateLog(request, project_number, '''Deliverable %s Registered''' % t.id) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_project(request, project_number, form_type): # Some security - only allow users to view objects they are allowed to via write_acl project = get_object_or_404(Project, project_number=project_number) check_project_write_acl( project, request.user ) # Will return Http404 if user isn't allowed to write to project if request.method == 'POST': form = eval(form_type)(request.POST, instance=project) if form.is_valid(): t = form.save() for id in request.POST['team_managers_placeholder'].split(','): t.team_managers.add(id) t.save() request.user.message_set.create(message='''Project %s Edited''' % t.project_number) for change in form.changed_data: updateLog(request, t.project_number, '%s Updated' % change) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_risk(request, project_number, risk_id): risk = Risk.objects.get(id=risk_id) project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = RiskForm(request.POST, instance=risk) if form.is_valid(): t = form.save(commit=False) t.rating = _calculate_risk(t.probability, t.impact) if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), risk.history ) t.save() request.user.message_set.create(message='''Risk %s Edited''' % t.risk_number) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def edit_issue(request, project_number, issue_id): project = Project.objects.get(project_number=project_number) issue = Issue.objects.get(id=issue_id) if request.method == 'POST': form = IssueEditForm(request.POST, instance=issue) if form.is_valid(): t = form.save(commit=False) if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), issue.history ) t.save() request.user.message_set.create(message='''Issue %s Edited''' % t.id) for change in form.changed_data: updateLog(request, project_number, 'Issue %s updated' % ( t.id )) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def add_heading(request, wip_report): wip_report = get_object_or_404(WIPReport, name=wip_report) # Some security allow_access = False for group in request.user.groups.all(): if group in wip_report.write_acl.all(): allow_access = True if allow_access: form = WIPHeadingForm(request.POST) if form.is_valid(): t = form.save() wip_report.headings.add(t) wip_report.save() _add_wip_to_archive(wip_report) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors)) else: return HttpResponse( handle_generic_error("Sorry, you don't have permissions to add a WIP heading"))
def add_wip_engineering_day(request, wip_report, work_item_id): work_item = get_object_or_404(WIPItem, id=work_item_id) wip_report = WIPReport.objects.get(name=wip_report) if request.method == 'POST': form = EngineeringDayForm(request.POST) if form.is_valid(): t = form.save(commit=False) logging.debug('''resource => %s, work_date => %s, day_type => %s''' % ( t.resource, t.work_date, t.day_type )) available_resources = get_resources_for_engineering_day(request, wip_report, t.work_date.strftime("%Y"), t.work_date.strftime("%m"), t.work_date.strftime("%d"), t.day_type, as_json=False) logging.debug('''Resource ID is: %s''' % t.resource.id ) logging.debug('''Available resources are: %s''' % available_resources ) if t.resource.id not in [ r['pk'] for r in available_resources ]: logging.debug('''User has tried to book %s on %s when he hasn't got the correct skillset''' % ( t.resource, t.work_date )) return HttpResponse( handle_generic_error("Sorry - this resource hasn't got the skillset to work on this task")) if EngineeringDay.objects.filter(work_date=t.work_date, resource=t.resource, day_type__in=[ t.day_type, 2]).count() > 0: logging.debug('''User has tried to book %s on %s when he has existing engineering days booked''' % ( t.resource, t.work_date )) return HttpResponse( handle_generic_error("Sorry - this resource is already booked at this time.")) # Check the rota, make sure resource isn't on holiday or training etc try: rota = RotaItem.objects.get(date=t.work_date, person=t.resource) if rota.activity.unavailable_for_projects: return HttpResponse( handle_generic_error("Sorry - this resource has an entry in the Rota stopping you booking this Engineering Day.")) except RotaItem.DoesNotExist: pass t.save() work_item.engineering_days.add(t) work_item.save() logging.debug('''Booked engineering day for %s on %s''' % ( t.resource, t.work_date )) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def complete_work_item(request, wip_report, work_item_id): wip_report = WIPReport.objects.get(name=wip_report) work_item = get_object_or_404(WIPItem, id=work_item_id) # Some security allow_access = False for group in request.user.groups.all(): if group in wip_report.read_acl.all(): allow_access = True if group in wip_report.write_acl.all(): allow_access = True if allow_access: form = CompleteWIPItemForm(request.POST) if form.is_valid(): work_item.complete = True work_item.save() _add_wip_to_archive(work_item.heading.all()[0].report.all()[0]) return HttpResponse( return_json_success() ) else: return HttpResponse( handle_form_errors(form.errors))
def edit_issue(request, project_number, issue_id): project = Project.objects.get(project_number=project_number) issue = Issue.objects.get(id=issue_id) if request.method == 'POST': form = IssueEditForm(request.POST, instance=issue) if form.is_valid(): t = form.save(commit=False) if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), issue.history) t.save() request.user.message_set.create(message='''Issue %s Edited''' % t.id) for change in form.changed_data: updateLog(request, project_number, 'Issue %s updated' % (t.id)) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))
def edit_risk(request, project_number, risk_id): risk = Risk.objects.get(id=risk_id) project = Project.objects.get(project_number=project_number) if request.method == 'POST': form = RiskForm(request.POST, instance=risk) if form.is_valid(): t = form.save(commit=False) t.rating = _calculate_risk(t.probability, t.impact) if request.POST['update'] != '': if request.user.get_full_name() == '': update_name = request.user.username else: update_name = request.user.get_full_name() t.history = '''\n\n------Updated by %s on %s------\n\n%s\n\n%s''' % ( update_name, time.strftime("%Y-%m-%d %H:%M"), form.cleaned_data.get('update'), risk.history) t.save() request.user.message_set.create(message='''Risk %s Edited''' % t.risk_number) return HttpResponse(return_json_success()) else: return HttpResponse(handle_form_errors(form.errors))