'date_action': fields.date('Next Action Date'),
'title_action': fields.char('Next Action', size=64),
'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
+ 'color': fields.integer('Color Index'),
+ 'partner_address_name': fields.related('partner_address_id', 'name', type='char', string='Partner Contact Name', readonly=True),
+ 'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True),
+ 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
+ 'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True),
+
}
_defaults = {
'section_id': crm_case._get_section,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
+ 'color': 0,
#'stage_id': _get_stage_id,
}
self.log(cr, uid, l.id, message)
return res
+ def set_priority(self, cr, uid, ids, priority):
+ """Set lead priority
+ """
+ return self.write(cr, uid, ids, {'priority' : priority})
+
+ def set_high_priority(self, cr, uid, ids, *args):
+ """Set lead priority to high
+ """
+ return self.set_priority(cr, uid, ids, '1')
+
+ def set_normal_priority(self, cr, uid, ids, *args):
+ """Set lead priority to normal
+ """
+ return self.set_priority(cr, uid, ids, '3')
+
def convert_opportunity(self, cr, uid, ids, context=None):
""" Precomputation for converting lead to opportunity
"""
<field name="model">crm.lead</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
- <kanban>
+ <kanban default_group_by="stage_id">
<field name="state"/>
+ <field name="color"/>
+ <field name="priority"/>
+ <field name="planned_revenue"/>
+ <field name="user_email"/>
<templates>
<t t-name="kanban-box">
- <div t-attf-class="oe_kanban_box oe_kanban_color_border #{__kanban_color(state.raw_value)}">
- <div class="oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
- <h6 class="oe_kanban_left"><field name="name"/></h6>
- <h5 class="oe_kanban_right" style="vertical-align: top">
- <field name="planned_revenue"/>
- <img src="http://www.gravatar.com/avatar/2eb60ad22dadcf4dc456b28390a80268.png" style="border-radius: 2px" width="20" height="20"/>
- </h5>
- <br class="oe_kanban_clear"/>
- </div>
-
- <div class="oe_kanban_box_content oe_kanban_color_bglight">
- <div class="oe_kanban_right oe_kanban_small">
- <field name="user_id"/>
+ <t t-set="color" t-value="kanban_color(record.color.raw_value || record.state.raw_value)"/>
+ <div t-att-class="color + (record.priority.raw_value == 1 ? ' oe_kanban_color_alert' : '')">
+ <div class="oe_kanban_box oe_kanban_color_border">
+ <table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
+ <tr>
+ <td class="oe_kanban_title3" align="left" valign="middle">
+ <a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/>
+ <a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/>
+ <field name="partner_id"/>
+ </td>
+ <td class="oe_kanban_title2" align="right" valign="middle" t-if="record.planned_revenue.raw_value" nowrap="nowrap">
+ <t t-esc="Math.round(record.planned_revenue.value)"/> <field name="company_currency"/>
+ </td>
+ <td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar"/></td>
+ </tr>
+ </table>
+
+ <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger">
+ <div class="oe_kanban_right oe_kanban_small">
+ <field name="user_login"/>
+ </div>
+ <div>
+ <b><field name="partner_address_name"/></b>
+ </div>
+ <div>
+ <field name="name"/>
+ </div>
+ <div style="padding-left: 0.5em">
+ <i><field name="date_action"/><t t-if="record.date_action.raw_value"> : </t><field name="title_action"/></i>
+ </div>
</div>
- <br class="oe_kanban_clear"/>
-
- <b><field name="partner_address_id"/></b><br/>
- <field name="description"/><br/>
- <field name="date_action"/><t t-if="date_action.raw_value">: </t><field name="title_action"/>
- </div>
-
- <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
- <div class="oe_kanban_left">
- <a string="Send New Email" class="oe_kanban_color_border"
- name="%(mail.action_email_compose_message_wizard)d"
- icon="terp-mail-message-new" type="action"/>
-
- <a string="Schedule/Log Call" class="oe_kanban_color_border"
- name="%(opportunity2phonecall_act)d"
- icon="terp-call-start" type="action"/>
-
- <a string="Add Internal Note" class="oe_kanban_color_border"
- name="%(crm.action_crm_add_note)d"
- context="{'model': 'crm.lead' }"
- icon="terp-document-new" type="action"/>
-
- <a name="action_makeMeeting" type="object" class="oe_kanban_color_border"
- string="Schedule Meeting" icon="gtk-redo" />
- </div>
- <div class="oe_kanban_right">
- <a name="case_cancel" string="Cancel" states="draft" type="object" icon="gtk-cancel" />
- <a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="gtk-cancel" />
- <a name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert" />
- <a name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" />
- <a name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause" />
- <a name="case_escalate" string="Escalate" states="open,pending" type="object" icon="gtk-go-up" />
- <a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="gtk-apply" />
+ <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
+ <div class="oe_kanban_left">
+ <a string="Edit" icon="gtk-edit" type="edit"/>
+ <a string="Delete" icon="gtk-close" type="delete"/>
+ <a string="Change Color" icon="color-picker" type="color" name="color"/>
+ <a string="Send New Email" name="%(crm.action_crm_send_mail)d" context="{'mail':'new', 'model': 'crm.lead'}" icon="terp-mail-message-new" type="action"/>
+ <a string="Schedule/Log Call" name="%(opportunity2phonecall_act)d" icon="terp-call-start" type="action"/>
+ <a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/>
+ <a name="action_makeMeeting" type="object" string="Schedule Meeting" icon="gtk-redo" />
+ </div>
+ <div class="oe_kanban_right">
+ <a name="case_pending" string="Pending" states="draft,open" type="object" icon="lead-stage-pending" />
+ <a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="lead-stage-won" />
+ <a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="lead-stage-lost" />
+ </div>
+ <br class="oe_kanban_clear"/>
</div>
- <br class="oe_kanban_clear"/>
</div>
</div>
</t>
<field name="create_date"/>
</group>
<separator string="Miscelleanous" colspan="4"/>
- <field name="partner_id"/>
+ <field name="partner_id" />
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<group col="4" colspan="2">
<field name="type_id" widget="selection" readonly="1"/>
</field>
</record>
+
+
+ <record id="view_task_kanban" model="ir.ui.view">
+ <field name="name">project.task.kanban</field>
+ <field name="model">project.task</field>
+ <field name="type">kanban</field>
+ <field name="arch" type="xml">
+ <kanban>
+ <field name="state"/>
+ <templates>
+ <t t-name="kanban-box">
+ <t t-set="color">#fff</t>
+ <t t-if="state.raw_value == 'done'" t-set="color">#dfd</t>
+ <t t-if="state.raw_value == 'open'" t-set="color">lightcyan</t>
+ <t t-if="state.raw_value == 'cancel' and total_hours.raw_value gt 0" t-set="color">red</t>
+ <div t-attf-style="background: #{color}">
+ <table>
+ <tr>
+ <td>Title :</td>
+ <td><field name="name"/></td>
+ </tr>
+ <tr>
+ <td>Progress :</td>
+ <td><field name="progress"/></td>
+ </tr>
+ <tr>
+ <td><button data-type="action" data-name="%(action_project_task_reevaluate)d">Reevaluate</button><button data-type="edit" >Edit</button></td>
+ <td><button data-type="object" data-name="prev_type">Previous phase</button></td>
+ </tr>
+ <tr>
+ <td>Project name:</td>
+ <td colspan="2"><field name="project_id"/></td>
+ </tr>
+ <tr>
+ <td>Phase</td>
+ <td colspan="2"><field name="type_id"/></td>
+ </tr>
+ <tr>
+ <td>Remain Time :</td>
+ <td colspan="2"><field name="remaining_hours"/></td>
+ </tr>
+ <tr>
+ <td>Spent Time :</td>
+ <td colspan="2"><field name="remaining_hours"/></td>
+ </tr>
+ <tr>
+ <td>Remain Time :</td>
+ <td colspan="2"><field name="remaining_hours"/></td>
+ </tr>
+ </table>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
<record id="view_task_tree2" model="ir.ui.view">
<field name="name">project.task.tree</field>
<field name="model">project.task</field>
<field name="name">Tasks</field>
<field name="res_model">project.task</field>
<field name="view_type">form</field>
- <field name="view_mode">tree,form,calendar,gantt,graph</field>
+ <field name="view_mode">tree,form,calendar,gantt,graph,kanban</field>
<field eval="False" name="filter"/>
<field name="view_id" ref="view_task_tree2"/>
<field name="context">{"search_default_user_id":uid, "search_default_current": 1}</field>
<field name="name">Overpassed Tasks</field>
<field name="res_model">project.task</field>
<field name="view_type">form</field>
- <field name="view_mode">tree,form,calendar,graph</field>
+ <field name="view_mode">tree,form,calendar,graph,kanban</field>
<field name="domain">[('date_deadline','<',time.strftime('%Y-%m-%d')),('state','in',('draft','pending','open'))]</field>
<field name="filter" eval="True"/>
<field name="search_view_id" ref="view_task_search_form"/>
<field name="res_model">project.task</field>
<field name="name">Project's tasks</field>
<field name="view_type">form</field>
- <field name="view_mode">tree,form,calendar,graph,gantt</field>
+ <field name="view_mode">tree,form,calendar,graph,gantt,kanban</field>
<field name="domain">[('project_id', 'child_of', [active_id])]</field>
<field name="context">{'project_id':active_id, 'active_test':False}</field>
</record>