← Back to team overview

openerp-community-reviewer team mailing list archive

[Merge] lp:~yannick-buron/partner-contact-management/partner-contact-management into lp:partner-contact-management

 

YannickB (EmpowerUs) has proposed merging lp:~yannick-buron/partner-contact-management/partner-contact-management into lp:partner-contact-management.

Requested reviews:
  Partner and Contact Core Editors (partner-contact-core-editors)

For more details, see:
https://code.launchpad.net/~yannick-buron/partner-contact-management/partner-contact-management/+merge/221742

Hello everybody,

Here is a little module I use for one of my customer. It is used for managing the fiability level of the customers, to know if they will pay or not.

It's really simple, but I hope it is a good base for adding more complex features later. What do you think?
-- 
https://code.launchpad.net/~yannick-buron/partner-contact-management/partner-contact-management/+merge/221742
Your team Partner and Contact Core Editors is requested to review the proposed merge of lp:~yannick-buron/partner-contact-management/partner-contact-management into lp:partner-contact-management.
=== added directory 'base_partner_customer_fiability'
=== added file 'base_partner_customer_fiability/__init__.py'
--- base_partner_customer_fiability/__init__.py	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/__init__.py	2014-06-02 14:07:45 +0000
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) Yannick Buron.
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import base_partner_customer_fiability

=== added file 'base_partner_customer_fiability/__openerp__.py'
--- base_partner_customer_fiability/__openerp__.py	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/__openerp__.py	2014-06-02 14:07:45 +0000
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright Yannick Buron 2014
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+    'name' : 'Customer Fiability',
+    'version' : '1',
+    'author' : 'Yannick Buron',
+    'category' : 'Other',
+    'description' : """
+This module create a status field in partner which indicate the fiability of this customer. It works by computing the average delay before the customer pay his invoices.
+    """,
+    'website': 'http://www.yolo-consulting.net',
+    'depends' : ['account'],
+    'data': [
+        'base_partner_customer_fiability_view.xml',
+        'security/ir.model.access.csv'
+    ],
+    'installable': True,
+    'auto_install': False,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'base_partner_customer_fiability/base_partner_customer_fiability.py'
--- base_partner_customer_fiability/base_partner_customer_fiability.py	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/base_partner_customer_fiability.py	2014-06-02 14:07:45 +0000
@@ -0,0 +1,115 @@
+##############################################################################
+#
+#    Copyright Yannick Buron 2014
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
+from datetime import datetime, timedelta
+import logging
+_logger = logging.getLogger(__name__)
+
+import openerp
+from openerp import SUPERUSER_ID, tools
+from openerp.osv import fields, osv
+from openerp.tools.translate import _
+from openerp.tools.float_utils import float_round
+import openerp.addons.decimal_precision as dp
+from collections import defaultdict
+import time
+
+class account_invoice(osv.osv):
+
+    _inherit = 'account.invoice'
+
+    def _get_payment_delay(self, cr, uid, ids, field, args, context=None):
+        res = {}
+        now = datetime.now()
+
+        for invoice in self.browse(cr, uid, ids):
+            res[invoice.id] = 0
+            if invoice.date_due:
+                date_due = datetime.strptime(invoice.date_due, "%Y-%m-%d")
+                if invoice.state == 'paid':
+                    payment_date = False
+                    for payment in invoice.payment_ids:
+                        payment_date = payment.date
+                    if payment_date:
+                        res[invoice.id] = (datetime.strptime(payment_date, "%Y-%m-%d") - date_due).days
+                else:
+                    res[invoice.id] = (now - date_due).days
+        return res
+
+    _columns = {
+        'payment_delay':fields.function(_get_payment_delay, type='integer',string="Payment delay"),
+    }
+
+    def confirm_paid(self, cr, uid, ids, context=None):
+
+        partner_obj = self.pool.get('res.partner')
+
+        res = super(account_invoice, self).confirm_paid(cr, uid, ids, context=context)
+
+        for invoice in self.browse(cr, uid, ids, context=context):
+            partner_obj.compute_customer_fiability(cr, uid, [invoice.partner_id.id], context=context)
+
+        return res
+
+
+
+class res_partner_customer_fiability(osv.osv):
+
+    _name = 'res.partner.customer.fiability'
+
+    _columns = {
+        'name': fields.char('Fiability', size=128, required=True, translate=True),
+        'days': fields.integer('Days', required=True),
+    }
+
+    _order = 'days'
+
+
+class res_partner(osv.osv):
+    _inherit = 'res.partner'
+
+    _columns = {
+        'customer_fiability_id': fields.many2one('res.partner.customer.fiability', 'Fiability'),
+        'override_customer_fiability': fields.boolean('Override fiability?')
+    }
+
+    def compute_customer_fiability(self, cr, uid, ids, context=None):
+        invoice_obj = self.pool.get('account.invoice')
+        fiability_obj = self.pool.get('res.partner.customer.fiability')
+
+        for partner in self.browse(cr, uid, ids, context=context):
+            if not partner.override_customer_fiability:
+                invoice_ids = invoice_obj.search(cr, uid, [('partner_id','=',partner.id)], context=context)
+                i = 0
+                sum = 0
+                for invoice in invoice_obj.browse(cr, uid, invoice_ids, context=context):
+                    sum += invoice.payment_delay
+                    i += 1
+                average = 0
+                if i:
+                    average = sum / i
+
+                fiability_id = False
+                fiability_ids = fiability_obj.search(cr, uid, [], context=context)
+                for fiability in fiability_obj.browse(cr, uid, fiability_ids, context=context):
+                    if fiability.days < average:
+                        fiability_id = fiability.id
+
+                self.write(cr, uid, [partner.id], {'customer_fiability_id': fiability_id}, context=context)

=== added file 'base_partner_customer_fiability/base_partner_customer_fiability_view.xml'
--- base_partner_customer_fiability/base_partner_customer_fiability_view.xml	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/base_partner_customer_fiability_view.xml	2014-06-02 14:07:45 +0000
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<openerp>
+	<data>
+
+        <record id="res_partner_customer_fiability_form" model="ir.ui.view">
+            <field name="name">res.partner.customer.fiability.form</field>
+            <field name="model">res.partner</field>
+            <field name="inherit_id" ref="base.view_partner_form"/>
+            <field name="arch" type="xml">
+                <field name="email" position="after">
+                    <field name="customer_fiability_id" readonly="1"/>
+                    <field name="override_customer_fiability" invisible="1"/>
+                </field>
+            </field>
+        </record>
+
+        <record id="res_partner_customer_fiability_form_manager" model="ir.ui.view">
+            <field name="name">res.partner.customer.fiability.form.manager</field>
+            <field name="model">res.partner</field>
+            <field name="inherit_id" ref="res_partner_customer_fiability_form"/>
+            <field name="groups_id" eval="[(6, 0, [ref('account.group_account_manager') ])]"/>
+            <field name="arch" type="xml">
+                <field name='customer_fiability_id' position="attributes">
+                    <attribute name="readonly">0</attribute>
+                    <attribute name="attrs">{'readonly': [('override_customer_fiability','=',False)]}</attribute>
+                </field>
+                <field name='override_customer_fiability' position="attributes">
+                    <attribute name="invisible">0</attribute>
+                </field>
+
+            </field>
+        </record>
+
+
+        <record id="customer_fiability_form" model="ir.ui.view">
+            <field name="name">customer.fiability.form</field>
+            <field name="model">res.partner.customer.fiability</field>
+            <field name="arch" type="xml">
+                <form string="Fiability" version="7.0">
+                    <group col="4">
+                        <field name="name"/>
+                        <field name="days"/>
+                     </group>
+                </form>
+            </field>
+        </record>
+
+        <record id="customer_fiability_tree" model="ir.ui.view">
+            <field name="name">customer.fiability.tree</field>
+            <field name="model">res.partner.customer.fiability</field>
+            <field name="arch" type="xml">
+                <tree string="Fiability">
+                    <field name="name"/>
+                    <field name="days"/>
+                </tree>
+            </field>
+        </record>
+
+
+        <record id="action_customer_fiability_tree" model="ir.actions.act_window">
+            <field name="name">Fiability</field>
+            <field name="res_model">res.partner.customer.fiability</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">tree,form</field>
+        </record>
+
+        <menuitem action="action_customer_fiability_tree" id="menu_action_customer_fiability_tree" parent="account.menu_configuration_misc"/>
+
+
+        </data>
+</openerp>

=== added directory 'base_partner_customer_fiability/i18n'
=== added file 'base_partner_customer_fiability/i18n/base_partner_customer_fiability.pot'
--- base_partner_customer_fiability/i18n/base_partner_customer_fiability.pot	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/i18n/base_partner_customer_fiability.pot	2014-06-02 14:07:45 +0000
@@ -0,0 +1,61 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* base_partner_customer_fiability
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-06-02 13:53+0000\n"
+"PO-Revision-Date: 2014-06-02 13:53+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: base_partner_customer_fiability
+#: field:res.partner.customer.fiability,days:0
+msgid "Days"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: field:account.invoice,payment_delay:0
+msgid "Payment delay"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_res_partner_customer_fiability
+msgid "res.partner.customer.fiability"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_account_invoice
+msgid "Invoice"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: field:res.partner,override_customer_fiability:0
+msgid "Override fiability?"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: view:res.partner:0
+msgid "{'readonly': [('override_customer_fiability','=',False)]}"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.actions.act_window,name:base_partner_customer_fiability.action_customer_fiability_tree
+#: model:ir.ui.menu,name:base_partner_customer_fiability.menu_action_customer_fiability_tree
+#: field:res.partner,customer_fiability_id:0
+#: view:res.partner.customer.fiability:0
+#: field:res.partner.customer.fiability,name:0
+msgid "Fiability"
+msgstr ""
+

=== added file 'base_partner_customer_fiability/i18n/fr.po'
--- base_partner_customer_fiability/i18n/fr.po	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/i18n/fr.po	2014-06-02 14:07:45 +0000
@@ -0,0 +1,61 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* base_partner_customer_fiability
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-06-02 13:53+0000\n"
+"PO-Revision-Date: 2014-06-02 13:53+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: base_partner_customer_fiability
+#: field:res.partner.customer.fiability,days:0
+msgid "Days"
+msgstr "Jours"
+
+#. module: base_partner_customer_fiability
+#: field:account.invoice,payment_delay:0
+msgid "Payment delay"
+msgstr "Délai de paiement"
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_res_partner_customer_fiability
+msgid "res.partner.customer.fiability"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_account_invoice
+msgid "Invoice"
+msgstr "Facture"
+
+#. module: base_partner_customer_fiability
+#: model:ir.model,name:base_partner_customer_fiability.model_res_partner
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: base_partner_customer_fiability
+#: field:res.partner,override_customer_fiability:0
+msgid "Override fiability?"
+msgstr "Surcharger fiabilité?"
+
+#. module: base_partner_customer_fiability
+#: view:res.partner:0
+msgid "{'readonly': [('override_customer_fiability','=',False)]}"
+msgstr ""
+
+#. module: base_partner_customer_fiability
+#: model:ir.actions.act_window,name:base_partner_customer_fiability.action_customer_fiability_tree
+#: model:ir.ui.menu,name:base_partner_customer_fiability.menu_action_customer_fiability_tree
+#: field:res.partner,customer_fiability_id:0
+#: view:res.partner.customer.fiability:0
+#: field:res.partner.customer.fiability,name:0
+msgid "Fiability"
+msgstr "Fiabilité"
+

=== added directory 'base_partner_customer_fiability/security'
=== added file 'base_partner_customer_fiability/security/ir.model.access.csv'
--- base_partner_customer_fiability/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ base_partner_customer_fiability/security/ir.model.access.csv	2014-06-02 14:07:45 +0000
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+res_partner_customer_fiability_manager,res_partner_customer_fiability manager,model_res_partner_customer_fiability,account.group_account_manager,1,1,1,1


Follow ups