@@ -324,7 +324,7 @@
|
||||
<field name="period_id" select="2"/>
|
||||
<group colspan="2" col="3">
|
||||
<button name="%(wizard_populate_statement_from_inv)d"
|
||||
string="Import Invoice" type="action" />
|
||||
string="Import Invoice" type="action" attrs="{'invisible':[('state','=','confirm')]}"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="balance_start"/>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Opportunities and Category2" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ" id="menu_action_report_crm_case_oppor_categ"/>
|
||||
<menuitem name="Cases by Opportunities and Type" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ" id="menu_action_report_crm_case_oppor_categ"/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_report_crm_case_oppor_stage">
|
||||
<field name="res_model">report.crm.case.section.stage</field>
|
||||
@@ -271,7 +271,7 @@
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Section, Category and Stage" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ_stage" id="menu_action_report_crm_case_oppor_categ_stage"/>
|
||||
<menuitem name="Cases by Opprtunities, Category and Stage" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ_stage" id="menu_action_report_crm_case_oppor_categ_stage"/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_report_crm_case_oppor_categ_categ2">
|
||||
<field name="res_model">report.crm.case.section.categ.categ2</field>
|
||||
@@ -279,7 +279,7 @@
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Section, Category and Category2" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ_categ2" id="menu_action_report_crm_case_oppor_categ_categ2"/>
|
||||
<menuitem name="Cases by Opprtunities, Category and Type" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_categ_categ2" id="menu_action_report_crm_case_oppor_categ_categ2"/>
|
||||
|
||||
|
||||
</data>
|
||||
|
||||
+60
-86
@@ -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:
|
||||
@@ -51,36 +51,6 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- holidays log -->
|
||||
<record model="ir.ui.view" id="holiday_log_form">
|
||||
<field name="name">hr.holidays.log.form</field>
|
||||
<field name="model">hr.holidays.log</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Log Holidays">
|
||||
<field name="name" select="1"/>
|
||||
<field name="employee_id" select="2"/>
|
||||
<field name="holiday_status" select="1" />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="holiday_log_tree">
|
||||
<field name="name">>hr.holidays.log.tree</field>
|
||||
<field name="model">hr.holidays.log</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Log Holidays">
|
||||
<field name="holiday_req_id" />
|
||||
<field name="date" />
|
||||
<field name="employee_id" />
|
||||
<field name="name" />
|
||||
<field name="holiday_status" />
|
||||
<field name="nb_holidays" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- holidays status -->
|
||||
<record model="ir.ui.view" id="edit_holiday_status_form">
|
||||
<field name="name">hr.holidays.status.form</field>
|
||||
@@ -129,21 +99,21 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Holidays Per Employee">
|
||||
<notebook>
|
||||
<group>
|
||||
<field name="employee_id" select="1" />
|
||||
<field name="holiday_status" select="1" />
|
||||
<field name="max_leaves" select="2" />
|
||||
<field name="active" select="2"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field name="employee_id" select="1" />
|
||||
<field name="holiday_status" select="1" />
|
||||
<newline/>
|
||||
<field name="max_leaves" select="2" />
|
||||
<field name="leaves_taken" select="2" />
|
||||
<newline/>
|
||||
<field name="remaining_leaves" select="2" colspan="2" />
|
||||
<field name="active" select="2"/>
|
||||
<newline/>
|
||||
<field name="notes" colspan="4" select="2"/>
|
||||
</page>
|
||||
<page string="History" >
|
||||
<field name="history" nolabel="1"/>
|
||||
<page string="Holidays" >
|
||||
<field name="holiday_ids" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
|
||||
@@ -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('</days>')
|
||||
date_xml.append('<cols>3.5cm%s,0.4cm</cols>\n' % (',0.4cm' * (60)))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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:
|
||||
|
||||
|
||||
@@ -81,5 +81,38 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
</record>
|
||||
|
||||
<!-- Created Invoice for random activities of service dashboard -->
|
||||
|
||||
<record id="board_view_created_invoice" model="ir.ui.view">
|
||||
<field name="name">report.invoice.created.tree</field>
|
||||
<field name="model">report.invoice.created</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="blue:state=='draft'" string="Invoices">
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="number"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="amount_untaxed" sum="Untaxed Amount"/>
|
||||
<field name="amount_total" sum="Total Amount"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="date_invoice"/>
|
||||
<field name="date_due" select="1"/>
|
||||
<field name="residual"/>
|
||||
<field name="state"/>
|
||||
<field name="origin"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_view_created_invoice_dashboard" model="ir.actions.act_window">
|
||||
<field name="name">Invoices Created Within Past 15 Days</field>
|
||||
<field name="res_model">report.invoice.created</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="board_view_created_invoice"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -155,5 +155,104 @@
|
||||
|
||||
<act_window domain="[('section_id', '=', active_id)]" id="act_crm_case_section_2_report_crm_case_categ" name="Monthly cases by section" res_model="report.crm.case.categ" src_model="crm.case.section"/>
|
||||
|
||||
|
||||
<!-- Cases by Section -->
|
||||
|
||||
<record id="view_report_crm_case_section_tree" model="ir.ui.view">
|
||||
<field name="name">report.crm.case.section.tree</field>
|
||||
<field name="model">report.crm.case.section</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Cases by Section">
|
||||
<field name="name"/>
|
||||
<field name="section_id"/>
|
||||
<field name="nbr_cases"/>
|
||||
<field name="avg_answers"/>
|
||||
<field name="perc_done"/>
|
||||
<field name="perc_cancel"/>
|
||||
<field name="delay_close"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_report_crm_case_section_graph" model="ir.ui.view">
|
||||
<field name="name">report.crm.case.section.graph</field>
|
||||
<field name="model">report.crm.case.section</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph orientation="horizontal" string="Cases by Section" type="bar">
|
||||
<field name="name"/>
|
||||
<field name="nbr_cases" operator="+"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_crm_case_section_tree" model="ir.actions.act_window">
|
||||
<field name="name">Cases by Section</field>
|
||||
<field name="res_model">report.crm.case.section</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
</record>
|
||||
|
||||
<!-- Closed & Open CRM Case view for Random Acitivities dashboard -->
|
||||
|
||||
<record id="board_view_crm_case_open_dashboard_tree" model="ir.ui.view">
|
||||
<field name="name">report.crm.case.dashboard.tree</field>
|
||||
<field name="model">report.crm.case.dashboard</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:date_deadline<current_date and state=='open'" string="CRM Cases">
|
||||
<field name="create_date"/>
|
||||
<field name="date"/>
|
||||
<field name="date_deadline"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="priority"/>
|
||||
<field name="planned_revenue" sum="Planned revenue"/>
|
||||
<field name="planned_cost" sum="Planned costs"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="board_view_crm_case_done_dashboard_tree" model="ir.ui.view">
|
||||
<field name="name">report.crm.case.dashboard.tree</field>
|
||||
<field name="model">report.crm.case.dashboard</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:date_deadline<current_date and state=='open'" string="CRM Cases">
|
||||
<field name="date_closed"/>
|
||||
<field name="date"/>
|
||||
<field name="date_deadline"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="priority"/>
|
||||
<field name="planned_revenue" sum="Planned revenue"/>
|
||||
<field name="planned_cost" sum="Planned costs"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_view_closed_crm_case_dashboard" model="ir.actions.act_window">
|
||||
<field name="name">Closed CRM Cases Wtihin Past 15 Days</field>
|
||||
<field name="res_model">report.crm.case.service.dashboard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="board_view_crm_case_done_dashboard_tree"/>
|
||||
<field name="domain">[('state','=','done')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_view_open_crm_case_dashboard" model="ir.actions.act_window">
|
||||
<field name="name">Open CRM Cases Wtihin Past 15 Days</field>
|
||||
<field name="res_model">report.crm.case.service.dashboard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="board_view_crm_case_open_dashboard_tree"/>
|
||||
<field name="domain">[('state','=','open')]</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -203,6 +203,32 @@
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="view_id" ref="view_turnover_month_tree"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Created Sale orders for random activities dashboard -->
|
||||
|
||||
<record id="board_view_created_sale_order" model="ir.ui.view">
|
||||
<field name="name">report.sale.order.created.tree</field>
|
||||
<field name="model">report.sale.order.created</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Created Sales orders">
|
||||
<field name="create_date"/>
|
||||
<field name="date_order"/>
|
||||
<field name="name" string="Reference"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_shipping_id"/>
|
||||
<field name="amount_untaxed"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_view_created_sale_order_dashboard" model="ir.actions.act_window">
|
||||
<field name="name">Created Sale Orders</field>
|
||||
<field name="res_model">report.sale.order.created</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="board_view_created_sale_order"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -58,5 +58,37 @@
|
||||
<menuitem id="next_id_57" name="Reporting" parent="project.menu_main" sequence="50"/>
|
||||
<menuitem id="next_id_58" name="All Months" parent="next_id_57"/><menuitem action="action_project_task" id="menu_project_task_user_tree" parent="next_id_58"/>
|
||||
|
||||
<!-- Closed Task in Random Acitivities dashboard -->
|
||||
|
||||
<record id="view_task_closed_board_tree" model="ir.ui.view">
|
||||
<field name="name">report.closed.task.tree</field>
|
||||
<field name="model">report.closed.task</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Closed Tasks">
|
||||
<field name="date_close" />
|
||||
<field name="sequence"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="project_id" select="1"/>
|
||||
<field name="user_id" select="1"/>
|
||||
<field name="date_deadline"/>
|
||||
<field name="planned_hours" sum="Planned" widget="float_time"/>
|
||||
<field name="delay_hours" sum="Delay" widget="float_time"/>
|
||||
<field name="progress" widget="progressbar"/>
|
||||
<field name="priority"/>
|
||||
<field name="state"/>
|
||||
<field name="remaining_hours" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_closed_task_board" model="ir.actions.act_window">
|
||||
<field name="name">Task Closed Within Past 15 Days</field>
|
||||
<field name="res_model">report.closed.task</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_task_closed_board_tree"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -303,5 +303,37 @@
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_random_timesheet_tree"/>
|
||||
</record>
|
||||
|
||||
<!-- Random Timesheet Lines of random activities -->
|
||||
|
||||
<record model="ir.ui.view" id="view_random_timesheet_lines_tree">
|
||||
<field name="name">random.timesheet.lines.tree</field>
|
||||
<field name="model">random.timesheet.lines</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Random Timesheets Lines">
|
||||
<field name="date" select="1"/>
|
||||
<field name="user_id" />
|
||||
<field name="name" select="1"/>
|
||||
<field name="quantity" />
|
||||
<field name="product_id" select="1"/>
|
||||
<field name="analytic_account_id" select="1"/>
|
||||
<field name="uom_id" />
|
||||
<field name="amount" />
|
||||
<field name="to_invoice" select="1"/>
|
||||
<field name="general_account_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_random_timesheet_lines_board">
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="name">Random Timesheet Lines</field>
|
||||
<field name="res_model">random.timesheet.lines</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_random_timesheet_lines_tree"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user