Пример #1
0
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})
Пример #2
0
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})
Пример #3
0
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
        })
Пример #4
0
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})
Пример #5
0
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})
Пример #6
0
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},
    )
Пример #7
0
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
        })
Пример #8
0
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})
Пример #9
0
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
        })
Пример #10
0
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
        })