Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12571)
@@ -27,5 +27,6 @@
     IPCNCustomerPDFDocument,
     IRONContract,
-    IROPContract)
+    IROPContract,
+    IRPRContract)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -75,2 +76,11 @@
     iface = IROPContract
     factory_name = 'waeup.ROPContract'
+
+class RPRContractProcessor(ContractProcessorBase):
+    """A batch processor for IRPRContract objects.
+    """
+    util_name = 'rprcontractprocessor'
+    grok.name(util_name)
+    name = _('Registration in the Provisional Register Contract Processor')
+    iface = IRPRContract
+    factory_name = 'waeup.RPRContract'
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12571)
@@ -28,7 +28,17 @@
 from ikobacustom.pcn.interfaces import MessageFactory as _
 from ikobacustom.pcn.customers.interfaces import (
-    IRONContract, IRONContractEdit, IRONContractProcess,
-    IROPContract, IROPContractEdit, IROPContractProcess,
-    IRONContractOfficialUse, IROPContractOfficialUse)
+    IRONContract,
+    IRONContractEdit,
+    IRONContractProcess,
+    IRONContractOfficialUse,
+    IROPContract,
+    IROPContractEdit,
+    IROPContractProcess, 
+    IROPContractOfficialUse,
+    IRPRContract,
+    IRPRContractEdit,
+    IRPRContractProcess,
+    IRPRContractOfficialUse,
+    )
 
 
@@ -107,2 +117,40 @@
     def getInterfaces(self):
         return implementedBy(ROPContract)
+
+
+class RPRContract(ContractBase):
+    """Registration in the Provisional Register contract.
+    """
+
+    grok.implements(
+        IRPRContractProcess,
+        IRPRContract,
+        IRPRContractEdit,
+        ICustomerNavigation)
+
+    contract_category = 'rpr'
+
+    form_fields_interface = IRPRContract
+
+    edit_form_fields_interface = IRPRContractEdit
+
+    ou_form_fields_interface = IRPRContractOfficialUse
+
+    check_docs_interface = IRPRContract
+
+RPRContract = attrs_to_fields(RPRContract)
+
+
+class RPRContractFactory(grok.GlobalUtility):
+    """A factory for contracts.
+    """
+    grok.implements(IFactory)
+    grok.name(u'waeup.RPRContract')
+    title = u"Create a new license contract.",
+    description = u"This factory instantiates new contract instances."
+
+    def __call__(self, *args, **kw):
+        return RPRContract(*args, **kw)
+
+    def getInterfaces(self):
+        return implementedBy(RPRContract)
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12571)
@@ -23,5 +23,8 @@
 from ikobacustom.pcn.customers.interfaces import (
     IPCNCustomer, IPCNCustomerJPGDocument,
-    IPCNCustomerPDFDocument, IRONContractProcess, IROPContractProcess)
+    IPCNCustomerPDFDocument,
+    IRONContractProcess,
+    IROPContractProcess,
+    IRPRContractProcess)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -66,2 +69,10 @@
     title = _(u'Registration of Premises Contracts')
     class_name = 'ROPContract'
+
+class RPRContractExporter(ContractExporterBase):
+    """Exporter for Contract instances.
+    """
+    grok.name('rprcontracts')
+    iface = IRPRContractProcess
+    title = _(u'Registration in the Provisional Register Contracts')
+    class_name = 'RPRContract'
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12571)
@@ -30,4 +30,5 @@
 from ikobacustom.pcn.interfaces import MessageFactory as _
 from ikobacustom.pcn.interfaces import LGASource
+from ikobacustom.pcn.customers.schoolgrades import ResultEntryField
 
 def year_range():
@@ -104,9 +105,4 @@
         )
 
-    res_address = schema.Text(
-        title = _(u'Residential Address'),
-        required = False,
-        )
-
     work_address = schema.Text(
         title = _(u'Work Address'),
@@ -293,2 +289,110 @@
     #    required = True,
     #    )
+
+class IRPRContract(IContract):
+    """A Registration in the Provisional Register contract.
+
+    """
+
+    state_of_origin = schema.Choice(
+        vocabulary = nats_vocab,
+        title = _(u'State of Origin'),
+        required = False,
+        )
+
+    res_address = schema.Text(
+        title = _(u'Residential Address'),
+        required = False,
+        )
+
+    qualifications = schema.List(
+        title = _(u'Qualifications'),
+        value_type = ResultEntryField(),
+        required = False,
+        default = [],
+        )
+
+    certificates = schema.Choice(
+        title = _(u'Certificates'),
+        source = CustomerDocumentSource(),
+        required = False,
+        )
+
+    referee1_name = schema.TextLine(
+        title = _(u'First Referee Name'),
+        required = False,
+        readonly = False,
+        )
+
+    referee1_address = schema.Text(
+        title = _(u'First Referee Address'),
+        required = False,
+        readonly = False,
+        )
+
+    referee1_license = schema.TextLine(
+        title = _(u'First Referee License Number'),
+        required = False,
+        readonly = False,
+        )
+
+    referee2_name = schema.TextLine(
+        title = _(u'Second Referee Name'),
+        required = False,
+        readonly = False,
+        )
+
+    referee2_address = schema.Text(
+        title = _(u'Second Referee Address'),
+        required = False,
+        readonly = False,
+        )
+
+    referee2_license = schema.TextLine(
+        title = _(u'Second Referee License Number'),
+        required = False,
+        readonly = False,
+        )
+
+    internship_address = schema.Text(
+        title = _(u'Internship'),
+        description = u'Enter address of company where you want to serve your internship.',
+        required = False,
+        readonly = False,
+        )
+
+
+
+class IRPRContractOfficialUse(IIkobaObject):
+    """Interface for editing RON official use data.
+
+    """
+
+    comment = schema.Text(
+        title= _('Reason for rejection'),
+        required = False,
+        )
+
+
+class IRPRContractProcess(IRPRContract, IRPRContractOfficialUse):
+    """Interface for processing RON data.
+    """
+
+    product_options = schema.List(
+        title = _(u'Options/Fees'),
+        value_type = ProductOptionField(),
+        required = False,
+        readonly = False,
+        default = [],
+        )
+
+class IRPRContractEdit(IRPRContract):
+    """Interface for editing RON data by customers.
+
+    """
+
+    certificates = schema.Choice(
+        title = _(u'Certificates'),
+        source = CustomerDocumentSource(),
+        required = True,
+        )
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_contract.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_contract.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_contract.py	(revision 12571)
@@ -29,6 +29,14 @@
 
 from ikobacustom.pcn.testing import (FunctionalLayer, FunctionalTestCase)
-from ikobacustom.pcn.customers.contracts import RONContract, ROPContract
-from ikobacustom.pcn.customers.interfaces import IRONContract, IROPContract
+from ikobacustom.pcn.customers.contracts import (
+    RONContract,
+    ROPContract,
+    RPRContract,
+    )
+from ikobacustom.pcn.customers.interfaces import (
+    IRONContract,
+    IROPContract,
+    IRPRContract,
+    )
 
 
@@ -44,4 +52,6 @@
         verify.verifyObject(IROPContract, ROPContract())
         verify.verifyObject(ICustomerNavigation, ROPContract())
+        verify.verifyObject(IRPRContract, RPRContract())
+        verify.verifyObject(ICustomerNavigation, RPRContract())
         return
 
@@ -59,5 +69,10 @@
         container.addContract(contract2)
         self.assertEqual(container[id2], contract2)
-        self.assertRaises(TypeError, container.addContract, object())
         self.assertEqual(contract2.class_name, 'ROPContract')
+
+        contract3 = createObject(u'waeup.RPRContract')
+        id3 = contract3.contract_id
+        container.addContract(contract3)
+        self.assertEqual(container[id3], contract3)
+        self.assertEqual(contract3.class_name, 'RPRContract')
         return
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12571)
@@ -56,4 +56,5 @@
         'RONContract': _('Retention of Name on the Registrar'),
         'ROPContract': _('Registration of Premises'),
+        'RPRContract': _('Registration in the Provisional Register'),
         }
 
@@ -67,3 +68,4 @@
         'pcncustomerpdfdocuments',
         'roncontracts',
-        'ropcontracts')
+        'ropcontracts',
+        'rprcontracts')
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12570)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12571)
@@ -48,4 +48,5 @@
         'ron': 'Retention of Name',
         'rop': 'Registration of Premises',
+        'rpr': 'Registration in the Provisional Register',
         'no': 'no license',
         }
