[VIEW] res_partner:+allow search in county_code field
[burette/lhc.git] / lhc.py
diff --git a/lhc.py b/lhc.py
index 2ff4ee1..494773c 100644 (file)
--- a/lhc.py
+++ b/lhc.py
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    lhc module for OpenERP, Customize OpenERP for L'Heureux Cyclage Copyright
-#    (C) 2013-2017 L'Heureux Cyclage (<http://www.heureux-cyclage.org>)
+#    (C) 2013-2022 L'Heureux Cyclage (<http://www.heureux-cyclage.org>)
 #
 #    This file is a part of lhc_custom_oe
 #
 from openerp.osv import osv
 from openerp.osv import orm
 from openerp.osv import fields
+from openerp.tools.translate import _
+import openerp.addons.decimal_precision as dp
 
 
 class res_partner(orm.Model):
     _inherit = 'res.partner'
 
+    def _get_county(self, cr, uid, ids, name, args, context=None):
+        """docstring for _county_get_fnc"""
+        res = {}
+        for obj in self.browse(cr, uid, ids, context=context):
+            if obj.zip:
+                res[obj.id] = obj.zip[0:2]
+            else:
+                res[obj.id] = ''
+        return res
+
+    _columns = {
+        'usual_contact': fields.boolean(
+            'Usual contact',
+            help="""This contact is a usual contact for L\'Heureux Cyclage
+            employees. This field can be used to discriminated contacts for
+            differents usages."""
+        ),
+        'kit_sent': fields.boolean('Welcome kit sent'),
+        'county_code': fields.function(
+            _get_county,
+            method=True,
+            string='County code',
+            type='char',
+            size=2,
+            store={
+                'res.partner': (
+                    lambda self, cr, uid, ids, c={}: ids,
+                    ['zip'], 10)},
+        ),
+    }
+
+    _defaults = {
+        'kit_sent': lambda *a: False,
+    }
+
+
+class product_template(orm.Model):
+    _inherit = 'product.template'
+
     _columns = {
-        'usual_contact': fields.boolean('Usual contact', help='This contact is a usual contact for L\'Heureux Cyclage employees. This field can be used to discriminated contacts for differents usages.'),
+        'standard_price': fields.float(
+            'Cost',
+            digits_compute=dp.get_precision('Product Price'),
+            help="""Cost price of the product used for standard stock valuation
+            in accounting and used as a base price on purchase orders.",
+            groups="base.group_user,lhc.group_volunteer"""
+        ),
     }
 
+
+class res_users(orm.Model):
+    _inherit = 'res.users'
+
+    def onchange_partner_id(self, cr, uid, ids, partner_id, login):
+        """Define user email address from partner email address"""
+        v = {}
+        partners = self.pool.get('res.partner')
+        partner = partners.browse(cr, uid, partner_id)
+        if partner.email:
+            v['email'] = partner.email
+        else:
+            v = {}
+        return {'value': v}
+
+
+class event_event(orm.Model):
+    _inherit = 'event.event'
+
+    _columns = {
+        'duration': fields.float(
+            'Duration',
+            digits_compute=dp.get_precision('Product Unit of Measure'),
+            help='Duration in hours'
+        ),
+    }
+
+
+class event_registration(orm.Model):
+    _inherit = 'event.registration'
+
+    _columns = {
+        'gender': fields.selection([
+            ('female', 'Female'),
+            ('male', 'Male'),
+            ('other', 'Other')],
+            'Gender'),
+        'position': fields.selection([
+            ('employee', 'Employee'),
+            ('individual', 'Invividual'),
+            ('volunteer', 'Volunteer')],
+            'Position'),
+        'funding_main': fields.selection([
+            ('individual', 'Individual'),
+            ('opco', 'OPCO'),
+            ('company', 'Company'),
+            ('pole_emploi', 'Pole Emploi')],
+            'Main funding', help='Main funding origin'),
+        'fundings_others': fields.char('Others fundings origins', size=128),
+        'sale_order_ids': fields.many2many(
+            'sale.order',
+            'event_registration_sale_order_rel',
+            'event_registration_id',
+            'sale_order_id',
+            'Related sale order(s)'
+        ),
+        'invoice_ids': fields.many2many(
+            'account.invoice',
+            'event_registration_invoice_id_rel',
+            'event_registration_id',
+            'invoice_id',
+            'Related invoice(s)'
+        ),
+    }
+
+    def onchange_contact_id(self, cr, uid, ids, contact, partner, context=None):
+        """Contcat phone with mobile phone if exist. If mobile exist and not
+        phone, add mobile number"""
+        vals = super(event_registration, self).onchange_contact_id(cr, uid, ids, contact, partner, context)
+        addr_obj = self.pool.get('res.partner')
+        contact_id = addr_obj.browse(cr, uid, contact, context=context)
+        phone = vals['value']['phone']
+        mobile = contact_id.mobile
+        if mobile:
+            if phone:
+                vals['value']['phone'] = '%s - %s' % (phone, mobile)
+            else:
+                vals['value']['phone'] = mobile
+        return vals
+
+
+class crossovered_budget_lines(orm.Model):
+    _inherit = 'crossovered.budget.lines'
+
+    def _prac_amt(self, cr, uid, ids, context=None):
+        """Calculate pratical amount even if there is no analytic account"""
+        res = {}
+        result = 0.0
+        if context is None:
+            context = {}
+        account_obj = self.pool.get('account.account')
+
+        for line in self.browse(cr, uid, ids, context=context):
+            acc_ids = [x.id for x in line.general_budget_id.account_ids]
+            if not acc_ids:
+                raise osv.except_osv(_('Error!'),_("The Budget '%s' has no accounts!") % ustr(line.general_budget_id.name))
+            acc_ids = account_obj._get_children_and_consol(cr, uid, acc_ids, context=context)
+            date_to = line.date_to
+            date_from = line.date_from
+
+            if line.analytic_account_id.id:
+                res = super(crossovered_budget_lines, self)._prac_amt(cr, uid, ids, context)
+            else:
+                cr.execute("SELECT SUM(credit) - SUM(debit) FROM account_move_line WHERE (date "
+                   "between to_date(%s,'yyyy-mm-dd') AND to_date(%s,'yyyy-mm-dd')) AND "
+                   "account_id=ANY(%s)", (date_from, date_to,acc_ids,))
+                result = cr.fetchone()[0]
+                if result is None:
+                    result = 0.00
+                res[line.id] = result
+
+        return res
+
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: