openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #07026
[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