Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 12756)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 12757)
@@ -41,7 +41,12 @@
 from waeup.ikoba.browser.interfaces import ICaptchaManager
 from waeup.ikoba.mandates.mandate import PasswordMandate
-from waeup.ikoba.payments.payment import format_payment_item_values
+from waeup.ikoba.payments.payment import (
+    get_payments_from_payer_id,
+    find_payable_from_payable_id,
+    get_payment_providers
+    )
 from waeup.ikoba.payments.interfaces import (
-    IPaymentGatewayServicesLister, IPaymentGatewayService, IPayer, IPayable
+    IPaymentGatewayServicesLister, IPaymentGatewayService, IPayer, IPayable,
+    payment_states
     )
 from waeup.ikoba.widgets.hrefwidget import HREFDisplayWidget
@@ -1699,2 +1704,36 @@
             sigs_in_footer=self._sigsInFooter(),
             omit_fields=self.omit_fields)
+
+
+class PaymentsPage(IkobaPage):
+    """ Page to display all payments made by customer.
+
+    """
+    grok.context(ICustomer)
+    grok.name('payments')
+    grok.require('waeup.manageCustomer')
+    grok.template('paymentspage')
+    pnav = 4
+
+    @property
+    def label(self):
+        return _('${a}: Payments', mapping={'a':self.context.display_fullname})
+
+    @property
+    def payment_states(self):
+        return payment_states
+
+    @property
+    def gateway_services(self):
+        return get_payment_providers()
+
+    def payments(self):
+        values = []
+        payable = None
+        for payment in get_payments_from_payer_id(
+            self.context.customer.customer_id):
+            payable_object = find_payable_from_payable_id(payment.payable_id)
+            if payable_object is not None:
+                payable = IPayable(payable_object)
+            values.append((payment, payable, payable_object))
+        return values
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/paymentspage.pt
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/paymentspage.pt	(revision 12757)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/paymentspage.pt	(revision 12757)
@@ -0,0 +1,33 @@
+<br />
+<table class="ikoba-data-table dataTableManage">
+  <thead>
+  <tr>
+    <th i18n:translate="">Payment Id</th>
+    <th i18n:translate="">Creation Date</th>
+    <th i18n:translate="">Payment Date</th>
+    <th i18n:translate="">Service</th>
+    <th i18n:translate="">Amount</th>
+    <th i18n:translate="">Currency</th>
+    <th i18n:translate="">State</th>
+    <th i18n:translate="">Contract</th>
+  </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value view/payments">
+      <td><span tal:content="python: value[0].payment_id[:9]"></span>...</td>
+      <td tal:content="python: layout.formatDatetime(value[0].creation_date)">CREATION DATE</td>
+      <td tal:content="python: layout.formatDatetime(value[0].payment_date)">PAYMENT DATE</td>
+      <td tal:content="python: view.gateway_services[value[0].gateway_service].title">SERVICE</td>
+      <td tal:content="python: value[0].amount">AMOUNT</td>
+      <td tal:content="python: value[0].currency">AMOUNT</td>
+      <td tal:content="python: view.payment_states.getTerm(value[0].state).title">STATE</td>
+      <td>
+        <span tal:condition="python: value[1] is not None">
+          <a tal:attributes="href python: view.url(value[2])">
+            <span tal:content="python: value[1].title">PAYABLETITLE</span>
+          </a>
+        </span>
+      </td>
+    </tr>
+  </tbody>
+</table>
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py	(revision 12756)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py	(revision 12757)
@@ -166,4 +166,9 @@
     text = _(u'Documents')
 
+class CustomerManagePaymentsLink(CustomerManageLink):
+    grok.order(5)
+    link = 'payments'
+    text = _(u'Payments')
+
 
 class CustomerManageHistoryLink(CustomerManageLink):
