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_sector_budget(request, sector_ref_no): sector = get_object_or_404(Sector, ref_no=sector_ref_no) sector_master_plans = SectorMasterPlan.objects.filter(sector=sector) current_year = date.today().year has_programs = False master_plans = [] for sm in sector_master_plans: master_plan = sm.master_plan plans = Plan.objects.filter(master_plan=master_plan) for plan in plans: programs = Program.objects.filter(plan=plan) for program in programs: quarters = {1:{'grant':0,'claim':0}, 2:{'grant':0,'claim':0}, 3:{'grant':0,'claim':0}, 4:{'grant':0,'claim':0}} for schedule in BudgetSchedule.objects.filter(program=program, schedule_on__year=current_year): quarter_number = utilities.find_quarter_number(schedule.schedule_on) quarters[quarter_number]['grant'] = quarters[quarter_number]['grant'] + schedule.grant_budget quarters[quarter_number]['claim'] = quarters[quarter_number]['claim'] + schedule.claim_budget program.quarters = quarters if programs: has_programs = True plan.programs = programs master_plan.plans = plans master_plans.append(master_plan) return render_page_response(request, 'budget', 'page_sector/sector_budget.html', {'current_year': current_year, 'sector': sector, 'master_plans': master_plans, 'has_programs': has_programs})
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_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_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 (schedule.project.plan and permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), schedule.project.plan.master_plan)) or (not schedule.project.plan and 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(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_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_budget(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) plans = Plan.objects.filter(master_plan=master_plan).order_by("ref_no") current_year = date.today().year has_programs = False for plan in plans: programs = Program.objects.filter(plan=plan).order_by("ref_no") for program in programs: quarters = { 1: {"grant": 0, "claim": 0}, 2: {"grant": 0, "claim": 0}, 3: {"grant": 0, "claim": 0}, 4: {"grant": 0, "claim": 0}, } for schedule in ProgramBudgetSchedule.objects.filter(program=program, schedule_on__year=current_year): quarter_number = utilities.find_quarter_number(schedule.schedule_on) quarters[quarter_number]["grant"] = quarters[quarter_number]["grant"] + schedule.grant_budget quarters[quarter_number]["claim"] = quarters[quarter_number]["claim"] + schedule.claim_budget program.quarters = quarters if programs: has_programs = True plan.programs = programs return render_page_response( request, "budget", "page_sector/master_plan_budget.html", {"current_year": current_year, "master_plan": master_plan, "plans": plans, "has_programs": has_programs}, )
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_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_activity_comments(request, activity_id): activity = get_object_or_404(Activity, pk=activity_id) if request.method == 'POST': if 'submit_comment_button' in request.POST: form = PostCommentForm(request.POST) if form.is_valid(): comment_functions.post_comment_for('activity', activity_id, form.cleaned_data['comment_message'], request.user.get_profile()) messages.success(request, 'เพิ่มความคิดเห็นเรียบร้อย') return redirect('view_activity_comments', activity_id) elif 'submit_reply_button' in request.POST: comment_id = request.POST['comment_id'] message = request.POST['comment_message'] comment = get_object_or_404(Comment, pk=comment_id) if message: comment_functions.post_reply_comment_for(comment, 'activity', activity_id, message, request.user.get_profile()) messages.success(request, 'ตอบกลับความคิดเห็นเรียบร้อย') return redirect('view_activity_comments', activity_id) else: form = PostCommentForm() comments = comment_functions.get_comments_for('activity', activity_id, request.user.get_profile(), mark_as_read=True) return render_page_response(request, 'comments', 'page_program/activity_comments.html', {'activity':activity, 'comments':comments, 'form':form})
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 view_kpi_overview(request, schedule_id): schedule = get_object_or_404(DomainKPISchedule, pk=schedule_id) if permission.access_obj(request.user, 'program kpi remark edit', schedule.program): if request.method == 'POST': form = ModifyKPIRemarkForm(request.POST) if form.is_valid(): schedule.remark = form.cleaned_data['remark'] schedule.save() messages.success(request, 'แก้ไขหมายเหตุเรียบร้อย') return redirect('view_kpi_overview', (schedule.id)) else: form = ModifyKPIRemarkForm(initial={'remark':schedule.remark}) else: form = None ref_projects = [] ref_report_submissions = [] for reference in DomainKPIScheduleReference.objects.filter(schedule=schedule): if reference.project: ref_projects.append(reference) elif reference.report_submission: ref_report_submissions.append(reference) return render_page_response(request, 'overview', 'page_kpi/kpi_overview.html', {'schedule':schedule, 'form':form, 'ref_projects':ref_projects, 'ref_report_submissions':ref_report_submissions})
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_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_kpi(request, program_id): program = get_object_or_404(Program, pk=program_id) current_year = date.today().year years = [dict['kpi__year'] for dict in DomainKPISchedule.objects.filter(program=program).values('kpi__year').distinct()] categories = [] category_ids = DomainKPISchedule.objects.filter(program=program).values('kpi__category').distinct() for category_id in category_ids: if category_id['kpi__category']: category = DomainKPICategory.objects.get(pk=category_id['kpi__category']) kpi_ids = DomainKPISchedule.objects.filter(program=program, kpi__category=category).order_by('kpi__ref_no').values('kpi').distinct() else: category = DomainKPICategory() kpi_ids = DomainKPISchedule.objects.filter(program=program, kpi__category=None).order_by('kpi__ref_no').values('kpi').distinct() kpis = [] for kpi_id in kpi_ids: kpi = DomainKPI.objects.get(id=kpi_id['kpi']) schedules = {} for i in range(1, 5): try: schedules[str(i)] = DomainKPISchedule.objects.get(kpi=kpi, program=program, quarter_year=current_year, quarter=i) except: schedules[str(i)] = '' kpi.schedules = schedules kpis.append(kpi) category.kpis = kpis categories.append(category) return render_page_response(request, 'kpi', 'page_program/program_kpi.html', {'program':program, 'categories':categories, 'years':years, 'current_year':current_year})
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_administration_organization_edit_masterplan(request, master_plan_ref_no): if not request.user.is_superuser: return access_denied(request) master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) if request.method == 'POST': form = ModifyMasterPlanForm(request.POST) if form.is_valid(): ref_no = form.cleaned_data['ref_no'] name = form.cleaned_data['name'] sectors = form.cleaned_data['sectors'] master_plan.ref_no = ref_no master_plan.name = name master_plan.save() SectorMasterPlan.objects.filter(master_plan=master_plan).delete() for sector in sectors: SectorMasterPlan.objects.create(sector=sector, master_plan=master_plan) messages.success(request, 'แก้ไขแผนหลักเรียบร้อย') return redirect('view_administration_organization') else: form = ModifyMasterPlanForm(initial={'sectors':[sector.sector.id for sector in SectorMasterPlan.objects.filter(master_plan=master_plan)], 'master_plan_id':master_plan.id, 'ref_no':master_plan.ref_no, 'name':master_plan.name}) has_sectors = Sector.objects.all().count() > 0 return render_page_response(request, 'organization', 'page_administration/manage_organization_modify_master_plan.html', {'master_plan':master_plan, 'form':form, 'has_sectors':has_sectors})
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_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_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_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 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_project_overview(request, project_id): project = get_object_or_404(Project, pk=project_id) if project.plan: project.parent = project.plan elif project.program: project.parent = project.program ctx = {'project': project} return render_page_response(request, 'overview', 'page_program/project_overview.html', ctx)
def view_master_plan_program_kpi(request): program = get_object_or_404(Program, pk=program_id) master_plan = program.plan.master_plan return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_kpi.html', {'master_plan':master_plan, })
def view_program_budget(request, program_id): program = get_object_or_404(Program, pk=program_id) schedules = BudgetSchedule.objects.filter(program=program).order_by('-schedule_on') for schedule in schedules: schedule.ref_project_count = BudgetScheduleReference.objects.filter(schedule=schedule, project__isnull=False).count() schedule.ref_report_submission_count = BudgetScheduleReference.objects.filter(schedule=schedule, report_submission__isnull=False).count() return render_page_response(request, 'budget', 'page_program/program_budget.html', {'program':program, 'schedules':schedules})
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_sector_kpi(request, sector_ref_no): sector = get_object_or_404(Sector, ref_no=sector_ref_no) sector_master_plans = SectorMasterPlan.objects.filter(sector=sector) master_plans = [] for sm in sector_master_plans: master_plans.append(sm.master_plan) quarter_year = utilities.master_plan_current_year_number() ctx = {'sector': sector, 'master_plans': master_plans, 'quarter_year': quarter_year} return render_page_response(request, 'kpi', 'page_sector/sector_kpi.html', ctx)
def view_master_plan_programs(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) current_date = date.today() # Plans plans = Plan.objects.filter(master_plan=master_plan) for plan in plans: plan.programs = Program.objects.filter(plan=plan).order_by('ref_no') return render_page_response(request, 'programs', 'page_sector/master_plan_programs.html', {'master_plan': master_plan, 'plans':plans})
def view_sector_budget(request, sector_ref_no): sector = get_object_or_404(Sector, ref_no=sector_ref_no) sector_master_plans = SectorMasterPlan.objects.filter(sector=sector) current_year = date.today().year has_programs = False master_plans = [] for sm in sector_master_plans: master_plan = sm.master_plan plans = Plan.objects.filter(master_plan=master_plan) for plan in plans: programs = Program.objects.filter(plan=plan) for program in programs: quarters = { 1: { 'grant': 0, 'claim': 0 }, 2: { 'grant': 0, 'claim': 0 }, 3: { 'grant': 0, 'claim': 0 }, 4: { 'grant': 0, 'claim': 0 } } for schedule in BudgetSchedule.objects.filter( program=program, schedule_on__year=current_year): quarter_number = utilities.find_quarter_number( schedule.schedule_on) quarters[quarter_number]['grant'] = quarters[ quarter_number]['grant'] + schedule.grant_budget quarters[quarter_number]['claim'] = quarters[ quarter_number]['claim'] + schedule.claim_budget program.quarters = quarters if programs: has_programs = True plan.programs = programs master_plan.plans = plans master_plans.append(master_plan) ctx = { 'current_year': current_year, 'sector': sector, 'master_plans': master_plans, 'has_programs': has_programs } return render_page_response(request, 'budget', 'page_sector/sector_budget.html', ctx)
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_program_kpi(request, program_id): program = get_object_or_404(Program, pk=program_id) current_year = date.today().year years = [ dict['kpi__year'] for dict in DomainKPISchedule.objects.filter( program=program).values('kpi__year').distinct() ] categories = [] category_ids = DomainKPISchedule.objects.filter( program=program).values('kpi__category').distinct() for category_id in category_ids: if category_id['kpi__category']: category = DomainKPICategory.objects.get( pk=category_id['kpi__category']) kpi_ids = DomainKPISchedule.objects.filter( program=program, kpi__category=category).order_by( 'kpi__ref_no').values('kpi').distinct() else: category = DomainKPICategory() kpi_ids = DomainKPISchedule.objects.filter( program=program, kpi__category=None).order_by( 'kpi__ref_no').values('kpi').distinct() kpis = [] for kpi_id in kpi_ids: kpi = DomainKPI.objects.get(id=kpi_id['kpi']) schedules = {} for i in range(1, 5): try: schedules[str(i)] = DomainKPISchedule.objects.get( kpi=kpi, program=program, quarter_year=current_year, quarter=i) except: schedules[str(i)] = '' kpi.schedules = schedules kpis.append(kpi) category.kpis = kpis categories.append(category) return render_page_response( request, 'kpi', 'page_program/program_kpi.html', { 'program': program, 'categories': categories, 'years': years, 'current_year': current_year })
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 view_master_plan_budget(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) plans = Plan.objects.filter(master_plan=master_plan).order_by('ref_no') current_year = date.today().year has_programs = False for plan in plans: programs = Program.objects.filter(plan=plan).order_by('ref_no') for program in programs: quarters = { 1: { 'grant': 0, 'claim': 0 }, 2: { 'grant': 0, 'claim': 0 }, 3: { 'grant': 0, 'claim': 0 }, 4: { 'grant': 0, 'claim': 0 } } for schedule in BudgetSchedule.objects.filter( program=program, schedule_on__year=current_year): quarter_number = utilities.find_quarter_number( schedule.schedule_on) quarters[quarter_number]['grant'] = quarters[quarter_number][ 'grant'] + schedule.grant_budget quarters[quarter_number]['claim'] = quarters[quarter_number][ 'claim'] + schedule.claim_budget program.quarters = quarters if programs: has_programs = True plan.programs = programs return render_page_response( request, 'budget', 'page_sector/master_plan_budget.html', { 'current_year': current_year, 'master_plan': master_plan, 'plans': plans, 'has_programs': has_programs })
def view_sector_kpi(request, sector_ref_no): sector = get_object_or_404(Sector, ref_no=sector_ref_no) sector_master_plans = SectorMasterPlan.objects.filter(sector=sector) master_plans = [] for sm in sector_master_plans: master_plans.append(sm.master_plan) quarter_year = utilities.master_plan_current_year_number() ctx = { 'sector': sector, 'master_plans': master_plans, 'quarter_year': quarter_year } return render_page_response(request, 'kpi', 'page_sector/sector_kpi.html', ctx)
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_administration_organization_add_sector(request): if not request.user.is_superuser: return access_denied(request) if request.method == 'POST': form = ModifySectorForm(request.POST) if form.is_valid(): Sector.objects.create(ref_no=form.cleaned_data['ref_no'], name=form.cleaned_data['name']) messages.success(request, 'เพิ่มสำนักเรียบร้อย') return redirect('view_administration_organization') else: form = ModifySectorForm() return render_page_response(request, 'organization', 'page_administration/manage_organization_modify_sector.html', {'form':form})
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_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_budget(request, program_id): program = get_object_or_404(Program, pk=program_id) schedules = BudgetSchedule.objects.filter( program=program).order_by('-schedule_on') for schedule in schedules: schedule.ref_project_count = BudgetScheduleReference.objects.filter( schedule=schedule, project__isnull=False).count() schedule.ref_report_submission_count = BudgetScheduleReference.objects.filter( schedule=schedule, report_submission__isnull=False).count() return render_page_response(request, 'budget', 'page_program/program_budget.html', { 'program': program, 'schedules': schedules })
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_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 view_activity_comments(request, activity_id): activity = get_object_or_404(Activity, pk=activity_id) if request.method == 'POST': if 'submit_comment_button' in request.POST: form = PostCommentForm(request.POST) if form.is_valid(): comment_functions.post_comment_for( 'activity', activity_id, form.cleaned_data['comment_message'], request.user.get_profile()) messages.success(request, 'เพิ่มความคิดเห็นเรียบร้อย') return redirect('view_activity_comments', activity_id) elif 'submit_reply_button' in request.POST: comment_id = request.POST['comment_id'] message = request.POST['comment_message'] comment = get_object_or_404(Comment, pk=comment_id) if message: comment_functions.post_reply_comment_for( comment, 'activity', activity_id, message, request.user.get_profile()) messages.success(request, 'ตอบกลับความคิดเห็นเรียบร้อย') return redirect('view_activity_comments', activity_id) else: form = PostCommentForm() comments = comment_functions.get_comments_for('activity', activity_id, request.user.get_profile(), mark_as_read=True) return render_page_response(request, 'comments', 'page_program/activity_comments.html', { 'activity': activity, 'comments': comments, 'form': form })
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_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_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_master_plan_kpi(request, master_plan_ref_no): master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no) quarter_year = utilities.master_plan_current_year_number() ctx = {'master_plan': master_plan, 'quarter_year': quarter_year} return render_page_response(request, 'kpi', 'page_sector/master_plan_kpi.html', ctx)
def view_master_plan_manage_program_kpi(request, program_id, quarter_year): 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 not quarter_year: current_quarter_year = utilities.master_plan_current_year() else: current_quarter_year = int(quarter_year) kpi_category_choices = [] for dict in DomainKPI.objects.filter( master_plan=master_plan, year=current_quarter_year).values('category'): if dict['category']: kpi_category = DomainKPICategory.objects.get(pk=dict['category']) kpis = DomainKPI.objects.filter(master_plan=master_plan, year=current_quarter_year, category=kpi_category) kpi_category_choices.append({ 'category': kpi_category, 'kpis': kpis }) kpi_no_category_choices = DomainKPI.objects.filter( master_plan=master_plan, year=current_quarter_year, category=None) kpi_schedules = DomainKPISchedule.objects.filter( program=program, quarter_year=current_quarter_year) if request.method == 'POST': # 'schedule' - kpi_id , schedule_id , target , quarter - "123,None,100,1" schedules = request.POST.getlist('schedule') updating_schedules = list() for schedule in schedules: try: (kpi_id, schedule_id, target, quarter) = schedule.split(',') kpi_id = int(kpi_id) target = int(target) quarter = int(quarter) except: messages.error( request, 'ข้อมูลไม่อยู่ในรูปแบบที่ถูกต้อง กรุณากรอกใหม่อีกครั้ง') return redirect('view_master_plan_manage_program_kpi', (program.id)) else: kpi = DomainKPI.objects.get(pk=kpi_id) if schedule_id and schedule_id != 'none': schedule = DomainKPISchedule.objects.get(pk=schedule_id) if schedule.target != target or schedule.quarter_year != current_quarter_year or schedule.quarter != quarter: schedule.target = target schedule.quarter_year = current_quarter_year schedule.quarter = quarter schedule.save() else: schedule = DomainKPISchedule.objects.create( kpi=kpi, program=program, target=target, result=0, quarter_year=current_quarter_year, quarter=quarter) updating_schedules.append(schedule) # Remove schedule for program_schedule in kpi_schedules: found = False for schedule in updating_schedules: if schedule == program_schedule: found = True if not found: # TODO - Delete Comment program_schedule.delete() messages.success(request, 'แก้ไขแผนผลลัพธ์ของแผนงานเรียบร้อย') return utilities.redirect_or_back( 'view_master_plan_manage_organization', (master_plan.ref_no), request) # GET SCHEDULE column_schedules = [[], [], [], []] for schedule in kpi_schedules: column_schedules[schedule.quarter - 1].append(schedule) max_height = 0 for i in range(0, 4): if max_height < len(column_schedules[i]): max_height = len(column_schedules[i]) row_schedules = [] for i in range(0, max_height): row_schedule = {} for quarter in range(0, 4): try: row_schedule[str(quarter + 1)] = column_schedules[quarter][i] except: row_schedule[str(quarter + 1)] = '' row_schedules.append(row_schedule) return render_page_response( request, 'organization', 'page_sector/manage_master_plan/manage_program_kpi.html', { 'master_plan': master_plan, 'program': program, 'row_schedules': row_schedules, 'kpi_no_category_choices': kpi_no_category_choices, 'kpi_category_choices': kpi_category_choices, 'current_quarter_year': current_quarter_year })
def view_report_comments(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': if 'submit_comment_button' in request.POST: form = PostCommentForm(request.POST) if form.is_valid(): if not submission.id: submission.save() comment_functions.post_comment_for( 'report', submission.id, form.cleaned_data['comment_message'], request.user.get_profile()) messages.success(request, 'เพิ่มความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) elif 'submit_reply_button' in request.POST: comment_id = request.POST['comment_id'] message = request.POST['comment_message'] comment = get_object_or_404(Comment, pk=comment_id) if message: comment_functions.post_reply_comment_for( comment, 'report', submission.id, message, request.user.get_profile()) messages.success(request, 'ตอบกลับความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) else: form = PostCommentForm() if submission.id: comments = comment_functions.get_comments_for( 'report', submission.id, request.user.get_profile(), mark_as_read=True) else: comments = [] return render_page_response(request, 'comments', 'page_report/report_comments.html', { 'submission': submission, 'comments': comments, 'form': form })
def view_master_plan_manage_program_budget(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) budget_schedules = BudgetSchedule.objects.filter( program=program).order_by('-schedule_on') if request.method == 'POST': updating_schedules = list() for schedule in request.POST.getlist('schedule'): try: (schedule_id, grant_budget, schedule_on) = schedule.split(',') (schedule_on_year, schedule_on_month, schedule_on_day) = schedule_on.split('-') schedule_on = date(int(schedule_on_year), int(schedule_on_month), int(schedule_on_day)) grant_budget = int(grant_budget) except: messages.error( request, 'ข้อมูลไม่อยู่ในรูปแบบที่ถูกต้อง กรุณากรอกใหม่อีกครั้ง') return redirect('view_master_plan_manage_program_budget', (program.id)) else: create_revision = False if schedule_id and schedule_id != 'none': schedule = BudgetSchedule.objects.get(pk=schedule_id) if schedule.grant_budget != grant_budget or schedule.schedule_on != schedule_on: create_revision = True schedule.grant_budget = grant_budget schedule.schedule_on = schedule_on schedule.save() else: schedule = BudgetSchedule.objects.create( program=program, grant_budget=grant_budget, claim_budget=0, schedule_on=schedule_on) create_revision = True if create_revision: revision = BudgetScheduleRevision.objects.create( schedule=schedule, grant_budget=schedule.grant_budget, claim_budget=schedule.claim_budget, schedule_on=schedule.schedule_on, revised_by=request.user.get_profile()) updating_schedules.append(schedule) # Remove schedule for budget_schedule in budget_schedules: found = False for schedule in updating_schedules: if schedule == budget_schedule: found = True if not found: BudgetScheduleRevision.objects.filter( schedule=budget_schedule).delete() budget_schedule.delete() messages.success(request, 'แก้ไขแผนงานเงินของแผนงานเรียบร้อย') return utilities.redirect_or_back( 'view_master_plan_manage_organization', (master_plan.ref_no), request) return render_page_response( request, 'organization', 'page_sector/manage_master_plan/manage_program_budget.html', { 'master_plan': master_plan, 'program': program, 'schedules': budget_schedules })
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_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_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 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 })