Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 16119)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 16131)
@@ -129,4 +129,19 @@
     'fst_sit_results', 'scd_sit_results')
 
+TRANS_OMIT_FIELDS = ('locked', 'suspended', 'applicant_id',)
+
+TRANS_SHORT_OMIT_FIELDS = TRANS_OMIT_FIELDS + (
+    'date_of_birth',
+    'sex',
+    'place_of_birth',
+    'nationality',
+    'entry_mode',
+    'entry_session',
+    'end_session',
+    'course_studied',
+    'course_changed',
+    'change_level',
+    )
+
 class CustomApplicantsContainerPage(ApplicantsContainerPage):
     """The standard view for regular applicant containers.
@@ -209,7 +224,15 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'trans':
-            form_fields = grok.AutoFields(ITranscriptApplicant).omit(
-                'locked', 'suspended')
+        if self.target is not None and self.target == 'transfull':
+            form_fields = grok.AutoFields(ITranscriptApplicant)
+            for field in TRANS_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
+            form_fields['dispatch_address'].custom_widget = BytesDisplayWidget
+            form_fields['perm_address'].custom_widget = BytesDisplayWidget
+            return form_fields
+        if self.target is not None and self.target == 'transshort':
+            form_fields = grok.AutoFields(ITranscriptApplicant)
+            for field in TRANS_SHORT_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
             form_fields['dispatch_address'].custom_widget = BytesDisplayWidget
             form_fields['perm_address'].custom_widget = BytesDisplayWidget
@@ -380,7 +403,13 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'trans':
+        if self.target is not None and self.target == 'transfull':
             form_fields = grok.AutoFields(ITranscriptApplicant)
-            form_fields['applicant_id'].for_display = True
+            for field in TRANS_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
+            return form_fields
+        if self.target is not None and self.target == 'transshort':
+            form_fields = grok.AutoFields(ITranscriptApplicant)
+            for field in TRANS_SHORT_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
             return form_fields
         if self.target == 'ictwk':
@@ -444,20 +473,13 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'trans':
-            form_fields = grok.AutoFields(ITranscriptApplicant).omit(
-                'locked', 'suspended')
-            form_fields['applicant_id'].for_display = True
-            form_fields['reg_number'].for_display = True
-            form_fields['place_of_birth'].field.required = True
-            form_fields['date_of_birth'].field.required = True
-            form_fields['nationality'].field.required = True
-            form_fields['email'].field.required = True
-            form_fields['phone'].field.required = True
-            form_fields['perm_address'].field.required = True
-            form_fields['dispatch_address'].field.required = True
-            form_fields['entry_mode'].field.required = True
-            form_fields['entry_session'].field.required = True
-            form_fields['end_session'].field.required = True
-            form_fields['course_studied'].field.required = True
+        if self.target is not None and self.target == 'transfull':
+            form_fields = grok.AutoFields(ITranscriptApplicant)
+            for field in TRANS_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
+            return form_fields
+        if self.target is not None and self.target == 'transshort':
+            form_fields = grok.AutoFields(ITranscriptApplicant)
+            for field in TRANS_SHORT_OMIT_FIELDS:
+                form_fields = form_fields.omit(field)
             return form_fields
         if self.target == 'ictwk':
@@ -701,4 +723,4 @@
     websites = (('Uniben Alumni Portal', 'https://uniben-alumni.waeup.org/'),
                 ('Uniben Student Portal', 'https://uniben.waeup.org/'),)
-    appl_url1 = 'https://uniben-alumni.waeup.org/documents/transcript/display'
-    appl_url2 = 'https://uniben-alumni.waeup.org/documents/transcript/display'
+    appl_url1 = 'https://uniben-alumni.waeup.org/applicants/transfull1/register'
+    appl_url2 = 'https://uniben-alumni.waeup.org/applicants/transshort1/register'
Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 16119)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 16131)
@@ -35,5 +35,5 @@
 from waeup.kofa.interfaces import (
     SimpleKofaVocabulary, academic_sessions_vocab, validate_email,
-    IKofaObject)
+    IKofaObject, ContextualDictSourceFactoryBase)
 from waeup.kofa.schema import FormattedDate, TextLineChoice, PhoneNumber
 from waeup.kofa.students.vocabularies import (
@@ -79,4 +79,24 @@
             REGISTRATION_CATS[value][1])
 
+DESTINATION_COST = {
+    'none': ('To the moon', 1000000000.0, 1),
+    #'nigeria': ('Nigeria', 2000.0, 1),
+    #'africa': ('Africa ', 3000.0, 2),
+    #'eurasia': ('Europe/Asia ', 3000.0, 3),
+    }
+
+class DestinationCostSource(BasicSourceFactory):
+    """A source that delivers continents and shipment costs.
+    """
+    def getValues(self):
+        sorted_items = sorted(DESTINATION_COST.items(),
+                              key=lambda element: element[1][2])
+        return [item[0] for item in sorted_items]
+
+    def getTitle(self, value):
+        return u"%s (₦ %s)" % (
+            DESTINATION_COST[value][0],
+            DESTINATION_COST[value][1])
+
 class IUnibenRegistration(IKofaObject):
     """A Uniben registrant.
@@ -204,14 +224,25 @@
 
     applicant_id = schema.TextLine(
-        title = _(u'Application Id'),
-        required = False,
-        readonly = False,
-        )
-
-    reg_number = TextLineChoice(
-        title = _(u'Kofa Registration Number'),
-        readonly = False,
-        required = True,
-        source = contextual_reg_num_source,
+        title = _(u'Transcript Application Id'),
+        required = False,
+        readonly = False,
+        )
+
+    student_id = schema.TextLine(
+        title = _(u'Kofa Student Id'),
+        required = False,
+        readonly = False,
+        )
+
+    #reg_number = schema.TextLine(
+    #    title = _(u'Registration Number'),
+    #    readonly = False,
+    #    required = False,
+    #    )
+
+    matric_number = schema.TextLine(
+        title = _(u'Matriculation Number'),
+        readonly = False,
+        required = True,
         )
 
@@ -228,10 +259,4 @@
     lastname = schema.TextLine(
         title = _(u'Last Name (Surname)'),
-        required = True,
-        )
-
-    matric_number = schema.TextLine(
-        title = _(u'Matriculation Number'),
-        readonly = False,
         required = True,
         )
@@ -282,7 +307,14 @@
     dispatch_address = schema.Text(
         title = _(u'Dispatch Addresses'),
-        description = u'Addresses to which transcript should be posted.',
-        required = False,
-        readonly = False,
+        description = u'Addresses to which transcripts should be posted. '
+                       'Addresses must involve same courier charges.',
+        required = False,
+        readonly = False,
+        )
+
+    charge = schema.Choice(
+        title = _(u'Courier Charge'),
+        source = DestinationCostSource(),
+        required = True,
         )
 
@@ -313,10 +345,4 @@
         required = False,
         readonly = False,
-        )
-
-    purpose = schema.TextLine(
-        title = _(u'Purpose of this Application'),
-        readonly = False,
-        required = False,
         )
 
Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/utils.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/utils.py	(revision 16119)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/utils.py	(revision 16131)
@@ -24,5 +24,5 @@
 from waeup.kofa.applicants.workflow import (INITIALIZED,
     STARTED, PAID, ADMITTED, NOT_ADMITTED, SUBMITTED, CREATED)
-from waeup.uniben.applicants.interfaces import REGISTRATION_CATS
+from waeup.uniben.applicants.interfaces import REGISTRATION_CATS, DESTINATION_COST
 from waeup.uniben.interfaces import MessageFactory as _
 
@@ -60,5 +60,6 @@
                  '(2nd supplementary advert)', 'ASE'],
         'spft': ['Special Full-Time Programmes', 'SP'],
-        'trans': ['Transcript Application', 'TR'],
+        'transfull': ['Transcript Application (without student record)', 'TRF'],
+        'transshort': ['Transcript Application (with student record)', 'TRS'],
         }
 
@@ -122,4 +123,8 @@
             for cat in applicant.registration_cats:
                 payment.amount_auth += REGISTRATION_CATS[cat][1]
+        elif applicant.container_code.startswith('trans'):
+            cost = DESTINATION_COST[applicant.charge][1]
+            payment.amount_auth = applicant.no_copies * cost
+            payment.p_category = 'transcript'
         else:
             payment.p_category = 'application'
