diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index cdc0786c6eb..1d0ab433abe 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -324,7 +324,7 @@
+ string="Import Invoice" type="action" attrs="{'invisible':[('state','=','confirm')]}"/>
diff --git a/addons/account/wizard/wizard_fiscalyear_close.py b/addons/account/wizard/wizard_fiscalyear_close.py
index 7cd560e7b44..68e69941b5c 100644
--- a/addons/account/wizard/wizard_fiscalyear_close.py
+++ b/addons/account/wizard/wizard_fiscalyear_close.py
@@ -178,7 +178,8 @@ def _data_save(self, cr, uid, data, context):
'WHERE account_id = %s ' \
'AND ' + query_line + ' ' \
'ORDER BY id ' \
- 'LIMIT %s OFFSET %s', (account.id,fy_id, limit, offset))
+ 'LIMIT %s OFFSET %s', (account.id, limit, offset))
+
result = cr.dictfetchall()
if not result:
break
diff --git a/addons/account/wizard/wizard_refund.py b/addons/account/wizard/wizard_refund.py
index 90a9ce76c11..c4f340d595e 100644
--- a/addons/account/wizard/wizard_refund.py
+++ b/addons/account/wizard/wizard_refund.py
@@ -68,35 +68,31 @@ class wiz_refund(wizard.interface):
if form['period'] :
period = form['period']
else:
- period = inv.period_id.id
+ period = inv.period_id and inv.period_id.id or False
if form['date'] :
date = form['date']
if not form['period'] :
- try :
- #we try in multy company mode
+ cr.execute("select name from ir_model_fields where model='account.period' and name='company_id'")
+ result_query = cr.fetchone()
+ if result_query:
+ #in multi company mode
cr.execute("""SELECT id
from account_period where date('%s')
between date_start AND date_stop and company_id = %s limit 1 """%(
form['date'],
pool.get('res.users').browse(cr,uid,uid).company_id.id
- )
-
- )
- except :
- #we try in mono company mode
+ ))
+ else:
+ #in mono company mode
cr.execute("""SELECT id
from account_period where date('%s')
between date_start AND date_stop limit 1 """%(
form['date'],
- )
-
- )
+ ))
res = cr.fetchone()
if res:
period = res[0]
-
-
else:
date = inv.date_invoice
@@ -104,6 +100,10 @@ class wiz_refund(wizard.interface):
description = form['description']
else:
description = inv.name
+
+ if not period:
+ raise wizard.except_wizard(_('Data Insufficient !'), _('No Period found on Invoice!'))
+
refund_id = pool.get('account.invoice').refund(cr, uid, [inv.id],date, period, description)
refund = pool.get('account.invoice').browse(cr, uid, refund_id[0])
# we compute due date
diff --git a/addons/crm_configuration/crm_opportunity_menu.xml b/addons/crm_configuration/crm_opportunity_menu.xml
index 8b3b6557a15..16f1dbceee1 100644
--- a/addons/crm_configuration/crm_opportunity_menu.xml
+++ b/addons/crm_configuration/crm_opportunity_menu.xml
@@ -255,7 +255,7 @@
graph,tree
-
+
report.crm.case.section.stage
@@ -271,7 +271,7 @@
tree
-
+
report.crm.case.section.categ.categ2
@@ -279,7 +279,7 @@
tree
-
+
diff --git a/addons/hr_holidays/hr.py b/addons/hr_holidays/hr.py
index 7e2b7592d18..2d95c245101 100644
--- a/addons/hr_holidays/hr.py
+++ b/addons/hr_holidays/hr.py
@@ -62,13 +62,55 @@ class hr_holidays_status(osv.osv):
}
hr_holidays_status()
+class hr_holidays_per_user(osv.osv):
+ _name = "hr.holidays.per.user"
+ _description = "Holidays Per User"
+
+ def _get_remaining_leaves(self, cr, uid, ids, field_name, arg=None, context={}):
+ obj_holiday = self.pool.get('hr.holidays')
+ days = 0.0
+ result = {}
+ for holiday_user in self.browse(cr, uid, ids):
+ ids_request = obj_holiday.search(cr, uid, [('employee_id', '=', holiday_user.employee_id.id),('state', '=', 'validate'),('holiday_status', '=', holiday_user.holiday_status.id)])
+ if ids_request:
+ holidays = obj_holiday.browse(cr, uid, ids_request)
+ for holiday in holidays:
+ days += holiday.number_of_days
+ days = holiday_user.max_leaves - days
+ result[holiday_user.id] = days
+ return result
+
+ _columns = {
+ 'employee_id': fields.many2one('hr.employee', 'Employee',required=True),
+ 'name': fields.char('Name', size=32),
+ 'user_id' : fields.many2one('res.users','User'),
+ 'holiday_status' : fields.many2one("hr.holidays.status", "Holiday's Status", required=True),
+ 'max_leaves' : fields.float('Maximum Leaves Allowed',required=True),
+ 'leaves_taken' : fields.float('Leaves Already Taken',readonly=True),
+ 'active' : fields.boolean('Active'),
+ 'notes' : fields.text('Notes'),
+ 'remaining_leaves': fields.function(_get_remaining_leaves, method=True, string='Remaining Leaves', type='float'),
+ 'holiday_ids': fields.one2many('hr.holidays', 'holiday_user_id', 'Holidays')
+ }
+ _defaults = {
+ 'active' : lambda *a: True,
+ }
+
+ def create(self, cr, uid, vals, *args, **kwargs):
+ if vals['employee_id']:
+ obj_emp=self.pool.get('hr.employee').browse(cr,uid,vals['employee_id'])
+ vals.update({'user_id': obj_emp.user_id.id})
+ return super(osv.osv,self).create(cr, uid, vals, *args, **kwargs)
+
+hr_holidays_per_user()
+
class hr_holidays(osv.osv):
_name = "hr.holidays"
_description = "Holidays"
_columns = {
'name' : fields.char('Description', required=True, readonly=True, size=64, states={'draft':[('readonly',False)]}),
- 'state': fields.selection([('draft', 'draft'), ('confirm', 'Waiting Validation'), ('refuse', 'Refused'), ('validated', 'Validate'), ('cancel', 'Cancel')], 'Status', readonly=True),
+ 'state': fields.selection([('draft', 'draft'), ('confirm', 'Waiting Validation'), ('refuse', 'Refused'), ('validate', 'Validate'), ('cancel', 'Cancel')], 'Status', readonly=True),
'date_from' : fields.datetime('Vacation start day', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'date_to' : fields.datetime('Vacation end day',required=True,readonly=True, states={'draft':[('readonly',False)]}),
'holiday_status' : fields.many2one("hr.holidays.status", "Holiday's Status", required=True,readonly=True, states={'draft':[('readonly',False)]}),
@@ -76,8 +118,9 @@ class hr_holidays(osv.osv):
'user_id':fields.many2one('res.users', 'Employee_id', states={'draft':[('readonly',False)]}, select=True, readonly=True),
'manager_id' : fields.many2one('hr.employee', 'Holiday manager', invisible=False, readonly=True),
'notes' : fields.text('Notes',readonly=True, states={'draft':[('readonly',False)]}),
- 'number_of_days': fields.float('Number of Days in this Holiday Request',required=True),
- 'case_id':fields.many2one('crm.case', 'Case'),
+ 'number_of_days': fields.float('Number of Days in this Holiday Request', required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'case_id': fields.many2one('crm.case', 'Case'),
+ 'holiday_user_id': fields.many2one('hr.holidays.per.user', 'Holiday per user')
}
_defaults = {
@@ -89,27 +132,19 @@ class hr_holidays(osv.osv):
def create(self, cr, uid, vals, *args, **kwargs):
id_holiday = super(hr_holidays, self).create(cr, uid, vals, *args, **kwargs)
- self._create_log(cr, uid, [id_holiday])
+ self._create_holiday(cr, uid, [id_holiday])
return id_holiday
- def _create_log(self, cr, uid, ids):
+ def _create_holiday(self, cr, uid, ids):
holidays_user_obj = self.pool.get('hr.holidays.per.user')
- list_request = []
holidays_data = self.browse(cr, uid, ids[0])
- datas = {
- 'employee_id' : holidays_data.employee_id.id,
- 'name' : holidays_data.state,
- 'holiday_status' : holidays_data.holiday_status.id,
- 'holiday_req_id' : holidays_data.id,
- 'nb_holidays' : holidays_data.number_of_days
- }
- ids_log = self.pool.get('hr.holidays.log').create(cr, uid, datas)
+ list_holiday = []
ids_user_hdays = holidays_user_obj.search(cr, uid, [('employee_id', '=', holidays_data.employee_id.id),('holiday_status', '=', holidays_data.holiday_status.id)])
for hdays in holidays_user_obj.browse(cr, uid, ids_user_hdays):
- for req in hdays.history:
- list_request.append(req.id)
- list_request.append(ids_log)
- holidays_user_obj.write(cr, uid, ids_user_hdays, {'history' : [(6,0,list_request)]})
+ for req in hdays.holiday_ids:
+ list_holiday.append(req.id)
+ list_holiday.append(ids[0])
+ holidays_user_obj.write(cr, uid, ids_user_hdays, {'holiday_ids': [(6, 0, list_holiday)]})
return True
def onchange_date_to(self, cr, uid, ids, date_from, date_to):
@@ -133,7 +168,7 @@ class hr_holidays(osv.osv):
'state':'draft',
'manager_id': False
})
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def holidays_validate(self, cr, uid, ids, *args):
@@ -145,7 +180,7 @@ class hr_holidays(osv.osv):
if ids2:
vals['manager_id'] = ids2[0]
self.write(cr, uid, ids, vals)
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def holidays_confirm(self, cr, uid, ids, *args):
@@ -157,7 +192,7 @@ class hr_holidays(osv.osv):
'state':'confirm',
'user_id': user,
})
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def holidays_refuse(self, cr, uid, ids, *args):
@@ -166,7 +201,7 @@ class hr_holidays(osv.osv):
'state':'refuse',
'manager_id':ids2[0]
})
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def holidays_cancel(self, cr, uid, ids, *args):
@@ -185,14 +220,14 @@ class hr_holidays(osv.osv):
self.write(cr, uid, ids, {
'state':'cancel'
})
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def holidays_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {
'state':'draft'
})
- self._create_log(cr, uid, ids)
+ self._create_holiday(cr, uid, ids)
return True
def check_holidays(self,cr,uid,ids):
@@ -238,65 +273,4 @@ class hr_holidays(osv.osv):
return True
hr_holidays()
-
-class hr_holidays_per_user(osv.osv):
- _name = "hr.holidays.per.user"
- _description = "Holidays Per User"
-
- def _get_remaining_leaves(self, cr, uid, ids, field_name, arg=None, context={}):
- obj_holiday = self.pool.get('hr.holidays')
- days = 0.0
- result = {}
- for holiday_user in self.browse(cr, uid, ids):
- ids_request = obj_holiday.search(cr, uid, [('employee_id', '=', holiday_user.employee_id.id),('state', '=', 'validate'),('holiday_status', '=', holiday_user.holiday_status.id)])
- if ids_request:
- holidays = obj_holiday.browse(cr, uid, ids_request)
- for holiday in holidays:
- days += holiday.number_of_days
- days = holiday_user.max_leaves - days
- result[holiday_user.id] = days
- return result
-
- _columns = {
- 'employee_id' : fields.many2one('hr.employee', 'Employee',required=True),
- 'user_id' : fields.many2one('res.users','User'),
- 'holiday_status' : fields.many2one("hr.holidays.status", "Holiday's Status", required=True),
- 'max_leaves' : fields.float('Maximum Leaves Allowed',required=True),
- 'leaves_taken' : fields.float('Leaves Already Taken',readonly=True),
- 'active' : fields.boolean('Active'),
- 'notes' : fields.text('Notes'),
- 'remaining_leaves': fields.function(_get_remaining_leaves, method=True, string='Remaining Leaves', type='float'),
- 'history' : fields.one2many('hr.holidays.log', 'holiday_user_id', 'History')
- }
- _defaults = {
- 'active' : lambda *a: True,
- }
-
- def create(self, cr, uid, vals, *args, **kwargs):
- if vals['employee_id']:
- obj_emp=self.pool.get('hr.employee').browse(cr,uid,vals['employee_id'])
- vals.update({'user_id': obj_emp.user_id.id})
- return super(osv.osv,self).create(cr, uid, vals, *args, **kwargs)
-
-hr_holidays_per_user()
-
-class holiday_user_log(osv.osv):
- _name = 'hr.holidays.log'
- _description = 'hr.holidays.log'
- _order = "holiday_req_id desc"
- _columns = {
- 'name' : fields.char('Action', size=64, readonly=True),
- 'holiday_req_id' : fields.char('Holiday Request ID', size=64),
- 'nb_holidays' : fields.float('Number of Holidays Requested'),
- 'employee_id' : fields.many2one('hr.employee', 'Employee', readonly=True),
- 'holiday_status' : fields.many2one("hr.holidays.status", "Holiday's Status", readonly=True),
- 'holiday_user_id' : fields.many2one('hr.holidays.per.user', 'Holidays user'),
- 'date': fields.datetime('Date'),
- }
- _defaults = {
- 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
- }
-holiday_user_log()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/hr_holidays/hr_view.xml b/addons/hr_holidays/hr_view.xml
index 7bb00565d26..acbdc5aad2e 100644
--- a/addons/hr_holidays/hr_view.xml
+++ b/addons/hr_holidays/hr_view.xml
@@ -51,36 +51,6 @@
-
-
- hr.holidays.log.form
- hr.holidays.log
- form
-
-
-
-
-
- >hr.holidays.log.tree
- hr.holidays.log
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
hr.holidays.status.form
@@ -129,21 +99,21 @@
form
diff --git a/addons/hr_holidays/report/holidays_summary_report.py b/addons/hr_holidays/report/holidays_summary_report.py
index 3cedf2b4faf..589f97f2631 100644
--- a/addons/hr_holidays/report/holidays_summary_report.py
+++ b/addons/hr_holidays/report/holidays_summary_report.py
@@ -32,7 +32,6 @@ def emp_create_xml(self,cr,uid,dept,holiday_type,row_id,empid,name,som,eom):
current=som+datetime.timedelta(diff)
for item in ids_date:
- # print current,"from",item['date_from'],"to",item['date_to']
if current >= strToDate(item['date_from']) and current <= strToDate(item['date_to']):
if item['state'] in holiday_type:
display[index]=item['holiday_status'][0]
@@ -150,7 +149,6 @@ class report_custom(report_rml):
width_dict[j]=x
day_diff1=day_diff1-x
-# print "now day_diff1 is..frst.",day_diff1
else:
years=year+1
year=years
@@ -175,7 +173,6 @@ class report_custom(report_rml):
width_dict[j]=x
day_diff1=day_diff1-x
-# print "now day_diff1 is..scnd.",day_diff1
date_xml.append('')
date_xml.append('3.5cm%s,0.4cm\n' % (',0.4cm' * (60)))
diff --git a/addons/hr_holidays/security/ir.model.access.csv b/addons/hr_holidays/security/ir.model.access.csv
index 5af36ab580e..b095b8bf50d 100644
--- a/addons/hr_holidays/security/ir.model.access.csv
+++ b/addons/hr_holidays/security/ir.model.access.csv
@@ -1,5 +1,4 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_holidays_log","hr.holidays.log","model_hr_holidays_log","hr.group_hr_user",1,1,1,1
"access_hr_holidays_per_user","hr.holidays.per.user","model_hr_holidays_per_user","hr.group_hr_user",1,1,1,1
"access_hr_holydays_status_user","hr.holidays.status user","model_hr_holidays_status","hr.group_hr_user",1,1,1,1
"access_hr_holidays_user","hr holidays user","model_hr_holidays","hr.group_hr_user",1,1,1,1
diff --git a/addons/report_account/report_receivable.py b/addons/report_account/report_receivable.py
index ce17b84f2e4..9ad1d7a2aef 100644
--- a/addons/report_account/report_receivable.py
+++ b/addons/report_account/report_receivable.py
@@ -151,5 +151,57 @@ class report_aged_receivable(osv.osv):
report_aged_receivable()
+class report_invoice_created(osv.osv):
+ _name = "report.invoice.created"
+ _description = "Report of Invoices Created within Last 15 days"
+ _auto = False
+ _columns = {
+ 'name': fields.char('Description', size=64, readonly=True),
+ 'type': fields.selection([
+ ('out_invoice','Customer Invoice'),
+ ('in_invoice','Supplier Invoice'),
+ ('out_refund','Customer Refund'),
+ ('in_refund','Supplier Refund'),
+ ],'Type', readonly=True),
+ 'number': fields.char('Invoice Number', size=32, readonly=True),
+ 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
+ 'amount_untaxed': fields.float('Untaxed', readonly=True),
+ 'amount_total': fields.float('Total', readonly=True),
+ 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
+ 'date_invoice': fields.date('Date Invoiced', readonly=True),
+ 'date_due': fields.date('Due Date', readonly=True),
+ 'residual': fields.float('Residual', readonly=True),
+ 'state': fields.selection([
+ ('draft','Draft'),
+ ('proforma','Pro-forma'),
+ ('proforma2','Pro-forma'),
+ ('open','Open'),
+ ('paid','Done'),
+ ('cancel','Cancelled')
+ ],'State', readonly=True),
+ 'origin': fields.char('Origin', size=64, readonly=True),
+ 'create_date' : fields.datetime('Create Date', readonly=True)
+ }
+ _order = 'create_date'
+
+ def init(self, cr):
+ cr.execute("""create or replace view report_invoice_created as (
+ select
+ inv.id as id, inv.name as name, inv.type as type,
+ inv.number as number, inv.partner_id as partner_id,
+ inv.amount_untaxed as amount_untaxed,
+ inv.amount_total as amount_total, inv.currency_id as currency_id,
+ inv.date_invoice as date_invoice, inv.date_due as date_due,
+ inv.residual as residual, inv.state as state,
+ inv.origin as origin, inv.create_date as create_date
+ from
+ account_invoice inv
+ where
+ (to_date(to_char(inv.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') < CURRENT_DATE)
+ AND
+ (to_date(to_char(inv.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') >= (CURRENT_DATE-15))
+ )""")
+report_invoice_created()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/report_account/report_receivable_view.xml b/addons/report_account/report_receivable_view.xml
index 74e1155fb1d..3700b71a021 100644
--- a/addons/report_account/report_receivable_view.xml
+++ b/addons/report_account/report_receivable_view.xml
@@ -81,5 +81,38 @@
form
graph,tree
+
+
+
+
+ report.invoice.created.tree
+ report.invoice.created
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoices Created Within Past 15 Days
+ report.invoice.created
+ form
+ tree,form
+
+
diff --git a/addons/report_crm/report_crm.py b/addons/report_crm/report_crm.py
index 467b888bec2..cc5cf55a4de 100644
--- a/addons/report_crm/report_crm.py
+++ b/addons/report_crm/report_crm.py
@@ -106,5 +106,109 @@ class report_crm_case_categ(osv.osv):
)""")
report_crm_case_categ()
+
+class report_crm_case_section(osv.osv):
+ _name = "report.crm.case.section"
+ _description = "Cases by Section"
+ _auto = False
+
+ def _get_data(self, cr, uid, ids, field_name, arg, context={}):
+ res = {}
+ state_perc = 0.0
+ avg_ans = 0.0
+
+ for case in self.browse(cr, uid, ids, context):
+ if field_name != 'avg_answers':
+ state = field_name[5:]
+ cr.execute("select count(*) from crm_case where section_id =%s and state='%s'"%(case.section_id.id,state))
+ state_cases = cr.fetchone()[0]
+ perc_state = (state_cases / float(case.nbr_cases) ) * 100
+
+ res[case.id] = perc_state
+ else:
+ cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id))
+ logs = cr.fetchone()[0]
+
+ avg_ans = logs / case.nbr_cases
+ res[case.id] = avg_ans
+
+ return res
+
+ _columns = {
+ 'name': fields.date('Month', readonly=True),
+# 'user_id':fields.many2one('res.users', 'User', readonly=True),
+ 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
+ 'nbr_cases': fields.integer('# of Cases', readonly=True),
+ 'avg_answers': fields.function(_get_data,string='Avg. Answers', method=True,type="integer"),
+ 'perc_done': fields.function(_get_data,string='%Done', method=True,type="float"),
+ 'perc_cancel': fields.function(_get_data,string='%Cancel', method=True,type="float"),
+ 'delay_close': fields.char('Delay to close', size=20, readonly=True),
+ }
+ _order = 'name desc, section_id'
+ def init(self, cr):
+ cr.execute("""
+ create or replace view report_crm_case_section as (
+ select
+ min(c.id) as id,
+ to_char(c.create_date, 'YYYY-MM-01') as name,
+ c.section_id as section_id,
+ count(*) as nbr_cases,
+ 0 as avg_answers,
+ 0.0 as perc_done,
+ 0.0 as perc_cancel,
+ to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
+ from
+ crm_case c
+ group by to_char(c.create_date, 'YYYY-MM-01'),c.section_id
+ )""")
+report_crm_case_section()
+
+class report_crm_case_service_dashboard(osv.osv):
+ _name = "report.crm.case.service.dashboard"
+ _description = "Report of Closed and Open CRM Cases within past 15 days"
+ _auto = False
+ _columns = {
+ 'date': fields.datetime('Date', readonly=True),
+ 'date_deadline': fields.datetime('Deadline', readonly=True),
+ 'name': fields.char('Description', size=64, readonly=True),
+ 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
+ 'user_id': fields.many2one('res.users', 'Responsible', readonly=True),
+ 'priority': fields.char('Priority', size=64, readonly=True),
+ 'planned_revenue': fields.float('Planned Revenue', readonly=True),
+ 'planned_cost': fields.float('Planned Costs', readonly=True),
+ 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
+ 'date_closed' : fields.datetime('Date Closed', readonly=True),
+ 'create_date' : fields.datetime('Create Date', readonly=True)
+ }
+ _order = 'date_closed, create_date'
+
+ def init(self, cr):
+ cr.execute("""create or replace view report_crm_case_service_dashboard as (
+ select
+ cse.id as id, cse.date as date, cse.date_deadline as date_deadline,
+ cse.name as name, cse.partner_id as partner_id, cse.user_id as user_id,
+ cse.priority as priority, cse.planned_revenue as planned_revenue,
+ cse.planned_cost as planned_cost, cse.state as state,
+ cse.date_closed as date_closed, cse.create_date as create_date
+ from
+ crm_case cse
+ where
+ ((to_date(to_char(cse.date_closed, 'YYYY-MM-dd'),'YYYY-MM-dd') < CURRENT_DATE)
+ AND
+ (to_date(to_char(cse.date_closed, 'YYYY-MM-dd'),'YYYY-MM-dd') >= (CURRENT_DATE-15))
+ AND
+ cse.state='done')
+
+ OR
+
+ ((to_date(to_char(cse.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') < CURRENT_DATE)
+ AND
+ (to_date(to_char(cse.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') >= (CURRENT_DATE-15))
+ AND
+ cse.state='open')
+ )""")
+report_crm_case_service_dashboard()
+
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml
index 056f8eb2dcf..86ad6e80ea3 100644
--- a/addons/report_crm/report_crm_view.xml
+++ b/addons/report_crm/report_crm_view.xml
@@ -155,5 +155,104 @@
+
+
+
+
+ report.crm.case.section.tree
+ report.crm.case.section
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ report.crm.case.section.graph
+ report.crm.case.section
+ graph
+
+
+
+
+
+
+
+
+
+ Cases by Section
+ report.crm.case.section
+ form
+ tree,graph
+
+
+
+
+
+ report.crm.case.dashboard.tree
+ report.crm.case.dashboard
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ report.crm.case.dashboard.tree
+ report.crm.case.dashboard
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Closed CRM Cases Wtihin Past 15 Days
+ report.crm.case.service.dashboard
+ form
+ tree,form
+
+ [('state','=','done')]
+
+
+
+ Open CRM Cases Wtihin Past 15 Days
+ report.crm.case.service.dashboard
+ form
+ tree,form
+
+ [('state','=','open')]
+
+
diff --git a/addons/report_sale/report_sale.py b/addons/report_sale/report_sale.py
index 548c84860fb..5407d8df57c 100644
--- a/addons/report_sale/report_sale.py
+++ b/addons/report_sale/report_sale.py
@@ -131,5 +131,46 @@ class report_turnover_per_month(osv.osv):
""")
report_turnover_per_month()
+class report_sale_order_created(osv.osv):
+ _name = "report.sale.order.created"
+ _description = "Report of Creaed Sale Order"
+ _auto = False
+ _columns = {
+ 'date_order':fields.date('Date Ordered', readonly=True),
+ 'name': fields.char('Order Reference', size=64, readonly=True),
+ 'partner_id':fields.many2one('res.partner', 'Customer', readonly=True),
+ 'partner_shipping_id':fields.many2one('res.partner.address', 'Shipping Address', readonly=True),
+ 'amount_untaxed': fields.float('Untaxed Amount', readonly=True),
+ 'state': fields.selection([
+ ('draft','Quotation'),
+ ('waiting_date','Waiting Schedule'),
+ ('manual','Manual In Progress'),
+ ('progress','In Progress'),
+ ('shipping_except','Shipping Exception'),
+ ('invoice_except','Invoice Exception'),
+ ('done','Done'),
+ ('cancel','Cancel')
+ ], 'Order State', readonly=True),
+ 'create_date' : fields.datetime('Create Date', readolnly=True)
+ }
+ _order = 'create_date'
+
+ def init(self, cr):
+ cr.execute("""create or replace view report_sale_order_created as (
+ select
+ sale.id as id, sale.date_order as date_order, sale.name as name,
+ sale.partner_id as partner_id,
+ sale.partner_shipping_id as partner_shipping_id,
+ sale.amount_untaxed as amount_untaxed, sale.state as state,
+ sale.create_date as create_date
+ from
+ sale_order sale
+ where
+ (to_date(to_char(sale.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') < CURRENT_DATE)
+ AND
+ (to_date(to_char(sale.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') >= (CURRENT_DATE-15))
+ )""")
+report_sale_order_created()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/report_sale/report_sale_view.xml b/addons/report_sale/report_sale_view.xml
index 92ab470f700..84cb8e92c4c 100644
--- a/addons/report_sale/report_sale_view.xml
+++ b/addons/report_sale/report_sale_view.xml
@@ -203,6 +203,32 @@
tree,graph
-
+
+
+
+
+ report.sale.order.created.tree
+ report.sale.order.created
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Created Sale Orders
+ report.sale.order.created
+ form
+ tree,form
+
+
diff --git a/addons/report_task/report_task.py b/addons/report_task/report_task.py
index 758a654a7a4..0e68cd14866 100644
--- a/addons/report_task/report_task.py
+++ b/addons/report_task/report_task.py
@@ -58,6 +58,42 @@ class report_task_user_pipeline_open (osv.osv):
''')
report_task_user_pipeline_open()
+class report_closed_task(osv.osv):
+ _name = "report.closed.task"
+ _description = "Closed Task Report"
+ _auto = False
+ _columns = {
+ 'sequence': fields.integer('Sequence', readonly=True),
+ 'name': fields.char('Task summary', size=128, readonly=True),
+ 'project_id': fields.many2one('project.project', 'Project', readonly=True),
+ 'user_id': fields.many2one('res.users', 'Assigned to', readonly=True),
+ 'date_deadline': fields.datetime('Deadline', readonly=True),
+ 'planned_hours': fields.float('Planned Hours', readonly=True),
+ 'delay_hours': fields.float('Delay Hours', readonly=True),
+ 'progress': fields.float('Progress (%)', readonly=True),
+ 'priority' : fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Importance', readonly=True),
+ 'state': fields.selection([('draft', 'Draft'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'Status', readonly=True),
+ 'remaining_hours': fields.float('Remaining Hours', readonly=True),
+ 'date_close' : fields.datetime('Date Closed', readonly=True)
+ }
+
+ def init(self, cr):
+ cr.execute('''
+ create or replace view report_closed_task as (
+ select
+ tsk.id as id, tsk.sequence as sequence, tsk.name as name,
+ tsk.project_id as project_id, tsk.user_id as user_id,
+ tsk.date_deadline as date_deadline, tsk.planned_hours as planned_hours,
+ tsk.delay_hours as delay_hours, tsk.progress as progress,
+ tsk.priority as priority, tsk.state as state,
+ tsk.remaining_hours as remaining_hours, tsk.date_close as date_close
+ from
+ project_task tsk
+ where
+ (tsk.date_close < CURRENT_DATE AND tsk.date_close >= (CURRENT_DATE-15))
+ )
+ ''')
+report_closed_task()
#class report_timesheet_task(osv.osv):
# _name = "report.timesheet.task"
diff --git a/addons/report_task/report_task_view.xml b/addons/report_task/report_task_view.xml
index 60a2a0a7894..c45685a0d8d 100644
--- a/addons/report_task/report_task_view.xml
+++ b/addons/report_task/report_task_view.xml
@@ -58,5 +58,37 @@
+
+
+
+ report.closed.task.tree
+ report.closed.task
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Task Closed Within Past 15 Days
+ report.closed.task
+ form
+ tree,form
+
+
+
diff --git a/addons/report_timesheet/report_timesheet.py b/addons/report_timesheet/report_timesheet.py
index 1c526d3f8d9..70674b91640 100644
--- a/addons/report_timesheet/report_timesheet.py
+++ b/addons/report_timesheet/report_timesheet.py
@@ -113,7 +113,6 @@ class report_timesheet_account_date(osv.osv):
report_timesheet_account_date()
-
class report_timesheet_invoice(osv.osv):
_name = "report_timesheet.invoice"
_description = "Costs to invoice"
@@ -200,6 +199,42 @@ class report_random_timsheet(osv.osv):
report_random_timsheet()
+class random_timesheet_lines(osv.osv):
+ _name = "random.timesheet.lines"
+ _description = "Random Timesheet Lines"
+ _auto = False
+
+ _columns = {
+ 'date': fields.date('Date', readonly=True),
+ 'name': fields.char('Description', size=64, readonly=True),
+ 'user_id' : fields.many2one('res.users', 'User', readonly=True),
+ 'quantity' : fields.float('Quantity', readonly=True),
+ 'product_id' : fields.many2one('product.product', 'Product', readonly=True),
+ 'analytic_account_id' : fields.many2one('account.analytic.account','Analytic Account', readonly=True),
+ 'uom_id' : fields.many2one('product.uom', 'UoM', readonly=True),
+ 'amount' : fields.float('Amount', readonly=True),
+ 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Invoicing', readonly=True),
+ 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True)
+ }
+
+ _order = "date desc"
+
+ def init(self, cr):
+
+ cr.execute("""create or replace view random_timesheet_lines as (
+ select
+ line.id as id, line.date as date, line.name as name, line.unit_amount as quantity,
+ line.product_id as product_id, line.account_id as analytic_account_id,
+ line.product_uom_id as uom_id, line.amount as amount, line.to_invoice as to_invoice,
+ line.general_account_id as general_account_id, line.user_id as user_id
+ from
+ account_analytic_line line
+ where
+ (line.date < CURRENT_DATE AND line.date >= (CURRENT_DATE-15))
+ )
+ """ )
+
+random_timesheet_lines()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/report_timesheet/report_timesheet_view.xml b/addons/report_timesheet/report_timesheet_view.xml
index 5bfe1edbb6b..624b75945c8 100644
--- a/addons/report_timesheet/report_timesheet_view.xml
+++ b/addons/report_timesheet/report_timesheet_view.xml
@@ -303,5 +303,37 @@
tree,form
+
+
+
+
+ random.timesheet.lines.tree
+ random.timesheet.lines
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ir.actions.act_window
+ Random Timesheet Lines
+ random.timesheet.lines
+ form
+ tree,form
+
+
+