[IMP] crm, sale_crm, crm_project : Major Improvement on CRM base on https://bugs.launchpad.net/openobject-addons/+bug/499366
lp bug: https://launchpad.net/bugs/499366 fixed bzr revid: hmo@tinyerp.com-20091231125720-ywnu9pf4f90dfvth
This commit is contained in:
parent
4fa0c4955d
commit
77820727d3
|
@ -60,23 +60,26 @@ between mails and Open ERP.""",
|
|||
'crm_phonecall_data.xml',
|
||||
],
|
||||
'update_xml': [
|
||||
'crm_wizard.xml',
|
||||
'crm_configuration_wizard.xml',
|
||||
'crm_wizard.xml',
|
||||
'crm_view.xml',
|
||||
'crm_config_view.xml',
|
||||
'crm_job_wizard.xml',
|
||||
'crm_jobs_view.xml',
|
||||
'crm_jobs_menu.xml',
|
||||
'crm_lead_wizard.xml',
|
||||
'crm_lead_view.xml',
|
||||
'crm_lead_menu.xml',
|
||||
'crm_meeting_wizard.xml',
|
||||
'crm_meeting_view.xml',
|
||||
'crm_meeting_menu.xml',
|
||||
'crm_opportunity_wizard.xml',
|
||||
'crm_opportunity_view.xml',
|
||||
'crm_opportunity_menu.xml',
|
||||
'crm_fund_view.xml',
|
||||
'crm_fund_menu.xml',
|
||||
'crm_claims_view.xml',
|
||||
'crm_claims_menu.xml',
|
||||
'crm_phonecall_wizard.xml',
|
||||
'crm_phonecall_view.xml',
|
||||
'crm_phonecall_menu.xml',
|
||||
'crm_report_view.xml',
|
||||
|
|
|
@ -45,6 +45,8 @@ class crm_claim(osv.osv):
|
|||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
|
@ -64,3 +66,57 @@ class crm_claim(osv.osv):
|
|||
def case_pending(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
|
||||
crm_claim()
|
||||
|
||||
|
||||
class crm_claim_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.claim.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.claim')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.claim')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_claims_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
value = {
|
||||
'name': _('Claims'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.claim',
|
||||
'res_id': int(new_case_id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_claim_assign_wizard()
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<!--
|
||||
((((((((((( Demo Cases )))))))))))
|
||||
-->
|
||||
<record id="crm_case_claim01" model="crm.case">
|
||||
<record id="crm_case_claim01" model="crm.claim">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_15"/>
|
||||
<field eval="time.strftime('%Y-%m-04 10:45:36')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category_claim1"/>
|
||||
|
@ -20,7 +20,7 @@
|
|||
<field name="stage_id" ref="crm.stage_claim1"/>
|
||||
<field eval=""(769) 703-274"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_claim02" model="crm.case">
|
||||
<record id="crm_case_claim02" model="crm.claim">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_6"/>
|
||||
<field eval="time.strftime('%Y-%m-11 11:19:25')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category_claim2"/>
|
||||
|
@ -36,7 +36,7 @@
|
|||
<field name="stage_id" ref="crm.stage_claim5"/>
|
||||
<field eval=""(956) 293-2595"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_claim03" model="crm.case">
|
||||
<record id="crm_case_claim03" model="crm.claim">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_2"/>
|
||||
<field eval="time.strftime('%Y-%m-15 17:44:12')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category_claim1"/>
|
||||
|
@ -53,7 +53,7 @@
|
|||
<field eval=""(079) 681-2139"" name="partner_phone"/>
|
||||
<field eval=""contact@tecsas.fr"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_claim04" model="crm.case">
|
||||
<record id="crm_case_claim04" model="crm.claim">
|
||||
<field eval="time.strftime('%Y-%m-21 14:10:23')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category_claim2"/>
|
||||
<field name="partner_id" ref="base.res_partner_tinyatwork"/>
|
||||
|
@ -68,7 +68,7 @@
|
|||
<field name="stage_id" ref="crm.stage_claim5"/>
|
||||
<field eval=""(514) 698-4118"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_claim05" model="crm.case">
|
||||
<record id="crm_case_claim05" model="crm.claim">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_10"/>
|
||||
<field eval="time.strftime('%Y-%m-28 16:20:43')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category_claim1"/>
|
||||
|
@ -84,7 +84,7 @@
|
|||
<field name="stage_id" ref="crm.stage_claim3"/>
|
||||
<field eval=""(855) 924-4364"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_claim06" model="crm.case">
|
||||
<record id="crm_case_claim06" model="crm.claim">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="crm.category_claim2"/>
|
||||
|
@ -101,7 +101,7 @@
|
|||
<field eval=""(373) 907-1009"" name="partner_phone"/>
|
||||
<field eval=""info@opensides.be"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_claims07" model="crm.case">
|
||||
<record id="crm_case_claims07" model="crm.claim">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="crm.category_claim1"/>
|
||||
<field name="partner_id" ref="base.res_partner_seagate"/>
|
||||
|
@ -117,4 +117,4 @@
|
|||
<field eval=""(282) 603-7489"" name="partner_phone"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
######################## CLAIMS (menu) ###########################
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_claim0">
|
||||
<field name="name">All Claims</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.claim</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(ref('section_support_claims'))+')]'"/>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_claims_filter"/>
|
||||
</record>
|
||||
|
|
|
@ -5,9 +5,37 @@
|
|||
# Claims
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_claim_assign_wizard_form">
|
||||
<field name="name">crm.claim.assign_wizard.form</field>
|
||||
<field name="model">crm.claim.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_claim_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.claim.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_claim_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_claims_tree_view">
|
||||
<field name="name">CRM - Claims Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.claim</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Claims" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -24,7 +52,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_claims_form_view">
|
||||
<field name="name">CRM - Claims Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.claim</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Claims">
|
||||
|
@ -43,7 +71,7 @@
|
|||
</group>
|
||||
<group colspan="2">
|
||||
<field name="case_id" select="1"/>
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_claim_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
@ -139,7 +167,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_claims_calendar_view">
|
||||
<field name="name">CRM - Claims Calendar</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.claim</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -152,8 +180,8 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_claims_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.claims.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Claims Search</field>
|
||||
<field name="model">crm.claim</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Claims">
|
||||
|
|
|
@ -186,46 +186,5 @@ class crm_menu_config_wizard(osv.osv_memory):
|
|||
}
|
||||
|
||||
crm_menu_config_wizard()
|
||||
|
||||
|
||||
class crm_generic_wizard(osv.osv_memory):
|
||||
_name = 'crm.generic_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.case')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.case')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.read(cr, uid, case_id, ['state'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False)
|
||||
}, context=context)
|
||||
case_obj.write(cr, uid, case_id, {'case_id':new_case_id}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
return {}
|
||||
|
||||
crm_generic_wizard()
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -62,36 +62,8 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_case_stage_tree"/>
|
||||
</record>
|
||||
<menuitem action="crm_case_stage_act" id="menu_crm_case_stage_act" parent="crm.next_id_51"/>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="crm_generic_wizard">
|
||||
<field name="name">crm.generic_wizard.form</field>
|
||||
<field name="model">crm.generic_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Generic Wizard">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="crm_generic_wizard_act" model="ir.actions.act_window">
|
||||
<field name="name">Generic Wizard</field>
|
||||
<field name="res_model">crm.generic_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_generic_wizard"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
<menuitem action="crm_case_stage_act" id="menu_crm_case_stage_act" parent="crm.next_id_51"/>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<wizard
|
||||
string="History of Events"
|
||||
name="crm.case.history.events"
|
||||
model="crm.case"
|
||||
id="wizard_case_history_event"
|
||||
keyword="client_action_relate"
|
||||
|
||||
/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_partner_create"
|
||||
keyword="client_action_multi"
|
||||
model="crm.case"
|
||||
name="crm.case.partner_create"
|
||||
multi="True"
|
||||
string="Create Partner"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_meeting"
|
||||
keyword="client_action_multi"
|
||||
model="crm.case"
|
||||
name="crm.case.meeting"
|
||||
multi="True"
|
||||
string="Schedule Meeting"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_opportunity_set"
|
||||
keyword="client_action_multi"
|
||||
model="crm.case"
|
||||
name="crm.case.opportunity_set"
|
||||
multi="True"
|
||||
string="Convert To Opportunity"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_partner_create_opportunity"
|
||||
keyword="client_action_multi"
|
||||
model="res.partner"
|
||||
name="crm.case.partner.opportunity_create"
|
||||
menu="False"
|
||||
string="Create Opportunity"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_reschedule_phone_call"
|
||||
keyword="client_action_multi"
|
||||
model="crm.case"
|
||||
name="crm.case.reschedule_phone_call"
|
||||
multi="True"
|
||||
string="Schedule Phone Call" />
|
||||
|
||||
<wizard
|
||||
id="wizard_partner_create_opportunity1"
|
||||
keyword="client_action_relate"
|
||||
model="res.partner"
|
||||
name="crm.case.partner.opportunity_create"
|
||||
string="Create Opportunity"/>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_helpingstreetchildren0" model="crm.case">
|
||||
<record id="crm_case_helpingstreetchildren0" model="crm.fundraising">
|
||||
<field eval="50" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -20,7 +20,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_helpingearthquakevictims0" model="crm.case">
|
||||
<record id="crm_case_helpingearthquakevictims0" model="crm.fundraising">
|
||||
<field eval="80" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.main_address"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -38,7 +38,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_donatingbookstoschoollibraries0" model="crm.case">
|
||||
<record id="crm_case_donatingbookstoschoollibraries0" model="crm.fundraising">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_zen"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="categ2_fund1"/>
|
||||
|
@ -55,7 +55,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_renovatinggovernmentschools0" model="crm.case">
|
||||
<record id="crm_case_renovatinggovernmentschools0" model="crm.fundraising">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_7"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="categ2_fund2"/>
|
||||
|
@ -73,7 +73,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_donatingambulancestohospitals0" model="crm.case">
|
||||
<record id="crm_case_donatingambulancestohospitals0" model="crm.fundraising">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_13"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="categ2_fund4"/>
|
||||
|
@ -90,7 +90,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_donatinghospitalequipments0" model="crm.case">
|
||||
<record id="crm_case_donatinghospitalequipments0" model="crm.fundraising">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_2"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="categ2_fund3"/>
|
||||
|
@ -108,7 +108,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_encouragingarts0" model="crm.case">
|
||||
<record id="crm_case_encouragingarts0" model="crm.fundraising">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_14"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="categ2_fund2"/>
|
||||
|
@ -125,7 +125,7 @@
|
|||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="crm_case_promotingculturalprogramsandpreservingdyingartforms0" model="crm.case">
|
||||
<record id="crm_case_promotingculturalprogramsandpreservingdyingartforms0" model="crm.fundraising">
|
||||
<field eval="10" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
|
|
@ -4,10 +4,9 @@
|
|||
<!-- MENU -->
|
||||
<record model="ir.actions.act_window" id="crm_case_category_act_fund_all1">
|
||||
<field name="name">All Funds</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.fundraising</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="view_id" ref="crm.crm_case_tree_view_fund"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support4)+')]'"/>
|
||||
<field name="view_id" ref="crm.crm_case_tree_view_fund"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_fund_filter"/>
|
||||
</record>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# ------------------------------------------------------
|
||||
<record model="ir.ui.view" id="crm_case_tree_view_fund">
|
||||
<field name="name">CRM - Funds Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.fundraising</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Funds Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -30,7 +30,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_form_view_fund">
|
||||
<field name="name">CRM - Funds Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.fundraising</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Funds Form">
|
||||
|
@ -127,7 +127,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_calendar_view_fund">
|
||||
<field name="name">CRM - Funds Calendar</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.fundraising</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -139,7 +139,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_graph_view_fund">
|
||||
<field name="name">CRM - Funds Graph</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.fundraising</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Funds by Categories" type="bar" orientation="horizontal">
|
||||
|
@ -151,8 +151,8 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_fund_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.fund.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Funds Search</field>
|
||||
<field name="model">crm.fundraising</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Funds">
|
||||
|
|
|
@ -71,3 +71,43 @@ class crm_helpdesk(osv.osv):
|
|||
|
||||
crm_helpdesk()
|
||||
|
||||
class crm_helpdesk_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.helpdesk.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.helpdesk')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.helpdesk')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.read(cr, uid, case_id, ['state'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False)
|
||||
}, context=context)
|
||||
case_obj.write(cr, uid, case_id, {'case_id':new_case_id}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
return {}
|
||||
|
||||
crm_helpdesk_assign_wizard()
|
||||
|
||||
|
|
|
@ -6,6 +6,34 @@
|
|||
# Helpdesk Support
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_helpdesk_assign_wizard_form">
|
||||
<field name="name">crm.helpdesk.assign_wizard.form</field>
|
||||
<field name="model">crm.helpdesk.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_helpdesk_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.opportunity.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_helpdesk_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_form_view_helpdesk">
|
||||
<field name="name">CRM - Helpdesk Support Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
|
@ -20,7 +48,7 @@
|
|||
<field name="priority"/>
|
||||
<group colspan="2">
|
||||
<field name="case_id" select="1"/>
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_helpdesk_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
|
|
|
@ -50,6 +50,8 @@ class crm_job(osv.osv):
|
|||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
|
@ -64,4 +66,4 @@ class crm_job(osv.osv):
|
|||
return self._map_ids('case_cancel',cr,uid,ids,*args,**argv)
|
||||
def case_reset(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_reset',cr,uid,ids,*args,**argv)
|
||||
crm_job()
|
||||
crm_job()
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<wizard
|
||||
id="wizard_crm_job_reschedule_phone_call"
|
||||
keyword="client_action_multi"
|
||||
model="crm.job"
|
||||
name="crm.job.reschedule_phone_call"
|
||||
multi="True"
|
||||
string="Schedule Phone Call" />
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_job_meeting_set"
|
||||
keyword="client_action_multi"
|
||||
model="crm.job"
|
||||
name="crm.job.meeting_set"
|
||||
multi="True"
|
||||
string="Schedule Meeting"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_job_partner_create"
|
||||
keyword="client_action_multi"
|
||||
model="crm.job"
|
||||
name="crm.job.partner_create"
|
||||
multi="True"
|
||||
string="Create Partner"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -6,7 +6,7 @@
|
|||
-->
|
||||
|
||||
<!--For Jobs Requests-->
|
||||
<record id="crm_case_salesman0" model="crm.case">
|
||||
<record id="crm_case_salesman0" model="crm.job">
|
||||
<field eval="time.strftime('%Y-%m-01 10:35:50')" name="date"/>
|
||||
<field eval="time.strftime('%Y-%m-03')" name="date_deadline"/>
|
||||
<field name="category2_id" ref="crm.category_job1"/>
|
||||
|
@ -25,7 +25,7 @@
|
|||
<field eval=""Salesman"" name="name"/>
|
||||
<field eval=""1236547890"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_traineemca0" model="crm.case">
|
||||
<record id="crm_case_traineemca0" model="crm.job">
|
||||
<field model="res.partner.canal" name="canal_id" search="[('name','=','E-mail')]"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_14"/>
|
||||
<field name="som" ref="base.som_fury"/>
|
||||
|
@ -47,7 +47,7 @@
|
|||
<field eval="time.strftime('%Y-%m-15')" name="date_deadline"/>
|
||||
<field eval=""6633225"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_fresher0" model="crm.case">
|
||||
<record id="crm_case_fresher0" model="crm.job">
|
||||
<field model="res.partner.canal" name="canal_id" search="[('name','=','direct')]"/>
|
||||
<field name="som" ref="base.som_happy"/>
|
||||
<field eval="time.strftime('%Y-%m-15 16:10:00')" name="date"/>
|
||||
|
@ -67,7 +67,7 @@
|
|||
<field eval=""Fresher"" name="name"/>
|
||||
<field eval=""999666735"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_yrsexperienceinphp0" model="crm.case">
|
||||
<record id="crm_case_yrsexperienceinphp0" model="crm.job">
|
||||
<field eval="time.strftime('%Y-%m-25 16:25:52')" name="date"/>
|
||||
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
|
||||
<field name="categ_id" ref="crm.categ_job2"/>
|
||||
|
@ -84,7 +84,7 @@
|
|||
<field name="stage_id" ref="crm.stage_job6"/>
|
||||
<field eval=""More than 5 yrs Experience in PHP"" name="name"/>
|
||||
</record>
|
||||
<record id="crm_case_marketingjob0" model="crm.case">
|
||||
<record id="crm_case_marketingjob0" model="crm.job">
|
||||
<field eval="time.strftime('%Y-%m-26 17:15:32')" name="date"/>
|
||||
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
|
||||
<field name="category2_id" ref="crm.category_job2"/>
|
||||
|
@ -103,7 +103,7 @@
|
|||
<field eval=""Marketing Job"" name="name"/>
|
||||
<field eval=""33968745"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_financejob0" model="crm.case">
|
||||
<record id="crm_case_financejob0" model="crm.job">
|
||||
<field eval="time.strftime('%Y-%m-26 17:39:42')" name="date"/>
|
||||
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
|
||||
<field name="category2_id" ref="crm.category_job2"/>
|
||||
|
@ -122,7 +122,7 @@
|
|||
<field eval=""Finance Job"" name="name"/>
|
||||
<field eval=""33968745"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_traineemca1" model="crm.case">
|
||||
<record id="crm_case_traineemca1" model="crm.job">
|
||||
<field model="res.partner.canal" name="canal_id" search="[('name','=','E-mail')]"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_14"/>
|
||||
<field name="som" ref="base.som_fury"/>
|
||||
|
|
|
@ -6,10 +6,9 @@
|
|||
######################## JOB OPPORTUNITIES (menu) ###########################
|
||||
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
|
||||
<field name="name">All Jobs Requests</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.job</field>
|
||||
<field name="view_mode">tree,calendar,form,graph</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_job"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support0)+')]'"/>
|
||||
<field name="view_id" ref="crm_case_tree_view_job"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_jobs_filter"/>
|
||||
</record>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_tree_view_job">
|
||||
<field name="name">CRM - Jobs Requests Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.job</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Jobs - Recruitment Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_form_view_job">
|
||||
<field name="name">CRM - Jobs Requests Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.job</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Jobs - Recruitment Form">
|
||||
|
@ -41,7 +41,7 @@
|
|||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="user_id" string="Responsible" select="2"/>
|
||||
<button string="Schedule a Phone Call"
|
||||
name="%(wizard_crm_reschedule_phone_call)d" icon="gtk-redo" type="action" />
|
||||
name="%(wizard_crm_job_reschedule_phone_call)d" icon="gtk-redo" type="action" />
|
||||
<newline/>
|
||||
<label string="Stage: " align="1.0"/>
|
||||
<group colspan="1" col="2">
|
||||
|
@ -50,7 +50,7 @@
|
|||
</group>
|
||||
<field name="date" string="Next Interview"/>
|
||||
<field name="duration" widget="float_time"/>
|
||||
<button name="set_meeting" string="Schedule Meeting" icon="terp-crm"/>
|
||||
<button name="%(wizard_crm_job_meeting_set)d" string="Schedule Meeting" icon="terp-crm" type="action"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Job Info">
|
||||
|
@ -61,11 +61,15 @@
|
|||
<field name="partner_mobile"/>
|
||||
<field name="email_from" string="Candidate Email"/>
|
||||
<newline/>
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" colspan="2"/>
|
||||
<button name="set_partner" string="Convert to Partner" icon="terp-partner"/>
|
||||
<field name="partner_address_id" string="Contact" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="1"/>
|
||||
<group colspan="2" col="3">
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" />
|
||||
<button string="Convert to Partner"
|
||||
icon="terp-partner" name="%(wizard_crm_job_partner_create)d"
|
||||
type="action" attrs="{'invisible':[('partner_id','!=',False)]}"
|
||||
/>
|
||||
</group>
|
||||
<field name="partner_address_id" string="Contact" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="1"/>
|
||||
<newline/>
|
||||
<separator colspan="4" string="Contract Data"/>
|
||||
<field name="probability" string="Availability (weeks)"/>
|
||||
<newline/>
|
||||
|
@ -147,7 +151,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_calendar_view_job">
|
||||
<field name="name">CRM - Jobs Requests Calendar</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.job</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -160,33 +164,33 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_jobs_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.jobs.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Jobs Requests Search</field>
|
||||
<field name="model">crm.job</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Jobs">
|
||||
<group col="7" colspan="1">
|
||||
<filter icon="gtk-home" string=" Today "
|
||||
separator="1"
|
||||
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
help="Todays's Jobs"
|
||||
/>
|
||||
<filter icon="gtk-media-rewind"
|
||||
string=" 7 Days " separator="1"
|
||||
domain="[('date::date','<', time.strftime('%%Y-%%m-%%d')), ('date::date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Jobs during last 7 days"
|
||||
/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="gtk-new" string="New Jobs"
|
||||
domain="[('section_id.name','=','Jobs'),('stage_id.name','=','Initial Jobs Demand')]"
|
||||
domain="[('stage_id.name','=','Initial Jobs Demand')]"
|
||||
separator="1" help="All Initial Jobs"
|
||||
/>
|
||||
<filter icon="gtk-yes" string="Open Jobs"
|
||||
domain="[('section_id.name','=','Jobs'),('state','=','open')]"
|
||||
domain="[('state','=','open')]"
|
||||
separator="1" help="Open Jobs"
|
||||
/>
|
||||
<filter icon="gtk-media-pause" string="Pending Jobs"
|
||||
domain="[('section_id.name','=','Jobs'),('state','=','pending')]"
|
||||
domain="[('state','=','pending')]"
|
||||
separator="1" help="Pending Jobs"
|
||||
/>
|
||||
</group>
|
||||
|
|
|
@ -52,6 +52,8 @@ class crm_lead(osv.osv):
|
|||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
|
@ -66,8 +68,9 @@ class crm_lead(osv.osv):
|
|||
return self._map_ids('case_cancel',cr,uid,ids,*args,**argv)
|
||||
def case_reset(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_reset',cr,uid,ids,*args,**argv)
|
||||
def case_escalate(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_escalate',cr,uid,ids,*args,**argv)
|
||||
|
||||
|
||||
|
||||
crm_lead()
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
-->
|
||||
|
||||
<!--For Leads-->
|
||||
<record id="crm_case_itisatelesalescampaign0" model="crm.case">
|
||||
<record id="crm_case_itisatelesalescampaign0" model="crm.lead">
|
||||
<field name="category2_id" ref="crm.category_lead1"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
|
@ -21,7 +21,7 @@
|
|||
<field eval=""The Oil Company"" name="partner_name"/>
|
||||
<field eval=""(769) 703-274"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_electonicgoodsdealer0" model="crm.case">
|
||||
<record id="crm_case_electonicgoodsdealer0" model="crm.lead">
|
||||
<field name="category2_id" ref="crm.category_lead7"/>
|
||||
<field eval=""4"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
|
@ -36,7 +36,7 @@
|
|||
<field eval=""Le Club SARL"" name="partner_name"/>
|
||||
<field eval=""(956) 293-2595"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_developingwebapplications0" model="crm.case">
|
||||
<record id="crm_case_developingwebapplications0" model="crm.lead">
|
||||
<field name="category2_id" ref="crm.category_lead5"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
|
@ -52,7 +52,7 @@
|
|||
<field eval=""(079) 681-2139"" name="partner_phone"/>
|
||||
<field eval=""contact@tecsas.fr"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_qrecorp0" model="crm.case">
|
||||
<record id="crm_case_qrecorp0" model="crm.lead">
|
||||
<field name="category2_id" ref="crm.category_lead8"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
|
@ -66,7 +66,7 @@
|
|||
<field eval=""The Gas Company"" name="partner_name"/>
|
||||
<field eval=""(514) 698-4118"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_itdeveloper0" model="crm.case">
|
||||
<record id="crm_case_itdeveloper0" model="crm.lead">
|
||||
<field name="category2_id" ref="crm.category_lead4"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
|
@ -81,7 +81,7 @@
|
|||
<field eval=""Stonage IT"" name="partner_name"/>
|
||||
<field eval=""(855) 924-4364"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_mgroperations0" model="crm.case">
|
||||
<record id="crm_case_mgroperations0" model="crm.lead">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="crm.category_lead3"/>
|
||||
|
@ -99,7 +99,7 @@
|
|||
<field eval=""(373) 907-1009"" name="partner_phone"/>
|
||||
<field eval=""info@opensides.be"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_vpoperations0" model="crm.case">
|
||||
<record id="crm_case_vpoperations0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="crm.category_lead8"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
|
|
|
@ -7,10 +7,9 @@
|
|||
|
||||
<record model="ir.actions.act_window" id="crm_case_category_act_leads_all">
|
||||
<field name="name">All Leads</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_leads"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support2)+')]'"/>
|
||||
<field name="view_id" ref="crm_case_tree_view_leads"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
|
||||
</record>
|
||||
|
@ -48,8 +47,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_lead_categ">
|
||||
<field name="res_model">report.crm.case.section.categ2</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support2)+')]'"/>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem parent="menu_action_report_crm_case_lead" name="Cases by Leads and Type" action="action_report_crm_case_lead_categ" id="menu_action_report_crm_case_lead_categ"/>
|
||||
|
@ -57,8 +55,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_lead_stage">
|
||||
<field name="res_model">report.crm.case.section.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support2)+')]'"/>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Leads and Stage" parent="menu_action_report_crm_case_lead" action="action_report_crm_case_lead_stage" id="menu_action_report_crm_case_lead_stage"/>
|
||||
|
@ -66,8 +63,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_lead_categ_stage">
|
||||
<field name="res_model">report.crm.case.section.categ.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support2)+')]'"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Section, Category and Stage" parent="menu_action_report_crm_case_lead" action="action_report_crm_case_lead_categ_stage" id="menu_action_report_crm_case_lead_categ_stage"/>
|
||||
|
@ -75,8 +71,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_lead_categ_categ2">
|
||||
<field name="res_model">report.crm.case.section.categ.categ2</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support2)+')]'"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Section, Category and Type" parent="menu_action_report_crm_case_lead" action="action_report_crm_case_lead_categ_categ2" id="menu_action_report_crm_case_lead_categ_categ2"/>
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
|
||||
# ------------------------------------------------------
|
||||
# Leads
|
||||
# ------------------------------------------------------
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_form_view_leads">
|
||||
<field name="name">CRM - Leads Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leads Form">
|
||||
|
@ -24,7 +24,7 @@
|
|||
</group>
|
||||
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Lead Source"/>
|
||||
<field name="category2_id" string="Campaign Type" select="1"/>
|
||||
<button string="Convert to Opportunity" name="%(wizard_crm_opportunity_set)d" icon="gtk-index" type="action"/>
|
||||
<button string="Convert to Opportunity" name="%(wizard_crm_lead_opportunity_set)d" icon="gtk-index" type="action"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Leads">
|
||||
|
@ -38,7 +38,7 @@
|
|||
<group colspan="2" col="3">
|
||||
<field name="partner_id" colspan="1"/>
|
||||
<button string="Convert to Partner"
|
||||
icon="terp-partner" name="%(wizard_crm_partner_create)d"
|
||||
icon="terp-partner" name="%(wizard_crm_lead_partner_create)d"
|
||||
type="action" attrs="{'invisible':[('partner_id','!=',False)]}"
|
||||
/>
|
||||
</group>
|
||||
|
@ -137,7 +137,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_tree_view_leads">
|
||||
<field name="name">CRM - Leads Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -159,7 +159,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_calendar_view_leads">
|
||||
<field name="name">CRM - Leads Calendar</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -173,20 +173,20 @@
|
|||
|
||||
|
||||
<record id="view_crm_case_leads_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.leads.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Leads Search</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Leads">
|
||||
<group col="3" colspan="1">
|
||||
<filter icon="gtk-home" string=" Today "
|
||||
separator="1"
|
||||
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
help="Todays's Leads"
|
||||
/>
|
||||
<filter icon="gtk-media-rewind" string=" 7 Days "
|
||||
separator="1" help="Leads during last 7 days"
|
||||
domain="[('date::date','<', time.strftime('%%Y-%%m-%%d')), ('date::date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
/>
|
||||
</group>
|
||||
<separator orientation="vertical"/>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_lead_partner_create"
|
||||
keyword="client_action_multi"
|
||||
model="crm.lead"
|
||||
name="crm.lead.partner_create"
|
||||
multi="True"
|
||||
string="Create Partner"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_lead_opportunity_set"
|
||||
keyword="client_action_multi"
|
||||
model="crm.lead"
|
||||
name="crm.lead.opportunity_set"
|
||||
multi="True"
|
||||
string="Convert To Opportunity"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -27,6 +27,7 @@ import base64
|
|||
import re
|
||||
import time
|
||||
import tools
|
||||
from tools.translate import _
|
||||
|
||||
class crm_meeting(osv.osv):
|
||||
_name = 'crm.meeting'
|
||||
|
@ -344,17 +345,29 @@ class crm_meeting_generic_wizard(osv.osv_memory):
|
|||
case_obj = self.pool.get('crm.meeting')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.read(cr, uid, case_id, ['state'])
|
||||
if case['state'] in ('done'):
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False)
|
||||
}, context=context)
|
||||
case_obj.write(cr, uid, case_id, {'case_id':new_case_id}, context=context)
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
return {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
new_case = case_obj.read(cr, uid, new_case_id, ['id'])
|
||||
value = {
|
||||
'name': _('Meetings'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'calendar, tree, form',
|
||||
'res_model': 'crm.meeting',
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_meeting_generic_wizard()
|
||||
|
||||
|
|
|
@ -52,6 +52,8 @@ class crm_opportunity(osv.osv):
|
|||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
|
@ -70,4 +72,58 @@ class crm_opportunity(osv.osv):
|
|||
return self._map_ids('case_escalate',cr,uid,ids,*args,**argv)
|
||||
def case_pending(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
|
||||
crm_opportunity()
|
||||
crm_opportunity()
|
||||
|
||||
|
||||
class crm_opportunity_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.opportunity.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section'),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.opportunity')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.opportunity')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
value = {
|
||||
'name': _('Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.opportunity',
|
||||
'res_id': int(new_case_id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_opportunity_assign_wizard()
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<!--For Opportunity-->
|
||||
|
||||
<record id="crm_case_construstazunits0" model="crm.case">
|
||||
<record id="crm_case_construstazunits0" model="crm.opportunity">
|
||||
<field eval="60" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_zen"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -25,7 +25,7 @@
|
|||
<field name="stage_id" ref="crm.stage_oppor3"/>
|
||||
<field eval=""CONS TRUST (AZ) 529701 - 1000 units"" name="name"/>
|
||||
</record>
|
||||
<record id="crm_case_rdroundfundingunits0" model="crm.case">
|
||||
<record id="crm_case_rdroundfundingunits0" model="crm.opportunity">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_15"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="category2_id" ref="crm.category_oppor2"/>
|
||||
|
@ -43,7 +43,7 @@
|
|||
<field name="stage_id" ref="crm.stage_oppor1"/>
|
||||
<field eval=""3rd Round Funding - 1000 units "" name="name"/>
|
||||
</record>
|
||||
<record id="crm_case_mediapoleunits0" model="crm.case">
|
||||
<record id="crm_case_mediapoleunits0" model="crm.opportunity">
|
||||
<field eval="10" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_3"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -63,7 +63,7 @@
|
|||
<field eval=""Mediapole - 5000 units"" name="name"/>
|
||||
<field eval=""info@mediapole.net"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_abcfuelcounits0" model="crm.case">
|
||||
<record id="crm_case_abcfuelcounits0" model="crm.opportunity">
|
||||
<field eval="40" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -82,7 +82,7 @@
|
|||
<field eval=""ABC FUEL CO 829264 - 1000 units "" name="name"/>
|
||||
<field eval=""info@opensides.be"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_dirtminingltdunits0" model="crm.case">
|
||||
<record id="crm_case_dirtminingltdunits0" model="crm.opportunity">
|
||||
<field eval="80" name="probability"/>
|
||||
<field name="partner_address_id" ref="base.res_partner_address_wong"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
|
|
@ -5,10 +5,9 @@
|
|||
|
||||
<record model="ir.actions.act_window" id="crm_case_category_act_oppor11">
|
||||
<field name="name">All Opportunities</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.opportunity</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_oppor"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
<field name="view_id" ref="crm_case_tree_view_oppor"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
|
||||
</record>
|
||||
|
@ -53,8 +52,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_oppor_categ">
|
||||
<field name="res_model">report.crm.case.section.categ2</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<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"/>
|
||||
|
@ -62,8 +60,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_oppor_stage">
|
||||
<field name="res_model">report.crm.case.section.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Opportunities and Stage" parent="menu_action_report_crm_case_oppor" action="action_report_crm_case_oppor_stage" id="menu_action_report_crm_case_oppor_stage"/>
|
||||
|
@ -71,8 +68,7 @@
|
|||
<record model="ir.actions.act_window" id="action_report_crm_case_oppor_categ_stage">
|
||||
<field name="res_model">report.crm.case.section.categ.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Opportunities, 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"/>
|
||||
|
@ -80,8 +76,7 @@
|
|||
<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>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(section_support3)+')]'"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
</record>
|
||||
<menuitem name="Cases by Opportunities, 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"/>
|
||||
|
|
|
@ -4,13 +4,40 @@
|
|||
|
||||
# ------------------------------------------------------
|
||||
# Opportunities
|
||||
# ------------------------------------------------------
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_opportunity_assign_wizard_form">
|
||||
<field name="name">crm.opportunity.assign_wizard.form</field>
|
||||
<field name="model">crm.opportunity.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_opportunity_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.opportunity.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_opportunity_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_form_view_oppor">
|
||||
<field name="name">CRM - Opportunities Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.opportunity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Opportunities">
|
||||
|
@ -19,7 +46,7 @@
|
|||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="user_id" select="2" string="Responsible"/>
|
||||
<button string="Schedule a Phone Call"
|
||||
name="%(wizard_crm_reschedule_phone_call)d" icon="gtk-redo" type="action" />
|
||||
name="%(wizard_crm_opportunity_reschedule_phone_call)d" icon="gtk-redo" type="action" />
|
||||
<newline/>
|
||||
<label string="Sales Stage: " align="1.0"/>
|
||||
<group colspan="1" col="2">
|
||||
|
@ -29,7 +56,7 @@
|
|||
<field name="date" string="Deadline"/>
|
||||
<group colspan="2">
|
||||
<field name="case_id" select="1"/>
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_opportunity_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
|
@ -130,7 +157,7 @@
|
|||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_tree_view_oppor">
|
||||
<field name="name">CRM - Opportunities Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.opportunity</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Opportunities Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -152,20 +179,20 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_opportunities_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.opportunities.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Opportunities Search</field>
|
||||
<field name="model">crm.opportunity</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Opportunities">
|
||||
<group col="3" colspan="1">
|
||||
<filter icon="gtk-home" string=" Today "
|
||||
separator="1"
|
||||
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
help="Todays's Opportunities"
|
||||
/>
|
||||
<filter icon="gtk-media-rewind" string=" 7 Days "
|
||||
separator="1" help="Opportunities during last 7 days"
|
||||
domain="[('date::date','<', time.strftime('%%Y-%%m-%%d')), ('date::date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
/>
|
||||
</group>
|
||||
<separator orientation="vertical"/>
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<wizard
|
||||
id="wizard_crm_opportunity_reschedule_phone_call"
|
||||
keyword="client_action_multi"
|
||||
model="crm.opportunity"
|
||||
name="crm.opportunity.reschedule_phone_call"
|
||||
multi="True"
|
||||
string="Schedule Phone Call" />
|
||||
|
||||
<wizard
|
||||
id="wizard_partner_create_opportunity"
|
||||
keyword="client_action_multi"
|
||||
model="res.partner"
|
||||
name="crm.case.opportunity.partner_opportunity"
|
||||
menu="False"
|
||||
string="Create Opportunity"/>
|
||||
|
||||
|
||||
|
||||
<wizard
|
||||
id="wizard_partner_create_opportunity1"
|
||||
keyword="client_action_relate"
|
||||
model="res.partner"
|
||||
name="crm.case.opportunity.partner_opportunity"
|
||||
string="Create Opportunity"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -28,6 +28,8 @@ import re
|
|||
import time
|
||||
import tools
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
class crm_phonecall(osv.osv):
|
||||
_name = "crm.phonecall"
|
||||
_description = "Phonecall Cases"
|
||||
|
@ -67,4 +69,57 @@ class crm_phonecall(osv.osv):
|
|||
def case_pending(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
|
||||
|
||||
crm_phonecall()
|
||||
crm_phonecall()
|
||||
|
||||
|
||||
class crm_phonecall_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.phonecall.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.phonecall')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.phonecall')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
value = {
|
||||
'name': _('Phone Calls'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.phonecall',
|
||||
'res_id': int(new_case_id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_phonecall_assign_wizard()
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<!--
|
||||
((((((((((( Demo Cases )))))))))))
|
||||
-->
|
||||
<record id="crm_case_phone01" model="crm.case">
|
||||
<record id="crm_case_phone01" model="crm.phonecall">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_15"/>
|
||||
<field eval="time.strftime('%Y-%m-04 10:45:36')" name="date"/>
|
||||
<field name="partner_id" ref="base.res_partner_11"/>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<field name="stage_id" ref="crm.stage_phone1"/>
|
||||
<field eval=""(769) 703-274"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_phone02" model="crm.case">
|
||||
<record id="crm_case_phone02" model="crm.phonecall">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_6"/>
|
||||
<field eval="time.strftime('%Y-%m-11 11:19:25')" name="date"/>
|
||||
<field name="partner_id" ref="base.res_partner_6"/>
|
||||
|
@ -34,7 +34,7 @@
|
|||
<field name="stage_id" ref="crm.stage_phone2"/>
|
||||
<field eval=""(956) 293-2595"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_phone03" model="crm.case">
|
||||
<record id="crm_case_phone03" model="crm.phonecall">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_2"/>
|
||||
<field eval="time.strftime('%Y-%m-15 17:44:12')" name="date"/>
|
||||
<field name="partner_id" ref="base.res_partner_10"/>
|
||||
|
@ -50,7 +50,7 @@
|
|||
<field eval=""(079) 681-2139"" name="partner_phone"/>
|
||||
<field eval=""contact@tecsas.fr"" name="email_from"/>
|
||||
</record>
|
||||
<record id="crm_case_phone04" model="crm.case">
|
||||
<record id="crm_case_phone04" model="crm.phonecall">
|
||||
<field eval="time.strftime('%Y-%m-21 14:10:23')" name="date"/>
|
||||
<field name="partner_id" ref="base.res_partner_tinyatwork"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
|
@ -64,7 +64,7 @@
|
|||
<field name="stage_id" ref="crm.stage_phone1"/>
|
||||
<field eval=""(514) 698-4118"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_phone05" model="crm.case">
|
||||
<record id="crm_case_phone05" model="crm.phonecall">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_10"/>
|
||||
<field eval="time.strftime('%Y-%m-28 16:20:43')" name="date"/>
|
||||
<field name="partner_id" ref="base.res_partner_5"/>
|
||||
|
@ -79,7 +79,7 @@
|
|||
<field name="stage_id" ref="crm.stage_phone2"/>
|
||||
<field eval=""(855) 924-4364"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_phone06" model="crm.case">
|
||||
<record id="crm_case_phone06" model="crm.phonecall">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="partner_id" ref="base.res_partner_9"/>
|
||||
|
|
|
@ -5,23 +5,20 @@
|
|||
<act_window
|
||||
id="crm_case_categ_phone_create_partner"
|
||||
name="Schedule Phone Call"
|
||||
res_model="crm.case"
|
||||
res_model="crm.phonecall"
|
||||
src_model="res.partner"
|
||||
view_mode="calendar,tree,form"
|
||||
context="{'default_partner_id': active_id, 'default_duration': 1.0}"
|
||||
domain="[('section_id','=','Phone Calls')]"/>
|
||||
/>
|
||||
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone_create_partner">
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(ref('section_support_phone'))+')]'"/>
|
||||
</record>
|
||||
|
||||
######################## PHONE CALLS (menu) ###########################
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone0">
|
||||
<field name="name">Phone Calls</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.phonecall</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_phone_tree_view"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(ref('section_support_phone'))+')]'"/>
|
||||
<field name="view_id" ref="crm_case_phone_tree_view"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_phone0">
|
||||
|
@ -47,11 +44,11 @@
|
|||
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone_incoming0">
|
||||
<field name="name">Inbound</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.phonecall</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_phone_tree_view"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(ref('section_support_phone'))+'), (\'categ_id\',\'=\','+str(ref('categ_phone1'))+')]'"/>
|
||||
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone1'))+')]'"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
</record>
|
||||
|
@ -76,11 +73,11 @@
|
|||
<menuitem name="Inbound" id="menu_crm_case_phone_inbound" parent="crm.menu_crm_case_phone" action="crm_case_categ_phone_incoming0"/>
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone_outgoing0">
|
||||
<field name="name">Outbound</field>
|
||||
<field name="res_model">crm.case</field>
|
||||
<field name="res_model">crm.phonecall</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_phone_tree_view"/>
|
||||
<field name="domain" eval="'[(\'section_id\',\'=\','+str(ref('section_support_phone'))+'), (\'categ_id\',\'=\','+str(ref('categ_phone2'))+')]'"/>
|
||||
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone2'))+')]'"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
</record>
|
||||
|
|
|
@ -5,9 +5,37 @@
|
|||
# Phone Calls
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_phonecall_assign_wizard_form">
|
||||
<field name="name">crm.phonecall.assign_wizard.form</field>
|
||||
<field name="model">crm.phonecall.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_phonecall_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.phonecall.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_phonecall_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_phone_tree_view">
|
||||
<field name="name">CRM - Phone Calls Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.phonecall</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Phone Calls" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -16,10 +44,10 @@
|
|||
<field name="partner_id" string="Partner"/>
|
||||
<field name="partner_address_id" string="Contact"/>
|
||||
<field name="case_id"/>
|
||||
<button string="Opportunity" name="%(wizard_crm_opportunity_set)d" type="action"/>
|
||||
<button string="Opportunity" name="%(wizard_crm_phonecall_opportunity_set)d" type="action"/>
|
||||
<button string="Meeting"
|
||||
name="%(wizard_crm_reschedule_phone_call)d" type="action" />
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
name="%(wizard_crm_phonecall_meeting_set)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_phonecall_assign_wizard)d" type="action" />
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
|
@ -27,7 +55,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_phone_incomming_tree_view">
|
||||
<field name="name">CRM - Phone Calls Tree</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.phonecall</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Phone Calls" editable="bottom" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
|
@ -36,10 +64,10 @@
|
|||
<field name="partner_id" string="Partner"/>
|
||||
<field name="partner_address_id" string="Contact"/>
|
||||
<field name="case_id"/>
|
||||
<button string="Opportunity" name="%(wizard_crm_opportunity_set)d" type="action"/>
|
||||
<button string="Opportunity" name="%(wizard_crm_phonecall_opportunity_set)d" type="action"/>
|
||||
<button string="Meeting"
|
||||
name="%(wizard_crm_reschedule_phone_call)d" type="action" />
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
name="%(wizard_crm_phonecall_meeting_set)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_phonecall_assign_wizard)d" type="action" />
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
|
@ -47,7 +75,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_phone_form_view">
|
||||
<field name="name">CRM - Phone Call Form</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.phonecall</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Claims">
|
||||
|
@ -55,7 +83,7 @@
|
|||
<field name="name" string="Subject"/>
|
||||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="user_id" string="Assigned to" select="2"/>
|
||||
<button string="Convert to Opportunity" name="%(wizard_crm_opportunity_set)d" icon="gtk-index" type="action"/>
|
||||
<button string="Convert to Opportunity" name="%(wizard_crm_phonecall_opportunity_set)d" icon="gtk-index" type="action"/>
|
||||
<newline/>
|
||||
<field name="date" string="Planned Date"/>
|
||||
<field name="duration"/>
|
||||
|
@ -64,10 +92,10 @@
|
|||
context="{'default_name':name,'default_section_id':section_id,'default_user_id':user_id,'default_duration':duration,
|
||||
'default_partner_id':partner_id,'default_partner_address_id':partner_address_id,'default_partner_phone':partner_phone,
|
||||
'default_partner_mobile':partner_mobile,'default_categ_id':categ_id}"/>
|
||||
<button string="Assign" name="%(crm_generic_wizard_act)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_phonecall_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
<button string="Schedule a Phone Call"
|
||||
name="%(wizard_crm_reschedule_phone_call)d" icon="gtk-redo" type="action" />
|
||||
<button string="Schedule a Meeting"
|
||||
name="%(wizard_crm_phonecall_meeting_set)d" icon="gtk-redo" type="action" />
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General">
|
||||
|
@ -75,7 +103,7 @@
|
|||
<field name="active" string="Reminder"/>
|
||||
<group colspan="2" col="3">
|
||||
<field name="partner_id" string="Partner"/>
|
||||
<button string="Convert to Partner" icon="terp-crm" name="%(wizard_crm_partner_create)d" type="action" attrs="{'invisible':[('partner_id','!=',False)]}"/>
|
||||
<button string="Convert to Partner" icon="terp-crm" name="%(wizard_crm_phonecall_partner_create)d" type="action" attrs="{'invisible':[('partner_id','!=',False)]}"/>
|
||||
</group>
|
||||
<field name="partner_address_id" string="Contact"/>
|
||||
<field name="partner_phone"/>
|
||||
|
@ -102,7 +130,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_phone_calendar_view">
|
||||
<field name="name">CRM - Phone Calls Calendar</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.phonecall</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -115,32 +143,32 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_phonecalls_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.phonecalls.select</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="name">CRM - Phone Calls Search</field>
|
||||
<field name="model">crm.phonecall</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Phonecalls">
|
||||
<group col="6" colspan="1">
|
||||
<filter icon="gtk-jump-to"
|
||||
string="Inbound"
|
||||
domain="[('section_id.name','=','Phone Calls'),('categ_id.name','=','Inbound')]"
|
||||
domain="[('categ_id.name','=','Inbound')]"
|
||||
separator="1" help="All Inbound Phonecalls"
|
||||
/>
|
||||
<filter icon="gtk-redo"
|
||||
string="Outbound"
|
||||
domain="[('section_id.name','=','Phone Calls'),('categ_id.name','=','Outbound')]"
|
||||
domain="[('categ_id.name','=','Outbound')]"
|
||||
separator="1" help="All Outbound Phonecalls"
|
||||
/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="gtk-home" string=" Today "
|
||||
separator="1"
|
||||
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
help="Todays's Phonecalls"
|
||||
/>
|
||||
<filter icon="gtk-media-rewind"
|
||||
string=" 7 Days " separator="1"
|
||||
help="Phonecalls during last 7 days"
|
||||
domain="[('date::date','<', time.strftime('%%Y-%%m-%%d')), ('date::date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
/>
|
||||
</group>
|
||||
<separator orientation="vertical"/>
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_phonecall_meeting_set"
|
||||
keyword="client_action_multi"
|
||||
model="crm.phonecall"
|
||||
name="crm.phonecall.meeting_set"
|
||||
multi="True"
|
||||
string="Schedule Meeting"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_phonecall_partner_create"
|
||||
keyword="client_action_multi"
|
||||
model="crm.phonecall"
|
||||
name="crm.phonecall.partner_create"
|
||||
multi="True"
|
||||
string="Create Partner"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_crm_phonecall_opportunity_set"
|
||||
keyword="client_action_multi"
|
||||
model="crm.phonecall"
|
||||
name="crm.phonecall.opportunity_set"
|
||||
multi="True"
|
||||
string="Convert To Opportunity"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,7 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<wizard id="wizard_case_section_menu" model="crm.case.section" name="crm.case.section.menu" string="Create menus for a case section"/>
|
||||
|
||||
<wizard
|
||||
string="History of Events"
|
||||
name="crm.case.history.events"
|
||||
model="crm.case"
|
||||
id="wizard_case_history_event"
|
||||
keyword="client_action_relate"
|
||||
|
||||
/>
|
||||
|
||||
<wizard string="Fetch mail"
|
||||
model="crm.case.section"
|
||||
|
|
|
@ -31,5 +31,3 @@
|
|||
"access_crm_menu_config_wizard system","crm config wizard manager system","model_crm_menu_config_wizard","base.group_system",1,1,1,1
|
||||
"access_crm_case_category2_user","crm_case_category2 user","model_crm_case_category2","crm.group_crm_user",1,0,0,0
|
||||
"access_crm_case_category2_manager","crm_case_category2 manager","model_crm_case_category2","crm.group_crm_manager",1,1,1,1
|
||||
"access_crm_generic_wizard_manager","crm.generic_wizard","model_crm_generic_wizard","crm.group_crm_manager",1,1,1,1
|
||||
"access_crm_generic_wizard_manager","crm.generic_wizard","model_crm_generic_wizard","crm.group_crm_user",1,0,0,0
|
||||
|
|
|
|
@ -19,20 +19,20 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
#import crm_wizard
|
||||
import crm_opportunity_wizard
|
||||
import crm_lead_wizard
|
||||
import crm_job_wizard
|
||||
import crm_phonecall_wizard
|
||||
|
||||
|
||||
import wizard_crm_send_email
|
||||
import wizard_crm_new_send_email
|
||||
import wizard_fetch_mail
|
||||
import wizard_cal_export
|
||||
import wizard_cal_import
|
||||
import wizard_cal_subscribe
|
||||
|
||||
import meeting_planify
|
||||
import wizard_partner_create
|
||||
import wizard_opportunity_set
|
||||
import schedule_phone_call
|
||||
import wizard_history_event
|
||||
import wizard_partner_opportunity
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,286 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
import time
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
class job2phonecall(wizard.interface):
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Schedule Phone Call">
|
||||
<separator string="Phone Call Description" colspan="4" />
|
||||
<newline />
|
||||
<field name='user_id' />
|
||||
<field name='deadline' />
|
||||
<newline />
|
||||
<field name='note' colspan="4"/>
|
||||
<newline />
|
||||
<field name='section_id' />
|
||||
<field name='category_id'/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'user_id' : {'string' : 'Assign To', 'type' : 'many2one', 'relation' : 'res.users'},
|
||||
'deadline' : {'string' : 'Planned Date', 'type' : 'datetime'},
|
||||
'note' : {'string' : 'Goals', 'type' : 'text'},
|
||||
'category_id' : {'string' : 'Category', 'type' : 'many2one', 'relation' : 'crm.case.categ', 'required' : True},
|
||||
'section_id' : {'string' : 'Section', 'type' : 'many2one', 'relation' : 'crm.case.section'},
|
||||
|
||||
}
|
||||
def _default_values(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.job')
|
||||
categ_id=pooler.get_pool(cr.dbname).get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {
|
||||
'user_id' : case.user_id and case.user_id.id,
|
||||
'category_id' : categ_id and categ_id[0] or case.categ_id and case.categ_id.id,
|
||||
'note' : case.description
|
||||
}
|
||||
|
||||
def _doIt(self, cr, uid, data, context):
|
||||
form = data['form']
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
phonecall_case_obj = pool.get('crm.phonecall')
|
||||
job_case_obj = pool.get('crm.job')
|
||||
# Select the view
|
||||
|
||||
data_obj = pool.get('ir.model.data')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_form_view')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
for job in job_case_obj.browse(cr, uid, data['ids']):
|
||||
#TODO : Take other info from job
|
||||
new_phonecall_id = phonecall_case_obj.create(cr, uid, {
|
||||
'name' : job.name,
|
||||
'case_id' : job.inherit_case_id.id,
|
||||
'user_id' : form['user_id'],
|
||||
'categ_id' : form['category_id'],
|
||||
'description' : form['note'],
|
||||
'date' : form['deadline'],
|
||||
'section_id' : form['section_id']
|
||||
}, context=context)
|
||||
new_phonecall = phonecall_case_obj.browse(cr, uid, new_phonecall_id)
|
||||
vals = {}
|
||||
if not job.case_id:
|
||||
vals.update({'case_id' : new_phonecall.inherit_case_id.id})
|
||||
job_case_obj.write(cr, uid, [job.id], vals)
|
||||
job_case_obj.case_cancel(cr, uid, [job.id])
|
||||
phonecall_case_obj.case_open(cr, uid, [new_phonecall_id])
|
||||
value = {
|
||||
'name': _('Phone Call'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'crm.phonecall',
|
||||
'res_id' : new_phonecall_id,
|
||||
'views': [(id3,'form'),(id2,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_default_values],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Schedule Phone Call','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _doIt, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
job2phonecall('crm.job.reschedule_phone_call')
|
||||
|
||||
class job2meeting(wizard.interface):
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Plan Meeting">
|
||||
<field name="date"/>
|
||||
<field name="duration" widget="float_time"/>
|
||||
<label string="Note that you can also use the calendar view to graphically schedule your next meeting." colspan="4"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'date': {'string': 'Meeting date', 'type': 'datetime', 'required': 1},
|
||||
'duration': {'string': 'Duration (Hours)', 'type': 'float', 'required': 1}
|
||||
}
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.job')
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {'date': case.date, 'duration': case.duration or 2.0}
|
||||
|
||||
def _makeMeeting(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
job_case_obj = pool.get('crm.job')
|
||||
meeting_case_obj = pool.get('crm.meeting')
|
||||
for job in job_case_obj.browse(cr, uid, data['ids']):
|
||||
#TODO : Take other info from job
|
||||
new_meeting_id = meeting_case_obj.create(cr, uid, {
|
||||
'name': job.name,
|
||||
'date': data['form']['date'],
|
||||
'duration': data['form']['duration'],
|
||||
'case_id': job.inherit_case_id.id,
|
||||
})
|
||||
new_meeting = meeting_case_obj.browse(cr, uid, new_meeting_id)
|
||||
vals = {}
|
||||
if not job.case_id:
|
||||
vals.update({'case_id' : new_meeting.inherit_case_id.id})
|
||||
job_case_obj.write(cr, uid, [job.id], vals)
|
||||
job_case_obj.case_cancel(cr, uid, [job.id])
|
||||
meeting_case_obj.case_open(cr, uid, [new_meeting_id])
|
||||
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
||||
id = data_obj.read(cr, uid, result, ['res_id'])
|
||||
id1 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
||||
if id1:
|
||||
id1 = data_obj.browse(cr, uid, id1, context=context).res_id
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
return {
|
||||
'name': _('Meetings'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'calendar,form,tree',
|
||||
'res_model': 'crm.meeting',
|
||||
'view_id': False,
|
||||
'views': [(id1,'calendar'),(id2,'form'),(id3,'tree'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': id['res_id']
|
||||
}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Set Meeting','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeMeeting, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
job2meeting('crm.job.meeting_set')
|
||||
|
||||
|
||||
class partner_create(wizard.interface):
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this job request ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<!--field name="close"/-->
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'close': {'type':'boolean', 'string':'Close job request'}
|
||||
}
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.job')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if case.partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),
|
||||
_('A partner is already defined on this job request.'))
|
||||
return {}
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.job')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
|
||||
|
||||
case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
if data['form']['close']:
|
||||
case_obj.case_close(cr, uid, data['ids'])
|
||||
|
||||
value = {
|
||||
'domain': "[]",
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'res.partner',
|
||||
'res_id': int(partner_id),
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
partner_create('crm.job.partner_create')
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,277 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
from tools.translate import _
|
||||
|
||||
class lead2opportunity(wizard.interface):
|
||||
|
||||
partner_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','=','create')]}">
|
||||
<field name="partner_id" attrs="{'required':[('action','=','exist')]}"/>
|
||||
</group>
|
||||
</form>"""
|
||||
|
||||
partner_fields = {
|
||||
'action': {'type':'selection',
|
||||
'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
|
||||
'string':'Action', 'required':True, 'default': lambda *a:'create'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name': {'type':'char', 'size':64, 'string':'Opportunity Summary', 'required':True},
|
||||
'planned_revenue': {'type':'float', 'digits':(16,2), 'string': 'Expected Revenue'},
|
||||
'probability': {'type':'float', 'digits':(16,2), 'string': 'Success Probability'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
def _selectopportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.lead')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return {'name': case.name, 'probability': case.probability or 20.0,
|
||||
'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id.id}
|
||||
|
||||
def _selectChoice(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.lead')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return 'opportunity'
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
||||
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
lead_case_obj = pool.get('crm.lead')
|
||||
opportunity_case_obj = pool.get('crm.opportunity')
|
||||
for lead in lead_case_obj.browse(cr, uid, data['ids']):
|
||||
#TODO : Take other info from lead
|
||||
new_opportunity_id = opportunity_case_obj.create(cr, uid, {
|
||||
'name': data['form']['name'],
|
||||
'planned_revenue': data['form']['planned_revenue'],
|
||||
'probability': data['form']['probability'],
|
||||
'partner_id': data['form']['partner_id'],
|
||||
'case_id':lead.inherit_case_id.id,
|
||||
})
|
||||
|
||||
new_opportunity = opportunity_case_obj.browse(cr, uid, new_opportunity_id)
|
||||
|
||||
vals = {
|
||||
'partner_id': data['form']['partner_id'],
|
||||
}
|
||||
if not lead.case_id:
|
||||
vals.update({'case_id' : new_opportunity.inherit_case_id.id})
|
||||
|
||||
lead_case_obj.write(cr, uid, [lead.id], vals)
|
||||
lead_case_obj.case_cancel(cr, uid, [lead.id])
|
||||
opportunity_case_obj.case_open(cr, uid, [new_opportunity_id])
|
||||
|
||||
value = {
|
||||
'name': _('Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.opportunity',
|
||||
'res_id': int(new_opportunity_id),
|
||||
'view_id': False,
|
||||
'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
def _makePartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
lead_case_obj = pool.get('crm.lead')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
if data['form']['action'] == 'create':
|
||||
for case in lead_case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
else:
|
||||
partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
|
||||
partner_id = partner.id
|
||||
contact_id = partner.address and partner.address[0].id
|
||||
|
||||
lead_case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
return {}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'choice','next_state':_selectChoice}
|
||||
},
|
||||
'create_partner': {
|
||||
'actions': [],
|
||||
'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
|
||||
},
|
||||
'create': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makePartner, 'state':'opportunity' }
|
||||
},
|
||||
'opportunity': {
|
||||
'actions': [_selectopportunity],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Opportunity', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
lead2opportunity('crm.lead.opportunity_set')
|
||||
|
||||
class partner_create(wizard.interface):
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<!--field name="close"/-->
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'close': {'type':'boolean', 'string':'Close Lead'}
|
||||
}
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.lead')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if case.partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),
|
||||
_('A partner is already defined on this lead.'))
|
||||
return {}
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.lead')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
|
||||
|
||||
case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
if data['form']['close']:
|
||||
case_obj.case_close(cr, uid, data['ids'])
|
||||
|
||||
value = {
|
||||
'domain': "[]",
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'res.partner',
|
||||
'res_id': int(partner_id),
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
partner_create('crm.lead.partner_create')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,208 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
import time
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
class opportunity2phonecall(wizard.interface):
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Schedule Phone Call">
|
||||
<separator string="Phone Call Description" colspan="4" />
|
||||
<newline />
|
||||
<field name='user_id' />
|
||||
<field name='deadline' />
|
||||
<newline />
|
||||
<field name='note' colspan="4"/>
|
||||
<newline />
|
||||
<field name='section_id' />
|
||||
<field name='category_id' domain="[('section_id','=',section_id)]"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'user_id' : {'string' : 'Assign To', 'type' : 'many2one', 'relation' : 'res.users'},
|
||||
'deadline' : {'string' : 'Planned Date', 'type' : 'datetime'},
|
||||
'note' : {'string' : 'Goals', 'type' : 'text'},
|
||||
'category_id' : {'string' : 'Category', 'type' : 'many2one', 'relation' : 'crm.case.categ', 'required' :True},
|
||||
'section_id' : {'string' : 'Section', 'type' : 'many2one', 'relation' : 'crm.case.section'},
|
||||
|
||||
}
|
||||
def _default_values(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.opportunity')
|
||||
categ_id = pooler.get_pool(cr.dbname).get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {
|
||||
'user_id' : case.user_id and case.user_id.id,
|
||||
'category_id' : categ_id and categ_id[0] or case.categ_id and case.categ_id.id,
|
||||
'section_id' : case.section_id and case.section_id or False,
|
||||
'note' : case.description
|
||||
}
|
||||
|
||||
def _doIt(self, cr, uid, data, context):
|
||||
form = data['form']
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
phonecall_case_obj = pool.get('crm.phonecall')
|
||||
opportunity_case_obj = pool.get('crm.opportunity')
|
||||
# Select the view
|
||||
|
||||
data_obj = pool.get('ir.model.data')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_form_view')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
opportunites = opportunity_case_obj.browse(cr, uid, data['ids'])
|
||||
for opportunity in opportunites:
|
||||
#TODO : Take Other Info from opportunity
|
||||
new_case = phonecall_case_obj.create(cr, uid, {
|
||||
'name' : opportunity.name,
|
||||
'case_id' : opportunity.inherit_case_id.id,
|
||||
'user_id' : form['user_id'],
|
||||
'categ_id' : form['category_id'],
|
||||
'description' : form['note'],
|
||||
'date' : form['deadline'],
|
||||
'section_id' : form['section_id']
|
||||
}, context=context)
|
||||
|
||||
opportunity_case_obj.case_cancel(cr, uid, [opportunity.id])
|
||||
phonecall_case_obj.case_open(cr, uid, [new_case])
|
||||
|
||||
value = {
|
||||
'name': _('Phone Call'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'crm.phonecall',
|
||||
'res_id' : new_case,
|
||||
'views': [(id3,'form'),(id2,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_default_values],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Schedule Phone Call','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _doIt, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
opportunity2phonecall('crm.opportunity.reschedule_phone_call')
|
||||
|
||||
|
||||
class partner_opportunity(wizard.interface):
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Create Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id" readonly="1"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name' : {'type' :'char', 'size' :64, 'string' :'Opportunity Name', 'required' :True},
|
||||
'planned_revenue' : {'type' :'float', 'digits' :(16, 2), 'string' : 'Expected Revenue'},
|
||||
'probability' : {'type' :'float', 'digits' :(16, 2), 'string' : 'Success Probability'},
|
||||
'partner_id' : {'type' :'many2one', 'relation' :'res.partner', 'string' :'Partner'},
|
||||
}
|
||||
|
||||
def _select_data(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
part_obj = pool.get('res.partner')
|
||||
part = part_obj.read(cr, uid, data['id' ], ['name'])
|
||||
return {'partner_id' : data['id'], 'name' : part['name'] }
|
||||
|
||||
def _make_opportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
part_obj = pool.get('res.partner')
|
||||
address = part_obj.address_get(cr, uid, data['ids' ])
|
||||
|
||||
|
||||
categ_obj = pool.get('crm.case.categ')
|
||||
categ_ids = categ_obj.search(cr, uid, [('name','ilike','Part%')])
|
||||
|
||||
case_obj = pool.get('crm.opportunity')
|
||||
opp_id = case_obj.create(cr, uid, {
|
||||
'name' : data['form']['name'],
|
||||
'planned_revenue' : data['form']['planned_revenue'],
|
||||
'probability' : data['form']['probability'],
|
||||
'partner_id' : data['form']['partner_id'],
|
||||
'partner_address_id' : address['default'],
|
||||
'categ_id' : categ_ids[0],
|
||||
'state' :'draft',
|
||||
})
|
||||
value = {
|
||||
'name' : _('Opportunity'),
|
||||
'view_type' : 'form',
|
||||
'view_mode' : 'form,tree',
|
||||
'res_model' : 'crm.opportunity',
|
||||
'res_id' : opp_id,
|
||||
'view_id' : False,
|
||||
'views' : [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')],
|
||||
'type' : 'ir.actions.act_window',
|
||||
'search_view_id' : res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init' : {
|
||||
'actions' : [_select_data],
|
||||
'result' : {'type' : 'form', 'arch' : case_form, 'fields' : case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'), ('confirm', 'Create Opportunity', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm' : {
|
||||
'actions' : [],
|
||||
'result' : {'type' : 'action', 'action' : _make_opportunity, 'state' : 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
partner_opportunity('crm.case.opportunity.partner_opportunity')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,349 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
from tools.translate import _
|
||||
|
||||
class phonecall2opportunity(wizard.interface):
|
||||
|
||||
partner_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this phonecall ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','=','create')]}">
|
||||
<field name="partner_id" attrs="{'required':[('action','=','exist')]}"/>
|
||||
</group>
|
||||
</form>"""
|
||||
|
||||
partner_fields = {
|
||||
'action': {'type':'selection',
|
||||
'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
|
||||
'string':'Action', 'required':True, 'default': lambda *a:'create'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name': {'type':'char', 'size':64, 'string':'Opportunity Summary', 'required':True},
|
||||
'planned_revenue': {'type':'float', 'digits':(16,2), 'string': 'Expected Revenue'},
|
||||
'probability': {'type':'float', 'digits':(16,2), 'string': 'Success Probability'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
def _selectopportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.phonecall')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return {'name': case.name, 'probability': case.probability or 20.0,
|
||||
'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id.id}
|
||||
|
||||
def _selectChoice(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.phonecall')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return 'opportunity'
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
||||
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
phonecall_case_obj = pool.get('crm.phonecall')
|
||||
opportunity_case_obj = pool.get('crm.opportunity')
|
||||
for phonecall in phonecall_case_obj.browse(cr, uid, data['ids']):
|
||||
#TODO : Take other info from phonecall
|
||||
new_opportunity_id = opportunity_case_obj.create(cr, uid, {
|
||||
'name': data['form']['name'],
|
||||
'planned_revenue': data['form']['planned_revenue'],
|
||||
'probability': data['form']['probability'],
|
||||
'partner_id': data['form']['partner_id'],
|
||||
'case_id':phonecall.inherit_case_id.id,
|
||||
})
|
||||
new_opportunity = opportunity_case_obj.browse(cr, uid, new_opportunity_id)
|
||||
vals = {
|
||||
'partner_id': data['form']['partner_id'],
|
||||
}
|
||||
if not phonecall.case_id:
|
||||
vals.update({'case_id' : new_opportunity.inherit_case_id.id})
|
||||
phonecall_case_obj.write(cr, uid, [phonecall.id], vals)
|
||||
phonecall_case_obj.case_cancel(cr, uid, [phonecall.id])
|
||||
opportunity_case_obj.case_open(cr, uid, [new_opportunity_id])
|
||||
value = {
|
||||
'name': _('Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.opportunity',
|
||||
'res_id': int(new_opportunity_id),
|
||||
'view_id': False,
|
||||
'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
def _makePartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
phonecall_case_obj = pool.get('crm.phonecall')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
if data['form']['action']=='create':
|
||||
for case in phonecall_case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
else:
|
||||
partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
|
||||
partner_id=partner.id
|
||||
contact_id=partner.address and partner.address[0].id
|
||||
|
||||
phonecall_case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
return {}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'choice','next_state':_selectChoice}
|
||||
},
|
||||
'create_partner': {
|
||||
'actions': [],
|
||||
'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
|
||||
},
|
||||
'create': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makePartner, 'state':'opportunity' }
|
||||
},
|
||||
'opportunity': {
|
||||
'actions': [_selectopportunity],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Opportunity', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
phonecall2opportunity('crm.phonecall.opportunity_set')
|
||||
|
||||
class phonecall2meeting(wizard.interface):
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Plan Meeting">
|
||||
<field name="date"/>
|
||||
<field name="duration" widget="float_time"/>
|
||||
<label string="Note that you can also use the calendar view to graphically schedule your next meeting." colspan="4"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'date': {'string': 'Meeting date', 'type': 'datetime', 'required': 1},
|
||||
'duration': {'string': 'Duration (Hours)', 'type': 'float', 'required': 1}
|
||||
}
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.phonecall')
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {'date': case.date, 'duration': case.duration or 2.0}
|
||||
|
||||
def _makeMeeting(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
phonecall_case_obj = pool.get('crm.phonecall')
|
||||
meeting_case_obj = pool.get('crm.meeting')
|
||||
for phonecall in phonecall_case_obj.browse(cr, uid, data['ids']):
|
||||
#TODO : Take other info from phonecall
|
||||
new_meeting_id = meeting_case_obj.create(cr, uid, {
|
||||
'name': phonecall.name,
|
||||
'date': data['form']['date'],
|
||||
'duration': data['form']['duration'],
|
||||
'case_id': phonecall.inherit_case_id.id,
|
||||
})
|
||||
new_meeting = meeting_case_obj.browse(cr, uid, new_meeting_id)
|
||||
vals = {}
|
||||
if not phonecall.case_id:
|
||||
vals.update({'case_id' : new_meeting.inherit_case_id.id})
|
||||
phonecall_case_obj.write(cr, uid, [phonecall.id], vals)
|
||||
phonecall_case_obj.case_cancel(cr, uid, [phonecall.id])
|
||||
meeting_case_obj.case_open(cr, uid, [new_meeting_id])
|
||||
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
||||
id = data_obj.read(cr, uid, result, ['res_id'])
|
||||
id1 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
||||
if id1:
|
||||
id1 = data_obj.browse(cr, uid, id1, context=context).res_id
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
return {
|
||||
'name': _('Meetings'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'calendar,form,tree',
|
||||
'res_model': 'crm.meeting',
|
||||
'view_id': False,
|
||||
'views': [(id1,'calendar'),(id2,'form'),(id3,'tree'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': id['res_id']
|
||||
}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Set Meeting','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeMeeting, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
phonecall2meeting('crm.phonecall.meeting_set')
|
||||
|
||||
|
||||
class partner_create(wizard.interface):
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this phonecall ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<!--field name="close"/-->
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'close': {'type':'boolean', 'string':'Close Phonecall'}
|
||||
}
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.phonecall')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if case.partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),
|
||||
_('A partner is already defined on this phonecall.'))
|
||||
return {}
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.phonecall')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
|
||||
|
||||
case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
if data['form']['close']:
|
||||
case_obj.case_close(cr, uid, data['ids'])
|
||||
|
||||
value = {
|
||||
'domain': "[]",
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'res.partner',
|
||||
'res_id': int(partner_id),
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
partner_create('crm.phonecall.partner_create')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,138 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
import time
|
||||
import wizard
|
||||
import osv
|
||||
import pooler
|
||||
|
||||
section_form = '''<?xml version="1.0"?>
|
||||
<form string="Create Menus For Cases">
|
||||
<separator string="Base Information" colspan="4"/>
|
||||
<field name="menu_name"/>
|
||||
<field name="menu_parent_id"/>
|
||||
<field name="section_id"/>
|
||||
<label string="this wizard will create all sub-menus, within the selected menu." align="0.0" colspan="4"/>
|
||||
<label string="You may want to create a new parent menu to put all the created menus in." align="0.0" colspan="4"/>
|
||||
<separator string="Select Views (empty for default)" colspan="4"/>
|
||||
<field name="view_form"/>
|
||||
<field name="view_tree"/>
|
||||
<field name="view_calendar"/>
|
||||
</form>'''
|
||||
|
||||
section_fields = {
|
||||
'menu_name': {'string':'Base Menu Name', 'type':'char', 'required':True, 'size':64},
|
||||
'menu_parent_id': {'string':'Parent Menu', 'type':'many2one', 'relation':'ir.ui.menu', 'required':True},
|
||||
'section_id': {'string':'Case Section', 'type':'many2one', 'relation':'crm.case.section', 'required':True},
|
||||
'view_form': {'string':'Form View', 'type':'many2one', 'relation':'ir.ui.view', 'domain':[('type','=','form'),('model','=','crm.case')] },
|
||||
'view_tree': {'string':'Tree View', 'type':'many2one', 'relation':'ir.ui.view', 'domain':[('type','=','tree'),('model','=','crm.case')] },
|
||||
'view_calendar': {'string':'Calendar View', 'type':'many2one', 'relation':'ir.ui.view', 'domain':[('type','=','calendar'),('model','=','crm.case')] }
|
||||
}
|
||||
|
||||
menu_lst = [
|
||||
(1,'My ',"[('section_id','=',SECTION_ID),('user_id','=',uid)]", 0, 'tree,form,calendar'),
|
||||
(2,'My Unclosed ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('state','<>','cancel'), ('state','<>','done')]", 1, 'tree,form,calendar'),
|
||||
(5,'My Open ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('state','=','open')]", 2, 'tree,form,calendar'),
|
||||
(6,'My Pending ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('state','=','pending')]", 2, 'tree,form,calendar'),
|
||||
(7,'My Draft ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('state','=','draft')]", 2, 'tree,form,calendar'),
|
||||
(3,'My Late ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('date_deadline','<=',time.strftime('%Y-%m-%d')), ('state','<>','cancel'), ('state','<>','done')]", 1, 'tree,form,calendar'),
|
||||
(4,'My Canceled ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('state','=','cancel')]", 1, 'no'),
|
||||
(8,'All ',"[('section_id','=',SECTION_ID),]", 0, 'tree,form,calendar'),
|
||||
(9,'All Unassigned ',"[('section_id','=',SECTION_ID),('user_id','=',False)]", 8, 'no'),
|
||||
(10,'All Late ',"[('section_id','=',SECTION_ID),('user_id','=',uid), ('date_deadline','<=',time.strftime('%Y-%m-%d')), ('state','<>','cancel'), ('state','<>','done')]", 8, 'no'),
|
||||
(11,'All Canceled ',"[('section_id','=',SECTION_ID),('state','=','cancel')]", 8, 'no'),
|
||||
(12,'All Unclosed ',"[('section_id','=',SECTION_ID),('state','<>','cancel'), ('state','<>','done')]", 8, 'tree,form,calendar'),
|
||||
(13,'All Open ',"[('section_id','=',SECTION_ID),('state','=','open')]", 12, 'tree,form,calendar'),
|
||||
(14,'All Pending ',"[('section_id','=',SECTION_ID),('state','=','pending')]", 12, 'tree,form,calendar'),
|
||||
(15,'All Draft ',"[('section_id','=',SECTION_ID),('state','=','draft')]", 12, 'tree,form,calendar'),
|
||||
(16,'All Unclosed and Unassigned ',"[('section_id','=',SECTION_ID),('user_id','=',False),('state','<>','cancel'),('state','<>','done')]", 12, 'no'),
|
||||
(17,'New ',"[('section_id','=',SECTION_ID)]", 0, 'form,tree,calendar'),
|
||||
]
|
||||
|
||||
section_menu_form = '''<?xml version="1.0"?>
|
||||
<form string="Created Menus" width="800">
|
||||
<separator string="Update The Proposed Menus To Be Created" colspan="4"/>
|
||||
''' + '\n'.join(map(lambda x: '\t<field name="menu%d" colspan="3"/> <field name="menu%d_option" nolabel="1"/>' % (x[0],x[0]), menu_lst)) + '''\n</form>'''
|
||||
|
||||
section_menu_fields = { }
|
||||
for menu in menu_lst:
|
||||
section_menu_fields['menu'+str(menu[0])] = {
|
||||
'string': menu[1],
|
||||
'type': 'char',
|
||||
'size': 64,
|
||||
'required': True
|
||||
}
|
||||
section_menu_fields['menu'+str(menu[0])+'_option'] = {
|
||||
'string': menu[1],
|
||||
'type': 'selection',
|
||||
'selection': [
|
||||
('no',"Don't Create"),
|
||||
('form,tree','New Form'),
|
||||
('form,tree,calendar','New With Calendar'),
|
||||
('tree,form,calendar','List'),
|
||||
('tree,form,calendar','List With Calendar'),
|
||||
('calendar,tree,form','Calendar'),
|
||||
],
|
||||
'size': 64,
|
||||
'required': True,
|
||||
}
|
||||
|
||||
def case_menu_create(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
pool.get('crm.case.section').menu_create_data(cr, uid, data['form'], menu_lst, context)
|
||||
return {}
|
||||
|
||||
def _menu_default(self, cr, uid, data, context):
|
||||
result = {}
|
||||
for menu in menu_lst:
|
||||
result['menu'+str(menu[0])] = menu[1] + data['form']['menu_name']
|
||||
result['menu'+str(menu[0])+'_option'] = menu[4]
|
||||
return result
|
||||
|
||||
class wizard_section_menu_create(wizard.interface):
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'form', 'arch':section_form, 'fields':section_fields, 'state':[('end','Cancel'),('design_menu','Create menu Entries')]}
|
||||
},
|
||||
'design_menu': {
|
||||
'actions': [_menu_default],
|
||||
'result': {
|
||||
'type':'form',
|
||||
'arch':section_menu_form,
|
||||
'fields':section_menu_fields,
|
||||
'state':[
|
||||
('end','Cancel'),
|
||||
('create','Create menu Entries')
|
||||
]
|
||||
}
|
||||
},
|
||||
'create': {
|
||||
'actions': [case_menu_create],
|
||||
'result': {'type':'state', 'state':'end'}
|
||||
}
|
||||
}
|
||||
wizard_section_menu_create('crm.case.section.menu')
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Plan Meeting">
|
||||
<field name="date"/>
|
||||
<field name="duration" widget="float_time"/>
|
||||
<label string="Note that you can also use the calendar view to graphically schedule your next meeting." colspan="4"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'date': {'string': 'Meeting date', 'type': 'datetime', 'required': 1},
|
||||
'duration': {'string': 'Duration (Hours)', 'type': 'float', 'required': 1}
|
||||
}
|
||||
|
||||
|
||||
class make_meeting(wizard.interface):
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.case')
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {'date': case[0].date, 'duration': case[0].duration or 2.0}
|
||||
|
||||
def _makeMeeting(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
sec_obj = pool.get('crm.case.section')
|
||||
meeting_id = sec_obj.search(cr, uid, [('code','=','Mtngs')])
|
||||
if not meeting_id:
|
||||
raise wizard.except_wizard(_('Error !'),
|
||||
_('You did not installed the Meetings when you configured the crm module.' \
|
||||
'\nyou must create a section with the code \'Mtngs\'.'
|
||||
))
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
new_id=case_obj.copy(cr, uid, case.id)
|
||||
modif = {
|
||||
'date': data['form']['date'],
|
||||
'duration': data['form']['duration'],
|
||||
'case_id': case.id,
|
||||
}
|
||||
if meeting_id:
|
||||
modif['section_id']=meeting_id[0]
|
||||
new_id = case_obj.write(cr, uid, [new_id], modif, context=context)
|
||||
# case_obj._history(cr, uid, case_obj.browse(cr, uid, data['ids']), _('meeting'))
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
||||
id = data_obj.read(cr, uid, result, ['res_id'])
|
||||
id1 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
||||
if id1:
|
||||
id1 = data_obj.browse(cr, uid, id1, context=context).res_id
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
return {
|
||||
'domain':"[('section_id','=','Meetings')]",
|
||||
'name': _('Meetings'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'calendar,form,tree',
|
||||
'res_model': 'crm.case',
|
||||
'view_id': False,
|
||||
'views': [(id1,'calendar'),(id2,'form'),(id3,'tree'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': id['res_id']
|
||||
}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Set Meeting','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeMeeting, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
make_meeting('crm.case.meeting')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,127 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
import time
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Schedule Phone Call">
|
||||
<separator string="Phone Call Description" colspan="4" />
|
||||
<newline />
|
||||
<field name='user_id' />
|
||||
<field name='deadline' />
|
||||
<newline />
|
||||
<field name='note' colspan="4"/>
|
||||
<newline />
|
||||
<field name='section_id' />
|
||||
<field name='category_id' domain="[('section_id','=',section_id)]"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'user_id' : {'string' : 'Assign To', 'type' : 'many2one', 'relation' : 'res.users'},
|
||||
'deadline' : {'string' : 'Planned Date', 'type' : 'datetime'},
|
||||
'note' : {'string' : 'Goals', 'type' : 'text'},
|
||||
'category_id' : {'string' : 'Category', 'type' : 'many2one', 'relation' : 'crm.case.categ', 'required' : True},
|
||||
'section_id' : {'string' : 'Section', 'type' : 'many2one', 'relation' : 'crm.case.section', 'required' : True},
|
||||
|
||||
}
|
||||
|
||||
class reschedule_phone_call(wizard.interface):
|
||||
def _default_values(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.case')
|
||||
sec_obj = pooler.get_pool(cr.dbname).get('crm.case.section')
|
||||
sec_id = sec_obj.search(cr, uid, [('code', '=', 'Phone')])
|
||||
|
||||
if not sec_id:
|
||||
raise wizard.except_wizard(_('Error !'),
|
||||
_('You did not installed the Phone Calls when you configured the crm module.' \
|
||||
'\nyou must create a section with the code \'Phone\'.'
|
||||
))
|
||||
categ_id=pooler.get_pool(cr.dbname).get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
|
||||
case = case_obj.browse(cr, uid, data['ids'][0])
|
||||
return {
|
||||
'user_id' : case.user_id and case.user_id.id,
|
||||
'category_id' : categ_id and categ_id[0] or case.categ_id and case.categ_id.id,
|
||||
'section_id' : sec_id and sec_id[0],
|
||||
'note' : case.description
|
||||
}
|
||||
|
||||
def _doIt(self, cr, uid, data, context):
|
||||
form = data['form']
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.case')
|
||||
|
||||
# Select the view
|
||||
|
||||
data_obj = pool.get('ir.model.data')
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_form_view')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
# We duplicate the current object
|
||||
for id in data['ids']:
|
||||
new_case = case_obj.copy(cr, uid, id, {'case_id':id,'user_id':form['user_id'],'categ_id':form['category_id'],'description':form['note'],'date' : form['deadline'], 'section_id' : form['section_id']}, context=context)
|
||||
# Don't forget to cancel the current object,
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if case.section_id.code == 'Phone':
|
||||
case_obj.write(cr, uid, [case.id], {'state' : 'cancel'})
|
||||
value = {
|
||||
'domain': "[('section_id','=',%d)]"%form['section_id'],
|
||||
'name': _('Phone Call'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'crm.case',
|
||||
'res_id' : new_case,
|
||||
'views': [(id3,'form'),(id2,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_default_values],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel','gtk-cancel'),('order', 'Schedule Phone Call','gtk-go-forward')]}
|
||||
},
|
||||
'order': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _doIt, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
reschedule_phone_call('crm.case.reschedule_phone_call')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,201 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
from tools.translate import _
|
||||
|
||||
partner_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this prospect ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','=','create')]}">
|
||||
<field name="partner_id" attrs="{'required':[('action','=','exist')]}"/>
|
||||
</group>
|
||||
</form>"""
|
||||
|
||||
partner_fields = {
|
||||
'action': {'type':'selection',
|
||||
'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
|
||||
'string':'Action', 'required':True, 'default': lambda *a:'create'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name': {'type':'char', 'size':64, 'string':'Opportunity Summary', 'required':True},
|
||||
'planned_revenue': {'type':'float', 'digits':(16,2), 'string': 'Expected Revenue'},
|
||||
'probability': {'type':'float', 'digits':(16,2), 'string': 'Success Probability'},
|
||||
'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
|
||||
}
|
||||
|
||||
|
||||
class make_opportunity(wizard.interface):
|
||||
|
||||
def _selectopportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return {'name': case.name, 'probability': case.probability or 20.0,
|
||||
'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id.id}
|
||||
|
||||
def _selectChoice(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return 'opportunity'
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
||||
section_obj = pool.get('crm.case.section')
|
||||
id = section_obj.search(cr, uid, [('code','=','oppor')], context=context)
|
||||
if not id:
|
||||
raise wizard.except_wizard(_('Error !'),
|
||||
_('You did not installed the opportunities tracking when you configured the crm module.' \
|
||||
'\nYou can not convert the prospect to an opportunity, you must create a section with the code \'oppor\'.'
|
||||
))
|
||||
id = id[0]
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
case_obj = pool.get('crm.case')
|
||||
new_pros=case_obj.copy(cr, uid, data['id'])
|
||||
# case_obj._history(cr, uid, case_obj.browse(cr, uid, [new_pros]), 'convert')
|
||||
case_obj.write(cr, uid, [new_pros], {
|
||||
'section_id': id,
|
||||
'name': data['form']['name'],
|
||||
'planned_revenue': data['form']['planned_revenue'],
|
||||
'probability': data['form']['probability'],
|
||||
'partner_id': data['form']['partner_id'],
|
||||
'case_id':data['id'],
|
||||
'state':'open',
|
||||
})
|
||||
|
||||
vals = {
|
||||
'partner_id': data['form']['partner_id'],
|
||||
'state':'done',
|
||||
}
|
||||
case_id = case_obj.read(cr, uid, data['id'], ['case_id'])['case_id']
|
||||
if not case_id:
|
||||
vals.update({'case_id' : new_pros})
|
||||
case_obj.write(cr, uid, [data['id']], vals)
|
||||
value = {
|
||||
'domain': "[('section_id','=',%d)]"%(id),
|
||||
'name': _('Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.case',
|
||||
'res_id': int(new_pros),
|
||||
'view_id': False,
|
||||
'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
def _makePartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
if data['form']['action']=='create':
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
else:
|
||||
partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
|
||||
partner_id=partner.id
|
||||
contact_id=partner.address and partner.address[0].id
|
||||
|
||||
case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
return {}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'choice','next_state':_selectChoice}
|
||||
},
|
||||
'create_partner': {
|
||||
'actions': [],
|
||||
'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
|
||||
},
|
||||
'create': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makePartner, 'state':'opportunity' }
|
||||
},
|
||||
'opportunity': {
|
||||
'actions': [_selectopportunity],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Opportunity', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
make_opportunity('crm.case.opportunity_set')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,113 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
from tools.translate import _
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Convert To Partner">
|
||||
<label string="Are you sure you want to create a partner based on this prospect ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<!--field name="close"/-->
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'close': {'type':'boolean', 'string':'Close Prospect'}
|
||||
}
|
||||
|
||||
|
||||
class make_partner(wizard.interface):
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if case.partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),
|
||||
_('A partner is already defined on this prospect.'))
|
||||
return {}
|
||||
|
||||
def _makeOrder(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.case')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
if partner_id:
|
||||
raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
|
||||
else:
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': case.partner_name or case.name,
|
||||
'user_id': case.user_id.id,
|
||||
'comment': case.description,
|
||||
})
|
||||
contact_id = contact_obj.create(cr, uid, {
|
||||
'partner_id': partner_id,
|
||||
'name': case.partner_name2,
|
||||
'phone': case.partner_phone,
|
||||
'mobile': case.partner_mobile,
|
||||
'email': case.email_from
|
||||
})
|
||||
|
||||
|
||||
case_obj.write(cr, uid, data['ids'], {
|
||||
'partner_id': partner_id,
|
||||
'partner_address_id': contact_id
|
||||
})
|
||||
if data['form']['close']:
|
||||
case_obj.case_close(cr, uid, data['ids'])
|
||||
|
||||
value = {
|
||||
'domain': "[]",
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'res.partner',
|
||||
'res_id': int(partner_id),
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_selectPartner],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
make_partner('crm.case.partner_create')
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx.DateTime import now
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
import ir
|
||||
import pooler
|
||||
from tools.translate import _
|
||||
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Create Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id" readonly="1"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name' : {'type' :'char', 'size' :64, 'string' :'Opportunity Name', 'required' :True},
|
||||
'planned_revenue' : {'type' :'float', 'digits' :(16, 2), 'string' : 'Expected Revenue'},
|
||||
'probability' : {'type' :'float', 'digits' :(16, 2), 'string' : 'Success Probability'},
|
||||
'partner_id' : {'type' :'many2one', 'relation' :'res.partner', 'string' :'Partner'},
|
||||
}
|
||||
|
||||
|
||||
class create_opportunity(wizard.interface):
|
||||
|
||||
def _select_data(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
part_obj = pool.get('res.partner')
|
||||
part = part_obj.read(cr, uid, data['id' ], ['name'])
|
||||
return {'partner_id' : data['id'], 'name' : part['name'] }
|
||||
|
||||
def _make_opportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
data_obj = pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
||||
section_obj = pool.get('crm.case.section')
|
||||
id = section_obj.search(cr, uid, [('code', '=', 'oppor')], context=context)
|
||||
if not id:
|
||||
raise wizard.except_wizard(_('Error !'),
|
||||
_('You did not installed the opportunities tracking when you configured the crm module.' \
|
||||
'\nYou can not convert the prospect to an opportunity, you must create a section with the code \'oppor\'.'
|
||||
))
|
||||
id = id[0]
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
part_obj = pool.get('res.partner')
|
||||
address = part_obj.address_get(cr, uid, data['ids' ])
|
||||
|
||||
|
||||
categ_obj = pool.get('crm.case.categ')
|
||||
categ_ids = categ_obj.search(cr, uid, [('section_id','=',id), ('name','ilike','Part%')])
|
||||
|
||||
case_obj = pool.get('crm.case')
|
||||
opp_id = case_obj.create(cr, uid, {
|
||||
'section_id' : id,
|
||||
'name' : data['form']['name'],
|
||||
'planned_revenue' : data['form']['planned_revenue'],
|
||||
'probability' : data['form']['probability'],
|
||||
'partner_id' : data['form']['partner_id'],
|
||||
'partner_address_id' : address['default'],
|
||||
'categ_id' : categ_ids[0],
|
||||
'case_id' :data['id'],
|
||||
'state' :'draft',
|
||||
})
|
||||
value = {
|
||||
'domain' : "[('section_id','=',%d)]"%(id),
|
||||
'name' : _('Opportunity'),
|
||||
'view_type' : 'form',
|
||||
'view_mode' : 'form,tree',
|
||||
'res_model' : 'crm.case',
|
||||
'res_id' : opp_id,
|
||||
'view_id' : False,
|
||||
'views' : [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')],
|
||||
'type' : 'ir.actions.act_window',
|
||||
'search_view_id' : res['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
states = {
|
||||
'init' : {
|
||||
'actions' : [_select_data],
|
||||
'result' : {'type' : 'form', 'arch' : case_form, 'fields' : case_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'), ('confirm', 'Create Opportunity', 'gtk-go-forward')]}
|
||||
},
|
||||
'confirm' : {
|
||||
'actions' : [],
|
||||
'result' : {'type' : 'action', 'action' : _make_opportunity, 'state' : 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
create_opportunity('crm.case.partner.opportunity_create')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -22,4 +22,5 @@
|
|||
|
||||
|
||||
import crm_project_bug
|
||||
import crm_project_future
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
{
|
||||
'name': 'Customer Relationship Management',
|
||||
'name': 'CRM Stuff in Project Management',
|
||||
'version': '1.0',
|
||||
'category': 'Generic Modules/CRM & SRM',
|
||||
'description': """
|
||||
|
@ -30,13 +30,17 @@
|
|||
""",
|
||||
'author': 'Tiny',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': [ 'crm','project'],
|
||||
'init_xml': [ 'crm_bugs_data.xml'
|
||||
'depends': ['crm','project'],
|
||||
'init_xml': [
|
||||
'crm_bugs_data.xml'
|
||||
],
|
||||
'update_xml': [ 'crm_bugs_view.xml',
|
||||
'crm_bugs_menu.xml',
|
||||
],
|
||||
'demo_xml': [],
|
||||
'update_xml': [
|
||||
'crm_bugs_view.xml',
|
||||
'crm_bugs_menu.xml',
|
||||
'crm_future_view.xml',
|
||||
'crm_future_menu.xml',
|
||||
],
|
||||
'demo_xml': ['crm_bugs_demo.xml'],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '',
|
||||
|
|
|
@ -8,15 +8,15 @@
|
|||
<record id="crm_case_buginaccountsmodule0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_8"/>
|
||||
<field eval="time.strftime('%Y-%m-08 10:15:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""5"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_agrolait"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage1"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage1"/>
|
||||
<field eval="15.0" name="duration"/>
|
||||
<field eval=""Bug in Accounts module"" name="name"/>
|
||||
<field eval=""agr@agrolait.com"" name="email_from"/>
|
||||
|
@ -32,175 +32,175 @@
|
|||
<record id="crm_case_programnotgivingproperoutput0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_tang"/>
|
||||
<field eval="time.strftime('%Y-%m-15 12:50:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category2"/>
|
||||
<field name="category2_id" ref="category2"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_asus"/>
|
||||
<field eval=""done"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="3.5" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage2"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage2"/>
|
||||
<field eval=""Program not giving proper output"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_outputincorrect0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_9"/>
|
||||
<field eval="time.strftime('%Y-%m-18 14:30:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""4"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_id" ref="base.res_partner_2"/>
|
||||
<field eval=""cancel"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="2.3" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage3"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage3"/>
|
||||
<field eval=""Output incorrect"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_problemloadingpage0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_13"/>
|
||||
<field eval="time.strftime('%Y-%m-20 15:25:05')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_14"/>
|
||||
<field eval=""cancel"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="4.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage4"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage4"/>
|
||||
<field eval=""Problem loading page"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_pagenotfound0" model="crm.project.bug">
|
||||
<field eval="time.strftime('%Y-%m-22 18:15:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/>
|
||||
<field eval=""draft"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="1.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Page not Found"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_programmingerror0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_10"/>
|
||||
<field eval="time.strftime('%Y-%m-24 09:45:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category2"/>
|
||||
<field name="category2_id" ref="category2"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_5"/>
|
||||
<field eval=""pending"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="4.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage6"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage6"/>
|
||||
<field eval=""Programming Error"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_logicalerrorinprogram0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_6"/>
|
||||
<field eval="time.strftime('%Y-%m-26 11:10:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_6"/>
|
||||
<field eval=""pending"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="2.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage7"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage7"/>
|
||||
<field eval=""Logical Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_constrainterror0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_6"/>
|
||||
<field eval="time.strftime('%Y-%m-25 13:35:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_6"/>
|
||||
<field eval=""pending"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="7.3" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ1"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ1"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Constraint Error"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_errorinprogram0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_10"/>
|
||||
<field eval="time.strftime('%Y-%m-28 15:40:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category2"/>
|
||||
<field name="category2_id" ref="category2"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_id" ref="base.res_partner_5"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="1.3" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ2"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ2"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_patcheserrorinprogram0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_9"/>
|
||||
<field eval="time.strftime('%Y-%m-28 16:30:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category2"/>
|
||||
<field name="category2_id" ref="category2"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_2"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="13.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ2"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ2"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Patches Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_newfeaturestobeadded0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_wong"/>
|
||||
<field eval="time.strftime('%Y-%m-01 12:15:10')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""4"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_maxtor"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="3.2" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage1"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage1"/>
|
||||
<field eval=""New Features To Be Added"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_addmenustothemodule0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="time.strftime('%Y-%m-05 18:00:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category2"/>
|
||||
<field name="category2_id" ref="category2"/>
|
||||
<field eval=""1"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_id" ref="base.res_partner_9"/>
|
||||
<field eval=""done"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="3.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage2"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage2"/>
|
||||
<field eval=""Add menus to the module"" name="name"/>
|
||||
<field eval=""info@opensides.be"" name="email_from"/>
|
||||
</record>
|
||||
|
@ -208,16 +208,16 @@
|
|||
<record id="crm_case_includeattendancesheetinproject0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_2"/>
|
||||
<field eval="time.strftime('%Y-%m-10 17:05:30')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_10"/>
|
||||
<field eval=""cancel"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="2.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage3"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage3"/>
|
||||
<field eval=""Include Attendance sheet in Project"" name="name"/>
|
||||
<field eval=""contact@tecsas.fr"" name="email_from"/>
|
||||
</record>
|
||||
|
@ -227,48 +227,48 @@
|
|||
<field name="partner_address_id" ref="base.res_partner_address_6"/>
|
||||
<field name="som" ref="base.som_happy"/>
|
||||
<field eval="time.strftime('%Y-%m-15 10:35:15')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_6"/>
|
||||
<field eval=""draft"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="2.45" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Create new object"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_improvereportsinhrms0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_15"/>
|
||||
<field eval="time.strftime('%Y-%m-19 12:15:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""4"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_11"/>
|
||||
<field eval=""pending"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="15.0" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage7"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage7"/>
|
||||
<field eval=""Improve Reports in HRMS"" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_improvereportsinpms0" model="crm.project.bug">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_15"/>
|
||||
<field eval="time.strftime('%Y-%m-21 14:30:00')" name="date"/>
|
||||
<field name="category2_id" ref="crm.category1"/>
|
||||
<field name="category2_id" ref="category1"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_id" ref="base.res_partner_11"/>
|
||||
<field eval=""pending"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_support"/>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field eval="06.15" name="duration"/>
|
||||
<field name="categ_id" ref="crm.categ3"/>
|
||||
<field name="stage_id" ref="crm.stage5"/>
|
||||
<field name="categ_id" ref="categ3"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field eval=""Improve Reports in PMS"" name="name"/>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -7,6 +7,33 @@
|
|||
# Bug Tracking
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_bug_assign_wizard_form">
|
||||
<field name="name">crm.project.bug.assign_wizard.form</field>
|
||||
<field name="model">crm.project.bug.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_bug_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.project.bug.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_bug_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_form_view">
|
||||
<field name="name">CRM - Bug Tracker Form</field>
|
||||
|
@ -37,7 +64,7 @@
|
|||
<field name="priority" string="Severity"/>
|
||||
<group colspan="2">
|
||||
<field name="case_id" select="1"/>
|
||||
<button string="Assign" name="%(crm.crm_generic_wizard_act)d" type="action" />
|
||||
<button string="Assign" name="%(action_crm_bug_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
<newline/>
|
||||
<separator string= "Description" colspan="4"/>
|
||||
|
@ -149,7 +176,7 @@
|
|||
</record>
|
||||
|
||||
<record id="view_crm_case_bugs_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.bugs.select</field>
|
||||
<field name="name">CRM - Bug Tracker Search</field>
|
||||
<field name="model">crm.project.bug</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -194,28 +221,7 @@
|
|||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_case_feature_request_filter" model="ir.ui.view">
|
||||
<field name="name">crm.case.feature.request.select</field>
|
||||
<field name="model">crm.project.bug</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Feature Request">
|
||||
<group col='6' colspan='4'>
|
||||
<filter icon="gtk-execute" string="My Feature Request" domain="[('user_id','=',uid)]" separator="1" help="Feature Requests Related to Current User"/>
|
||||
<field name="state" select="1">
|
||||
<filter icon="terp-crm" domain="[('state','=','draft')]" help="Draft Feature Request"/>
|
||||
<filter icon="terp-crm" domain="[('state','=','open')]" help="Open Feature Request"/>
|
||||
<filter icon="terp-crm" domain="[('state','=','pending')]" help="Pending Feature Request"/>
|
||||
</field>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" select='1'/>
|
||||
<field name="user_id" select="1" widget="selection"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_calendar_view">
|
||||
<field name="name">CRM - Bug Tracker Calendar</field>
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
|
||||
<record model="crm.case.categ" id="future_patch_categ">
|
||||
<field name="name">Patches</field>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="future_fixed_categ">
|
||||
<field name="name">Fixed</field>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="future_awaiting_categ">
|
||||
<field name="name">Awaiting Response</field>
|
||||
<field name="section_id" ref="section_support"/>
|
||||
</record>
|
||||
|
||||
|
||||
######################## Future Request (menu) ###########################
|
||||
<!--
|
||||
ALL BUGS
|
||||
-->
|
||||
<record model="ir.actions.act_window" id="action_crm_case_future">
|
||||
<field name="name">Future Requests</field>
|
||||
<field name="res_model">crm.project.future</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_future_tree_view"/>
|
||||
<field name="context" eval="{'default_state':'open'}"/>
|
||||
<field name="search_view_id" ref="view_crm_case_future_filter"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_future_tree_view0">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_case_future_tree_view"/>
|
||||
<field name="act_window_id" ref="action_crm_case_future"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_future_calendar_view0">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="crm_case_future_calendar_view"/>
|
||||
<field name="act_window_id" ref="action_crm_case_future"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_future_form_view0">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_case_future_form_view"/>
|
||||
<field name="act_window_id" ref="action_crm_case_future"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Future Requests" id="menu_crm_case_future_request" parent="menu_aftertask" action="action_crm_case_future"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,235 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- <menuitem name="CRM & SRM" icon="terp-crm" id="menu_crm1"/> -->
|
||||
|
||||
# ------------------------------------------------------
|
||||
# Future Request
|
||||
# ------------------------------------------------------
|
||||
|
||||
<record model="ir.ui.view" id="crm_future_assign_wizard_form">
|
||||
<field name="name">crm.project.future.assign_wizard.form</field>
|
||||
<field name="model">crm.project.future.assign_wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="To Assign">
|
||||
<group col="2">
|
||||
<field name="section_id" select="1" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
<button icon="gtk-execute" name="action_create" string="Assign" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_crm_future_assign_wizard" model="ir.actions.act_window">
|
||||
<field name="name">To Assign</field>
|
||||
<field name="res_model">crm.project.future.assign_wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_future_assign_wizard_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_future_form_view">
|
||||
<field name="name">CRM - Future Request Form</field>
|
||||
<field name="model">crm.project.future</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Future Request Form">
|
||||
<group colspan="4" col="6">
|
||||
<field name="project_id"/>
|
||||
<field name="name" string="Title" colspan="2"/>
|
||||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<label string="Resolution: " align="1.0"/>
|
||||
<group colspan="1" col="2">
|
||||
<field name="stage_id" select="1" nolabel="1"/>
|
||||
<button icon="gtk-go-forward" string="" name="stage_next" type="object"/>
|
||||
</group>
|
||||
<field name="date"/>
|
||||
<field name="user_id" />
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General">
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" colspan="2"/>
|
||||
<field name="partner_address_id" string="Contact" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="1"/>
|
||||
<field name="email_from" colspan="2"/>
|
||||
<separator colspan="4"/>
|
||||
<field name="category2_id" string="Version"/>
|
||||
<field name="categ_id" on_change="onchange_categ_id(categ_id)"/>
|
||||
<field name="priority" string="Severity"/>
|
||||
<group colspan="2">
|
||||
<field name="case_id" select="1"/>
|
||||
<button string="Assign" name="%(action_crm_future_assign_wizard)d" type="action" />
|
||||
</group>
|
||||
<newline/>
|
||||
<separator string= "Description" colspan="4"/>
|
||||
<field name="description" nolabel="1" colspan="4"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" />
|
||||
<button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-jump-to"/>
|
||||
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
|
||||
<button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/>
|
||||
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/>
|
||||
<button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/>
|
||||
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="History">
|
||||
<field name="id" select="1"/>
|
||||
<field name="active" />
|
||||
<separator colspan="4" string="Dates"/>
|
||||
<field name="create_date"/>
|
||||
<field name="date_closed"/>
|
||||
<field name="date_action_last"/>
|
||||
<field name="date_action_next"/>
|
||||
<separator colspan="4" string="Estimates"/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="planned_cost"/>
|
||||
<field name="probability"/>
|
||||
<separator colspan="4" string="References"/>
|
||||
<field name="ref" colspan="4"/>
|
||||
<field name="ref2" colspan="4"/>
|
||||
<field name="log_ids" nolabel="1" colspan="4">
|
||||
<form string="Actions">
|
||||
<separator string="Action Information" colspan="4"/>
|
||||
<field name="name" colspan="4"/>
|
||||
<field name="date" />
|
||||
<field name="user_id" />
|
||||
<field name="som" />
|
||||
<field name="canal_id"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Events">
|
||||
<field name="child_ids" colspan="4" nolabel="1">
|
||||
<tree string="Related Cases">
|
||||
<field name="id"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="section_id" widget="selection"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Emails">
|
||||
<group colspan="4">
|
||||
<field colspan="4" name="email_cc" string="CC"/>
|
||||
</group>
|
||||
<field name="history_line" colspan="4" nolabel="1" mode="form,tree">
|
||||
<form string="Communication history">
|
||||
<group col="7" colspan="4">
|
||||
<field name="date"/>
|
||||
<field name="email"/>
|
||||
<field name="canal_id"/>
|
||||
<button
|
||||
string="Add a CC"
|
||||
name="%(crm.action_view_crm_email_add_cc_wizard)d"
|
||||
icon="gtk-add" type="action"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="description" colspan="4" nolabel="1"/>
|
||||
<button colspan="4" string="Reply to Last Email" name="%(crm.wizard_crm_send_mail)d" context="{'mail':'reply'}" icon="gtk-undo" type="action"/>
|
||||
</form>
|
||||
<tree string="Communication history">
|
||||
<field name="description"/>
|
||||
<field name="email"/>
|
||||
<field name="date"/>
|
||||
</tree>
|
||||
</field>
|
||||
<button colspan="4" string="Send New Email" name="%(crm.wizard_crm_new_send_mail)d" context="{'mail':'new'}" icon="gtk-go-forward" type="action"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="crm_case_future_tree_view">
|
||||
<field name="name">CRM - Future Request Tree</field>
|
||||
<field name="model">crm.project.future</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Bugs Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
<field name="id"/>
|
||||
<field name="name" string="Title"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="priority" string="Severity"/>
|
||||
<field name="categ_id"/>
|
||||
<field name="stage_id" string="Resolution"/>
|
||||
<field name="category2_id" string="Version"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
<button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-jump-to"/>
|
||||
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
|
||||
<button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/>
|
||||
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/>
|
||||
<button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/>
|
||||
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_case_future_filter" model="ir.ui.view">
|
||||
<field name="name">CRM - Future Request Search</field>
|
||||
<field name="model">crm.project.future</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Future Requests">
|
||||
<group col="7" colspan="1">
|
||||
<filter icon="gtk-apply" string="Fixed Future Requests"
|
||||
domain="[('stage_id.name','=','Fixed')]"
|
||||
separator="1" help="All Fixed Future Requests"
|
||||
/>
|
||||
<filter icon="gtk-media-pause" string="Waiting Response"
|
||||
domain="[('stage_id.name','=','Awaiting Response')]"
|
||||
separator="1" help="All Future Requests which are Waiting for Response"
|
||||
/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="gtk-home" string=" Today "
|
||||
separator="1"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
|
||||
help="Todays's Future Requests"
|
||||
/>
|
||||
<filter icon="gtk-media-rewind"
|
||||
string=" 7 Days " separator="1"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Future Requests during last 7 days"
|
||||
/>
|
||||
</group>
|
||||
<separator orientation="vertical"/>
|
||||
<group col="4" colspan="2">
|
||||
<field name="name" select='1' string="Subject"/>
|
||||
<field name="user_id" select="1" widget="selection">
|
||||
<filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Future Requests" default="1"/>
|
||||
<filter icon="terp-crm" domain="[('user_id','child_of',[uid])]" help="My department's Future Requests"/>
|
||||
</field>
|
||||
<field name="state" select="1">
|
||||
<filter icon="gtk-new" domain="[('state','=','draft')]" help="Draft Future Requests"/>
|
||||
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Future Requests"/>
|
||||
<filter icon="gtk-media-pause" domain="[('state','=','pending')]" help="Pending Future Requests"/>
|
||||
</field>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_future_calendar_view">
|
||||
<field name="name">CRM - Future Request Calendar</field>
|
||||
<field name="model">crm.project.future</field>
|
||||
<field name="type">calendar</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
<calendar string="Bugs" date_start="date" color="user_id" date_delay="duration">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
</calendar>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -39,7 +39,7 @@ class crm_project_bug(osv.osv):
|
|||
_inherits = {'crm.case':"inherit_case_id"}
|
||||
_columns = {
|
||||
'inherit_case_id':fields.many2one('crm.case','Case'),
|
||||
'project_id':fields.many2one('project.project', 'Project '),
|
||||
'project_id':fields.many2one('project.project', 'Project'),
|
||||
}
|
||||
|
||||
def _map_ids(self, method, cr, uid, ids, *args, **argv):
|
||||
|
@ -53,6 +53,8 @@ class crm_project_bug(osv.osv):
|
|||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
|
@ -67,7 +69,64 @@ class crm_project_bug(osv.osv):
|
|||
return self._map_ids('case_cancel',cr,uid,ids,*args,**argv)
|
||||
def case_reset(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_reset',cr,uid,ids,*args,**argv)
|
||||
def case_escalate(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_escalate',cr,uid,ids,*args,**argv)
|
||||
def case_pending(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
|
||||
|
||||
|
||||
|
||||
crm_project_bug()
|
||||
|
||||
class crm_bug_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.project.bug.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.project.bug')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.project.bug')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm_project', 'view_crm_case_bugs_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
value = {
|
||||
'name': _('Bugs'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.project.bug',
|
||||
'res_id': int(new_case_id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_bug_assign_wizard()
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
#-*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
import re
|
||||
import os
|
||||
|
||||
import mx.DateTime
|
||||
import base64
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
import tools
|
||||
from osv import fields,osv,orm
|
||||
from osv.orm import except_orm
|
||||
|
||||
class crm_project_future_request(osv.osv):
|
||||
_name = "crm.project.future"
|
||||
_description = "Project Future Request"
|
||||
_order = "id desc"
|
||||
_inherits = {'crm.case':"inherit_case_id"}
|
||||
_columns = {
|
||||
'inherit_case_id':fields.many2one('crm.case','Case'),
|
||||
'project_id':fields.many2one('project.project', 'Project'),
|
||||
}
|
||||
|
||||
def _map_ids(self, method, cr, uid, ids, *args, **argv):
|
||||
case_data = self.browse(cr, uid, ids)
|
||||
new_ids = []
|
||||
for case in case_data:
|
||||
if case.inherit_case_id:
|
||||
new_ids.append(case.inherit_case_id.id)
|
||||
return getattr(self.pool.get('crm.case'),method)(cr, uid, new_ids, *args, **argv)
|
||||
|
||||
|
||||
def onchange_case_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_case_id',cr,uid,ids,*args,**argv)
|
||||
def stage_next(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('stage_next',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_partner_address_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_partner_address_id',cr,uid,ids,*args,**argv)
|
||||
def onchange_categ_id(self, cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('onchange_categ_id',cr,uid,ids,*args,**argv)
|
||||
def case_close(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_close',cr,uid,ids,*args,**argv)
|
||||
def case_open(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_open',cr,uid,ids,*args,**argv)
|
||||
def case_cancel(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_cancel',cr,uid,ids,*args,**argv)
|
||||
def case_reset(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_reset',cr,uid,ids,*args,**argv)
|
||||
def case_escalate(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_escalate',cr,uid,ids,*args,**argv)
|
||||
def case_pending(self,cr, uid, ids, *args, **argv):
|
||||
return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
|
||||
|
||||
|
||||
crm_project_future_request()
|
||||
|
||||
class crm_future_request_assign_wizard(osv.osv_memory):
|
||||
_name = 'crm.project.future.assign_wizard'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Section', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
|
||||
def _get_default_section(self, cr, uid, context):
|
||||
case_id = context.get('active_id',False)
|
||||
if not case_id:
|
||||
return False
|
||||
case_obj = self.pool.get('crm.project.future')
|
||||
case = case_obj.read(cr, uid, case_id, ['state','section_id'])
|
||||
if case['state'] in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
return case['section_id']
|
||||
|
||||
|
||||
_defaults = {
|
||||
'section_id': _get_default_section
|
||||
}
|
||||
def action_create(self, cr, uid, ids, context=None):
|
||||
case_obj = self.pool.get('crm.project.future')
|
||||
case_id = context.get('active_id',[])
|
||||
res = self.read(cr, uid, ids)[0]
|
||||
case = case_obj.browse(cr, uid, case_id)
|
||||
if case.state in ('done'):
|
||||
raise osv.except_osv(_('Error !'), _('You can not assign Closed Case.'))
|
||||
new_case_id = case_obj.copy(cr, uid, case_id, default=
|
||||
{
|
||||
'section_id':res.get('section_id',False),
|
||||
'user_id':res.get('user_id',False),
|
||||
'case_id' : case.inherit_case_id.id
|
||||
}, context=context)
|
||||
case_obj.case_close(cr, uid, [case_id])
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
result = data_obj._get_id(cr, uid, 'crm_project', 'view_crm_case_future_filter')
|
||||
search_view = data_obj.read(cr, uid, result, ['res_id'])
|
||||
value = {
|
||||
'name': _('Future Requests'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.project.future',
|
||||
'res_id': int(new_case_id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': search_view['res_id']
|
||||
}
|
||||
return value
|
||||
|
||||
crm_future_request_assign_wizard()
|
|
@ -25,15 +25,12 @@
|
|||
'version': '1.0',
|
||||
'category': 'Generic Modules/Sales & Purchases',
|
||||
'description': """
|
||||
This module adds a shortcut on one or several cases in the CRM.
|
||||
This module adds a shortcut on one or several opportunity cases in the CRM.
|
||||
This shortcut allows you to generate a sale order based on the selected case.
|
||||
If different cases are open (a list), it generates one sale order by
|
||||
case.
|
||||
The case is then closed and linked to the generated sale order.
|
||||
|
||||
It also add a shortcut on one or several partners.
|
||||
This shortcut allows you to generate a CRM case for the partners.
|
||||
|
||||
We suggest you to install this module if you installed both the sale and the
|
||||
crm modules.
|
||||
""",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<record model="ir.ui.view" id="crm_case_form_view_oppor">
|
||||
<field name="name">CRM - Opportunities - Quote Inherit</field>
|
||||
<field name="model">crm.case</field>
|
||||
<field name="model">crm.opportunity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
|
||||
<field name="arch" type="xml">
|
||||
|
|
|
@ -4,17 +4,11 @@
|
|||
|
||||
<wizard
|
||||
string="Make Quotation"
|
||||
model="crm.case"
|
||||
name="crm.case.make_order"
|
||||
model="crm.opportunity"
|
||||
name="crm.opportunity.make_order"
|
||||
keyword="client_action_multi"
|
||||
multi="True"
|
||||
id="sale_crm_wizard"/>
|
||||
|
||||
<wizard
|
||||
string="Make Case"
|
||||
model="res.partner"
|
||||
name="sale_crm.make_case"
|
||||
keyword="client_action_multi"
|
||||
id="sale_crm_make_case_wizard"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -20,6 +20,6 @@
|
|||
##############################################################################
|
||||
|
||||
import makesale
|
||||
import makecase
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import wizard
|
||||
import pooler
|
||||
|
||||
def _get_default(obj, cursor, uid, data, context=None):
|
||||
'''Get default value'''
|
||||
return {'user': uid}
|
||||
|
||||
def _make_case(obj, cursor, uid, data, context=None):
|
||||
'''Create case'''
|
||||
pool = pooler.get_pool(cursor.dbname)
|
||||
case_obj = pool.get('crm.case')
|
||||
mod_obj = pool.get('ir.model.data')
|
||||
act_obj = pool.get('ir.actions.act_window')
|
||||
|
||||
new_id = []
|
||||
|
||||
for partner_id in data['ids']:
|
||||
new_id.append(case_obj.create(cursor, uid, {
|
||||
'name': data['form']['name'],
|
||||
'section_id': data['form']['section'],
|
||||
'partner_id': partner_id,
|
||||
'description': data['form']['description'],
|
||||
}))
|
||||
|
||||
result = mod_obj._get_id(cursor, uid, 'crm', 'crm_case_categ0-act')
|
||||
res_id = mod_obj.read(cursor, uid, [result], ['res_id'])[0]['res_id']
|
||||
result = act_obj.read(cursor, uid, [res_id])[0]
|
||||
result['domain'] = str([('id', 'in', new_id)])
|
||||
return result
|
||||
|
||||
|
||||
class MakeCase(wizard.interface):
|
||||
'''Wizard that create case on partner'''
|
||||
|
||||
case_form = """<?xml version="1.0"?>
|
||||
<form string="Make Case">
|
||||
<field name="name"/>
|
||||
<field name="section"/>
|
||||
<field name="user"/>
|
||||
<field name="description" colspan="4"/>
|
||||
</form>"""
|
||||
|
||||
case_fields = {
|
||||
'name': {'string': 'Case Description', 'type': 'char', 'size': 64,
|
||||
'required': True},
|
||||
'section': {'string': 'Case Section', 'type': 'many2one',
|
||||
'relation': 'crm.case.section', 'required': True},
|
||||
'user': {'string': 'User Responsible', 'type': 'many2one',
|
||||
'relation': 'res.users'},
|
||||
'description': {'string': 'Your action', 'type': 'text'},
|
||||
}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_get_default],
|
||||
'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
|
||||
'state': [
|
||||
('end', 'Cancel'),
|
||||
('create', 'Create')
|
||||
]
|
||||
}
|
||||
},
|
||||
'create': {
|
||||
'actions': [],
|
||||
'result': {'type': 'action', 'action': _make_case, 'state': 'end'}
|
||||
}
|
||||
}
|
||||
|
||||
MakeCase('sale_crm.make_case')
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -56,7 +56,7 @@ sale_fields = {
|
|||
class make_sale(wizard.interface):
|
||||
|
||||
def _selectPartner(self, cr, uid, data, context):
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.case')
|
||||
case_obj = pooler.get_pool(cr.dbname).get('crm.opportunity')
|
||||
case = case_obj.read(cr, uid, data['ids'], ['partner_id'])
|
||||
return {'partner_id': case[0]['partner_id']}
|
||||
|
||||
|
@ -65,7 +65,7 @@ class make_sale(wizard.interface):
|
|||
mod_obj = pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'sale', 'view_sales_order_filter')
|
||||
id = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
case_obj = pool.get('crm.case')
|
||||
case_obj = pool.get('crm.opportunity')
|
||||
sale_obj = pool.get('sale.order')
|
||||
partner_obj = pool.get('res.partner')
|
||||
sale_line_obj = pool.get('sale.order.line')
|
||||
|
@ -95,7 +95,7 @@ class make_sale(wizard.interface):
|
|||
raise wizard.except_wizard(_('Data Insufficient!'),_('Customer has no addresses defined!'))
|
||||
|
||||
vals = {
|
||||
'origin': 'CRM:%s' % str(case.id),
|
||||
'origin': 'CRM-Opportunity:%s' % str(case.id),
|
||||
'section_id': case.section_id and case.section_id.id or False,
|
||||
'picking_policy': data['form']['picking_policy'],
|
||||
'shop_id': data['form']['shop_id'],
|
||||
|
@ -148,6 +148,6 @@ class make_sale(wizard.interface):
|
|||
}
|
||||
}
|
||||
|
||||
make_sale('crm.case.make_order')
|
||||
make_sale('crm.opportunity.make_order')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
Loading…
Reference in New Issue