## $Id: browser.py 14210 2016-10-01 05:02:10Z henrik $
##
## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##
"""UI components for basic applicants and related components.
"""
import grok
from zope.formlib.textwidgets import BytesDisplayWidget
from waeup.kofa.applicants.browser import (
    ApplicantRegistrationPage, ApplicantsContainerPage)
from kofacustom.nigeria.applicants.browser import (
    NigeriaApplicantDisplayFormPage,
    NigeriaApplicantManageFormPage,
    NigeriaApplicantEditFormPage,
    NigeriaPDFApplicationSlip)

from kofacustom.coewarri.applicants.interfaces import (
    ICustomUGApplicantEdit, ICustomUGApplicant)
from kofacustom.coewarri.interfaces import MessageFactory as _

# Fields to be omitted in all display forms. course_admitted is
# rendered separately.

OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted',
    'result_uploaded', 'suspended', 'special_application',
    'bank_account_number',
    'bank_account_name',
    'bank_name')

# UG students are all undergraduate students.
UG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + (
    'jamb_subjects_list', 'programme_type')
UG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('phone',)
UG_OMIT_MANAGE_FIELDS = (
    'special_application',
    'jamb_subjects_list',
    'programme_type')
UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
    'student_id',
    'notice',
    'screening_score',
    'screening_venue',
    'screening_date',
#    'jamb_age',
#    'jamb_subjects',
#    'jamb_score',
#    'jamb_reg_number',
    'aggregate')

class CustomApplicantDisplayFormPage(NigeriaApplicantDisplayFormPage):
    """A display view for applicant data.
    """

    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        form_fields = grok.AutoFields(ICustomUGApplicant)
        form_fields['notice'].custom_widget = BytesDisplayWidget
        form_fields['jamb_subjects'].custom_widget = BytesDisplayWidget
        if not getattr(self.context, 'student_id'):
            form_fields = form_fields.omit('student_id')
        if not getattr(self.context, 'screening_score'):
            form_fields = form_fields.omit('screening_score')
        if not getattr(self.context, 'screening_venue'):
            form_fields = form_fields.omit('screening_venue')
        if not getattr(self.context, 'screening_date'):
            form_fields = form_fields.omit('screening_date')
        return form_fields

class CustomPDFApplicationSlip(NigeriaPDFApplicationSlip):

    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        form_fields = grok.AutoFields(ICustomUGApplicant)
        for field in UG_OMIT_PDF_FIELDS:
            form_fields = form_fields.omit(field)
        if not getattr(self.context, 'student_id'):
            form_fields = form_fields.omit('student_id')
        if not getattr(self.context, 'screening_score'):
            form_fields = form_fields.omit('screening_score')
        if not getattr(self.context, 'screening_venue'):
            form_fields = form_fields.omit('screening_venue')
        if not getattr(self.context, 'screening_date'):
            form_fields = form_fields.omit('screening_date')
        return form_fields

class CustomApplicantManageFormPage(NigeriaApplicantManageFormPage):
    """A full edit view for applicant data.
    """

    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        form_fields = grok.AutoFields(ICustomUGApplicant)
        for field in UG_OMIT_MANAGE_FIELDS:
            form_fields = form_fields.omit(field)
        form_fields['student_id'].for_display = True
        form_fields['applicant_id'].for_display = True
        return form_fields

class CustomApplicantEditFormPage(NigeriaApplicantEditFormPage):
    """An applicant-centered edit view for applicant data.
    """

    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        form_fields = grok.AutoFields(ICustomUGApplicantEdit)
        for field in UG_OMIT_EDIT_FIELDS:
            form_fields = form_fields.omit(field)
        form_fields['applicant_id'].for_display = True
        form_fields['reg_number'].for_display = True
        return form_fields

