def ajax_update_kpi_schedule(request): if request.method == 'POST': schedule_id = request.POST.get('schedule_id') new_target = request.POST.get('target', '') new_result = request.POST.get('result', '') try: kpi_schedule = DomainKPISchedule.objects.get(pk=schedule_id) except: raise Http404 is_changed = False if new_target: if not permission.access_obj(request.user, 'program kpi target edit', kpi_schedule.program): return HttpResponse(simplejson.dumps({'error': 'denied'})) try: new_target = int(new_target) except: return HttpResponse(simplejson.dumps({'error': 'invalid'})) if new_target < 0: return HttpResponse(simplejson.dumps({'error': 'invalid'})) target = new_target is_changed = True else: target = kpi_schedule.target if new_result: if not permission.access_obj(request.user, 'program kpi result edit', kpi_schedule.program): return HttpResponse(simplejson.dumps({'error': 'denied'})) try: new_result = int(new_result) except: return HttpResponse(simplejson.dumps({'error': 'invalid'})) if new_result < 0: return HttpResponse(simplejson.dumps({'error': 'invalid'})) result = new_result is_changed = True else: result = kpi_schedule.result if is_changed: kpi_schedule.target = target kpi_schedule.result = result kpi_schedule.save() return HttpResponse("") else: raise Http404
def ajax_update_kpi_schedule(request): if request.method == 'POST': schedule_id = request.POST.get('schedule_id') new_target = request.POST.get('target', '') new_result = request.POST.get('result', '') try: kpi_schedule = DomainKPISchedule.objects.get(pk=schedule_id) except: raise Http404 is_changed = False if new_target: if not permission.access_obj(request.user, 'program kpi target edit', kpi_schedule.program): return HttpResponse(simplejson.dumps({'error':'denied'})) try: new_target = int(new_target) except: return HttpResponse(simplejson.dumps({'error':'invalid'})) if new_target < 0: return HttpResponse(simplejson.dumps({'error':'invalid'})) target = new_target is_changed = True else: target = kpi_schedule.target if new_result: if not permission.access_obj(request.user, 'program kpi result edit', kpi_schedule.program): return HttpResponse(simplejson.dumps({'error':'denied'})) try: new_result = int(new_result) except: return HttpResponse(simplejson.dumps({'error':'invalid'})) if new_result < 0: return HttpResponse(simplejson.dumps({'error':'invalid'})) result = new_result is_changed = True else: result = kpi_schedule.result if is_changed: kpi_schedule.target = target kpi_schedule.result = result kpi_schedule.save() return HttpResponse("") else: raise Http404
def display_project_header(user, project): if project.plan: header_html = unicode('<div class="supertitle"><a href="%s">แผน %s - %s</a></div><h1>โครงการ (%s) %s</h1>', 'utf-8') % (reverse('view_master_plan_overview', args=[project.plan.master_plan.id]), project.plan.master_plan.ref_no, project.plan.master_plan.name, project.ref_no, project.name) if permission.access_obj(user, 'program project edit', project.program): header_html = header_html + unicode('<div class="subtitle"><img src="%s/images/icons/edit.png" class="icon"/> <a href="%s">แก้ไขโครงการ</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_project_edit_project', args=[project.id])) else: header_html = unicode('<div class="supertitle"><a href="%s">แผนงาน %s - %s</a></div><h1>โครงการ (%s) %s</h1>', 'utf-8') % (reverse('view_program_overview', args=[project.program.id]), project.program.ref_no, project.program.name, project.ref_no, project.name) if permission.access_obj(user, 'program project edit', project.program): header_html = header_html + unicode('<div class="subtitle"><img src="%s/images/icons/edit.png" class="icon"/> <a href="%s">แก้ไขโครงการ</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_project_edit_project', args=[project.id])) return header_html
def view_master_plan_manage_kpi_add_category(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, pk=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPICategoryModifyForm(request.POST) if form.is_valid(): category = DomainKPICategory.objects.create( master_plan=master_plan, name=form.cleaned_data['name']) messages.success(request, 'เพิ่มประเภทตัวชี้วัดเรียบร้อย') return redirect('view_master_plan_manage_kpi_category', (master_plan.ref_no)) else: form = DomainKPICategoryModifyForm() return render_page_response( request, 'kpi_category', 'page_sector/manage_master_plan/manage_kpi_modify_category.html', { 'master_plan': master_plan, 'form': form })
def view_master_plan_manage_kpi_add_kpi(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPIModifyForm(request.POST, master_plan=master_plan) if form.is_valid(): kpi = DomainKPI.objects.create( master_plan=master_plan, ref_no=form.cleaned_data['ref_no'], name=form.cleaned_data['name'], abbr_name=form.cleaned_data['abbr_name'], year=form.cleaned_data['year'] - 543, unit_name=form.cleaned_data['unit_name'], category=form.cleaned_data['category'], ) messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย') return utilities.redirect_or_back('view_master_plan_manage_kpi', (master_plan.ref_no), request) else: form = DomainKPIModifyForm(master_plan=master_plan) return render_page_response( request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', { 'master_plan': master_plan, 'form': form })
def view_master_plan_manage_kpi_edit_category(request, kpi_category_id): kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id) master_plan = kpi_category.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPICategoryModifyForm(request.POST) if form.is_valid(): kpi_category.name = form.cleaned_data['name'] kpi_category.save() messages.success(request, 'แก้ไขประเภทตัวชี้วัดเรียบร้อย') return redirect('view_master_plan_manage_kpi_category', (master_plan.ref_no)) else: form = DomainKPICategoryModifyForm(initial={'name': kpi_category.name}) return render_page_response( request, 'kpi_category', 'page_sector/manage_master_plan/manage_kpi_modify_category.html', { 'master_plan': master_plan, 'form': form, 'kpi_category': kpi_category })
def view_program_edit_project(request, project_id): project = get_object_or_404(Project, pk=project_id) program = project.program if not permission.access_obj(request.user, 'program project edit', program): return access_denied(request) if request.method == 'POST': form = ProjectModifyForm(request.POST) if form.is_valid(): project.ref_no = form.cleaned_data.get('ref_no') project.contract_no = form.cleaned_data.get('contract_no') project.name = form.cleaned_data.get('name') project.description = form.cleaned_data.get('description') project.start_date = form.cleaned_data.get('start_date') project.end_date = form.cleaned_data.get('end_date') project.save() messages.success(request, u'แก้ไขโครงการเรียบร้อย') return redirect('view_program_projects', (program.id)) else: form = ProjectModifyForm(initial={'program_id':program.id, 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date}) project.removable = Activity.objects.filter(project=project).count() == 0 return render_page_response(request, 'projects', 'page_program/program_projects_modify_project.html', {'program':program, 'form':form, 'project':project})
def display_activity_header(user, activity): header_html = unicode('<div class="supertitle"><a href="%s">แผนงาน %s</a> » <a href="%s">โครงการ %s - %s</a></div><h1>กิจกรรม %s</h1>', 'utf-8') % (reverse('view_program_overview', args=[activity.project.program.id]), activity.project.program.ref_no, reverse('view_project_overview', args=[activity.project.id]), activity.project.ref_no, activity.project.name, activity.name) if permission.access_obj(user, 'program activity edit', activity.project.program): header_html = header_html + unicode('<div class="subtitle"><img src="%s/images/icons/edit.png" class="icon"/> <a href="%s">แก้ไขกิจกรรม</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_activity_edit_activity', args=[activity.id])) return header_html
def view_master_plan_manage_kpi_edit_kpi(request, kpi_id): kpi = get_object_or_404(DomainKPI, pk=kpi_id) master_plan = kpi.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPIModifyForm(request.POST, master_plan=master_plan) if form.is_valid(): kpi.ref_no = form.cleaned_data['ref_no'] kpi.name = form.cleaned_data['name'] kpi.abbr_name = form.cleaned_data['abbr_name'] kpi.year = form.cleaned_data['year']- 543 kpi.unit_name = form.cleaned_data['unit_name'] kpi.category = form.cleaned_data['category'] kpi.save() messages.success(request, 'แก้ไขตัวชี้วัดเรียบร้อย') return redirect('view_master_plan_manage_kpi', (master_plan.ref_no)) else: form = DomainKPIModifyForm(master_plan=master_plan, initial={'ref_no':kpi.ref_no, 'name':kpi.name, 'abbr_name':kpi.abbr_name, 'year':kpi.year+543, 'category':kpi.category, 'unit_name':kpi.unit_name}) return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {'master_plan':master_plan, 'form':form, 'kpi':kpi})
def view_activity_edit_activity(request, activity_id): activity = get_object_or_404(Activity, pk=activity_id) project = activity.project if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan): return access_denied(request) if project.program and not permission.access_obj(request.user, 'program activity edit', project.program): return access_denied(request) if request.method == 'POST': form = ActivityModifyForm(request.POST) if form.is_valid(): activity.name = form.cleaned_data['name'] activity.start_date = form.cleaned_data['start_date'] activity.end_date = form.cleaned_data['end_date'] activity.description = form.cleaned_data['description'] activity.location = form.cleaned_data['location'] activity.result_goal = form.cleaned_data['result_goal'] activity.result_real = form.cleaned_data['result_real'] activity.save() messages.success(request, u'แก้ไขกิจกรรมเรียบร้อย') return redirect('view_activity_overview', (activity.id)) else: form = ActivityModifyForm(initial=activity.__dict__) return render_page_response(request, '', 'page_program/activity_edit_activity.html', {'activity':activity, 'form':form})
def view_master_plan_manage_report_delete_report(request, report_id): report = get_object_or_404(Report, pk=report_id) master_plan = report.master_plan if not master_plan: raise Http404 if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) program_count = ReportAssignment.objects.filter(report=report, is_active=True).count() submission_count = ReportSubmission.objects.filter(report=report).exclude( Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count() if not program_count and not submission_count: ReportDueRepeatable.objects.filter(report=report).delete() ReportDueDates.objects.filter(report=report).delete() ReportSubmission.objects.filter(report=report).delete() report.delete() messages.success(request, 'ลบหัวเรื่องรายงานเรียบร้อย') else: messages.error( request, 'ไม่สามารถลบหัวเรื่องรายงาน เนื่องจากยังมีแผนงานผูกอยู่ หรือมีรายงานที่ส่งไปแล้ว' ) return redirect('view_master_plan_manage_report', (master_plan.ref_no))
def view_program_reports(request, program_id, year_number): program = get_object_or_404(Program, id=program_id) if year_number: year_number = int(year_number) - 543 else: year_number = utilities.master_plan_current_year_number() year_choices = [] for i in range(1, -3, -1): year_choices.append(year_number + i) (start_date, end_date) = utilities.master_plan_year_span(year_number) if permission.access_obj(request.user, 'program report submission warning', program): (submissions, late_submissions, rejected_submissions ) = report_functions.get_reports_for_program_reports_page( program, start_date, end_date, include_warning=True) else: (submissions, late_submissions, rejected_submissions ) = report_functions.get_reports_for_program_reports_page( program, start_date, end_date, include_warning=False) return render_page_response( request, 'reports', 'page_program/program_reports.html', { 'program': program, 'submissions': submissions, 'late_submissions': late_submissions, 'rejected_submissions': rejected_submissions, 'start_date': start_date, 'end_date': end_date, 'year_number': year_number, 'year_choices': year_choices })
def view_master_plan_manage_report(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) reports = Report.objects.filter( master_plan=master_plan).order_by('created') for report in reports: # NOTE ON DELETING REPORT: # Not allow to delete report if there's still project using this report (ReportProject model) # or some report submission has been submitted (state is not NO_ACTIVITY or EDITING_ACTIVITY) report.program_count = ReportAssignment.objects.filter( report=report, is_active=True).count() submission_count = ReportSubmission.objects.filter( report=report).exclude( Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count() report.removable = not report.program_count and not submission_count return render_page_response( request, 'report', 'page_sector/manage_master_plan/manage_report.html', { 'master_plan': master_plan, 'reports': reports })
def view_budget_overview(request, schedule_id): schedule = get_object_or_404(BudgetSchedule, pk=schedule_id) if permission.access_obj(request.user, 'program budget remark edit', schedule.program): if request.method == 'POST': form = ModifyBudgetRemarkForm(request.POST) if form.is_valid(): schedule.remark = form.cleaned_data['remark'] schedule.save() messages.success(request, 'แก้ไขหมายเหตุเรียบร้อย') return redirect('view_budget_overview', (schedule.id)) else: form = ModifyBudgetRemarkForm(initial={'remark':schedule.remark}) else: form = None ref_projects = [] ref_report_submissions = [] for reference in BudgetScheduleReference.objects.filter(schedule=schedule): if reference.project: ref_projects.append(reference) elif reference.report_submission: ref_report_submissions.append(reference) revisions = BudgetScheduleRevision.objects.filter(schedule=schedule).order_by('-revised') return render_page_response(request, 'overview', 'page_kpi/budget_overview.html', {'schedule':schedule, 'ref_projects':ref_projects, 'ref_report_submissions':ref_report_submissions, 'revisions':revisions, 'form':form})
def view_program_manage_kpi_add_kpi(request, program_id): program = get_object_or_404(Program, pk=program_id) if not permission.access_obj(request.user, 'program kpi manage', program): return access_denied(request) if request.method == 'POST': form = DomainKPIModifyForm(request.POST) if form.is_valid(): kpi = DomainKPI.objects.create( program = program, ref_no = form.cleaned_data['ref_no'], name = form.cleaned_data['name'], abbr_name = form.cleaned_data['abbr_name'], year = form.cleaned_data['year'] - 543, unit_name = form.cleaned_data['unit_name'] ) messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย') return utilities.redirect_or_back('view_program_manage_kpi', (program.id), request) else: form = DomainKPIModifyForm() return render_page_response(request, 'kpi', 'page_program/manage_kpi/program_manage_kpi_modify_kpi.html', {'program':program, 'form':form})
def view_program_reports_manage_report(request, program_id): program = get_object_or_404(Program, id=program_id) if permission.access_obj( request.user, ('program report schedule add', 'program report schedule edit', 'program report schedule delete'), program): assignments = ReportAssignment.objects.filter(program=program, is_active=True) reports_from_master_plan = [] reports_from_program = [] for assignment in assignments: if assignment.report.master_plan: reports_from_master_plan.append(assignment.report) else: report = assignment.report report.removable = ReportSubmission.objects.filter( report=report).exclude( Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count() == 0 reports_from_program.append(report) return render_page_response( request, 'reports', 'page_program/program_reports_manage.html', { 'program': program, 'reports_from_master_plan': reports_from_master_plan, 'reports_from_program': reports_from_program }) else: return access_denied(request)
def view_program_reports_send_list(request, program_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj( request.user, ('program report submission edit', 'program report submission submit'), program): return access_denied(request) # IMPORTANT NOTE ON PERMISSION # In this page, 'program report submission warning' will be ignored reports = [] for assignment in ReportAssignment.objects.filter(program=program, is_active=True): report = assignment.report report.counter = report_functions.get_sending_report_count( program, report) reports.append(report) return render_page_response(request, 'reports', 'page_program/program_reports_send.html', { 'program': program, 'reports': reports })
def view_master_plan_manage_kpi(request, master_plan_ref_no, kpi_year): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if kpi_year: year_number = int(kpi_year) else: year_number = utilities.master_plan_current_year_number() kpi_categories = [] for dict in DomainKPI.objects.filter(master_plan=master_plan, year=year_number).values('category').distinct(): try: kpi_category = DomainKPICategory.objects.get(pk=dict['category']) except DomainKPICategory.DoesNotExist: pass else: kpis = DomainKPI.objects.filter(master_plan=master_plan, year=year_number, category=kpi_category).order_by('ref_no') for kpi in kpis: kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0 kpi_category.kpis = kpis kpi_categories.append(kpi_category) print year_number no_category_kpis = DomainKPI.objects.filter(master_plan=master_plan, year=year_number, category=None) print no_category_kpis for kpi in no_category_kpis: kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0 return render_page_response(request, 'kpi', 'page_sector/manage_master_plan/manage_kpi.html', {'master_plan':master_plan, 'kpi_categories':kpi_categories, 'no_category_kpis':no_category_kpis, 'kpi_year':year_number})
def view_program_add_project(request, program_id): program = get_object_or_404(Program, pk=program_id) if not permission.access_obj(request.user, 'program project add', program): return access_denied(request) if request.method == 'POST': form = ProjectModifyForm(request.POST) if form.is_valid(): project = Project.objects.create( program=program, ref_no=form.cleaned_data['ref_no'], contract_no=form.cleaned_data['contract_no'], name=form.cleaned_data['name'], description=form.cleaned_data['description'], start_date=form.cleaned_data['start_date'], end_date=form.cleaned_data['end_date'], created_by=request.user.get_profile() ) messages.success(request, u'เพิ่มโครงการเรียบร้อย') return redirect('view_program_projects', (program.id)) else: form = ProjectModifyForm(initial={'program_id':program.id}) return render_page_response(request, 'projects', 'page_program/program_projects_modify_project.html', {'program':program, 'form':form})
def view_master_plan_add_program(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if Plan.objects.filter(master_plan=master_plan).count() == 0: messages.error(request, 'กรุณาสร้างกลุ่มแผนงานก่อนการสร้างแผนงาน') return redirect('view_master_plan_manage_organization', (master_plan.ref_no)) if request.method == 'POST': form = MasterPlanProgramForm(request.POST, master_plan=master_plan) if form.is_valid(): program = Program.objects.create( plan=form.cleaned_data['plan'], ref_no=form.cleaned_data['ref_no'], name=form.cleaned_data['name'], abbr_name=form.cleaned_data['abbr_name'], manager_name=form.cleaned_data['manager_name'], start_date=form.cleaned_data['start_date'], end_date=form.cleaned_data['end_date'], ) messages.success(request, u'เพิ่มแผนงาน/โครงการเรียบร้อย') return redirect('view_master_plan_manage_organization', (master_plan.ref_no)) else: form = MasterPlanProgramForm(master_plan=master_plan) return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_modify_program.html', {'master_plan':master_plan, 'form':form})
def display_master_plan_header(user, master_plan): header_html = unicode('<h1>แผนหลัก %d - %s</h1>', 'utf-8') % (master_plan.ref_no, master_plan.name) if permission.access_obj(user, 'master_plan manage', master_plan): header_html = header_html + unicode('<div class="subtitle"><img src="%s/images/icons/settings.png" class="icon" /> <a href="%s">จัดการแผนหลัก</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_master_plan_manage_organization', args=[master_plan.ref_no])) return header_html
def view_project_edit_project(request, project_id): project = get_object_or_404(Project, pk=project_id) if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan): return access_denied(request) if project.program and not permission.access_obj(request.user, 'program project edit', program): return access_denied(request) if request.method == 'POST': form = ProjectModifyForm(request.POST) if form.is_valid(): project.ref_no = form.cleaned_data.get('ref_no') project.contract_no = form.cleaned_data.get('contract_no') project.name = form.cleaned_data.get('name') project.abbr_name = form.cleaned_data.get('abbr_name') project.description = form.cleaned_data.get('description') project.start_date = form.cleaned_data.get('start_date') project.end_date = form.cleaned_data.get('end_date') project.save() messages.success(request, u'แก้ไขโครงการเรียบร้อย') return redirect('view_project_overview', (project.id)) else: if project.program: form = ProjectModifyForm(initial={'program_id':project.program.id, 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date}) else: form = ProjectModifyForm(initial={'program_id':'', 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date}) project.removable = Activity.objects.filter(project=project).count() == 0 return render_page_response(request, '', 'page_program/project_edit_project.html', {'project':project, 'form':form})
def view_master_plan_edit_program(request, program_id): program = get_object_or_404(Program, pk=program_id) master_plan = program.plan.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = MasterPlanProgramForm(request.POST, master_plan=master_plan) if form.is_valid(): program.plan = form.cleaned_data['plan'] program.ref_no = form.cleaned_data['ref_no'] program.name = form.cleaned_data['name'] program.abbr_name = form.cleaned_data['abbr_name'] program.manager_name = form.cleaned_data['manager_name'] program.start_date = form.cleaned_data['start_date'] program.end_date = form.cleaned_data['end_date'] program.save() messages.success(request, u'แก้ไขแผนงาน/โครงการเรียบร้อย') return redirect('view_master_plan_manage_organization', (master_plan.ref_no)) else: form = MasterPlanProgramForm(master_plan=master_plan, initial={'program_id':program.id, 'plan':program.plan.id, 'ref_no':program.ref_no, 'name':program.name, 'abbr_name':program.abbr_name, 'description':program.description, 'start_date':program.start_date, 'end_date':program.end_date}) return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_modify_program.html', {'master_plan':master_plan, 'program':program, 'form':form})
def view_project_add_activity(request, project_id): project = get_object_or_404(Project, pk=project_id) if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan): return access_denied(request) if project.program and not permission.access_obj(request.user, 'program activity add', program): return access_denied(request) if request.method == 'POST': form = ActivityModifyForm(request.POST) if form.is_valid(): activity = Activity.objects.create(project=project, name=form.cleaned_data['name'], start_date=form.cleaned_data['start_date'], end_date=form.cleaned_data['end_date'], description=form.cleaned_data['description'], location=form.cleaned_data['location'], result_goal=form.cleaned_data['result_goal'], result_real=form.cleaned_data['result_real'], created_by=request.user.get_profile(), ) messages.success(request, u'เพิ่มกิจกรรมเรียบร้อย') return redirect('view_project_activities', (project.id)) else: form = ActivityModifyForm() return render_page_response(request, 'activities', 'page_program/project_activities_modify_activity.html', {'project':project, 'form':form})
def view_program_reports_manage_report_delete_report(request, report_id): report = get_object_or_404(Report, pk=report_id) program = report.program if not permission.access_obj(request.user, 'program report schedule delete', program): return access_denied(request) if report.master_plan: messages.error(request, 'ไม่สามารถแก้ไขรายงานของแผนหลักได้จากหน้านี้') return redirect('view_program_reports_manage_report', (program.id)) if ReportSubmission.objects.filter(report=report).exclude( Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count() == 0: ReportDueRepeatable.objects.filter(report=report).delete() ReportDueDates.objects.filter(report=report).delete() ReportSubmission.objects.filter(report=report).delete() ReportAssignment.objects.filter(report=report).delete() report.delete() messages.success(request, 'ลบหัวเรื่องรายงานเรียบร้อย') else: messages.error(request, 'ไม่สามารถลบรอบการส่งรายงานที่มีการส่งรายงานไปแล้วได้') return redirect('view_program_reports_manage_report', (program.id))
def view_master_plan_manage_kpi_add_kpi(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPIModifyForm(request.POST, master_plan=master_plan) if form.is_valid(): kpi = DomainKPI.objects.create( master_plan = master_plan, ref_no = form.cleaned_data['ref_no'], name = form.cleaned_data['name'], abbr_name = form.cleaned_data['abbr_name'], year = form.cleaned_data['year'] - 543, unit_name = form.cleaned_data['unit_name'], category = form.cleaned_data['category'], ) messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย') return utilities.redirect_or_back('view_master_plan_manage_kpi', (master_plan.ref_no), request) else: form = DomainKPIModifyForm(master_plan=master_plan) return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {'master_plan':master_plan, 'form':form})
def view_program_reports_manage_report_add_report(request, program_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj(request.user, 'program report schedule add', program): return access_denied(request) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = ProgramReportForm(request.POST) if form.is_valid(): report_name = form.cleaned_data['name'] need_checkup = form.cleaned_data['need_checkup'] need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] notify_before_days = form.cleaned_data['notify_before_days'] if notify_before else 0 if not notify_before_days: notify_before_days = 0 notify_due = form.cleaned_data['notify_due'] report = Report.objects.create(program=program, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=need_checkup, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due) if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date(int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start(True, monthly_date) ReportDueRepeatable.objects.create(report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) ReportAssignment.objects.create(report=report, program=program) messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย') return redirect('view_program_reports_manage_report', (program.id)) # To re-populate the form when error occured report = Report(due_type=report_due_type) if report_due_type == REPORT_DUE_DATES: due_dates = [] for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') due_dates.append(ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate)))) report.due_dates = due_dates else: report = Report(due_type=REPORT_NO_DUE_DATE) form = ProgramReportForm() return render_page_response(request, 'reports', 'page_program/program_reports_modify_report.html', {'program':program, 'form':form, 'report':report})
def view_master_plan_delete_program(request, program_id): program = get_object_or_404(Program, pk=program_id) master_plan = program.plan.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) removable = True if Project.objects.filter(program=program).count(): messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีโครงการที่อยู่ภายใต้แผนงานนี้') removable = False if Report.objects.filter(program=program).count(): messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีรายงานที่แผนงานนี้สร้างขึ้น') removable = False if ReportSubmission.objects.filter(program=program).exclude(state=NO_ACTIVITY).count(): messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีรายงานที่แผนงานเขียนหรือส่งไปแล้ว') removable = False if removable: # REMOVE REPORT ReportAssignment.objects.filter(program=program).delete() # REMOVE BUDGET BudgetScheduleRevision.objects.filter(schedule__program=program).delete() schedules = BudgetSchedule.objects.filter(program=program) schedule_ids = [schedule.id for schedule in schedules] comments = Comment.objects.filter(object_name='budget', object_id__in=schedule_ids) comment_replies = CommentReply.objects.filter(comment__in=comments) UnreadComment.objects.filter(comment__in=comments).delete() UnreadCommentReply.objects.filter(reply__in=comment_replies).delete() comment_replies.delete() comments.delete() schedules.delete() # REMOVE KPI DomainKPICategory.objects.filter(program=program).delete() kpis = DomainKPI.objects.filter(program=program) DomainKPISchedule.objects.filter(kpi__in=kpis).delete() kpis.delete() # REMOVE PROGRAM program.delete() messages.success(request, u'ลบแผนงานเรียบร้อย') return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
def view_master_plan_manage_kpi_category(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) categories = DomainKPICategory.objects.filter(master_plan=master_plan).order_by('name') if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) for category in categories: category.removable = DomainKPI.objects.filter(category=category).count() == 0 return render_page_response(request, 'kpi_category', 'page_sector/manage_master_plan/manage_kpi_category.html', {'master_plan':master_plan, 'categories':categories})
def view_master_plan_manage_report_add_report(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = MasterPlanReportForm(request.POST) if form.is_valid(): report_name = form.cleaned_data['name'] need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] notify_before_days = form.cleaned_data['notify_before_days'] if notify_before else 0 if not notify_before_days: notify_before_days = 0 notify_due = form.cleaned_data['notify_due'] report = Report.objects.create(master_plan=master_plan, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=True, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due) if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date(int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start(True, monthly_date) ReportDueRepeatable.objects.create(report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย') return utilities.redirect_or_back('view_master_plan_manage_report', (master_plan.ref_no), request) # To re-populate the form when error occured report = Report(due_type=report_due_type) if report_due_type == REPORT_DUE_DATES: due_dates = [] for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') due_dates.append(ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate)))) report.due_dates = due_dates else: report = Report(due_type=REPORT_NO_DUE_DATE) form = MasterPlanReportForm() return render_page_response(request, 'report', 'page_sector/manage_master_plan/manage_report_modify_report.html', {'master_plan':master_plan, 'report':report, 'form':form})
def view_program_reports_send_report(request, program_id, report_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj(request.user, ('program report submission edit', 'program report submission submit'), program): return access_denied(request) # IMPORTANT NOTE ON PERMISSION # In this page, 'program report submission warning' will be ignored report = get_object_or_404(Report, id=report_id) submissions = report_functions.get_sending_report(program, report) return render_page_response(request, 'reports', 'page_program/program_reports_send_report.html', {'program':program, 'report':report, 'submissions':submissions})
def display_master_plan_header(user, master_plan): header_html = unicode('<h1>แผนหลัก %d - %s</h1>', 'utf-8') % (master_plan.ref_no, master_plan.name) if permission.access_obj(user, 'master_plan manage', master_plan): header_html = header_html + unicode( '<div class="subtitle"><img src="%s/images/icons/settings.png" class="icon" /> <a href="%s">จัดการแผนหลัก</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_master_plan_manage_organization', args=[master_plan.ref_no])) return header_html
def view_program_manage_kpi_delete_kpi(request, kpi_id): kpi = get_object_or_404(DomainKPI, pk=kpi_id) program = kpi.program if not permission.access_obj(request.user, 'program kpi manage', program): return access_denied(request) if not DomainKPISchedule.objects.filter(kpi=kpi).count(): kpi.delete() messages.success(request, 'ลบตัวชี้วัดเรียบร้อย') else: messages.error(request, 'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้') return redirect('view_program_manage_kpi', (program.id))
def view_master_plan_manage_kpi_delete_category(request, kpi_category_id): kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id) master_plan = kpi_category.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if not DomainKPI.objects.filter(category=kpi_category).count(): kpi_category.delete() messages.success(request, 'ลบประเภทตัวชี้วัดเรียบร้อย') else: messages.error(request, 'ไม่สามารถลบประเภทตัวชี้วัด เนื่องจากยังมีตัวชี้วัดที่อยู่ในประเภทตัวชี้วัดนี้') return redirect('view_master_plan_manage_kpi_category', (master_plan.ref_no))
def view_master_plan_manage_kpi_delete_kpi(request, kpi_id): kpi = get_object_or_404(DomainKPI, pk=kpi_id) master_plan = kpi.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if not DomainKPISchedule.objects.filter(kpi=kpi).count(): kpi.delete() messages.success(request, 'ลบตัวชี้วัดเรียบร้อย') else: messages.error(request, 'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้') return redirect('view_master_plan_manage_kpi', (master_plan.ref_no))
def view_activity_delete_activity(request, activity_id): activity = get_object_or_404(Activity, pk=activity_id) project = activity.project if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan): return access_denied(request) if project.program and not permission.access_obj(request.user, 'program activity delete', project.program): return access_denied(request) activity.delete() messages.success(request, u'ลบโครงการเรียบร้อย') return redirect('view_project_activities', (project.id))
def view_budget_overview_edit_reference(request, schedule_id): schedule = get_object_or_404(BudgetSchedule, pk=schedule_id) if not permission.access_obj(request.user, 'program budget reference edit', schedule.program): return access_denied(request) if request.method == 'POST': BudgetScheduleReference.objects.filter(schedule=schedule).delete() for form_project in request.POST.getlist('project'): try: project = Project.objects.get(pk=form_project) except Project.DoesNotExist: pass else: (reference, created) = BudgetScheduleReference.objects.get_or_create(schedule=schedule, project=project) reference.description = request.POST.get('desc_project_%d' % project.id) reference.save() for form_report in request.POST.getlist('report'): try: report_submission = ReportSubmission.objects.get(pk=form_report) except ReportSubmission.DoesNotExist: pass else: (reference, created) = BudgetScheduleReference.objects.get_or_create(schedule=schedule, report_submission=report_submission) reference.description = request.POST.get('desc_report_%d' % report_submission.id) reference.save() messages.success(request, 'แก้ไขข้อมูลประกอบเรียบร้อย') return redirect('view_budget_overview', schedule.id) projects = Project.objects.filter(program=schedule.program).order_by('name') reports = report_functions.get_reports_for_edit_reference(schedule.program) for reference in BudgetScheduleReference.objects.filter(schedule=schedule): if reference.project: for project in projects: if project.id == reference.project.id: project.has_reference = True project.reference_description = reference.description elif reference.report_submission: for report in reports: for submission in report.submissions: if submission.id == reference.report_submission.id: submission.has_reference = True submission.reference_description = reference.description return render_page_response(request, 'overview', 'page_kpi/budget_overview_edit_reference.html', {'schedule':schedule, 'projects':projects, 'reports':reports})
def view_master_plan_delete_plan(request, plan_id): plan = get_object_or_404(Plan, pk=plan_id) master_plan = plan.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if not Program.objects.filter(plan=plan).count(): plan.delete() messages.success(request, 'ลบกลุ่มแผนงานเรียบร้อย') else: messages.error(request, 'ไม่สามารถลบกลุ่มแผนงานได้ เนื่องจากมีแผนงานที่อยู่ภายใต้') return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
def view_master_plan_manage_kpi(request, master_plan_ref_no, kpi_year): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if kpi_year: year_number = int(kpi_year) else: year_number = utilities.master_plan_current_year_number() kpi_categories = [] for dict in DomainKPI.objects.filter( master_plan=master_plan, year=year_number).values('category').distinct(): try: kpi_category = DomainKPICategory.objects.get(pk=dict['category']) except DomainKPICategory.DoesNotExist: pass else: kpis = DomainKPI.objects.filter( master_plan=master_plan, year=year_number, category=kpi_category).order_by('ref_no') for kpi in kpis: kpi.removable = DomainKPISchedule.objects.filter( kpi=kpi).count() == 0 kpi_category.kpis = kpis kpi_categories.append(kpi_category) print year_number no_category_kpis = DomainKPI.objects.filter(master_plan=master_plan, year=year_number, category=None) print no_category_kpis for kpi in no_category_kpis: kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0 return render_page_response( request, 'kpi', 'page_sector/manage_master_plan/manage_kpi.html', { 'master_plan': master_plan, 'kpi_categories': kpi_categories, 'no_category_kpis': no_category_kpis, 'kpi_year': year_number })
def display_project_header(user, project): header_html = unicode( '<div class="supertitle"><a href="%s">แผนงาน %s - %s</a></div><h1>โครงการ (%s) %s</h1>', 'utf-8') % (reverse('view_program_overview', args=[project.program.id]), project.program.ref_no, project.program.name, project.ref_no, project.name) if permission.access_obj(user, 'program project edit', project.program): header_html = header_html + unicode( '<div class="subtitle"><img src="%s/images/icons/edit.png" class="icon"/> <a href="%s">แก้ไขโครงการ</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_project_edit_project', args=[project.id ])) return header_html
def display_master_plan_header(user, master_plan): header_html = '<div class="supertitle">' sector_list = [] for sector_master_plan in SectorMasterPlan.objects.filter(master_plan=master_plan): sector = sector_master_plan.sector sector_list.append(unicode('<a href="%s">สำนัก %d</a>', 'utf-8') % (reverse('view_sector_overview', args=[sector.ref_no]), sector.ref_no)) header_html = header_html + ' | '.join(sector_list) header_html = header_html + unicode('</div><h1>แผน %d - %s</h1>', 'utf-8') % (master_plan.ref_no, master_plan.name) if permission.access_obj(user, 'master_plan manage', master_plan): header_html = header_html + unicode('<div class="subtitle"><img src="%s/images/icons/settings.png" class="icon" /> <a href="%s">จัดการแผนหลัก</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_master_plan_manage_organization', args=[master_plan.ref_no])) return header_html
def view_master_plan_manage_organization(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) current_date = date.today().replace(day=1) plans = Plan.objects.filter(master_plan=master_plan).order_by('ref_no') for plan in plans: plan.programs = Program.objects.filter(plan=plan).order_by('ref_no') for program in plan.programs: program.removable = Project.objects.filter(program=program).count() == 0 return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_organization.html', {'master_plan':master_plan, 'plans':plans})
def view_program_reports_send_list(request, program_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj(request.user, ('program report submission edit', 'program report submission submit'), program): return access_denied(request) # IMPORTANT NOTE ON PERMISSION # In this page, 'program report submission warning' will be ignored reports = [] for assignment in ReportAssignment.objects.filter(program=program, is_active=True): report = assignment.report report.counter = report_functions.get_sending_report_count(program, report) reports.append(report) return render_page_response(request, 'reports', 'page_program/program_reports_send.html', {'program':program, 'reports':reports})
def view_master_plan_manage_kpi_delete_kpi(request, kpi_id): kpi = get_object_or_404(DomainKPI, pk=kpi_id) master_plan = kpi.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if not DomainKPISchedule.objects.filter(kpi=kpi).count(): kpi.delete() messages.success(request, 'ลบตัวชี้วัดเรียบร้อย') else: messages.error( request, 'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้' ) return redirect('view_master_plan_manage_kpi', (master_plan.ref_no))
def display_activity_header(user, activity): header_html = unicode( '<div class="supertitle"><a href="%s">แผนงาน %s</a> » <a href="%s">โครงการ %s - %s</a></div><h1>กิจกรรม %s</h1>', 'utf-8') % ( reverse('view_program_overview', args=[activity.project.program.id ]), activity.project.program.ref_no, reverse('view_project_overview', args=[activity.project.id]), activity.project.ref_no, activity.project.name, activity.name) if permission.access_obj(user, 'program activity edit', activity.project.program): header_html = header_html + unicode( '<div class="subtitle"><img src="%s/images/icons/edit.png" class="icon"/> <a href="%s">แก้ไขกิจกรรม</a></div>', 'utf-8') % (settings.MEDIA_URL, reverse('view_activity_edit_activity', args=[activity.id])) return header_html
def view_master_plan_manage_kpi_category(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) categories = DomainKPICategory.objects.filter( master_plan=master_plan).order_by('name') if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) for category in categories: category.removable = DomainKPI.objects.filter( category=category).count() == 0 return render_page_response( request, 'kpi_category', 'page_sector/manage_master_plan/manage_kpi_category.html', { 'master_plan': master_plan, 'categories': categories })
def view_master_plan_manage_kpi_delete_category(request, kpi_category_id): kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id) master_plan = kpi_category.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if not DomainKPI.objects.filter(category=kpi_category).count(): kpi_category.delete() messages.success(request, 'ลบประเภทตัวชี้วัดเรียบร้อย') else: messages.error( request, 'ไม่สามารถลบประเภทตัวชี้วัด เนื่องจากยังมีตัวชี้วัดที่อยู่ในประเภทตัวชี้วัดนี้' ) return redirect('view_master_plan_manage_kpi_category', (master_plan.ref_no))
def view_program_reports_send_report(request, program_id, report_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj( request.user, ('program report submission edit', 'program report submission submit'), program): return access_denied(request) # IMPORTANT NOTE ON PERMISSION # In this page, 'program report submission warning' will be ignored report = get_object_or_404(Report, id=report_id) submissions = report_functions.get_sending_report(program, report) return render_page_response( request, 'reports', 'page_program/program_reports_send_report.html', { 'program': program, 'report': report, 'submissions': submissions })
def view_master_plan_manage_kpi_edit_kpi(request, kpi_id): kpi = get_object_or_404(DomainKPI, pk=kpi_id) master_plan = kpi.master_plan if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = DomainKPIModifyForm(request.POST, master_plan=master_plan) if form.is_valid(): kpi.ref_no = form.cleaned_data['ref_no'] kpi.name = form.cleaned_data['name'] kpi.abbr_name = form.cleaned_data['abbr_name'] kpi.year = form.cleaned_data['year'] - 543 kpi.unit_name = form.cleaned_data['unit_name'] kpi.category = form.cleaned_data['category'] kpi.save() messages.success(request, 'แก้ไขตัวชี้วัดเรียบร้อย') return redirect('view_master_plan_manage_kpi', (master_plan.ref_no)) else: form = DomainKPIModifyForm(master_plan=master_plan, initial={ 'ref_no': kpi.ref_no, 'name': kpi.name, 'abbr_name': kpi.abbr_name, 'year': kpi.year + 543, 'category': kpi.category, 'unit_name': kpi.unit_name }) return render_page_response( request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', { 'master_plan': master_plan, 'form': form, 'kpi': kpi })
def render(self, context): user = self.user.resolve(context) permission_names = self.permission_names obj = self.obj.resolve(context) at_least_one_permission = True if permission_names[0] == '+': at_least_one_permission = False permission_names = permission_names[1:] permission_names = [ permission_name.strip() for permission_name in permission_names.split(',') ] if permission.access_obj(user, permission_names, obj, at_least_one_permission): output = self.nodelist_true.render(context) return output else: output = self.nodelist_false.render(context) return output
def view_budget_overview(request, schedule_id): schedule = get_object_or_404(BudgetSchedule, pk=schedule_id) if permission.access_obj(request.user, 'program budget remark edit', schedule.program): if request.method == 'POST': form = ModifyBudgetRemarkForm(request.POST) if form.is_valid(): schedule.remark = form.cleaned_data['remark'] schedule.save() messages.success(request, 'แก้ไขหมายเหตุเรียบร้อย') return redirect('view_budget_overview', (schedule.id)) else: form = ModifyBudgetRemarkForm(initial={'remark': schedule.remark}) else: form = None ref_projects = [] ref_report_submissions = [] for reference in BudgetScheduleReference.objects.filter(schedule=schedule): if reference.project: ref_projects.append(reference) elif reference.report_submission: ref_report_submissions.append(reference) revisions = BudgetScheduleRevision.objects.filter( schedule=schedule).order_by('-revised') return render_page_response( request, 'overview', 'page_kpi/budget_overview.html', { 'schedule': schedule, 'ref_projects': ref_projects, 'ref_report_submissions': ref_report_submissions, 'revisions': revisions, 'form': form })
def view_master_plan_manage_program_report(request, program_id): program = get_object_or_404(Program, pk=program_id) master_plan = program.plan.master_plan today = date.today() if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': form = MasterPlanProgramReportsForm(request.POST, master_plan=master_plan) if form.is_valid(): reports_before = [ report_program.report for report_program in ReportAssignment.objects.filter( program=program, is_active=True) ] reports_after = form.cleaned_data['reports'] cancel_reports = set(reports_before) - set(reports_after) # Cancel Reports for cancel_report in cancel_reports: report_program = ReportAssignment.objects.get( report=cancel_report, program=program) report_program.is_active = False report_program.save() # Add New Reports new_reports = set(reports_after) - set(reports_before) for new_report in new_reports: report_program, created = ReportAssignment.objects.get_or_create( report=new_report, program=program) if not created: report_program.is_active = True report_program.save() messages.success(request, 'เลือกรายงานเรียบร้อย') return redirect('view_master_plan_manage_organization', (program.plan.master_plan.ref_no)) else: form = MasterPlanProgramReportsForm( master_plan=master_plan, initial={ 'reports': [ report_program.report.id for report_program in ReportAssignment.objects.filter( program=program, is_active=True) ] }) has_reports = Report.objects.filter(master_plan=master_plan).count() > 0 return render_page_response( request, 'organization', 'page_sector/manage_master_plan/manage_program_report.html', { 'master_plan': master_plan, 'program': program, 'form': form, 'has_reports': has_reports })
def view_budget_overview_edit_reference(request, schedule_id): schedule = get_object_or_404(BudgetSchedule, pk=schedule_id) if not permission.access_obj(request.user, 'program budget reference edit', schedule.program): return access_denied(request) if request.method == 'POST': BudgetScheduleReference.objects.filter(schedule=schedule).delete() for form_project in request.POST.getlist('project'): try: project = Project.objects.get(pk=form_project) except Project.DoesNotExist: pass else: (reference, created) = BudgetScheduleReference.objects.get_or_create( schedule=schedule, project=project) reference.description = request.POST.get('desc_project_%d' % project.id) reference.save() for form_report in request.POST.getlist('report'): try: report_submission = ReportSubmission.objects.get( pk=form_report) except ReportSubmission.DoesNotExist: pass else: (reference, created) = BudgetScheduleReference.objects.get_or_create( schedule=schedule, report_submission=report_submission) reference.description = request.POST.get('desc_report_%d' % report_submission.id) reference.save() messages.success(request, 'แก้ไขข้อมูลประกอบเรียบร้อย') return redirect('view_budget_overview', schedule.id) projects = Project.objects.filter( program=schedule.program).order_by('name') reports = report_functions.get_reports_for_edit_reference(schedule.program) for reference in BudgetScheduleReference.objects.filter(schedule=schedule): if reference.project: for project in projects: if project.id == reference.project.id: project.has_reference = True project.reference_description = reference.description elif reference.report_submission: for report in reports: for submission in report.submissions: if submission.id == reference.report_submission.id: submission.has_reference = True submission.reference_description = reference.description return render_page_response( request, 'overview', 'page_kpi/budget_overview_edit_reference.html', { 'schedule': schedule, 'projects': projects, 'reports': reports })
def view_program_reports_manage_report_add_report(request, program_id): program = get_object_or_404(Program, id=program_id) if not permission.access_obj(request.user, 'program report schedule add', program): return access_denied(request) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = ProgramReportForm(request.POST) if form.is_valid(): report_name = form.cleaned_data['name'] need_checkup = form.cleaned_data['need_checkup'] need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] notify_before_days = form.cleaned_data[ 'notify_before_days'] if notify_before else 0 if not notify_before_days: notify_before_days = 0 notify_due = form.cleaned_data['notify_due'] report = Report.objects.create( program=program, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=need_checkup, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due) if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date( int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start( True, monthly_date) ReportDueRepeatable.objects.create( report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) ReportAssignment.objects.create(report=report, program=program) messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย') return redirect('view_program_reports_manage_report', (program.id)) # To re-populate the form when error occured report = Report(due_type=report_due_type) if report_due_type == REPORT_DUE_DATES: due_dates = [] for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') due_dates.append( ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate)))) report.due_dates = due_dates else: report = Report(due_type=REPORT_NO_DUE_DATE) form = ProgramReportForm() return render_page_response( request, 'reports', 'page_program/program_reports_modify_report.html', { 'program': program, 'form': form, 'report': report })
def view_master_plan_manage_report_add_report(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = MasterPlanReportForm(request.POST) if form.is_valid(): report_name = form.cleaned_data['name'] need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] notify_before_days = form.cleaned_data[ 'notify_before_days'] if notify_before else 0 if not notify_before_days: notify_before_days = 0 notify_due = form.cleaned_data['notify_due'] report = Report.objects.create( master_plan=master_plan, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=True, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due) if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date( int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start( True, monthly_date) ReportDueRepeatable.objects.create( report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย') return utilities.redirect_or_back('view_master_plan_manage_report', (master_plan.ref_no), request) # To re-populate the form when error occured report = Report(due_type=report_due_type) if report_due_type == REPORT_DUE_DATES: due_dates = [] for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') due_dates.append( ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate)))) report.due_dates = due_dates else: report = Report(due_type=REPORT_NO_DUE_DATE) form = MasterPlanReportForm() return render_page_response( request, 'report', 'page_sector/manage_master_plan/manage_report_modify_report.html', { 'master_plan': master_plan, 'report': report, 'form': form })
def view_program_reports_manage_report_edit_report(request, report_id): report = get_object_or_404(Report, pk=report_id) program = report.program if not permission.access_obj(request.user, 'program report schedule edit', program): return access_denied(request) if report.master_plan: messages.error(request, 'ไม่สามารถแก้ไขรายงานของแผนหลักได้จากหน้านี้') return redirect('view_program_reports_manage_report', (program.id)) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = ProgramReportForm(request.POST) if form.is_valid(): report.name = form.cleaned_data['name'] report.need_checkup = form.cleaned_data['need_checkup'] report.need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] report.notify_before_days = form.cleaned_data[ 'notify_before_days'] if notify_before else 0 if not report.notify_before_days: report.notify_before_days = 0 report.notify_at_due = form.cleaned_data['notify_due'] ReportDueRepeatable.objects.filter(report=report).delete() ReportDueDates.objects.filter(report=report).delete() ReportSubmission.objects.filter(report=report, state=NO_ACTIVITY).delete() report.due_type = report_due_type if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date( int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start( True, monthly_date) ReportDueRepeatable.objects.create( report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) report.save() messages.success(request, 'แก้ไขหัวเรื่องรายงานเรียบร้อย') return redirect('view_program_reports_manage_report', (program.id)) else: if not report.notify_days_before: notify_before = False notify_days_before = '' else: notify_before = True notify_days_before = report.notify_days_before if report.due_type == REPORT_REPEAT_DUE: report_repeatable = ReportDueRepeatable.objects.get(report=report) cycle_length = report_repeatable.schedule_cycle_length monthly_date = report_repeatable.schedule_monthly_date else: cycle_length = '' monthly_date = '' form = ProgramReportForm( initial={ 'name': report.name, 'need_checkup': report.need_checkup, 'need_approval': report.need_approval, 'cycle_length': cycle_length, 'monthly_date': monthly_date, 'notify_before': notify_before, 'notify_before_days': notify_days_before, 'notify_due': report.notify_at_due, }) if report.due_type == REPORT_DUE_DATES: report.due_dates = ReportDueDates.objects.filter( report=report).order_by('due_date') else: report.due_dates = [] return render_page_response( request, 'reports', 'page_program/program_reports_modify_report.html', { 'program': program, 'form': form, 'report': report })
def view_report_overview(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if request.method == 'POST': submit_type = request.POST.get('submit') if submit_type == 'submit-file': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) # Reading upload file try: uploading_file = request.FILES['uploading_file'] (file_name, separator, file_ext) = uploading_file.name.rpartition('.') except: messages.error( request, 'ไม่สามารถอ่านไฟล์รายงานได้ กรุณาตรวจสอบชื่อไฟล์ แล้วส่งใหม่อีกครั้ง' ) return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) if not submission.id: submission.save() file_response = ReportSubmissionFileResponse.objects.create( submission=submission, uploaded_by=request.user.get_profile()) # Uploading directory try: uploading_directory = "%s/%d/%d/" % ( settings.REPORT_SUBMIT_FILE_PATH, submission.report.id, submission.id) if not os.path.exists(uploading_directory): os.makedirs(uploading_directory) if not file_name: file_name = file_ext file_ext = '' else: file_ext = '.%s' % file_ext unique_filename = '%s%s' % (file_name, file_ext) unique_filename = '%s%s' % (file_name, file_ext) if os.path.isfile( '%s%s' % (uploading_directory, unique_filename.encode('utf-8'))): # Duplicated filename suffix_counter = 1 while os.path.isfile('%s%s(%d)%s' % (uploading_directory, file_name, suffix_counter, file_ext)): suffix_counter = suffix_counter + 1 unique_filename = '%s(%d)%s' % (file_name, suffix_counter, file_ext) file_response.filename = unique_filename file_response.save() destination = open( uploading_directory + unique_filename.encode('utf-8'), 'wb') for chunk in request.FILES['uploading_file'].chunks(): destination.write(chunk) destination.close() except: messages.error(request, 'ไม่สามารถบันทึกไฟล์ได้ กรุณาลองใหม่อีกครั้ง') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) submission.state = EDITING_ACTIVITY submission.save() messages.success(request, 'แนบไฟล์รายงานเรียบร้อย') elif submit_type == 'submit-text': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) text = request.POST.get("text") if not submission.id: submission.save() try: text_response = ReportSubmissionTextResponse.objects.get( submission=submission) except ReportSubmissionTextResponse.DoesNotExist: text_response = ReportSubmissionTextResponse.objects.create( submission=submission, submitted_by=request.user.get_profile()) text_response.text = text text_response.save() submission.state = EDITING_ACTIVITY if text else NO_ACTIVITY submission.save() messages.success(request, 'แก้ไขเนื้อหารายงานเรียบร้อย') elif submit_type == 'submit-report': if not permission.access_obj(request.user, 'program report submission submit', submission): return access_denied(request) submission.state = SUBMITTED_ACTIVITY submission.submitted_on = datetime.now() submission.approval_on = None submission.save() messages.success(request, 'ส่งรายงานเรียบร้อย') elif submit_type == 'approve-report': if not permission.access_obj(request.user, 'program report submission approve', submission): return access_denied(request) submission.state = APPROVED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'รับรองรายงานเรียบร้อย') elif submit_type == 'reject-report': if not permission.access_obj( request.user, 'report submission approve', submission): return access_denied(request) submission.state = REJECTED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'ตีกลับรายงานเรียบร้อย') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) current_date = date.today() if (submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY) and submission.schedule_date < current_date: submission.status_code = 'overdue' elif submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY: submission.status_code = 'not_submitted' elif submission.state == SUBMITTED_ACTIVITY and not submission.report.need_approval: submission.status_code = 'submitted' elif submission.state == SUBMITTED_ACTIVITY and submission.report.need_approval: submission.status_code = 'waiting' elif submission.state == APPROVED_ACTIVITY: submission.status_code = 'approved' elif submission.state == REJECTED_ACTIVITY: submission.status_code = 'rejected' submission.allow_modifying = submission.status_code in ('overdue', 'not_submitted', 'rejected') try: submission.text_response = ReportSubmissionTextResponse.objects.get( submission=submission) except ReportSubmissionTextResponse.DoesNotExist: submission.text_response = '' submission.files = ReportSubmissionFileResponse.objects.filter( submission=submission) # REFERENCE ref_projects = [] ref_kpi_schedules = [] ref_budget_schedules = [] if submission.id: for reference in ReportSubmissionReference.objects.filter( submission=submission): if reference.project: ref_projects.append(reference) elif reference.kpi_schedule: ref_kpi_schedules.append(reference) elif reference.budget_schedule: ref_budget_schedules.append(reference) return render_page_response( request, 'overview', 'page_report/report_overview.html', { 'submission': submission, 'REPORT_SUBMIT_FILE_URL': settings.REPORT_SUBMIT_FILE_URL, 'ref_projects': ref_projects, 'ref_kpi_schedules': ref_kpi_schedules, 'ref_budget_schedules': ref_budget_schedules })
def view_report_overview_edit_reference(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if not permission.access_obj(request.user, 'program report submission reference edit', submission): return access_denied(request) if request.method == 'POST': ReportSubmissionReference.objects.filter( submission=submission).delete() for form_project in request.POST.getlist('project'): try: project = Project.objects.get(pk=form_project) except Project.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, project=project) reference.description = request.POST.get('desc_project_%d' % project.id) reference.save() for form_kpi in request.POST.getlist('kpi'): try: kpi_schedule = DomainKPISchedule.objects.get(pk=form_kpi) except DomainKPISchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, kpi_schedule=kpi_schedule) reference.description = request.POST.get('desc_kpi_%d' % kpi_schedule.id) reference.save() for form_budget in request.POST.getlist('budget'): try: budget_schedule = BudgetSchedule.objects.get(pk=form_budget) except DomainbudgetSchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, budget_schedule=budget_schedule) reference.description = request.POST.get('desc_budget_%d' % budget_schedule.id) reference.save() messages.success(request, 'แก้ไขข้อมูลประกอบของรายงานเรียบร้อย') return redirect('view_report_overview', program.id, report.id, schedule_dateid) projects = Project.objects.filter(program=program).order_by('name') kpis = [] for dict in DomainKPISchedule.objects.filter( program=program).values('kpi').distinct(): kpi = DomainKPI.objects.get(pk=dict['kpi']) kpi.schedules = DomainKPISchedule.objects.filter(program=program, kpi=kpi).order_by( 'quarter_year', 'quarter') kpis.append(kpi) budget_schedules = BudgetSchedule.objects.filter( program=program).order_by('schedule_on') if submission.id: for reference in ReportSubmissionReference.objects.filter( submission=submission): if reference.project: for project in projects: if project.id == reference.project.id: project.has_reference = True project.reference_description = reference.description elif reference.kpi_schedule: for kpi in kpis: for schedule in kpi.schedules: if schedule.id == reference.kpi_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description elif reference.budget_schedule: for schedule in budget_schedules: if schedule.id == reference.budget_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description return render_page_response( request, 'overview', 'page_report/report_overview_edit_reference.html', { 'submission': submission, 'projects': projects, 'kpis': kpis, 'budget_schedules': budget_schedules })
def view_master_plan_manage_report_edit_report(request, report_id): report = get_object_or_404(Report, pk=report_id) master_plan = report.master_plan if not master_plan: raise Http404 if not permission.access_obj(request.user, 'master_plan manage', master_plan): return access_denied(request) if request.method == 'POST': report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')] form = MasterPlanReportForm(request.POST) if form.is_valid(): report.name = form.cleaned_data['name'] report.need_approval = form.cleaned_data['need_approval'] notify_before = form.cleaned_data['notify_before'] report.notify_days_before = form.cleaned_data[ 'notify_before_days'] if notify_before else 0 if not report.notify_days_before: report.notify_days_before = 0 report.notify_at_due = form.cleaned_data['notify_due'] ReportDueRepeatable.objects.filter(report=report).delete() ReportDueDates.objects.filter(report=report).delete() ReportSubmission.objects.filter(report=report, state=NO_ACTIVITY).delete() report.due_type = report_due_type if report_due_type == REPORT_DUE_DATES: for due_date in request.POST.getlist('due_dates'): if due_date: (dyear, dmonth, ddate) = due_date.split('-') ReportDueDates.objects.create(report=report, due_date=date( int(dyear), int(dmonth), int(ddate))) elif report_due_type == REPORT_REPEAT_DUE: cycle_length = form.cleaned_data['cycle_length'] monthly_date = form.cleaned_data['monthly_date'] schedule_start = report_functions.generate_report_schedule_start( True, monthly_date) ReportDueRepeatable.objects.create( report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date) report.save() messages.success(request, 'แก้ไขหัวเรื่องรายงานเรียบร้อย') return redirect('view_master_plan_manage_report', (master_plan.ref_no)) else: if not report.notify_days_before: notify_before = False notify_days_before = '' else: notify_before = True notify_days_before = report.notify_days_before if report.due_type == REPORT_REPEAT_DUE: report_repeatable = ReportDueRepeatable.objects.get(report=report) cycle_length = report_repeatable.schedule_cycle_length monthly_date = report_repeatable.schedule_monthly_date else: cycle_length = '' monthly_date = '' form = MasterPlanReportForm( initial={ 'name': report.name, 'need_approval': report.need_approval, 'cycle_length': cycle_length, 'monthly_date': monthly_date, 'notify_before': notify_before, 'notify_before_days': notify_days_before, 'notify_due': report.notify_at_due, }) if report.due_type == REPORT_DUE_DATES: report.due_dates = ReportDueDates.objects.filter( report=report).order_by('due_date') else: report.due_dates = [] return render_page_response( request, 'report', 'page_sector/manage_master_plan/manage_report_modify_report.html', { 'master_plan': master_plan, 'report': report, 'form': form })
def ajax_update_budget_schedule(request): if request.method == 'POST': schedule_id = request.POST.get('schedule_id') new_grant = request.POST.get('grant', '') new_claim = request.POST.get('claim', '') try: budget_schedule = BudgetSchedule.objects.get(pk=schedule_id) except: raise Http404 is_changed = False if new_grant: if not permission.access_obj(request.user, 'program budget grant edit', budget_schedule.program): return HttpResponse(simplejson.dumps({'error':'denied'})) try: new_grant = int(new_grant) except: return HttpResponse(simplejson.dumps({'error':'invalid'})) if new_grant < 0: return HttpResponse(simplejson.dumps({'error':'invalid'})) grant = new_grant is_changed = True else: grant = budget_schedule.grant_budget if new_claim: if not permission.access_obj(request.user, 'program budget claim edit', budget_schedule.program): return HttpResponse(simplejson.dumps({'error':'denied'})) try: new_claim = int(new_claim) except: return HttpResponse(simplejson.dumps({'error':'invalid'})) if new_claim < 0: return HttpResponse(simplejson.dumps({'error':'invalid'})) claim = new_claim is_changed = True else: claim = budget_schedule.claim_budget if is_changed: revision = BudgetScheduleRevision.objects.create( schedule = budget_schedule, grant_budget = grant, claim_budget = claim, schedule_on = budget_schedule.schedule_on, revised_by = request.user.get_profile() ) budget_schedule.grant_budget = grant budget_schedule.claim_budget = claim if claim != 0 and not budget_schedule.claimed_on: budget_schedule.claimed_on = datetime.now() budget_schedule.save() return HttpResponse("") else: raise Http404