Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12591)
@@ -28,5 +28,6 @@
     IRONContract,
     IROPContract,
-    IRPRContract)
+    IRPRContract,
+    IRPCContract)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -85,2 +86,11 @@
     iface = IRPRContract
     factory_name = 'waeup.RPRContract'
+
+class RPCContractProcessor(ContractProcessorBase):
+    """A batch processor for IRPRContract objects.
+    """
+    util_name = 'rpccontractprocessor'
+    grok.name(util_name)
+    name = _('Registration as Pharmaceutical Chemist Contract Processor')
+    iface = IRPCContract
+    factory_name = 'waeup.RPCContract'
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12591)
@@ -40,4 +40,8 @@
     IRPRContractProcess,
     IRPRContractOfficialUse,
+    IRPCContract,
+    IRPCContractEdit,
+    IRPCContractProcess,
+    IRPCContractOfficialUse,
     )
 
@@ -155,2 +159,41 @@
     def getInterfaces(self):
         return implementedBy(RPRContract)
+
+
+class RPCContract(ContractBase):
+    """Registration as Pharmaceutical Chemist contract.
+    """
+
+    grok.implements(
+        IRPCContractProcess,
+        IRPCContract,
+        IRPCContractEdit,
+        ICustomerNavigation)
+
+    contract_category = 'rpc'
+
+    form_fields_interface = IRPCContract
+
+    edit_form_fields_interface = IRPCContractEdit
+
+    ou_form_fields_interface = IRPCContractOfficialUse
+
+    check_docs_interface = IRPCContract
+
+RPCContract = attrs_to_fields(RPCContract)
+
+
+class RPCContractFactory(grok.GlobalUtility):
+    """A factory for contracts.
+    """
+    grok.implements(IFactory)
+    grok.name(u'waeup.RPCContract')
+    title = u"Create a new license contract.",
+    description = u"This factory instantiates new contract instances."
+
+    def __call__(self, *args, **kw):
+        return RPCContract(*args, **kw)
+
+    def getInterfaces(self):
+        return implementedBy(RPCContract)
+
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12591)
@@ -26,5 +26,6 @@
     IRONContractProcess,
     IROPContractProcess,
-    IRPRContractProcess)
+    IRPRContractProcess,
+    IRPCContractProcess)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -77,2 +78,10 @@
     title = _(u'Registration in the Provisional Register Contracts')
     class_name = 'RPRContract'
+
+class RPCContractExporter(ContractExporterBase):
+    """Exporter for Contract instances.
+    """
+    grok.name('rpccontracts')
+    iface = IRPCContractProcess
+    title = _(u'Registration as Pharmaceutical Chemist Contracts')
+    class_name = 'RPCContract'
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12591)
@@ -375,5 +375,5 @@
 
 class IRPRContractOfficialUse(IIkobaObject):
-    """Interface for editing RON official use data.
+    """Interface for editing RPR official use data.
 
     """
@@ -386,5 +386,5 @@
 
 class IRPRContractProcess(IRPRContract, IRPRContractOfficialUse):
-    """Interface for processing RON data.
+    """Interface for processing RPR data.
     """
 
@@ -398,5 +398,5 @@
 
 class IRPRContractEdit(IRPRContract):
-    """Interface for editing RON data by customers.
+    """Interface for editing RPR data by customers.
 
     """
@@ -413,2 +413,129 @@
 IRPRContractEdit['certificates_object'].order = IRPRContract[
     'certificates_object'].order
+
+
+class IRPCContract(IContract):
+    """A Registration as Pharmaceutical Chemist.
+
+    """
+
+    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.Text(
+        title = _(u'Qualifications'),
+        description = u'Enter a list of certificates obtained.',
+        required = False,
+        readonly = False,
+        )
+
+    certificates_object = schema.Choice(
+        title = _(u'Certificates'),
+        description = u'Select the document which contains scanned copies '
+                      u'of your certificates. You must create such a '
+                      u'document first.',
+        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 = schema.Text(
+        title = _(u'Internship'),
+        description = u'Enter name and address of the company where you '
+                      u'served your internship, the name of the approved '
+                      u'registered pharmacist and the period of your service.',
+        required = False,
+        readonly = False,
+        )
+
+    nigerian_residence = FormattedDate(
+        title = _(u'Residence in Nigeria'),
+        description = u'Enter the date since when you have continously '
+                      u'resided in Nigeria.',
+        required = False,
+        show_year = True,
+        )
+
+
+class IRPCContractOfficialUse(IIkobaObject):
+    """Interface for editing RPC official use data.
+
+    """
+
+    comment = schema.Text(
+        title= _('Reason for rejection'),
+        required = False,
+        )
+
+
+class IRPCContractProcess(IRPCContract, IRPCContractOfficialUse):
+    """Interface for processing RPC data.
+    """
+
+    product_options = schema.List(
+        title = _(u'Options/Fees'),
+        value_type = ProductOptionField(),
+        required = False,
+        readonly = False,
+        default = [],
+        )
+
+class IRPCContractEdit(IRPCContract):
+    """Interface for editing RPC data by customers.
+
+    """
+
+    certificates_object = schema.Choice(
+        title = _(u'Certificates'),
+        description = u'Select the document which contains scanned copies '
+                      u'of your certificates. You must create such a '
+                      u'document first.',
+        source = CustomerDocumentSource(),
+        required = True,
+        )
+
+IRPCContractEdit['certificates_object'].order = IRPCContract[
+    'certificates_object'].order
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_browser.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_browser.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_browser.py	(revision 12591)
@@ -475,4 +475,5 @@
         # First we add a submitted document and a product.
         IWorkflowState(self.document).setState('submitted')
+        self.contract.title = u'Contract Title'
         self.contract.document_object = self.document
         self.contract.product_object = self.product
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 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_contract.py	(revision 12591)
@@ -33,4 +33,5 @@
     ROPContract,
     RPRContract,
+    RPCContract,
     )
 from ikobacustom.pcn.customers.interfaces import (
@@ -38,4 +39,5 @@
     IROPContract,
     IRPRContract,
+    IRPCContract,
     )
 
@@ -54,4 +56,6 @@
         verify.verifyObject(IRPRContract, RPRContract())
         verify.verifyObject(ICustomerNavigation, RPRContract())
+        verify.verifyObject(IRPCContract, RPCContract())
+        verify.verifyObject(ICustomerNavigation, RPCContract())
         return
 
@@ -76,3 +80,9 @@
         self.assertEqual(container[id3], contract3)
         self.assertEqual(contract3.class_name, 'RPRContract')
+
+        contract4 = createObject(u'waeup.RPCContract')
+        id4 = contract4.contract_id
+        container.addContract(contract4)
+        self.assertEqual(container[id4], contract4)
+        self.assertEqual(contract4.class_name, 'RPCContract')
         return
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12591)
@@ -57,4 +57,5 @@
         'ROPContract': _('Registration of Premises'),
         'RPRContract': _('Registration in the Provisional Register'),
+        'RPCContract': _('Registration as Pharmaceutical Chemist'),
         }
 
@@ -69,3 +70,4 @@
         'roncontracts',
         'ropcontracts',
-        'rprcontracts')
+        'rprcontracts',
+        'rpccontracts')
Index: /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py
===================================================================
--- /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12590)
+++ /main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12591)
@@ -49,4 +49,5 @@
         'rop': 'Registration of Premises',
         'rpr': 'Registration in the Provisional Register',
+        'rpc': 'Registration as Pharmaceutical Chemist',
         'no': 'no license',
         }
@@ -71,5 +72,7 @@
         'pcncustomerpdfdocuments',
         'roncontracts',
-        'ropcontracts')
+        'ropcontracts',
+        'rprcontracts',
+        'rpccontracts')
 
     BATCH_PROCESSOR_NAMES = (
@@ -79,4 +82,6 @@
         'roncontractprocessor',
         'ropcontractprocessor',
+        'rprcontractprocessor',
+        'rpccontractprocessor',
         'pcnproductprocessor',
         'pdfdocumentprocessor',
