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_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_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_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_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_master_plan_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 = ProgramBudgetSchedule.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_project_budget", (program.id)) else: create_revision = False if schedule_id and schedule_id != "none": schedule = ProgramBudgetSchedule.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 = ProgramBudgetSchedule.objects.create( program=program, grant_budget=grant_budget, claim_budget=0, schedule_on=schedule_on ) create_revision = True if create_revision: revision = ProgramBudgetScheduleRevision.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: ProjectBudgetScheduleRevision.objects.filter(schedule=budget_schedule).delete() budget_schedule.delete() return utilities.redirect_or_back("view_master_plan_manage_organization", (master_plan.ref_no), request) for budget_schedule in budget_schedules: budget_schedule.schedule_quarter = utilities.find_quarter_number(budget_schedule.schedule_on) 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_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_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_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_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 })