Other solution is to use a functional field to compute the age at this moment. 
Following is this approach, with an additional method to search people from his 
age:


    def _years_old_get(self, cr, uid, ids, field_name, arg, 
context={}):
        result = {}
        for rec in self.browse(cr, uid, ids, 
context):
            result[rec.id] = False
            if rec.birth_date:
                birth = 
time.strptime(rec.birth_date, '%Y-%m-%d')
                #print rec.birth_date, 
birth
                try:
                    
result[rec.id] = (time.time() - 
time.mktime(birth)) / (365.25 * 86400) # 365.25 days of 
86400 seconds
                except 
OverflowError:
                    
result[rec.id] = 100 # If it is more than 100 years old
        return result

    def _years_old_search(self, cr, uid, obj, name, args):
        def year_date(param):
            oper = param[1]
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if oper&#91;&#58;1&#93; == '<'&#58;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oper = 
'>'+oper&#91;1&#58;&#93;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif oper&#91;&#58;1&#93; == '>'&#58;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oper = 
'<'+oper&#91;1&#58;&#93;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; year = param&#91;2&#93;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbirth = time.time&#40;&#41; - year * 
365.25 * 86400
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Don't accept dates older than 
1901-12-14 &#40;aprox.&#41;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbirth = dbirth>-2147400000 and 
dbirth or -2147400000
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbirth = time.gmtime&#40;dbirth&#41;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; date_birth = "%04i-%02i-%02i" % 
&#40;dbirth.tm_year, dbirth.tm_mon, dbirth.tm_mday&#41;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print dbirth, date_birth
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "&#40;birth_date "+oper+" 
'"+date_birth+"'&#41;"

&nbsp; &nbsp; &nbsp; &nbsp; if not len&#40;args&#41;&#58;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#91;&#93;
&nbsp; &nbsp; &nbsp; &nbsp; where = ' and '.join&#40;map&#40;year_date, 
args&#41;&#41;
&nbsp; &nbsp; &nbsp; &nbsp; #print args, where
&nbsp; &nbsp; &nbsp; &nbsp; cr.execute&#40;'select id from res_partner_address 
l where ' + where&#41;
&nbsp; &nbsp; &nbsp; &nbsp; res = cr.fetchall&#40;&#41;
&nbsp; &nbsp; &nbsp; &nbsp; if not len&#40;res&#41;&#58;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 
&#91;&#40;'id','=','0'&#41;&#93;
&nbsp; &nbsp; &nbsp; &nbsp; return &#91;&#40;'id','in',map&#40;lambda 
x&#58;x&#91;0&#93;, res&#41;&#41;&#93;

&nbsp; &nbsp; _columns = &#123;
&nbsp; &nbsp; &nbsp; &nbsp; 'birth_date'&#58; fields.date&#40;'Birth date&#41;,
&nbsp; &nbsp; &nbsp; &nbsp; 'years_old'&#58; 
fields.function&#40;_years_old_get, method=True, type="float", string="Age", 
fnct_search=_years_old_search&#41;,
&nbsp; &nbsp; &#125;


------------------------
Jordi Esteve
http://www.zikzakmedia.com/es/openerp.html
Zikzakmedia SL




-------------------- m2f --------------------

--
http://www.openobject.com/forum/viewtopic.php?p=51161#51161

-------------------- m2f --------------------


_______________________________________________
Tinyerp-users mailing list
http://tiny.be/mailman2/listinfo/tinyerp-users

Reply via email to