## $Id: browser.py 13877 2016-06-04 18:31:00Z 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.component import getUtility
from zope.i18n import translate
from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
from zope.formlib.textwidgets import BytesDisplayWidget
from waeup.kofa.applicants.viewlets import (
    PaymentReceiptActionButton, PDFActionButton)
from waeup.kofa.applicants.pdf import PDFApplicationSlip
from waeup.kofa.interfaces import IKofaUtils
from waeup.kofa.browser.interfaces import IPDFCreator

from kofacustom.nigeria.applicants.browser import (
    NigeriaExportPDFPaymentSlipPage, NigeriaApplicantManageFormPage,
    NigeriaApplicantDisplayFormPage, NigeriaApplicantEditFormPage)

from waeup.fceokene.interfaces import MessageFactory as _

from kofacustom.nigeria.applicants.interfaces import (
    UG_OMIT_DISPLAY_FIELDS,
    UG_OMIT_PDF_FIELDS,
    UG_OMIT_MANAGE_FIELDS,
    UG_OMIT_EDIT_FIELDS
    )
from waeup.fceokene.applicants.interfaces import (
    ICustomUGApplicant, ICustomUGApplicantEdit,
    BEC_OMIT_DISPLAY_FIELDS,
    BEC_OMIT_PDF_FIELDS,
    BEC_OMIT_MANAGE_FIELDS,
    BEC_OMIT_EDIT_FIELDS,
    ITPURegistration
    )

UG_OMIT_EDIT_FIELDS = [
    value for value in UG_OMIT_EDIT_FIELDS
        if not value in ('jamb_subjects', 'jamb_score', 'jamb_reg_number')]

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

    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        if target == 'tpu':
            form_fields = grok.AutoFields(ITPURegistration).omit(
                'locked', 'suspended')
            return form_fields
        form_fields = grok.AutoFields(ICustomUGApplicant)
        if target is not None and target.startswith('bec'):
            for field in BEC_OMIT_DISPLAY_FIELDS:
                form_fields = form_fields.omit(field)
        else:
            form_fields = grok.AutoFields(ICustomUGApplicant)
            for field in UG_OMIT_DISPLAY_FIELDS:
                form_fields = form_fields.omit(field)
        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(PDFApplicationSlip):

    def _reduced_slip(self):
        return getattr(self.context, 'result_uploaded', False)

    def _getPDFCreator(self):
        if 'putme' in self.target or 'pude' in self.target:
            return getUtility(IPDFCreator, name='ibadan_pdfcreator')
        return getUtility(IPDFCreator)

    @property
    def title(self):
        container_title = self.context.__parent__.title
        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
        ar_translation = translate(_('Application Record'),
            'waeup.kofa', target_language=portal_language)
        if 'putme' in self.target or 'pude' in self.target:
            return 'IN AFFILIATION WITH UNIVERSITY OF IBADAN - %s %s %s' % (
                container_title, ar_translation,
                self.context.application_number)
        return '%s - %s %s' % (container_title,
            ar_translation, self.context.application_number)


    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        if target == 'tpu':
            form_fields = grok.AutoFields(ITPURegistration).omit(
                'locked', 'suspended')
            return form_fields
        form_fields = grok.AutoFields(ICustomUGApplicant)
        if target is not None and target.startswith('bec'):
            for field in BEC_OMIT_PDF_FIELDS:
                form_fields = form_fields.omit(field)
        else:
            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 CustomExportPDFPaymentSlipPage(NigeriaExportPDFPaymentSlipPage):
    """Deliver a PDF slip of the context.
    """

    note = '''


The total authorized amount includes an Interswitch transaction charge of 150 Nairas.
'''

class CustomApplicantManageFormPage(NigeriaApplicantManageFormPage):
    """A full edit view for applicant data.
    """
    
    @property
    def form_fields(self):
        target = getattr(self.context.__parent__, 'prefix', None)
        if target == 'tpu':
            form_fields = grok.AutoFields(ITPURegistration)
            form_fields['applicant_id'].for_display = True
            return form_fields
        form_fields = grok.AutoFields(ICustomUGApplicant)
        if target is not None and target.startswith('bec'):
            for field in BEC_OMIT_MANAGE_FIELDS:
                form_fields = form_fields.omit(field)
        else:
            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)
        if target == 'tpu':
            form_fields = grok.AutoFields(ITPURegistration).omit(
                'locked', 'suspended')
            form_fields['applicant_id'].for_display = True
            form_fields['reg_number'].for_display = True
            form_fields['firstname'].for_display = True
            form_fields['middlename'].for_display = True
            form_fields['lastname'].for_display = True
            form_fields['lga'].for_display = True
            form_fields['matric_number'].for_display = True
            return form_fields
        form_fields = grok.AutoFields(ICustomUGApplicantEdit)
        if target is not None and target.startswith('bec'):
            for field in BEC_OMIT_EDIT_FIELDS:
                form_fields = form_fields.omit(field)
        else:
            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