add datetime support, normalize query name and balance account name
parent
c9bb2c64c3
commit
f1badbc153
|
@ -25,8 +25,8 @@
|
|||
from datetime import datetime, timedelta
|
||||
from dateutil import parser
|
||||
import traceback
|
||||
from lxml import etree
|
||||
import re
|
||||
import calendar
|
||||
|
||||
from openerp.osv import orm, fields
|
||||
from openerp.tools.safe_eval import safe_eval
|
||||
|
@ -48,6 +48,15 @@ def _get_selection_label(selection, value):
|
|||
return ''
|
||||
|
||||
|
||||
def utc_midnight(d, add_day=0):
|
||||
d = datetime.strptime(d, tools.DEFAULT_SERVER_DATE_FORMAT)
|
||||
if add_day:
|
||||
d = d + timedelta(days=add_day)
|
||||
timestamp = calendar.timegm(d.timetuple())
|
||||
d_utc_midnight = datetime.utcfromtimestamp(timestamp)
|
||||
return datetime.strftime(d_utc_midnight, tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
|
||||
|
||||
class mis_report_kpi(orm.Model):
|
||||
""" A KPI is an element of a MIS report.
|
||||
|
||||
|
@ -199,6 +208,16 @@ class mis_report_query(orm.Model):
|
|||
|
||||
_order = 'name'
|
||||
|
||||
def _check_name(self, cr, uid, ids, context=None):
|
||||
for record_name in self.read(cr, uid, ids, ['name']):
|
||||
if not re.match("[_A-Za-z][_a-zA-Z0-9]*$", record_name['name']):
|
||||
return False
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_name, 'The name must be a valid python identifier', ['name']),
|
||||
]
|
||||
|
||||
|
||||
class mis_report(orm.Model):
|
||||
""" A MIS report template (without period information)
|
||||
|
@ -368,15 +387,12 @@ class mis_report_instance_period(orm.Model):
|
|||
if user['company_id']:
|
||||
company_id = user['company_id'][0]
|
||||
account_ids = account_obj.search(cr, uid, [('company_id', '=', company_id)], context=context)
|
||||
account_datas = account_obj.read(cr, uid, account_ids,
|
||||
['code', 'balance'],
|
||||
context=search_ctx)
|
||||
account_datas = account_obj.read(cr, uid, account_ids, ['code', 'balance'], context=search_ctx)
|
||||
balances = {}
|
||||
|
||||
clean = lambda varStr: re.sub('\W|^(?=\d)', '_', varStr)
|
||||
for account_data in account_datas:
|
||||
# TODO: normalize code (strip special chars)
|
||||
# TODO: company_id in key
|
||||
key = 'bal_' + account_data['code']
|
||||
key = 'bal' + clean(account_data['code'])
|
||||
assert key not in balances
|
||||
balances[key] = account_data['balance']
|
||||
|
||||
|
@ -398,12 +414,10 @@ class mis_report_instance_period(orm.Model):
|
|||
domain.extend([(query.date_field.name, '>=', c.date_from),
|
||||
(query.date_field.name, '<=', c.date_to)])
|
||||
else:
|
||||
# TODO: datetime support (convert date to utc midnight)
|
||||
# datetime_from = utc_midnight(date_from)
|
||||
# datetime_to = utc_midnight(date_to + 1)
|
||||
# domain.extend([(query.date_field.name, '>=', datetime_from),
|
||||
# (query.date_field.name, '<', datetime_to)])
|
||||
raise orm.except_orm(_('Error!'), _('Not implemented'))
|
||||
datetime_from = utc_midnight(c.date_from)
|
||||
datetime_to = utc_midnight(c.date_to, add_day=1)
|
||||
domain.extend([(query.date_field.name, '>=', datetime_from),
|
||||
(query.date_field.name, '<', datetime_to)])
|
||||
domain.extend([('company_id', '=', company_id)])
|
||||
field_names = [field.name for field in query.field_ids]
|
||||
obj_ids = obj.search(cr, uid, domain, context=context)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"id","compare_method","description","expression","divider","name","dp","sequence","type","suffix"
|
||||
"mis_report_kpi_1","Percentage","chiffre d'affaire","-bal_70","","ca","","","Numeric","€"
|
||||
"mis_report_kpi_2","Percentage","cost","-bal_60 - bal_61","","cost","","","Numeric","€"
|
||||
"mis_report_kpi_3","Percentage","profit","ca - cost","","profit","","","Numeric","€"
|
||||
"mis_report_kpi_4","Difference","margin","profit/ca","","margin","","","Percentage","%"
|
||||
"mis_report_kpi_5","None","couleur","'vert' if profit > 0 else 'rouge'","","couleur","","","String"
|
||||
"mis_report_kpi_6","Percentage","total invoice","len(inv)","","total_invoice","","","Numeric","€"
|
||||
"mis_report_kpi_1","Percentage","chiffre d'affaire","-bal_70","","ca","","1","Numeric","€"
|
||||
"mis_report_kpi_2","Percentage","cost","-bal_60 - bal_61","","cost","","2","Numeric","€"
|
||||
"mis_report_kpi_3","Percentage","profit","ca - cost","","profit","","3","Numeric","€"
|
||||
"mis_report_kpi_4","Difference","margin","profit/ca","","margin","","4","Percentage","%"
|
||||
"mis_report_kpi_5","None","couleur","'vert' if profit > 0 else 'rouge'","","couleur","","5","String",""
|
||||
"mis_report_kpi_6","Percentage","total invoice","len(inv)","","total_invoice","","6","Numeric","€"
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 6.
|
Loading…
Reference in New Issue