[MERGE]: Merge with lp:openobject-addons

bzr revid: rpa@tinyerp.com-20101007041800-9i64133nmlc6j1wc
This commit is contained in:
rpa (Open ERP) 2010-10-07 09:48:00 +05:30
commit 2e6f709e1c
33 changed files with 169 additions and 182 deletions

View File

@ -1162,32 +1162,36 @@ class account_move(osv.osv):
]
def post(self, cr, uid, ids, context=None):
if context is None:
context = {}
invoice = context.get('invoice', False)
valid_moves = self.validate(cr, uid, ids, context)
if valid_moves:
for move in self.browse(cr, uid, valid_moves):
if move.name =='/':
new_name = False
journal = move.journal_id
if not valid_moves:
raise osv.except_osv(_('Integrity Error !'), _('You cannot validate a non-balanced entry !\nMake sure you have configured Payment Term properly !\nIt should contain atleast one Payment Term Line with type "Balance" !'))
for move in self.browse(cr, uid, valid_moves):
if move.name =='/':
new_name = False
journal = move.journal_id
if invoice and invoice.internal_number:
new_name = invoice.internal_number
if invoice and invoice.internal_number:
new_name = invoice.internal_number
else:
if journal.sequence_id:
c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
else:
if journal.sequence_id:
c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
else:
raise osv.except_osv(_('Error'), _('No sequence defined in the journal !'))
raise osv.except_osv(_('Error'), _('No sequence defined on the journal !'))
if new_name:
self.write(cr, uid, [move.id], {'name':new_name})
if new_name:
self.write(cr, uid, [move.id], {'name':new_name})
cr.execute('UPDATE account_move '\
'SET state=%s '\
'WHERE id IN %s',
('posted', tuple(valid_moves),))
else:
raise osv.except_osv(_('Integrity Error !'), _('You can not validate a non-balanced entry !\nMake sure you have configured Payment Term properly !\nIt should contain atleast one Payment Term Line with type "Balance" !'))
cr.execute('UPDATE account_move '\
'SET state=%s '\
'WHERE id IN %s',
('posted', tuple(valid_moves),))
return True
def button_validate(self, cursor, user, ids, context=None):

View File

@ -650,18 +650,19 @@ class account_invoice(osv.osv):
return ok
def button_reset_taxes(self, cr, uid, ids, context=None):
if not context:
if context is None:
context = {}
ctx = context.copy()
ait_obj = self.pool.get('account.invoice.tax')
for id in ids:
cr.execute("DELETE FROM account_invoice_tax WHERE invoice_id=%s", (id,))
partner = self.browse(cr, uid, id, context=context).partner_id
partner = self.browse(cr, uid, id, context=ctx).partner_id
if partner.lang:
context.update({'lang': partner.lang})
for taxe in ait_obj.compute(cr, uid, id, context=context).values():
ctx.update({'lang': partner.lang})
for taxe in ait_obj.compute(cr, uid, id, context=ctx).values():
ait_obj.create(cr, uid, taxe)
# Update the stored value (fields.function), so we write to trigger recompute
self.pool.get('account.invoice').write(cr, uid, ids, {'invoice_line':[]}, context=context)
self.pool.get('account.invoice').write(cr, uid, ids, {'invoice_line':[]}, context=ctx)
return True
def button_compute(self, cr, uid, ids, context=None, set_total=False):

View File

@ -200,7 +200,8 @@ class account_automatic_reconcile(osv.osv_memory):
"AND partner_id=%s " \
"AND reconcile_id IS NULL " \
"AND state <> 'draft' " \
"AND debit > 0",
"AND debit > 0 " \
"ORDER BY date_maturity",
(account_id, partner_id))
debits = cr.fetchall()
@ -212,7 +213,8 @@ class account_automatic_reconcile(osv.osv_memory):
"AND partner_id=%s " \
"AND reconcile_id IS NULL " \
"AND state <> 'draft' " \
"AND credit > 0",
"AND credit > 0 " \
"ORDER BY date_maturity",
(account_id, partner_id))
credits = cr.fetchall()

View File

@ -48,8 +48,9 @@
<record model="ir.actions.todo"
id="config_install_module">
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
<field name="restart">always</field>
</record>
<menuitem name="Association" id="base.menu_association" icon="terp-calendar" sequence="9" groups="base.group_extended"/>

View File

@ -1438,7 +1438,8 @@ true, it will allow you to hide the event alarm information without removing it.
res = super(calendar_event, self).search(cr, uid, args_without_date, \
offset, limit, order, context, count)
return self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit)
res = self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit)
return res
def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
"""
@ -1533,11 +1534,9 @@ true, it will allow you to hide the event alarm information without removing it.
if fields and 'date' not in fields:
fields.append('date')
real_ids = [item2 for item1, item2 in select]
event_values = dict([(res['id'], res) for res in super(calendar_event, self).read(cr, uid, real_ids, fields=fields, context=context, load=load)])
for base_calendar_id, real_id in select:
res = event_values[real_id]
#REVET: Revision ID: olt@tinyerp.com-20100924131709-cqsd1ut234ni6txn
res = super(calendar_event, self).read(cr, uid, real_id, fields=fields, context=context, load=load)
ls = base_calendar_id2real_id(base_calendar_id, with_date=res and res.get('duration', 0) or 0)
if not isinstance(ls, (str, int, long)) and len(ls) >= 2:
res['date'] = ls[1]

View File

@ -19,7 +19,7 @@
<xpath expr="//label[@string='description']" position="attributes">
<attribute name="string">This plug-in allows you to create/modify OpenERP Reports into OpenOffice Writer.</attribute>
</xpath>
<xpath expr="//button[@string='Install Modules']" position="replace">
<xpath expr="//button[@string='Install Modules']" position="replace">
<button colspan="1" icon="gtk-close" special="cancel" string="_Close" invisible="not context.get('menu',False)"/>
<button name="action_next" icon="gtk-go-forward"
type="object" string="Configure" colspan="1" invisible="context.get('menu',False)"/>
@ -29,10 +29,10 @@
type="object" string="Skip" colspan="1" invisible="context.get('menu',False)"/>
</xpath>
<xpath expr='//separator[@string="vsep"]' position='attributes'>
<attribute name='string'></attribute>
<attribute name='rowspan'>15</attribute>
</xpath>
<group colspan="8" position="replace">
<attribute name='string'></attribute>
<attribute name='rowspan'>15</attribute>
</xpath>
<group colspan="8" position="replace">
<group colspan="8" height="450" width="750">
<field name="name" invisible="1"/>
<field name="plugin_file" filename="name"/>
@ -55,12 +55,11 @@
</record>
<record id="report_designer_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_report_designer_installer"/>
<field name="sequence">3</field>
<field name="action_id" ref="action_report_designer_installer"/>
<field name="sequence">3</field>
<field name="restart">always</field>
</record>
<record id="action_report_designer_wizard" model="ir.actions.act_window">
<field name="name">OpenERP Report Designer</field>
<field name="type">ir.actions.act_window</field>

View File

@ -54,6 +54,7 @@
<record id="base_setup_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_base_setup_installer"/>
<field name="sequence">2</field>
<field name="restart">always</field>
</record>
</data>
</openerp>

View File

@ -67,7 +67,7 @@
<record id="base_setup_company_todo" model="ir.actions.todo">
<field name="action_id" ref="action_base_setup_company"/>
<field name="sequence">3</field>
<field name="restart">onskip</field>
<field name="restart">always</field>
</record>
</data>
</openerp>

View File

@ -63,11 +63,12 @@ def uid2openobjectid(cr, uidval, oomodel, rdate):
return (False, None)
qry = 'SELECT DISTINCT(id) FROM %s' % model_obj._table
if rdate:
qry += " WHERE recurrent_id=%s"
cr.execute(qry, (rdate,))
qry += " where recurrent_id='%s'" % (rdate) #TOFIX: sql injection
cr.execute(qry)
r_id = cr.fetchone()
if r_id:
return (id, r_id[0])
cr.execute(qry)
ids = map(lambda x: str(x[0]), cr.fetchall())
if id in ids:

View File

@ -25,24 +25,24 @@
<xpath expr="//button[@string='Install Modules']" position="attributes">
<attribute name="string">Configure</attribute>
</xpath>
<group colspan="8">
<group colspan="4" col="4" groups="base.group_extended" name="other">
<field name="crm_claim" />
<field name="crm_helpdesk" />
<field name="crm_fundraising" />
<field name="wiki_sale_faq"/>
<field name="sale_crm" invisible="1"/>
</group>
<group colspan="2" col="2">
<separator string="Synchronization" colspan="4" />
<field name="crm_caldav" />
<field name="fetchmail" />
</group>
<group colspan="2" col="2">
<separator string="Plug-In" colspan="4" />
<field name="thunderbird" />
<field name="outlook" />
</group>
<group colspan="8">
<group colspan="4" col="4" groups="base.group_extended" name="other">
<field name="crm_claim" />
<field name="crm_helpdesk" />
<field name="crm_fundraising" />
<field name="wiki_sale_faq"/>
<field name="sale_crm" invisible="1"/>
</group>
<group colspan="2" col="2">
<separator string="Synchronization" colspan="4" />
<field name="crm_caldav" />
<field name="fetchmail" />
</group>
<group colspan="2" col="2">
<separator string="Plug-In" colspan="4" />
<field name="thunderbird" />
<field name="outlook" />
</group>
</group>
</data>
</field>
@ -59,9 +59,10 @@
</record>
<record id="crm_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_crm_installer"/>
<field name="sequence">3</field>
<field eval="[(6,0,[ref('base.group_extended')])]" name="groups_id"/>
<field name="action_id" ref="action_crm_installer"/>
<field name="sequence">3</field>
<field name="restart">always</field>
<field eval="[(6,0,[ref('base.group_extended')])]" name="groups_id"/>
</record>
</data>
</openerp>

View File

@ -54,6 +54,7 @@
register configuration wizard
<record id="config_wizard_step_case_section_menu" model="ir.actions.todo">
<field name="action_id" ref="action_view_document_ics_config_directories"/>
<field name="restart">always</field>
</record>
</data>
</openerp>

View File

@ -52,6 +52,7 @@
<record id="hr_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_hr_installer"/>
<field name="sequence">3</field>
<field name="restart">always</field>
</record>
</data>

View File

@ -41,8 +41,8 @@ class report_custom(report_rml):
start_date = datetime.strptime(datas['form']['init_date'], '%Y-%m-%d')
end_date = datetime.strptime(datas['form']['end_date'], '%Y-%m-%d')
first_monday = start_date - relativedelta(days=start_date.day_of_week)
last_monday = end_date + relativedelta(days=7 - end_date.day_of_week)
first_monday = start_date - relativedelta(days=start_date.date().weekday())
last_monday = end_date + relativedelta(days=7 - end_date.date().weekday())
if last_monday < first_monday:
first_monday, last_monday = last_monday, first_monday
@ -82,7 +82,7 @@ class report_custom(report_rml):
for att in attendances:
dt = datetime.strptime(att['name'], '%Y-%m-%d %H:%M:%S')
if att['action'] == 'sign_out':
week_wh[ldt.day_of_week] = week_wh.get(ldt.day_of_week, 0) + (dt - ldt).hours
week_wh[ldt.date().weekday()] = week_wh.get(ldt.date().weekday(), 0) + (dt - ldt).hours
ldt = dt
# Week xml representation

View File

@ -178,6 +178,21 @@ class hr_timesheet_sheet(osv.osv):
def copy(self, cr, uid, ids, *args, **argv):
raise osv.except_osv(_('Error !'), _('You cannot duplicate a timesheet !'))
def create(self, cr, uid, vals, *args, **argv):
if 'employee_id' in vals:
if not self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).user_id:
raise osv.except_osv(_('Error !'), _('You cannot create a timesheet for an employee that does not have any user defined !'))
return super(hr_timesheet_sheet, self).create(cr, uid, vals, *args, **argv)
def write(self, cr, uid, ids, vals, *args, **argv):
if 'employee_id' in vals:
new_user_id = self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).user_id.id or False
if not new_user_id:
raise osv.except_osv(_('Error !'), _('You cannot create a timesheet for an employee that does not have any user defined !'))
if not self._sheet_date(cr, uid, ids, forced_user_id=new_user_id):
raise osv.except_osv(_('Error !'), _('You can not have 2 timesheets that overlaps !\nPlease use the menu \'My Current Timesheet\' to avoid this problem.'))
return super(hr_timesheet_sheet, self).write(cr, uid, ids, vals, *args, **argv)
def button_confirm(self, cr, uid, ids, context=None):
if context is None:
context = {}
@ -262,8 +277,8 @@ class hr_timesheet_sheet(osv.osv):
_columns = {
'name': fields.char('Description', size=64, select=1,
states={'confirm':[('readonly', True)], 'done':[('readonly', True)]}),
'user_id': fields.many2one('res.users', 'User', required=True, select=1,
states={'confirm':[('readonly', True)], 'done':[('readonly', True)]}),
'employee_id': fields.many2one('hr.employee', 'Employee', required=True),
'user_id': fields.related('employee_id', 'user_id', type="many2one", relation="res.users", store=True, string="User", required=False, readonly=True),#fields.many2one('res.users', 'User', required=True, select=1, states={'confirm':[('readonly', True)], 'done':[('readonly', True)]}),
'date_from': fields.date('Date from', required=True, select=1, readonly=True, states={'new':[('readonly', False)]}),
'date_to': fields.date('Date to', required=True, select=1, readonly=True, states={'new':[('readonly', False)]}),
'date_current': fields.date('Current date', required=True),
@ -320,24 +335,24 @@ class hr_timesheet_sheet(osv.osv):
return time.strftime('%Y-%m-%d')
_defaults = {
'user_id': lambda self,cr,uid,c: uid,
'date_from' : _default_date_from,
'date_current' : lambda *a: time.strftime('%Y-%m-%d'),
'date_to' : _default_date_to,
'state': 'new',
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr_timesheet_sheet.sheet', context=c)
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr_timesheet_sheet.sheet', context=c)
}
def _sheet_date(self, cr, uid, ids):
def _sheet_date(self, cr, uid, ids, forced_user_id=False):
for sheet in self.browse(cr, uid, ids):
cr.execute('SELECT id \
new_user_id = forced_user_id or sheet.user_id and sheet.user_id.id
if new_user_id:
cr.execute('SELECT id \
FROM hr_timesheet_sheet_sheet \
WHERE (date_from < %s and %s < date_to) \
AND user_id=%s \
AND id <> %s', (sheet.date_to, sheet.date_from,
sheet.user_id.id, sheet.id))
if cr.fetchall():
return False
AND id <> %s',(sheet.date_to, sheet.date_from, new_user_id, sheet.id))
if cr.fetchall():
return False
return True
def _date_current_check(self, cr, uid, ids):

View File

@ -4,6 +4,7 @@
<record id="sheet0" model="hr_timesheet_sheet.sheet">
<field name="name">Sheet 0</field>
<field name="user_id" ref="base.user_root"/>
<field name="employee_id" ref="hr.employee1" />
<field eval="time.strftime('%Y-%m-01', time.localtime(time.mktime(time.localtime()[0:2] + (0,)*7)-1))" name="date_from"/>
<field eval="time.strftime('%Y-%m-15', time.localtime(time.mktime(time.localtime()[0:2] + (0,)*7)-1))" name="date_current"/>
<field eval="time.strftime('%Y-%m-%d', time.localtime(time.mktime(time.localtime()[0:2] + (0,)*7)-1))" name="date_to"/>

View File

@ -1,25 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="hr_timesheet_sheet_tree" model="ir.ui.view">
<field name="name">hr.timesheet.sheet.tree</field>
<field name="model">hr_timesheet_sheet.sheet</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Timesheets"
colors="blue:state == 'draft';gray:state == 'done'">
<field name="user_id"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="name"/>
<field name="department_id"/>
<field name="total_attendance" groups="base.group_hr_attendance"/>
<field name="total_timesheet"/>
<field name="total_difference" groups="base.group_hr_attendance"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="hr_timesheet_sheet_graph" model="ir.ui.view">
<field name="name">hr.timesheet.sheet.graph</field>
<field name="model">hr_timesheet_sheet.sheet</field>
@ -71,7 +52,7 @@
<field name="company_id" select="1" groups="base.group_multi_company"/>
<field name="department_id" groups="base.group_extended"/>
<newline/>
<field name="user_id"/>
<field name="employee_id"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
@ -167,7 +148,7 @@
<filter icon="terp-document-new" string="In Draft" domain="[('state','in',('draft', 'new'))]" help="Unvalidated Timesheets"/>
<filter icon="terp-camera_test" string="To Approve" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
<separator orientation="vertical"/>
<field name="user_id" select="1"/>
<field name="employee_id" select="1"/>
<field name="date_from"/>
<field name="department_id" widget="selection">
<filter icon="terp-personal+"
@ -177,7 +158,7 @@
</group>
<newline/>
<group expand="0" string="Group By...">
<filter string="Users" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Employees" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
</group>
</search>
@ -190,7 +171,7 @@
<field name="res_model">hr_timesheet_sheet.sheet</field>
<field name="view_type">form</field>
<field name="view_id" eval="False"/>
<field name="context">{'search_default_my_timesheet':1, 'search_default_user_id':uid }</field>
<field name="context">{'search_default_my_timesheet':1, }</field>
<field name="search_view_id" ref="view_hr_timesheet_sheet_filter"/>
<field name="help">Employees can encode their time spent on the different projects. A project is an analytic account and the time spent on a project generate costs on the analytic account.</field>
</record>
@ -312,18 +293,19 @@
src_model="hr_timesheet_sheet.sheet"/>
<record id="hr_timesheet_sheet_tree_simplified" model="ir.ui.view">
<field name="name">hr.timesheet.sheet.tree.simplified</field>
<field name="name">hr.timesheet.sheet.tree</field>
<field name="model">hr_timesheet_sheet.sheet</field>
<field name="type">tree</field>
<field eval="20" name="priority"/>
<field eval="10" name="priority"/>
<field name="arch" type="xml">
<tree colors="blue:state in ('draft');black:state in ('confirm','new');gray:state in('done')" string="Timesheets">
<field name="employee_id"/>
<field name="date_from"/>
<field name="user_id"/>
<field name="department_id" invisible="1"/>
<field name="name"/>
<field name="total_attendance"/>
<field name="date_to"/>
<field name="department_id"/>
<field name="total_attendance" groups="base.group_hr_attendance"/>
<field name="total_timesheet"/>
<field name="total_difference" groups="base.group_hr_attendance"/>
<field name="state"/>
</tree>
</field>

View File

@ -34,11 +34,11 @@
<field name="year" invisible="1"/>
<field name="day" invisible="1"/>
<field name="month" invisible="1"/>
<field name="total_attendance" sum="#Total Attendance"/>
<field name="total_timesheet" sum="#Total Timesheet"/>
<field name="total_diff" sum="#Total Diff"/>
<field name="quantity" sum="#Quantity"/>
<field name="cost" sum="#Cost"/>
<field name="total_diff" sum="#Total Diff"/>
<field name="total_timesheet" sum="#Total Timesheet"/>
<field name="total_attendance" sum="#Total Attendance"/>
</tree>
</field>
</record>

View File

@ -70,6 +70,7 @@
name: Week-22(2010)
state: new
user_id: base.user_root
employee_id: 'hr_employee_employee0'
-
Now , at the time of login, I create Attendances and perform "Sign In" action.
-

View File

@ -53,6 +53,7 @@
<field name="action_id" ref="action_knowledge_installer"/>
<field name="sequence">3</field>
<field name="groups_id" eval="[(6,0,[ref('base.group_extended')])]"/>
<field name="restart">always</field>
</record>
</data>

View File

@ -50,6 +50,7 @@
<record id="marketing_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_marketing_installer"/>
<field name="sequence">3</field>
<field name="restart">always</field>
</record>
</data>

View File

@ -48,6 +48,7 @@
<record id="mrp_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_mrp_installer"/>
<field name="sequence">3</field>
<field name="restart">always</field>
<field name="groups_id" eval="[(6,0,[ref('base.group_extended')])]"/>
</record>

View File

@ -46,6 +46,7 @@
<record id="misc_tools_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_misc_tools_installer"/>
<field name="restart">always</field>
<field name="sequence">3</field>
</record>
</data>

View File

@ -10,43 +10,12 @@
Board for project managers
-->
<act_window
domain="[('manager', '=', uid)]"
id="act_my_project" name="My projects"
res_model="project.project" view_mode="tree,form"
view_type="form"/>
domain="[('manager', '=', uid)]"
id="act_my_project" name="My projects"
res_model="project.project" view_mode="tree,form"
view_type="form"/>
<act_window domain="[('user_id','=',uid),('state','&lt;&gt;','close')]" id="act_my_account" name="My accounts to invoice" res_model="account.analytic.account" view_id="view_account_analytic_simplified" view_mode="tree,form" view_type="form"/>
<record id="board_project_manager_form" model="ir.ui.view">
<field name="name">board.project.manager.form</field>
<field name="model">board.board</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Project manager board">
<hpaned>
<child1>
<!-- <action colspan="4" height="220" name="%(act_my_project)d" string="My projects" width="510"/>-->
<action colspan="4" height="150" name="%(act_my_account)d" string="My accounts to invoice" width="510"/>
</child1>
<child2>
<button colspan="4" icon="terp-partner" name="%(open_board_project)d" string="My tasks board" type="action"/>
</child2>
</hpaned>
</form>
</field>
</record>
<record id="open_board_project_manager" model="ir.actions.act_window">
<field name="name">Project Manager Dashboard</field>
<field name="res_model">board.board</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="usage">menu</field>
<field name="view_id" ref="board_project_manager_form"/>
</record>
<menuitem action="open_board_project_manager" icon="terp-graph" id="menu_board_project_manager" parent="project.next_id_86" sequence="1" groups="project.group_project_user"/>
</data>
</openerp>

View File

@ -49,8 +49,9 @@
</record>
<record id="project_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_project_installer"/>
<field name="sequence">3</field>
<field name="action_id" ref="action_project_installer"/>
<field name="restart">always</field>
<field name="sequence">3</field>
</record>
</data>

View File

@ -92,7 +92,7 @@ class project_phase(osv.osv):
model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour')
return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id']
def _compute(self, cr, uid, ids, context=None):
def _compute(self, cr, uid, ids,field_name, arg, context=None):
res = {}
if not ids:
return res
@ -100,9 +100,7 @@ class project_phase(osv.osv):
tot = 0.0
for task in phase.task_ids:
tot += task.planned_hours
res[phase.id] = {
'total_hours' : tot
}
res[phase.id] = tot
return res
_columns = {

View File

@ -110,22 +110,23 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Project Phase">
<group colspan="6" col="6">
<group colspan="2" col="2">
<group colspan="8" col="7">
<group colspan="8">
<field name="name" select="1"/>
<field name="date_start"/>
<field name="total_hours"/>
<field name="project_id" on_change="onchange_project(project_id)" colspan="2"/>
<field name="responsible_id" colspan="2"/>
</group>
<group colspan="2" col="4">
<field name="project_id" on_change="onchange_project(project_id)" colspan="4"/>
<newline/>
<field name="duration" colspan="1" on_change="onchange_days(project_id)" />
<newline/>
<group colspan="2">
<field name="date_start"/>
<field name="date_end"/>
</group>
<group colspan="2">
<field name="duration" on_change="onchange_days(project_id)"/>
<field name="product_uom" nolabel="1" domain="[('category_id.name', '=', 'Working Time')]"/>
</group>
<group colspan="2" col="2">
<field name="responsible_id"/>
<field name="date_end"/>
</group>
</group>
</group>
<notebook colspan="4">
<page string="Resource Allocation">
<field colspan="4" name="resource_ids" nolabel="1">

View File

@ -46,6 +46,7 @@
<record id="report_designer_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_report_designer_installer"/>
<field name="restart">always</field>
<field name="sequence">3</field>
</record>
</data>

View File

@ -26,8 +26,8 @@ class sale_installer(osv.osv_memory):
_inherit = 'res.config.installer'
_columns = {
'sale_analytic_plans': fields.boolean('Sales Analytic Distribution',
help="Helps you to manage analytic distribution and sales orders."),
'delivery': fields.boolean('Delivery Costs',
help="Allows you to compute delivery costs on your quotations."),
'sale_journal': fields.boolean('Sales and deliveries by journal',
help="Allows you to categorise your "
"sales and deliveries (picking lists) between different journals. "
@ -40,8 +40,8 @@ class sale_installer(osv.osv_memory):
"the difference between Unit Price and Cost Price."),
'sale_order_dates': fields.boolean('Sales Order Dates',
help="Adds commitment, requested and effective dates on Sales Orders."),
}
}
sale_installer()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -25,7 +25,7 @@
<attribute name="string">Configure</attribute>
</xpath>
<group colspan="8">
<field name="sale_analytic_plans"/>
<field name="delivery"/>
<field name="sale_journal"/>
<field name="sale_layout"/>
<field name="sale_margin"/>
@ -47,6 +47,7 @@
<record id="sale_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_sale_installer"/>
<field name="restart">always</field>
<field name="sequence">3</field>
<field name="groups_id" eval="[(6,0,[ref('base.group_extended')])]"/>
</record>

View File

@ -567,6 +567,7 @@ to your configuration: from the sales order, from the pickings, etc.
<!-- register configuration wizard -->
<record id="config_wizard_step_sale_picking_policy" model="ir.actions.todo">
<field name="action_id" ref="action_config_picking_policy"/>
<field name="restart">always</field>
<field name="groups_id" eval="[(6,0,[ref('base.group_extended')])]"/>
</record>

View File

@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_sale_order_line_make_invoice" model="ir.ui.view">
<record id="view_sale_order_line_make_invoice" model="ir.ui.view">
<field name="name">Sale OrderLine Make Invoice</field>
<field name="model">sale.order.line.make.invoice</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Create invoices">
<separator colspan="4" string="Do you really want to create the invoice(s) ?" />
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="make_invoices" string="Create Invoices" type="object" icon="gtk-ok"/>
</form>
<separator colspan="4" string="Do you really want to create the invoice(s) ?" />
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="make_invoices" string="Create Invoices" type="object" icon="gtk-ok"/>
</form>
</field>
</record>
</record>
<record id="action_view_sale_order_line_make_invoice" model="ir.actions.act_window">
<record id="action_view_sale_order_line_make_invoice" model="ir.actions.act_window">
<field name="name">Make Invoices</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sale.order.line.make.invoice</field>
@ -34,4 +34,4 @@
<field name="model">sale.order.line</field>
</record>
</data>
</openerp>
</openerp>

View File

@ -43,8 +43,8 @@ class report_stock_move(osv.osv):
'location_id': fields.many2one('stock.location', 'Source Location', readonly=True, select=True, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
'location_dest_id': fields.many2one('stock.location', 'Dest. Location', readonly=True, select=True, help="Location where the system will stock the finished products."),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True),
'product_qty_in':fields.integer('In Qty',readonly=True),
'product_qty_out':fields.integer('Out Qty',readonly=True),
'product_qty_in':fields.float('In Qty',readonly=True),
'product_qty_out':fields.float('Out Qty',readonly=True),
'value' : fields.float('Total Value', required=True, digits_compute=dp.get_precision('Sale Price')),
'day_diff2':fields.float('Delay (Days)',readonly=True, digits=(16,2), group_operator="avg"),
'day_diff1':fields.float('Planned (Days)',readonly=True, digits=(16,2), group_operator="avg"),

View File

@ -60,8 +60,9 @@
</record>
<record id="thunderbird_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_thunderbird_installer"/>
<field name="sequence">3</field>
<field name="action_id" ref="action_thunderbird_installer"/>
<field name="restart">always</field>
<field name="sequence">3</field>
</record>