Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/batching.py	(revision 12604)
@@ -30,5 +30,6 @@
     IRPRContract,
     IRPCContract,
-    IIPPMVLContract)
+    IIPPMVLContract,
+    IRPPMVLContract)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -105,2 +106,11 @@
     iface = IIPPMVLContract
     factory_name = 'waeup.IPPMVLContract'
+
+class RPPMVLContractProcessor(ContractProcessorBase):
+    """A batch processor for IRPPMVLContract objects.
+    """
+    util_name = 'rppmvlcontractprocessor'
+    grok.name(util_name)
+    name = _('Renewal of Patent and Proprietary Medicines Vendors License (Contract) Processor')
+    iface = IRPPMVLContract
+    factory_name = 'waeup.RPPMVLContract'
Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/contracts.py	(revision 12604)
@@ -48,4 +48,8 @@
     IIPPMVLContractProcess,
     IIPPMVLContractOfficialUse,
+    IRPPMVLContract,
+    IRPPMVLContractEdit,
+    IRPPMVLContractProcess,
+    IRPPMVLContractOfficialUse,
     )
 
@@ -240,2 +244,39 @@
         return implementedBy(IPPMVLContract)
 
+class RPPMVLContract(ContractBase):
+    """Renewal of Patent and Proprietary Medicines Vendors License contract.
+    """
+
+    grok.implements(
+        IRPPMVLContractProcess,
+        IRPPMVLContract,
+        IRPPMVLContractEdit,
+        ICustomerNavigation)
+
+    contract_category = 'rppmvl'
+
+    form_fields_interface = IRPPMVLContract
+
+    edit_form_fields_interface = IRPPMVLContractEdit
+
+    ou_form_fields_interface = IRPPMVLContractOfficialUse
+
+    check_docs_interface = IRPPMVLContract
+
+RPPMVLContract = attrs_to_fields(RPPMVLContract)
+
+
+class RPPMVLContractFactory(grok.GlobalUtility):
+    """A factory for contracts.
+    """
+    grok.implements(IFactory)
+    grok.name(u'waeup.RPPMVLContract')
+    title = u"Create a new license contract.",
+    description = u"This factory instantiates new contract instances."
+
+    def __call__(self, *args, **kw):
+        return RPPMVLContract(*args, **kw)
+
+    def getInterfaces(self):
+        return implementedBy(RPPMVLContract)
+
Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/export.py	(revision 12604)
@@ -28,5 +28,6 @@
     IRPRContractProcess,
     IRPCContractProcess,
-    IIPPMVLContractProcess)
+    IIPPMVLContractProcess,
+    IRPPMVLContractProcess)
 from ikobacustom.pcn.interfaces import MessageFactory as _
 
@@ -95,2 +96,10 @@
     title = _(u'Issuance of Patent and Proprietary Medicines Vendors Licenses')
     class_name = 'IPPMVLContract'
+
+class RPPMVLContractExporter(ContractExporterBase):
+    """Exporter for Contract instances.
+    """
+    grok.name('rppmvlcontracts')
+    iface = IRPPMVLContractProcess
+    title = _(u'Renewal of Patent and Proprietary Medicines Vendors Licenses')
+    class_name = 'RPPMVLContract'
Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/interfaces.py	(revision 12604)
@@ -91,5 +91,5 @@
         source = LGASource(),
         title = _(u'State / LGA'),
-        required = True,
+        required = False,
         )
 
@@ -597,5 +597,5 @@
         source = LGASource(),
         title = _(u'State / LGA'),
-        required = True,
+        required = False,
         )
 
@@ -643,5 +643,5 @@
         )
 
-    referee1_occupation = schema.Text(
+    referee1_occupation = schema.TextLine(
         title = _(u'First Referee Occupation'),
         required = False,
@@ -667,5 +667,5 @@
         )
 
-    referee2_occupation = schema.Text(
+    referee2_occupation = schema.TextLine(
         title = _(u'Second Referee Occupation'),
         required = False,
@@ -711,4 +711,134 @@
         )
 
+    incometax_object = schema.Choice(
+        title = _(u'Income Tax Clearance'),
+        description = u'Select the pdf document which contains scanned copies '
+                      u'of your income tax clearance for the past three years. '
+                      u'You must create such a document first.',
+        source = CustomerDocumentSource(),
+        required = True,
+        )
+
 IIPPMVLContractEdit['certificates_object'].order = IIPPMVLContract[
     'certificates_object'].order
+
+IIPPMVLContractEdit['incometax_object'].order = IIPPMVLContract[
+    'incometax_object'].order
+
+class IRPPMVLContract(IContract):
+    """A Renewal of Patent and Proprietary Medicines Vendors License.
+
+    """
+
+    res_address = schema.Text(
+        title = _(u'Residential Address'),
+        required = False,
+        )
+
+    shop_address = schema.Text(
+        title = _(u'Patent Vendor\'s Shop'),
+        description = u'Enter name and address of patent vendor\'s shop.',
+        required = False,
+        )
+
+    shop_lga = schema.Choice(
+        source = LGASource(),
+        title = _(u'State / LGA'),
+        required = False,
+        )
+
+    shop_email = schema.ASCIILine(
+        title = _(u'Shop Email Address'),
+        required = False,
+        constraint=validate_email,
+        )
+
+    shop_phone = PhoneNumber(
+        title = _(u'Shop Phone'),
+        description = u'',
+        required = False,
+        )
+
+    PPMVL_number = schema.TextLine(
+        title = _(u'PPMVL Data'),
+        description = u'State PPMVL number and date of issue of last license.',
+        required = False,
+        readonly = 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,
+        )
+
+    referee1_occupation = schema.TextLine(
+        title = _(u'First Referee Occupation'),
+        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,
+        )
+
+    referee2_occupation = schema.TextLine(
+        title = _(u'Second Referee Occupation'),
+        required = False,
+        readonly = False,
+        )
+
+
+class IRPPMVLContractOfficialUse(IIkobaObject):
+    """Interface for editing RPPMVL official use data.
+
+    """
+
+    comment = schema.Text(
+        title= _('Reason for rejection'),
+        required = False,
+        )
+
+
+class IRPPMVLContractProcess(IRPPMVLContract, IRPPMVLContractOfficialUse):
+    """Interface for processing RPPMVL data.
+    """
+
+    product_options = schema.List(
+        title = _(u'Options/Fees'),
+        value_type = ProductOptionField(),
+        required = False,
+        readonly = False,
+        default = [],
+        )
+
+class IRPPMVLContractEdit(IRPPMVLContract):
+    """Interface for editing RPPMVL data by customers.
+
+    """
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 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/tests/test_contract.py	(revision 12604)
@@ -35,4 +35,5 @@
     RPCContract,
     IPPMVLContract,
+    RPPMVLContract,
     )
 from ikobacustom.pcn.customers.interfaces import (
@@ -42,4 +43,5 @@
     IRPCContract,
     IIPPMVLContract,
+    IRPPMVLContract,
     )
 
@@ -96,3 +98,9 @@
         self.assertEqual(container[id5], contract5)
         self.assertEqual(contract5.class_name, 'IPPMVLContract')
+
+        contract6 = createObject(u'waeup.RPPMVLContract')
+        id6 = contract6.contract_id
+        container.addContract(contract6)
+        self.assertEqual(container[id6], contract6)
+        self.assertEqual(contract6.class_name, 'RPPMVLContract')
         return
Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/customers/utils.py	(revision 12604)
@@ -60,4 +60,6 @@
         'IPPMVLContract': _(
             'Issuance of Patent and Proprietary Medicines Vendors License'),
+        'RPPMVLContract': _(
+            'Renewal of Patent and Proprietary Medicines Vendors License'),
         }
 
@@ -74,3 +76,4 @@
         'rprcontracts',
         'rpccontracts',
-        'ippmvlcontracts')
+        'ippmvlcontracts',
+        'rppmvlcontracts')
Index: main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py
===================================================================
--- main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12601)
+++ main/ikobacustom.pcn/trunk/src/ikobacustom/pcn/utils/utils.py	(revision 12604)
@@ -51,4 +51,5 @@
         'rpc': 'Registration as Pharmaceutical Chemist',
         'ippmvl': 'Issuance of Patent and Proprietary Medicines Vendors License',
+        'rppmvl': 'Renewal of Patent and Proprietary Medicines Vendors License',
         'no': 'no license',
         }
@@ -76,5 +77,6 @@
         'rprcontracts',
         'rpccontracts',
-        'ippmvlcontracts')
+        'ippmvlcontracts',
+        'rppmvlcontracts')
 
     BATCH_PROCESSOR_NAMES = (
@@ -87,4 +89,5 @@
         'rpccontractprocessor',
         'ippmvlcontractprocessor',
+        'rppmvlcontractprocessor',
         'pcnproductprocessor',
         'pdfdocumentprocessor',
