project_improve

bzr revid: fp@tinyerp.com-20081027111326-z1cxmsqp8u17s84e
This commit is contained in:
Fabien Pinckaers 2008-10-27 12:13:26 +01:00
parent f23aba092c
commit 89b1504f3a
6 changed files with 67 additions and 10 deletions

View File

@ -665,6 +665,15 @@ class account_move(osv.osv):
return periods[0]
else:
return False
def _amount_compute(self, cr, uid, ids, name, args, context, where =''):
if not ids: return {}
cr.execute('select move_id,sum(debit) from account_move_line where move_id in ('+','.join(map(str,ids))+') group by move_id')
result = dict(cr.fetchall())
for id in ids:
result.setdefault(id, 0.0)
return result
_columns = {
'name': fields.char('Entry Name', size=64, required=True),
'ref': fields.char('Ref', size=64),
@ -673,6 +682,8 @@ class account_move(osv.osv):
'state': fields.selection([('draft','Draft'), ('posted','Posted')], 'Status', required=True, readonly=True),
'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}),
'to_check': fields.boolean('To Be Verified'),
'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store=True),
'amount': fields.function(_amount_compute, method=True, string='Amount', digits=(16,2), store=True),
}
_defaults = {
'state': lambda *a: 'draft',

View File

@ -465,6 +465,8 @@
<field name="name"/>
<field name="period_id"/>
<field name="journal_id"/>
<field name="partner_id"/>
<field name="amount"/>
<field name="state"/>
</tree>
</field>
@ -807,11 +809,15 @@
<field name="arch" type="xml">
<form string="Account Entry">
<separator colspan="4" string="General Information"/>
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="ref" select="1"/>
<field name="period_id" select="2"/>
<field name="journal_id" select="1"/>
<field name="to_check" select="2"/>
<field name="partner_id" select="2"/>
<field name="amount" select="2"/>
<field name="ref" select="1" groups="base.group_extended"/>
<field name="to_check" select="2" groups="base.group_extended"/>
</group>
<separator colspan="4" string="Entry Lines"/>
<field colspan="4" name="line_id" nolabel="1" widget="one2many_list" default_get="{'lines':line_id ,'journal':journal_id }">

View File

@ -176,8 +176,13 @@ class mrp_bom(osv.osv):
'name': fields.char('Name', size=64, required=True),
'code': fields.char('Code', size=16),
'active': fields.boolean('Active'),
'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', required=True, help="Use a phantom bill of material in lines that have a sub-bom and that have to be automatically computed in one line, without having two production orders."),
'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', required=True, help=
"Use a phantom bill of material in raw materials lines that have to be " \
"automatically computed in on eproduction order and not one per level." \
"If you put \"Phantom/Set\" at the root level of a bill of material " \
"it is considered as a set or pack: the products are replaced by the components " \
"between the sale order to the picking without going through the production order." \
"The normal BoM will generate one production order per BoM level."),
'method': fields.function(_compute_type, string='Method', method=True, type='selection', selection=[('',''),('stock','On Stock'),('order','On Order'),('set','Set / Pack')]),
'date_start': fields.date('Valid From', help="Validity of this BoM or component. Keep empty if it's always valid."),

View File

@ -132,7 +132,7 @@ class project(osv.osv):
'warn_footer': fields.text('Mail footer'),
'notes': fields.text('Notes'),
'timesheet_id': fields.many2one('hr.timesheet.group', 'Working Time'),
'state': fields.selection([('template', 'Template'), ('open', 'Open'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', required=True),
'state': fields.selection([('template', 'Template'), ('open', 'Open'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', required=True, readonly=True),
}
_defaults = {
@ -153,6 +153,22 @@ class project(osv.osv):
res = self.setActive(cr, uid, ids, value=False, context=context)
return res
def set_done(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'done'}, context=context)
return True
def set_cancel(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'cancelled'}, context=context)
return True
def set_pending(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'pending'}, context=context)
return True
def set_open(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'open'}, context=context)
return True
def reset_project(self, cr, uid, ids, context={}):
res = self.setActive(cr, uid, ids,value=True, context=context)
return res
@ -176,7 +192,11 @@ class project(osv.osv):
project_ids = [x[0] for x in res]
for child in project_ids:
self.duplicate_template(cr, uid, [child],context={'parent_id':new_id})
return True
# TODO : Improve this to open the new project (using a wizard)
cr.commit()
raise osv.except_osv(_('Operation Done'), _('A new project has been created !\nWe suggest you to close this one and work on this new project.'))
# set active value for a project, its sub projects and its tasks
def setActive(self, cr, uid, ids, value=True, context={}):

View File

@ -30,11 +30,17 @@
<newline/>
<separator colspan="4" string="Project's members"/>
<field colspan="4" name="members" nolabel="1"/>
<group col="6" colspan="8">
<group col="9" colspan="8">
<field name="state"/>
<button name="set_template" string="Set as Template" type="object" states="open"/>
<button name="set_open" string="Reopen Project" type="object" states="pending,cancelled,done"/>
<button name="set_pending" string="Set as Pending" type="object" states="open"/>
<button name="set_cancel" string="Set as Cancel" type="object" states="open,pending"/>
<button name="set_done" string="Set as Done" type="object" states="open,pending"/>
<button name="reset_project" string="Reset as Project" type="object" states="template"/>
<button name="duplicate_template" string="Duplicate Template" type="object" states="template"/>
<button name="duplicate_template" string="New Project Based on Template"
type="object"
states="template"/>
</group>
</page>
<page groups="base.group_extended" string="Partner Info">
@ -48,6 +54,7 @@
<field name="warn_header" nolabel="1" colspan="2"/>
<field name="warn_footer" nolabel="1" colspan="2"/>
<group col="3" colspan="4">
<separator string="Automatic variables you can use, use exactly the same form" colspan="4"/>
<label string="Task: %%(name)s"/>
<label string="User: %%(user_id)s"/>
<label string="ID: %%(task_id)s"/>
@ -472,6 +479,15 @@
<act_window domain="[('manager', '=', active_id)]" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>
<act_window
domain="[('project_id', '=', active_id)]"
id="act_project_project_2_project_task_new"
name="Create a Task"
res_model="project.task"
src_model="project.project"
view_mode="form,tree,calendar,graph"
view_type="form"/>
<act_window
domain="[('project_id', '=', active_id)]"
id="act_project_project_2_project_task_all"
@ -490,8 +506,6 @@
view_mode="tree,form,calendar,graph"
view_type="form"/>
<act_window id="act_project_project_2_project_task_all" name="All tasks" res_model="project.task" src_model="project.project" view_mode="tree,form" view_type="form"/>
<record id="task_company" model="ir.ui.view">
<field name="name">res.company.task.config</field>
<field name="model">res.company</field>

View File

@ -31,6 +31,7 @@
import wizard
from tools import email_send as email
import pooler
from osv import osv
mail_form = """<?xml version="1.0" ?>
<form string="Send mail to customer">