Merge with Trunk Addons

bzr revid: vir@tinyerp.com-20100205085323-txuyggcqh5hmoyzc
This commit is contained in:
Vir (Open ERP)
2010-02-05 14:23:23 +05:30
93 changed files with 2288 additions and 1338 deletions
+7 -2
View File
@@ -327,7 +327,7 @@
<field name="arch" type="xml">
<search string="Search Invoice">
<group col="10" colspan="4">
<filter icon="terp-account" string="Draft" domain="[('state','=','draft')]" help="Draft Invoices"/>
<filter icon="terp-account" string="Draft" domain="[('state','=','draft')]" help="Draft Invoices"/>
<filter icon="terp-account" string="Proforma" domain="[('state','=','proforma2')]" help="Proforma Invoices"/>
<filter icon="terp-account" string="Unpaid" domain="[('state','in',('open','cancel'))]" help="Unpaid Invoices"/>
<separator orientation="vertical"/>
@@ -335,7 +335,12 @@
<field name="partner_id" select='1'/>
<field name="amount_total" string="Price" select='1'/>
<field name="origin" select='1'/>
</group>
</group>
<group expand="context.get('report',False)" string="Group By..." colspan="4" col="10">
<filter string="By Partner" icon="terp-account" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="By State" icon="terp-account" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date Invoice" icon="terp-account" domain="[]" context="{'group_by':'date_invoice'}"/>
</group>
</search>
</field>
</record>
+1 -1
View File
@@ -873,7 +873,7 @@
<field name="partner_id" invisible="1" select="1"/>
<field name="amount" invisible="1" select="1"/>
<field colspan="4" name="line_id" nolabel="1" widget="one2many_list" default_get="{'lines':line_id ,'journal':journal_id }">
<field colspan="4" height="250" name="line_id" nolabel="1" widget="one2many_list" default_get="{'lines':line_id ,'journal':journal_id }">
<form string="Account Entry Line">
<separator colspan="4" string="General Information"/>
<field name="name" select="1"/>
+10 -5
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-01-29 14:02+0000\n"
"Last-Translator: Carlo <Unknown>\n"
"PO-Revision-Date: 2010-02-03 19:01+0000\n"
"Last-Translator: Davide Corio <davide.corio@domsense.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-01-30 04:39+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -288,6 +288,11 @@ msgid ""
"date empty, it means direct payment. The payment term may compute several "
"due dates, for example 50% now, 50% in one month."
msgstr ""
"Se vengono utilizzati i termini di pagamento, la data di scadenza verrà "
"calcolata automaticamente alla generazione dei movimenti contabili. Se i "
"termini di pagamento e la data di scadenza non vengono valorizzati, equivale "
"al pagamento diretto. Il termine di pagamento può essere calcolato a fronte "
"di diverse scadenze, per esempio 50% subito e 50% dopo un mese."
#. module: account
#: selection:account.tax,type:0
@@ -321,7 +326,7 @@ msgstr "Origine"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "Move Name"
msgstr ""
msgstr "Nome Movimento"
#. module: account
#: xsl:account.transfer:0
@@ -353,7 +358,7 @@ msgstr "Tassa"
#. module: account
#: rml:account.general.journal:0
msgid "Debit Trans."
msgstr ""
msgstr "Debito Trans."
#. module: account
#: field:account.analytic.line,account_id:0
@@ -1,5 +1,6 @@
<openerp>
<data>
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management"/>
<menuitem id="next_id_71" name="Financial Project Management" parent="base.menu_main_pm" groups="account.group_account_invoice" sequence="20"/>
<menuitem id="menu_invoicing" name="Invoicing" parent="next_id_71" sequence="20"/>
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_analytic_analysis
+1 -1
View File
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_anglo_saxon
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_followup
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_reporting
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: auction
+49 -44
View File
@@ -30,9 +30,14 @@ import pooler
import pytz
import re
import tools
import vobject
import time
try:
import vobject
except ImportError:
raise osv.except_osv('vobject Import Error!','Please install python-vobject from http://vobject.skyhouseconsulting.com/')
# O-1 Optional and can come only once
# O-n Optional and can come more than once
# R-1 Required and can come only once
@@ -66,33 +71,33 @@ def openobjectid2uid(cr, uidval, oomodel):
return value
def get_attribute_mapping(cr, uid, calname, context={}):
if not context:
context = {}
pool = pooler.get_pool(cr.dbname)
field_obj = pool.get('basic.calendar.fields')
type_obj = pool.get('basic.calendar.lines')
domain = [('object_id.model', '=', context.get('model'))]
if context.get('calendar_id'):
domain.append(('calendar_id', '=', context.get('calendar_id')))
type_id = type_obj.search(cr, uid, domain)
fids = field_obj.search(cr, uid, [('type_id', '=', type_id[0])])
res = {}
for field in field_obj.browse(cr, uid, fids):
attr = field.name.name
res[attr] = {}
res[attr]['field'] = field.field_id.name
res[attr]['type'] = field.field_id.ttype
if field.fn == 'hours':
res[attr]['type'] = "timedelta"
if res[attr]['type'] in ('one2many', 'many2many', 'many2one'):
res[attr]['object'] = field.field_id.relation
elif res[attr]['type'] in ('selection') and field.mapping:
res[attr]['mapping'] = eval(field.mapping)
if not res.get('uid', None):
res['uid'] = {}
res['uid']['field'] = 'id'
res['uid']['type'] = "integer"
return res
if not context:
context = {}
pool = pooler.get_pool(cr.dbname)
field_obj = pool.get('basic.calendar.fields')
type_obj = pool.get('basic.calendar.lines')
domain = [('object_id.model', '=', context.get('model'))]
if context.get('calendar_id'):
domain.append(('calendar_id', '=', context.get('calendar_id')))
type_id = type_obj.search(cr, uid, domain)
fids = field_obj.search(cr, uid, [('type_id', '=', type_id[0])])
res = {}
for field in field_obj.browse(cr, uid, fids):
attr = field.name.name
res[attr] = {}
res[attr]['field'] = field.field_id.name
res[attr]['type'] = field.field_id.ttype
if field.fn == 'hours':
res[attr]['type'] = "timedelta"
if res[attr]['type'] in ('one2many', 'many2many', 'many2one'):
res[attr]['object'] = field.field_id.relation
elif res[attr]['type'] in ('selection') and field.mapping:
res[attr]['mapping'] = eval(field.mapping)
if not res.get('uid', None):
res['uid'] = {}
res['uid']['field'] = 'id'
res['uid']['type'] = "integer"
return res
def map_data(cr, uid, obj):
vals = {}
@@ -345,13 +350,13 @@ class Calendar(CalDAV, osv.osv):
_columns = {
'name': fields.char("Name", size=64),
'line_ids': fields.one2many('basic.calendar.lines', 'calendar_id', 'Calendar Lines'),
'active': fields.boolean('Active'),
'active': fields.boolean('Active'),
'create_date': fields.datetime('Created Date'),
'write_date': fields.datetime('Modifided Date'),
}
_defaults = {
'active': lambda *a: True,
'active': lambda *a: True,
}
def export_cal(self, cr, uid, ids, vobj='vevent', context={}):
@@ -413,7 +418,7 @@ class basic_calendar_line(osv.osv):
}
_defaults = {
'domain': lambda *a: '[]',
'domain': lambda *a: '[]',
}
basic_calendar_line()
@@ -422,11 +427,11 @@ class basic_calendar_attribute(osv.osv):
_name = 'basic.calendar.attributes'
_description = 'Calendar attributes'
_columns = {
'name': fields.char("Name", size=64, required=True),
'name': fields.char("Name", size=64, required=True),
'type': fields.selection([('vevent', 'Event'), ('vtodo', 'TODO'), \
('alarm', 'Alarm'), \
('attendee', 'Attendee')], \
string="Type", size=64, required=True),
string="Type", size=64, required=True),
}
basic_calendar_attribute()
@@ -436,20 +441,20 @@ class basic_calendar_fields(osv.osv):
_description = 'Calendar fields'
_columns = {
'field_id': fields.many2one('ir.model.fields', 'OpenObject Field'),
'name': fields.many2one('basic.calendar.attributes', 'Name', required=True),
'field_id': fields.many2one('ir.model.fields', 'OpenObject Field'),
'name': fields.many2one('basic.calendar.attributes', 'Name', required=True),
'type_id': fields.many2one('basic.calendar.lines', 'Type', \
required=True, ondelete='cascade'),
'expr': fields.char("Expression", size=64),
'fn': fields.selection( [('field', 'Use the field'),
('const', 'Expression as constant'),
('hours', 'Interval in hours'),
],'Function'),
required=True, ondelete='cascade'),
'expr': fields.char("Expression", size=64),
'fn': fields.selection([('field', 'Use the field'),
('const', 'Expression as constant'),
('hours', 'Interval in hours'),
], 'Function'),
'mapping': fields.text('Mapping'),
}
_defaults = {
'fn': lambda *a: 'field',
'fn': lambda *a: 'field',
}
def check_line(self, cr, uid, vals, name, context=None):
@@ -471,7 +476,7 @@ class basic_calendar_fields(osv.osv):
name = cr.fetchone()
name = name[0]
if name in ('valarm', 'attendee'):
self.check_line(cr, uid, vals, name, context=context)
self.check_line(cr, uid, vals, name, context=context)
cr.execute("Select count(id) from basic_calendar_fields \
where name=%s and type_id=%s" % (vals.get('name'), vals.get('type_id')))
res = cr.fetchone()
@@ -487,7 +492,7 @@ class basic_calendar_fields(osv.osv):
field = self.browse(cr, uid, id, context=context)
name = field.name.name
if name in ('valarm', 'attendee'):
self.check_line(cr, uid, vals, name, context=context)
self.check_line(cr, uid, vals, name, context=context)
qry = "Select count(id) from basic_calendar_fields \
where name=%s and type_id=%s" % (field.name.id, field.type_id.id)
cr.execute(qry)
+13 -3
View File
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<data noupdate="1">
<!-- Event attributes-->
@@ -54,7 +54,12 @@
<field name="name">valarm</field>
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_vtimezone">
<field name="name">vtimezone</field>
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_priority">
<field name="name">priority</field>
<field name="type">vevent</field>
@@ -172,7 +177,12 @@
<field name="name">seq</field>
<field name="type">vtodo</field>
</record>
<record model="basic.calendar.attributes" id="field_todo_vtimezone">
<field name="name">vtimezone</field>
<field name="type">vtodo</field>
</record>
<record model="basic.calendar.attributes" id="field_todo_url">
<field name="name">url</field>
<field name="type">vtodo</field>
@@ -419,6 +419,15 @@
res_model="res.partner.job"
src_model="res.partner"
/>
<!-- Act window defining a shorcut on partner address to open all his jobs -->
<act_window
id="act_res_partner_jobs" name="Open Jobs"
domain="[('address_id', '=', active_id)]"
res_model="res.partner.job"
src_model="res.partner.address"
/>
<menuitem icon="terp-purchase" id="base.menu_purchase_root" name="Procurement Management"/>
<menuitem id="base.menu_procurement_management_supplier" name="Suppliers"
parent="base.menu_purchase_root" sequence="3"/>
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_contact
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-17 06:51+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-03 23:27+0000\n"
"Last-Translator: Artyom Packhomov <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2009-12-16 05:26+0000\n"
"X-Launchpad-Export-Date: 2010-02-05 05:01+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_merge
@@ -60,7 +60,7 @@ msgstr "Версия"
#: wizard_view:base_module_merge.module_merge,info:0
#: wizard_view:base_module_merge.module_merge,save:0
msgid "Module Recording"
msgstr ""
msgstr "Запись модуля"
#. module: base_module_merge
#: wizard_view:base_module_merge.module_merge,save:0
+7 -7
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-12-07 16:08+0000\n"
"Last-Translator: Pedro_Maschio <pedro.bicudo@tgtconsult.com.br>\n"
"PO-Revision-Date: 2010-02-04 10:26+0000\n"
"Last-Translator: Holverat Bortolossi <holverat@gmail.com>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2009-12-16 05:26+0000\n"
"X-Launchpad-Export-Date: 2010-02-05 05:01+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_quality
@@ -27,18 +27,18 @@ msgstr "Pontuação Final (%)"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"O nome do objeto precisa iniciar com x_ e não conter nenhum caracter "
"O nome do Objeto deve começar com x_ e não deve conter nenhum caracter "
"especial!"
#. module: base_module_quality
#: model:ir.module.module,shortdesc:base_module_quality.module_meta_information
msgid "Base module quality"
msgstr "Qualidade do módulo base"
msgstr "Módulo base da qualidade"
#. module: base_module_quality
#: field:module.quality.check,name:0
msgid "Rated Module"
msgstr "Nota do Módulo"
msgstr "Módulo Avaliado"
#. module: base_module_quality
#: view:module.quality.detail:0
@@ -53,7 +53,7 @@ msgstr "Nota"
#. module: base_module_quality
#: field:module.quality.detail,state:0
msgid "State"
msgstr "Status"
msgstr "Estado"
#. module: base_module_quality
#: field:module.quality.detail,detail:0
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_quality
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_creator
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_setup
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_vat
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board_crm_configuration
-1
View File
@@ -37,6 +37,5 @@ This module implements a dashboard for human resource management that includes:
'demo_xml': [],
'installable': True,
'active': False,
'certificate': '',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -55,9 +55,9 @@
<child1>
<!-- <action colspan="4" height="220" name="%(act_my_project)d" string="My projects" width="510"/>-->
<action colspan="4" height="150" name="%(act_my_account)d" string="My accounts to invoice"/>
<action colspan="4" height="150" name="%(act_my_account)d" string="My accounts to invoice" width="510"/>
<action colspan="4" height="150" name="%(act_hr_timesheet_sheet)d" string="User's timesheets"/>
<action colspan="4" height="150" name="%(act_hr_timesheet_sheet)d" string="User's timesheets" width="510"/>
</child1>
<child2>
+3 -2
View File
@@ -92,11 +92,12 @@
<hpaned>
<child1>
<action colspan="4" height="220" name="%(action_view_task_tree)d" string="My Open Tasks" width="510"/>
<action colspan="4" height="150" name="%(action_view_project_member_tree)d" string="Members list of project"/>
<action colspan="4" name="%(crm_project.crm_case_categ_act0)d" string="Issues"/>
</child1>
<child2>
<action colspan="4" height="150" name="%(action_view_project_member_tree)d" string="Members list of project"/>
<action colspan="4" name="%(action_view_project_editable_messages_tree)d" string="Messages"/>
<action colspan="4" name="%(crm_project.crm_case_categ_act0)d" string="Issues"/>
</child2>
</hpaned>
</form>
+152 -62
View File
@@ -67,52 +67,110 @@ def _links_get(self, cr, uid, context={}):
return [(r['object'], r['name']) for r in res]
html_invitation = """
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>%(name)s</title>
</head>
<div>
<table cellspacing="0" cellpadding="0" border=3D "1" summary=3D"">
<tr align="center">
<body>
<table border="0" cellspacing="10" cellpadding="0" width="100%%"
style="font-family: Arial, Sans-serif; font-size: 14">
<tr>
<td width="100%%">Hello,</td>
</tr>
<tr>
<td width="100%%">You are invited for <i>%(company)s</i> Event.</td>
</tr>
<tr>
<td width="100%%">Below are the details of event:</td>
</tr>
</table>
<table cellspacing="0" cellpadding="5" border="0" summary=""
style="width: 90%%; font-family: Arial, Sans-serif; border: 1px Solid #ccc; background-color: #f6f6f6">
<tr valign="center" align="center">
<td bgcolor="DFDFDF">
<h3>%(name)s</h3>
</td>
</tr>
<tr>
<td>
<table cellpadding="8" cellspacing="0" border=3D "0" summary=3D
"Eventdetails" bgcolor="f6f6f6">
<table cellpadding="8" cellspacing="0" border="0"
style="font-size: 14" summary="Eventdetails" bgcolor="f6f6f6"
width="90%%">
<tr>
<td>
<div><b><i>Start Date</i></b></div>
<td width="21%%">
<div><b>Start Date</b></div>
</td>
<td><b>:</b></td>
<td>%(start_date)s</td>
<td>
<div><b><i>End Date</i></b></div>
<td width="15%%">
<div><b>End Date</b></div>
</td>
<td>%(end_date)s</td>
<td><b>:</b></td>
<td width="25%%">%(end_date)s</td>
</tr>
<tr>
<td><b><i>Description</i></b></td>
<tr valign="top">
<td><b>Description</b></td>
<td><b>:</b></td>
<td colspan="3">%(description)s</td>
</tr>
<tr>
<tr valign="top">
<td>
<div><b><i>Location</i></b></div>
<div><b>Location</b></div>
</td>
<td><b>:</b></td>
<td colspan="3">%(location)s</td>
</tr>
<tr>
<tr valign="top">
<td>
<div><b><i>Event Attendees</i></b></div>
<div><b>Event Attendees</b></div>
</td>
<td><b>:</b></td>
<td colspan="3">
<div>
<div>%(attendees)s</div>
</div>
</td>
</tr>
</table>"""
<tr valign="top">
<td><b>Are you coming?</b></td>
<td><b>:</b></td>
<td colspan="3">
<UL>
<LI>YES</LI>
<LI>NO</LI>
<LI>MAYBE</LI>
</UL>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table border="0" cellspacing="10" cellpadding="0" width="100%%"
style="font-family: Arial, Sans-serif; font-size: 14">
<tr>
<td width="100%%"><b>Note:</b> If you are interested please reply this
mail and keep only your response from options <i>YES, NO</i>
and <i>MAYBE</i>.</td>
</tr>
<tr>
<td width="100%%">From:</td>
</tr>
<tr>
<td width="100%%">%(user)s</td>
</tr>
<tr valign="top">
<td width="100%%">-<font color="a7a7a7">-------------------------</font></td>
</tr>
<tr>
<td width="100%%"> <font color="a7a7a7">%(sign)s</font></td>
</tr>
</table>
</body>
</html>
"""
class calendar_attendee(osv.osv):
_name = 'calendar.attendee'
@@ -130,13 +188,6 @@ class calendar_attendee(osv.osv):
name = name[0]
result = {}
def get_delegate_data(user):
if not user.address_id.email:
raise osv.except_osv(_('Error!'), \
("User does not have an email Address"))
email = (user.address_id and ('MAILTO:' + user.address_id.email)) or ''
return email
for attdata in self.browse(cr, uid, ids, context=context):
id = attdata.id
result[id] = {}
@@ -155,13 +206,10 @@ class calendar_attendee(osv.osv):
else:
result[id][name] = self._get_address(None, attdata.email)
if name == 'delegated_to':
user_obj = self.pool.get('res.users')
todata = map(get_delegate_data, attdata.del_to_user_ids)
todata = map(lambda x:('MAILTO:' + x.email) or '', attdata.del_to_user_ids)
result[id][name] = ', '.join(todata)
if name == 'delegated_from':
dstring = []
user_obj = self.pool.get('res.users')
fromdata = map(get_delegate_data, attdata.del_from_user_ids)
fromdata = map(lambda x:('MAILTO:' + x.email) or '', attdata.del_from_user_ids)
result[id][name] = ', '.join(fromdata)
if name == 'event_date':
if attdata.ref:
@@ -189,7 +237,7 @@ class calendar_attendee(osv.osv):
result[id][name] = uid
if name == 'language':
user_obj = self.pool.get('res.users')
lang = user_obj.read(cr, uid, uid, ['context_lang']) ['context_lang']
lang = user_obj.read(cr, uid, uid, ['context_lang'])['context_lang']
result[id][name] = lang.replace('_', '-')
return result
@@ -230,17 +278,17 @@ class calendar_attendee(osv.osv):
string='Delegated To', type="char", size=124, store=True, \
multi='delegated_to', help="The users that the original \
request was delegated to"),
'del_to_user_ids': fields.many2many('res.users', 'att_del_to_user_rel',
'del_to_user_ids': fields.many2many('calendar.attendee', 'att_del_to_user_rel',
'attendee_id', 'user_id', 'Users'),
'delegated_from': fields.function(_compute_data, method=True, string=\
'Delegated From', type="char", store=True, size=124, multi='delegated_from'),
'del_from_user_ids': fields.many2many('res.users', 'att_del_from_user_rel', \
'del_from_user_ids': fields.many2many('calendar.attendee', 'att_del_from_user_rel', \
'attendee_id', 'user_id', 'Users'),
'sent_by': fields.function(_compute_data, method=True, string='Sent By', type="char", multi='sent_by', store=True, size=124, help="Specify the user that is acting on behalf of the calendar user"),
'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User', type="many2one", relation="res.users", multi='sent_by_uid'),
'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User', type="many2one", relation="res.users", multi='sent_by_uid'),
'cn': fields.function(_compute_data, method=True, string='Common name', type="char", size=124, multi='cn', store=True),
'dir': fields.char('URI Reference', size=124, help="Reference to the URI that points to the directory information corresponding to the attendee."),
'language': fields.function(_compute_data, method=True, string='Language', type="selection", selection=_lang_get, multi='language', store=True, help="To specify the language for text values in a property or property parameter."),
'language': fields.function(_compute_data, method=True, string='Language', type="selection", selection=_lang_get, multi='language', store=True, help="To specify the language for text values in a property or property parameter."),
'user_id': fields.many2one('res.users', 'User'),
'partner_address_id': fields.many2one('res.partner.address', 'Contact'),
'partner_id':fields.related('partner_address_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'),
@@ -253,6 +301,30 @@ request was delegated to"),
_defaults = {
'state': lambda *x: 'needs-action',
}
response_re = response_re = re.compile("Are you coming\?.*(YES|NO|MAYBE).*", re.UNICODE)
def msg_new(self, cr, uid, msg):
return False
def msg_act_get(self, msg):
mailgate_obj = self.pool.get('mail.gateway')
body = mailgate_obj.msg_body_get(msg)
actions = {}
res = self.response_re.findall(body['body'])
if res:
actions['state'] = res[0]
return actions
def msg_update(self, cr, uid, ids, msg, data={}, default_act='None'):
msg_actions = self.msg_act_get(msg)
if msg_actions.get('state'):
if msg_actions['state'] in ['YES', 'NO', 'MAYBE']:
mapping = {'YES': 'accepted', 'NO': 'declined', 'MAYBE': 'tentative'}
status = mapping[msg_actions['state']]
print 'Got response for invitation id: %s as %s' % (ids, status)
self.write(cr, uid, ids, {'state': status})
return True
def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv):
if not user_id:
@@ -278,7 +350,7 @@ request was delegated to"),
vals['cn'] = vals.get("cn")
res = super(calendar_attendee, self).create(cr, uid, vals, context)
return res
calendar_attendee()
class res_alarm(osv.osv):
@@ -352,7 +424,7 @@ are both optional, but if one occurs, so MUST the other"""),
model_obj = self.pool.get(model)
for datas in model_obj.browse(cr, uid, ids):
alarm_ids = alarm_obj.search(cr, uid, [('model_id', '=', model_id), ('res_id', '=', datas.id)])
if alarm_ids and len(alarm_ids):
if alarm_ids:
alarm_obj.unlink(cr, uid, alarm_ids)
cr.execute('Update %s set caldav_alarm_id=NULL, alarm_id=NULL\
where id=%s' % (model_obj._table, datas.id))
@@ -414,7 +486,7 @@ or contains the text to be used for display"""),
res = super(calendar_alarm, self).create(cr, uid, vals, context)
return res
def do_run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, \
def do_run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False,\
context=None):
if not context:
context = {}
@@ -457,13 +529,13 @@ or contains the text to be used for display"""),
%s
""" % (alarm.name, alarm.trigger_date, alarm.description, \
alarm.user_id.name, alarm.user_id.sign)
alarm.user_id.name, alarm.user_id.signature)
mail_to = [alarm.user_id.address_id.email]
for att in alarm.attendee_ids:
mail_to.append(att.user_id.address_id.email)
tools.email_send(
tools.confirm['from_mail'],
tools.config.get('email_from', False),
mail_to,
sub,
body
@@ -479,7 +551,7 @@ class calendar_event(osv.osv):
_description = "Calendar Event"
__attribute__ = {}
def _tz_get(self,cr,uid, context={}):
def _tz_get(self, cr, uid, context={}):
return [(x.lower(), x) for x in pytz.all_timezones]
def onchange_rrule_type(self, cr, uid, ids, rtype, *args, **argv):
@@ -518,7 +590,7 @@ class calendar_event(osv.osv):
'name': fields.char('Description', size=64, required=True),
'date': fields.datetime('Date'),
'date_deadline': fields.datetime('Deadline'),
'create_date': fields.datetime('Created' ,readonly=True),
'create_date': fields.datetime('Created', readonly=True),
'duration': fields.function(_get_duration, method=True, \
fnct_inv=_set_duration, string='Duration'),
'description': fields.text('Your action'),
@@ -541,7 +613,7 @@ rule or repeating pattern for anexception to a recurrence set"),
'caldav_alarm_id': fields.many2one('calendar.alarm', 'Alarm'),
'recurrent_uid': fields.integer('Recurrent ID'),
'recurrent_id': fields.datetime('Recurrent ID date'),
'vtimezone': fields.selection(_tz_get, 'Timezone', size=64),
'vtimezone': fields.selection(_tz_get, 'Timezone', size=64),
'user_id': fields.many2one('res.users', 'Responsible'),
}
@@ -565,8 +637,8 @@ rule or repeating pattern for anexception to a recurrence set"),
def check_import(self, cr, uid, vals, context={}):
ids = []
for val in vals:
exists, r_id = base_calendar.uid2openobjectid(cr, val['id'], self._name, \
val.get('recurrent_id'))
exists, r_id = base_calendar.uid2openobjectid(cr, val['id'], \
self._name, val.get('recurrent_id'))
if val.has_key('create_date'): val.pop('create_date')
val['caldav_url'] = context.get('url') or ''
val.pop('id')
@@ -680,8 +752,8 @@ rule or repeating pattern for anexception to a recurrence set"),
start_date = arg[2]
elif arg[1] in ('<', '<='):
until_date = arg[2]
res = super(calendar_event, self).search(cr, uid, args_without_date, offset,
limit, order, context, count)
res = super(calendar_event, self).search(cr, uid, args_without_date, \
offset, limit, order, context, count)
return self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit)
@@ -753,8 +825,7 @@ rule or repeating pattern for anexception to a recurrence set"),
for record in self.read(cr, uid, [caldav_id2real_id(id)], \
['date', 'rrule', 'exdate']):
if record['rrule']:
exdate = (record['exdate'] and (record['exdate'] + ',') or '') + \
''.join((re.compile('\d')).findall(date_new)) + 'Z'
exdate = (record['exdate'] and (record['exdate'] + ',') or '') + ''.join((re.compile('\d')).findall(date_new)) + 'Z'
if record['date'] == date_new:
res = self.write(cr, uid, [caldav_id2real_id(id)], {'exdate': exdate})
else:
@@ -795,14 +866,14 @@ class calendar_todo(osv.osv):
return True
_columns = {
'date': fields.function(_get_date, method=True, fnct_inv=_set_date, \
string='Duration', store=True, type='datetime'),
'date': fields.function(_get_date, method=True, fnct_inv=_set_date, \
string='Duration', store=True, type='datetime'),
'duration': fields.integer('Duration'),
}
__attribute__ = {}
def import_cal(self, cr, uid, data, data_id=None, context={}):
def import_cal(self, cr, uid, data, data_id=None, context={}):
todo_obj = self.pool.get('basic.calendar.todo')
vals = todo_obj.import_cal(cr, uid, data, context=context)
return self.check_import(cr, uid, vals, context=context)
@@ -882,7 +953,7 @@ class ir_values(osv.osv):
new_model.append((data[0], caldav_id2real_id(data[1])))
else:
new_model.append(data)
return super(ir_values, self).set(cr, uid, key, key2, name, new_model, \
return super(ir_values, self).set(cr, uid, key, key2, name, new_model,\
value, replace, isobject, meta, preserve_user, company)
def get(self, cr, uid, key, key2, models, meta=False, context={}, \
@@ -1087,6 +1158,9 @@ class invite_attendee_wizard(osv.osv_memory):
}
def do_invite(self, cr, uid, ids, context={}):
model2field = {
'calendar.attendee': 'del_to_user_ids',
'crm.meeting': 'attendee_ids'}
datas = self.read(cr, uid, ids)[0]
if not context or not context.get('model'):
return {}
@@ -1096,7 +1170,9 @@ class invite_attendee_wizard(osv.osv_memory):
res_obj = obj.browse(cr, uid, context['active_id'])
type = datas.get('type')
att_obj = self.pool.get('calendar.attendee')
vals = {'ref': '%s,%s' % (model, caldav_id2real_id(context['active_id']))}
vals = {}
if not model == 'calendar.attendee':
vals = {'ref': '%s,%s' % (model, caldav_id2real_id(context['active_id']))}
if type == 'internal':
user_obj = self.pool.get('res.users')
for user_id in datas.get('user_ids', []):
@@ -1107,39 +1183,53 @@ class invite_attendee_wizard(osv.osv_memory):
vals.update({'user_id': user_id,
'email': user.address_id.email})
att_id = att_obj.create(cr, uid, vals)
obj.write(cr, uid, res_obj.id, {'attendee_ids': [(4, att_id)]})
obj.write(cr, uid, res_obj.id, {model2field[model]: [(4, att_id)]})
elif type == 'external' and datas.get('email'):
vals.update({'email': datas['email']})
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name
att_infos = []
for att in res_obj.attendee_ids:
att_infos.append(((att.user_id and att.user_id.name) or \
(att.partner_id and att.partner_id.name) or \
att.email) + ' - Status: ' + att.state.title())
att_id = att_obj.create(cr, uid, vals)
obj.write(cr, uid, res_obj.id, {'attendee_ids': [(4, att_id)]})
sub = '[OpenERP Invitation] %s' % (res_obj.name)
obj.write(cr, uid, res_obj.id, {model2field[model]: [(4, att_id)]})
sign = res_obj.user_id and res_obj.user_id.signature or ''
sign = '<br>'.join(sign and sign.split('\n') or [])
sub = '[%s Invitation][%d] %s' % (company, att_id, res_obj.name)
body_vals = {'name': res_obj.name,
'start_date': res_obj.date,
'end_date': res_obj.date_deadline or None,
'description': res_obj.description,
'description': res_obj.description or '-',
'location': res_obj.location or '-',
'attendees': '-' #Todo
'attendees': '<br>'.join(att_infos),
'user': res_obj.user_id and res_obj.user_id.name or 'OpenERP User',
'sign': sign,
'company': company
}
body = html_invitation % body_vals
mail_to = [datas['email']]
tools.email_send(
res_obj.user_id.name,
tools.config.get('email_from', False),
mail_to,
sub,
body,
subtype='html'
subtype='html',
reply_to=tools.config.get('email_from', False)
)
elif type == 'partner':
add_obj = self.pool.get('res.partner.address')
for contact in add_obj.browse(cr, uid, datas['contact_ids']):
if not contact.email:
raise osv.except_osv(_('Error!'), \
("Partner does not have an email Address"))
vals.update({
'partner_address_id': contact.id,
'email': contact.email})
att_id = att_obj.create(cr, uid, vals)
obj.write(cr, uid, res_obj.id, {'attendee_ids': [(4, att_id)]})
obj.write(cr, uid, res_obj.id, {model2field[model]: [(4, att_id)]})
return {}
+7 -12
View File
@@ -95,21 +95,16 @@
<group col="6" colspan="4">
<field name="state" select="2" />
<button name="do_tentative"
string="Uncertain"
states="needs-action" type="object"
string="Uncertain" type="object"
icon="terp-crm" />
<button name="do_accept"
string="Accept"
states="needs-action" type="object"
icon="gtk-apply" />
<button name="do_decline"
string="Decline"
states="needs-action" type="object"
icon="gtk-cancel" />
<button name="do_accept" string="Accept"
type="object" icon="gtk-apply" />
<button name="do_decline" string="Decline"
type="object" icon="gtk-cancel" />
<button
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
states="needs-action" string="Delegate"
type="action" icon="gtk-sort-descending"
string="Delegate" type="action"
icon="gtk-sort-descending"
context="{'model' : 'calendar.attendee', 'state' : 'delegated'}" />
</group>
</form>
+31 -22
View File
@@ -22,14 +22,14 @@
import time
import re
import os
import mx.DateTime
import base64
import tools
import mx.DateTime
from tools.translate import _
import tools
from osv import fields,osv,orm
from osv import fields
from osv import osv
from osv import orm
from osv.orm import except_orm
MAX_LEVEL = 15
@@ -313,7 +313,7 @@ class crm_case(osv.osv):
_columns = {
'id': fields.integer('ID', readonly=True),
'name': fields.char('Description',size=64,required=True),
'name': fields.char('Description', size=1024, required=True),
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the case without removing it."),
'description': fields.text('Your action'),
'section_id': fields.many2one('crm.case.section', 'Section', select=True, help='Section to which Case belongs to. Define Responsible user and Email account for mail gateway.'),
@@ -653,7 +653,7 @@ class crm_case(osv.osv):
"Reminder: [%s] %s" % (str(case.id), case.name, ),
self.format_body(body),
reply_to=case.section_id.reply_to,
tinycrm=str(case.id),
openobject_id=str(case.id),
attach=attach_to_send
)
if flag:
@@ -713,7 +713,7 @@ class crm_case(osv.osv):
'['+str(case.id)+'] '+case.name,
self.format_body(body),
reply_to=case.section_id.reply_to,
tinycrm=str(case.id)
openobject_id=str(case.id)
)
return True
@@ -726,17 +726,23 @@ class crm_case(osv.osv):
data['email_from'] = self.pool.get('res.partner.address').browse(cr, uid, addr['contact']).email
return {'value':data}
def onchange_partner_address_id(self, cr, uid, ids, part, email=False):
if not part:
return {'value':{}}
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
data = {}
if not email:
data['email_from'] = self.pool.get('res.partner.address').browse(cr, uid, part).email
return {'value':data}
if not add:
return {'value': {'email_from': False}}
data['email_from'] = self.pool.get('res.partner.address').browse(cr, uid, add).email
return {'value': data}
def onchange_partner_id(self, cr, uid, ids, part):
data = {}
if not part:
return {'value': {'partner_address_id': False,
'email_from': False}}
add = self.pool.get('res.partner').address_get(cr, uid, [part])['default']
data['partner_address_id'] = add
data.update(self.onchange_partner_address_id(cr, uid, ids, add)['value'])
return {'value': data}
def case_close(self, cr, uid, ids, *args):
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
@@ -876,19 +882,22 @@ class crm_email_add_cc_wizard(osv.osv_memory):
if not context:
return {}
history_line = self.pool.get('crm.case.history').browse(cr, uid, context['active_id'])
crm_case = self.pool.get('crm.case')
case = history_line.log_id.case_id
model_obj = self.pool.get('ir.model')
model = history_line.log_id.model_id.model
model_pool = self.pool.get(model)
case = model_pool.browse(cr, uid, history_line.log_id.res_id)
body = history_line.description.replace('\n','\n> ')
flag = tools.email_send(
case.user_id.address_id.email,
[case.email_from],
subject or '['+str(case.id)+'] '+case.name,
crm_case.format_body(body),
model_pool.format_body(body),
email_cc = [email],
tinycrm=str(case.id)
openobject_id=str(case.id),
subtype="html"
)
if flag:
crm_case.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc +','+ email or email})
model_pool.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc +','+ email or email})
else:
raise osv.except_osv(_('Email Fail!'),("Lastest Email is not sent successfully"))
return {}
+3 -2
View File
@@ -33,10 +33,11 @@ class crm_lead(osv.osv):
_order = "id desc"
_inherit = 'crm.case'
_columns = {
'name': fields.char('Lead Subject', size=64),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
'type_id': fields.many2one('crm.case.resource.type', 'Lead Type Name', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]"),
'partner_name': fields.char("Employee's Name", size=64),
'partner_name2': fields.char('Employee Email', size=64),
'partner_name': fields.char("Lead Name", size=64),
'partner_name2': fields.char('Email', size=64),
'partner_phone': fields.char('Phone', size=32),
'partner_mobile': fields.char('Mobile', size=32),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
-1
View File
@@ -10,7 +10,6 @@
<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="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_leads_all">
+89 -86
View File
@@ -26,87 +26,92 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Leads Form">
<group colspan="4" col="7">
<field name="name" select="1" string="Lead Subject"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="opportunity_id" string="Opportunity Case"/>
<button string="Convert to Opportunity" name="%(wizard_crm_lead_opportunity_set)d" icon="gtk-index" type="action" attrs="{'invisible':[('opportunity_id','!=',False)]}"/>
<label string="Stage: " 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 colspan="4" col="4">
<field name="partner_name" string="Lead Name" required="1"/>
<field name="name" string="Lead Subject"/>
<field name="partner_name2" string="Contact Name"/>
<field name="email_from" string="Email"/>
<newline/>
<group colspan="4" col="5">
<label string="" colspan="2"/>
<button string="Create Opportunity" name="%(wizard_crm_lead_opportunity_set)d" icon="gtk-index" type="action"/>
<button string="Convert to Partner"
icon="terp-partner" name="%(wizard_crm_lead_partner_create)d"
type="action" attrs="{'invisible':[('partner_id','!=',False)]}"
/>
</group>
</group>
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Lead Source"/>
<field name="type_id" string="Campaign Type" select="1"/>
<newline/>
<field name="date"/>
<field name="date_deadline"/>
<field name="user_id" select="2"/>
</group>
<notebook colspan="4">
<page string="Leads">
<separator string="Lead Information" colspan="4"/>
<field name="partner_name" string="Lead Name"/>
<field name="partner_name2" string="Contact Name"/>
<field name="partner_phone"/>
<field name="partner_mobile"/>
<field name="email_from" string="Lead Email"/>
<newline/>
<label string="Partner:" align="1.0"/>
<group colspan="1" col="2">
<field name="partner_id" nolabel="1" colspan="1"/>
<button string="Convert to Partner"
icon="terp-partner" name="%(wizard_crm_lead_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)"/>
<group colspan="4" col="4">
<notebook>
<page string="Leads">
<separator colspan="4" string="Communication"/>
<field name="partner_id" string="Partner"
on_change="onchange_partner_id(partner_id)" />
<field name="partner_address_id"
string="Contact"
on_change="onchange_partner_address_id(partner_address_id, email_from)" />
<field name="partner_phone"/>
<field name="partner_mobile"/>
<separator colspan="4" string="Status and Categarization"/>
<group colspan="4" col="6">
<field name="user_id" select="2"/>
<field name="stage_id" select="1" string="Status" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Lead Source" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="type_id" string="Campaign" select="1"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="priority" string="Priority"/>
<field name="date" string="Create Date"/>
</group>
<separator colspan="4" string="Details"/>
<field name="description" nolabel="1" colspan="4"/>
<field name="priority" string="Priority"/>
<newline/>
<separator colspan="4" string="Lead Details"/>
<field name="description" nolabel="1" colspan="4"/>
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="2"/>
<button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-close"/>
<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="Emails" groups="base.group_extended">
<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"/>
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="2"/>
<button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-close"/>
<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="Emails" groups="base.group_extended">
<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-go-forward" type="action"/>
</form>
<tree string="Communication history">
<field name="description"/>
<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-go-forward" 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>
<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>
</group>
</form>
</field>
</record>
@@ -115,14 +120,12 @@
<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', 'pending');grey: state in ('cancel','done')">
<field name="id"/>
<field name="name" string="Lead Subject"/>
<field name="partner_phone"/>
<field name="partner_name2" string="Contact Name"/>
<field name="stage_id"/>
<tree string="Leads Tree" colors="red:state=='open';black:state in ('draft', 'pending');grey: state in ('cancel','done')">
<field name="partner_name" string="Lead Name"/>
<field name="stage_id" string="Status"/>
<field name="create_date"/>
<field name="categ_id" string="Lead Source"/>
<field name="type_id" string="Campaign Type"/>
<field name="email_from" string="Email"/>
<field name="user_id"/>
<field name="state"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
@@ -174,7 +177,7 @@
/>
</field>
<field name="state" select="1">
<filter icon="gtk-new" domain="[('state','=','draft')]" help="Draft Leads"/>
<filter icon="gtk-new" domain="[('state','in',('draft', 'open'))]" help="Current Leads"/>
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Leads"/>
</field>
<field name="section_id" select="1" default="context.get('section_id', False)" widget="selection" string="Section">
+7 -2
View File
@@ -53,8 +53,6 @@
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_event_1">
<field name="name" ref="base_calendar.field_event_uid"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
@@ -68,6 +66,13 @@
<field name="field_id" search="[('name','=','recurrent_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_3">
<field name="name" ref="base_calendar.field_event_vtimezone"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','vtimezone'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_4">
<field name="name" ref="base_calendar.field_event_attendee" />
+1
View File
@@ -44,6 +44,7 @@ class crm_opportunity(osv.osv):
'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
'date_closed': fields.datetime('Closed', readonly=True),
'phonecall_id':fields.many2one ('crm.phonecall', 'Phonecall'),
'partner_phone': fields.char('Phone', size=32),
}
crm_opportunity()
+39 -30
View File
@@ -39,37 +39,45 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Opportunities">
<group colspan="4" col="7">
<field name="name" select="1" string="Opportunity" colspan="2"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="user_id" select="2" string="Responsible"/>
<button string="Schedule a Meeting"
name="%(wizard_crm_opportunity_meeting_set)d" icon="gtk-redo" type="action" />
<newline/>
<label string="Sales Stage: " 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="date_deadline"/>
<button string="Schedule a Phone Call"
name="%(wizard_crm_opportunity_reschedule_phone_call)d" icon="gtk-redo" type="action" />
</group>
<notebook colspan="4">
<page string="Description">
<field name="partner_id" select="1" 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"/>
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Source"/>
<field name="priority" string="Priority"/>
<field name="type_id" select="1" string="Type"/>
<separator colspan="4" string="Estimates"/>
<field name="planned_revenue"/>
<group colspan="4" col="4">
<field name="name" select="1" string="Opportunity" colspan="4"/>
<field name="planned_revenue" required="1"/>
<field name="planned_cost"/>
<field name="probability"/>
<separator colspan="4" string="Description Information"/>
<field name="description" nolabel="1" colspan="4"/>
<field name="date_deadline" string="Excepted Close Date" required="1"/>
<group colspan="4" col="5">
<label string="" colspan="2"/>
<button string="Schedule Meeting"
name="%(wizard_crm_opportunity_meeting_set)d" icon="gtk-redo" type="action" />
<button string="Schedule Call"
name="%(wizard_crm_opportunity_reschedule_phone_call)d" icon="gtk-redo" type="action" />
</group>
</group>
<group colspan="4" col="4">
<notebook>
<page string="Opportunity">
<separator colspan="4" string="Communication"/>
<field name="partner_id" required="1" select="1" 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" string="Email"/>
<field name="partner_phone" colspan="2"/>
<separator colspan="4" string="Status and Categarization"/>
<group colspan="4" col="6">
<field name="user_id" select="2" string="Responsible"/>
<field name="stage_id" select="1" string="Sales Stage" required="1" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Lead Source" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="type_id" select="1" string="Campaign"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="priority" string="Priority"/>
</group>
<separator colspan="4" string="Details"/>
<field name="description" nolabel="1" colspan="4"/>
<separator colspan="4"/>
<group col="8" colspan="4">
@@ -136,6 +144,7 @@
<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>
</group>
</form>
</field>
</record>
@@ -151,7 +160,7 @@
<field name="partner_id" string="Partner"/>
<field name="planned_revenue"/>
<field name="probability"/>
<field name="date_deadline"/>
<field name="date_deadline" string="Excepted Close Date"/>
<field name="user_id"/>
<field name="state"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:46+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
-1
View File
@@ -1484,7 +1484,6 @@ msgstr "borrador"
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim5
#: model:crm.case.stage,name:crm.stage_meet4
#, fuzzy
msgid "Awaiting Response"
msgstr "Enviar correo ao responsábel"
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:46+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
+3 -92
View File
@@ -913,7 +913,6 @@ msgstr ""
#: model:crm.case.section,name:crm.section_support3 view:crm.opportunity:0
#: model:ir.ui.menu,name:crm.menu_crm_case_opp
#: model:process.node,name:crm.process_node_opportunities0
#, fuzzy
msgid "Opportunities"
msgstr "Galimybės"
@@ -1470,7 +1469,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead4
#, fuzzy
msgid "Converted"
msgstr "Sukurta"
@@ -1498,7 +1496,6 @@ msgstr "Istorija"
#. module: crm
#: model:ir.model,name:crm.model_crm_job
#, fuzzy
msgid "Job Cases"
msgstr "Klausimai"
@@ -1517,7 +1514,6 @@ msgstr ""
#: field:report.crm.case.section.categ.stage,state:0
#: field:report.crm.case.section.categ2,state:0
#: field:report.crm.case.section.stage,state:0
#, fuzzy
msgid "State"
msgstr "Būklė"
@@ -1585,13 +1581,11 @@ msgstr "Bendras aprašymas"
#. module: crm
#: view:crm.meeting:0
#, fuzzy
msgid "Other Info"
msgstr "Papildoma informacija"
#. module: crm
#: view:crm.claim:0
#, fuzzy
msgid "Claim Cost"
msgstr "Planuojamos išlaidos"
@@ -1607,7 +1601,6 @@ msgstr "Nuoroda"
#. module: crm
#: field:crm.meeting,exrule:0
#, fuzzy
msgid "Exception Rule"
msgstr "Atlikimo būklė"
@@ -1618,7 +1611,6 @@ msgstr ""
#. module: crm
#: model:crm.case.category2,name:crm.category_lead2
#, fuzzy
msgid "Mail"
msgstr "El. paštas"
@@ -1671,7 +1663,6 @@ msgstr "Vardas"
#. module: crm
#: view:crm.opportunity:0
#, fuzzy
msgid "Sales Stage"
msgstr "Klausimo būklė"
@@ -1682,13 +1673,11 @@ msgstr ""
#. module: crm
#: field:crm.case.rule,act_mail_to_watchers:0
#, fuzzy
msgid "Mail to watchers (CC)"
msgstr "Laiškas stebėtojams (Cc)"
#. module: crm
#: view:crm.fundraising:0 view:crm.meeting:0
#, fuzzy
msgid "Next Meeting"
msgstr "Kitas veiksmas"
@@ -1707,7 +1696,6 @@ msgstr "Leidžia ištrinti nejuodraštinius klausimus"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor7
#, fuzzy
msgid "Closed Lost"
msgstr "Uždaryta"
@@ -1784,7 +1772,6 @@ msgstr ""
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_history-act
#, fuzzy
msgid "Histories"
msgstr "Archyvuoti"
@@ -1818,7 +1805,7 @@ msgstr ""
#. module: crm
#: code:addons/crm/crm.py:0
#, fuzzy, python-format
#, python-format
msgid "Email Fail!"
msgstr "El. paštas"
@@ -1867,7 +1854,6 @@ msgstr "Aukščiausias"
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Contract Data"
msgstr "Sukūrimo data"
@@ -1883,7 +1869,6 @@ msgstr ""
#. module: crm
#: field:crm.menu.config_wizard,document_ics:0
#, fuzzy
msgid "Shared Calendar"
msgstr "Kalendorius"
@@ -1930,7 +1915,6 @@ msgstr ""
#. module: crm
#: field:crm.case.category2,name:0
#, fuzzy
msgid "Case Category2 Name"
msgstr "Klausimo kategorijos pavadinimas"
@@ -1998,13 +1982,11 @@ msgstr ""
#. module: crm
#: field:crm.meeting,location:0
#, fuzzy
msgid "Location"
msgstr "Veiksmas"
#. module: crm
#: view:crm.fundraising:0
#, fuzzy
msgid "Payment Mode"
msgstr "Pirminis meniu"
@@ -2061,7 +2043,6 @@ msgstr "Sukurta"
#. module: crm
#: view:crm.lead:0
#, fuzzy
msgid "Lead Information"
msgstr "Bazinė informacija"
@@ -2074,7 +2055,6 @@ msgstr "Segmentacijos eilutė"
#: wizard_field:crm.job.reschedule_phone_call,init,deadline:0
#: wizard_field:crm.opportunity.reschedule_phone_call,init,deadline:0
#: view:crm.phonecall:0
#, fuzzy
msgid "Planned Date"
msgstr "Planuojamos išlaidos"
@@ -2115,7 +2095,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor1
#, fuzzy
msgid "Prospecting"
msgstr "Profiliavimas"
@@ -2126,7 +2105,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_meeting
#, fuzzy
msgid "Meeting Cases"
msgstr "Atviri klausimai"
@@ -2137,7 +2115,6 @@ msgstr ""
#. module: crm
#: view:crm.meeting:0
#, fuzzy
msgid "Cancel Meeting"
msgstr "Klausimo sekcija"
@@ -2148,13 +2125,11 @@ msgstr ""
#. module: crm
#: view:crm.case.rule:0
#, fuzzy
msgid "%(case_date)s = Creation date"
msgstr "%(case_id)s = Klausimo ID"
#. module: crm
#: model:crm.case.stage,name:crm.stage_phone3 view:crm.phonecall:0
#, fuzzy
msgid "Not Held"
msgstr "Pastaba"
@@ -2170,13 +2145,11 @@ msgstr ""
#. module: crm
#: model:crm.case.category2,name:crm.category_claim1
#, fuzzy
msgid "Corrective"
msgstr "Aktyvuota"
#. module: crm
#: model:ir.model,name:crm.model_crm_opportunity
#, fuzzy
msgid "Opportunity Cases"
msgstr "Atviri klausimai"
@@ -2195,7 +2168,6 @@ msgstr "Pašto šablonas siuntimui"
#: field:report.crm.case.section.categ.stage,month:0
#: field:report.crm.case.section.categ2,month:0
#: field:report.crm.case.section.stage,month:0
#, fuzzy
msgid "Month"
msgstr "Mėnesiai"
@@ -2211,13 +2183,11 @@ msgstr ""
#. module: crm
#: wizard_button:crm.new.send.mail,init,send:0
#: wizard_button:crm.send.mail,init,send:0
#, fuzzy
msgid "Send Email"
msgstr "El. paštas"
#. module: crm
#: wizard_view:crm.new.send.mail,init:0
#, fuzzy
msgid "Set case state to"
msgstr "Nustatyti būklę į"
@@ -2274,7 +2244,6 @@ msgstr "Pastaba"
#: field:report.crm.case.section.categ.stage,delay_close:0
#: field:report.crm.case.section.categ2,delay_close:0
#: field:report.crm.case.section.stage,delay_close:0
#, fuzzy
msgid "Delay Close"
msgstr "Delsos tipas"
@@ -2299,13 +2268,12 @@ msgstr "Uždaryta"
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Candidate Name2"
msgstr "Klausimo kategorijos pavadinimas"
#. module: crm
#: code:addons/crm/crm.py:0
#, fuzzy, python-format
#, python-format
msgid "cancel"
msgstr "Atšaukti"
@@ -2317,7 +2285,6 @@ msgstr ""
#. module: crm
#: view:crm.case:0 field:crm.case,child_ids:0 view:crm.claim:0 view:crm.lead:0
#: view:crm.opportunity:0
#, fuzzy
msgid "Events"
msgstr "Partnerio renginiai"
@@ -2395,7 +2362,6 @@ msgstr "Klausimo istorija"
#. module: crm
#: field:crm.case,partner_phone:0
#, fuzzy
msgid "Phone"
msgstr "Niekas"
@@ -2479,7 +2445,7 @@ msgstr "Veiksmas"
#: model:crm.case.section,name:crm.section_support_claims view:crm.claim:0
#: field:crm.menu.config_wizard,claims:0 view:crm.phonecall:0
#: model:ir.ui.menu,name:crm.menu_crm_case_claims
#, fuzzy, python-format
#, python-format
msgid "Claims"
msgstr "Klausimas"
@@ -2495,7 +2461,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_case_category2
#, fuzzy
msgid "Category2 of case"
msgstr "Klausimo kategorija"
@@ -2512,7 +2477,6 @@ msgstr "%(case_user_email)s = Atsakingo paštas"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_presale
#, fuzzy
msgid "Sales"
msgstr "Klausimai"
@@ -2523,7 +2487,6 @@ msgstr "Bendra"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead2
#, fuzzy
msgid "Assigned"
msgstr "Visi nepriskirti "
@@ -2541,7 +2504,6 @@ msgstr ""
#. module: crm
#: view:crm.case:0 view:crm.claim:0 view:crm.fundraising:0 view:crm.lead:0
#: selection:crm.new.send.mail,init,state:0 view:crm.opportunity:0
#, fuzzy
msgid "Done"
msgstr "Niekas"
@@ -2552,7 +2514,6 @@ msgstr "Maks. intervalas"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_category_act_oppor11
#, fuzzy
msgid "All Opportunities"
msgstr "Verslo galimybės"
@@ -2586,7 +2547,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_phonecall
#, fuzzy
msgid "Phonecall Cases"
msgstr "Visi klausimai"
@@ -2619,13 +2579,11 @@ msgstr ""
#. module: crm
#: wizard_button:crm.job.meeting_set,init,order:0
#: wizard_button:crm.phonecall.meeting_set,init,order:0
#, fuzzy
msgid "Set Meeting"
msgstr "Nustatyti sekciją į"
#. module: crm
#: field:crm.menu.config_wizard,meeting:0
#, fuzzy
msgid "Calendar of Meetings"
msgstr "Kalendoriaus peržiūra"
@@ -2644,13 +2602,11 @@ msgstr ""
#. module: crm
#: view:crm.lead:0
#, fuzzy
msgid "Lead Name"
msgstr "Taisyklės pavadinimas"
#. module: crm
#: view:crm.claim:0
#, fuzzy
msgid "Claim/Action Description"
msgstr "Segmentacijos aprašymas"
@@ -2689,7 +2645,6 @@ msgstr ""
#: view:report.crm.case.section.categ.categ2:0
#: view:report.crm.case.section.categ.stage:0
#: view:report.crm.case.section.categ2:0 view:report.crm.case.section.stage:0
#, fuzzy
msgid "This Month"
msgstr "Mėnesiai"
@@ -2700,7 +2655,6 @@ msgstr ""
#. module: crm
#: view:crm.opportunity:0
#, fuzzy
msgid "Opportunities Tree"
msgstr "Verslo galimybės"
@@ -2718,7 +2672,6 @@ msgstr ""
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Open Jobs"
msgstr "Atviri klausimai"
@@ -2741,13 +2694,11 @@ msgstr ""
#. module: crm
#: field:crm.case.rule,server_action_id:0
#, fuzzy
msgid "Server Action"
msgstr "Sekcija"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_categ_claim0
#, fuzzy
msgid "All Claims"
msgstr "Visi klausimai"
@@ -2774,7 +2725,6 @@ msgstr "Naujausi laiškai"
#. module: crm
#: view:crm.case.rule:0
#, fuzzy
msgid "Regex on Communication History"
msgstr "Klausimų komunikacijos istorija"
@@ -2827,13 +2777,11 @@ msgstr "Paskutinis veiksmas"
#. module: crm
#: field:crm.case,duration:0
#, fuzzy
msgid "Duration"
msgstr "Jūsų veiksmas"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_categ_stage
#, fuzzy
msgid "Cases by section, Category and stage"
msgstr "Klausimai pagal sekciją"
@@ -2844,7 +2792,6 @@ msgstr ""
#. module: crm
#: field:crm.menu.config_wizard,jobs:0
#, fuzzy
msgid "Jobs Hiring Process"
msgstr "Tęsti procesą"
@@ -2869,7 +2816,6 @@ msgstr ""
#: field:report.crm.case.section.categ.stage,nbr:0
#: field:report.crm.case.section.categ2,nbr:0
#: field:report.crm.case.section.stage,nbr:0
#, fuzzy
msgid "# of Cases"
msgstr "Klausimai"
@@ -2895,14 +2841,12 @@ msgstr ""
#. module: crm
#: view:crm.meeting:0
#, fuzzy
msgid "Search Meetings"
msgstr "Sekcijos"
#. module: crm
#: selection:crm.lead.opportunity_set,create_partner,action:0
#: selection:crm.phonecall.opportunity_set,create_partner,action:0
#, fuzzy
msgid "Create a new partner"
msgstr "Sukūrimo data"
@@ -2913,7 +2857,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead3
#, fuzzy
msgid "In Process"
msgstr "Stabdyti procesą"
@@ -2936,7 +2879,6 @@ msgstr ""
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_tree
#: view:report.crm.case.section.categ2:0
#, fuzzy
msgid "Cases by Section and Type"
msgstr "Klausimai pagal sekciją"
@@ -2954,7 +2896,6 @@ msgstr ""
#. module: crm
#: wizard_field:caldav.crm.export,init,name:0
#, fuzzy
msgid "File name"
msgstr "Taisyklės pavadinimas"
@@ -2995,7 +2936,6 @@ msgstr ""
#: selection:report.crm.case.section.categ.stage,state:0
#: selection:report.crm.case.section.categ2,state:0
#: selection:report.crm.case.section.stage,state:0
#, fuzzy
msgid "Cancelled"
msgstr "Atšaukti"
@@ -3048,7 +2988,6 @@ msgstr "Klausimų komunikacijos istorija"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ
#, fuzzy
msgid "Cases by Opportunities and Type"
msgstr "Verslo galimybės"
@@ -3092,7 +3031,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead1
#, fuzzy
msgid "New"
msgstr "Naujas "
@@ -3120,7 +3058,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_claim
#, fuzzy
msgid "Claim Cases"
msgstr "Visi klausimai"
@@ -3136,7 +3073,6 @@ msgstr ""
#. module: crm
#: field:crm.meeting,exdate:0
#, fuzzy
msgid "Exception Date/Times"
msgstr "Atlikimo būklė"
@@ -3147,7 +3083,6 @@ msgstr ""
#. module: crm
#: model:process.transition,note:crm.process_transition_leadopportunity0
#, fuzzy
msgid "Creating business opportunities from Leads"
msgstr "Verslo galimybės"
@@ -3173,7 +3108,6 @@ msgstr "Laukia"
#. module: crm
#: model:process.transition,name:crm.process_transition_leadopportunity0
#, fuzzy
msgid "Prospect Opportunity"
msgstr "Verslo galimybės"
@@ -3204,7 +3138,6 @@ msgstr ""
#. module: crm
#: view:crm.case:0
#, fuzzy
msgid "My Cases"
msgstr "Mano klausimai"
@@ -3226,7 +3159,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_phone1
#, fuzzy
msgid "Planned"
msgstr "Planuojamos išlaidos"
@@ -3237,19 +3169,16 @@ msgstr ""
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Candidate Email"
msgstr "Partnerio el. paštas"
#. module: crm
#: view:crm.opportunity:0
#, fuzzy
msgid "Sales Stage: "
msgstr "Klausimo būklė"
#. module: crm
#: view:crm.claim:0
#, fuzzy
msgid "Type of Action"
msgstr "Kitas veiksmas"
@@ -3260,7 +3189,6 @@ msgstr "Nustatyti atsakingą į"
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Meeting With Candidates"
msgstr "Naujas su kalendoriumi"
@@ -3284,7 +3212,6 @@ msgstr ""
#. module: crm
#: view:report.crm.case.section.categ.categ2:0
#, fuzzy
msgid "Search Cases by User"
msgstr "Klausimai pagal sekciją"
@@ -3310,7 +3237,6 @@ msgstr "Objekto iškvietimo metodas"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_category_act_fund_all1
#, fuzzy
msgid "All Funds"
msgstr "Visi "
@@ -3322,7 +3248,6 @@ msgstr "Kalendorius"
#. module: crm
#: model:crm.case.categ,name:crm.categ_job1
#, fuzzy
msgid "Salesman"
msgstr "Pardavimo suma"
@@ -3379,7 +3304,6 @@ msgstr "Ne einamasis"
#: wizard_field:crm.case.opportunity.partner_opportunity,init,probability:0
#: wizard_field:crm.lead.opportunity_set,opportunity,probability:0
#: wizard_field:crm.phonecall.opportunity_set,opportunity,probability:0
#, fuzzy
msgid "Success Probability"
msgstr "Tikimybė (%)"
@@ -3437,13 +3361,11 @@ msgstr ""
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "Qualication"
msgstr "Komunikacija"
#. module: crm
#: view:crm.meeting:0
#, fuzzy
msgid "Change RRule"
msgstr "Klausimo taisyklė"
@@ -3460,7 +3382,6 @@ msgstr ""
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ_categ2
#: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_categ2_tree
#: view:report.crm.case.section.categ.categ2:0
#, fuzzy
msgid "Cases by Section, Category and Type"
msgstr "Klausimo kategorijos pavadinimas"
@@ -3510,7 +3431,6 @@ msgstr ""
#. module: crm
#: model:process.process,name:crm.process_process_contractprocess0
#, fuzzy
msgid "Contract"
msgstr "Partnerio kontaktas"
@@ -3555,7 +3475,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_case_stage
#, fuzzy
msgid "Stage of case"
msgstr "Klausimo kategorija"
@@ -3593,7 +3512,6 @@ msgstr "Sekcijos kodas"
#. module: crm
#: wizard_field:crm.job.meeting_set,init,date:0
#: wizard_field:crm.phonecall.meeting_set,init,date:0
#, fuzzy
msgid "Meeting date"
msgstr "Sukūrimo data"
@@ -3609,7 +3527,6 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_meet2
#, fuzzy
msgid "Not fixed"
msgstr "Pastaba"
@@ -3642,7 +3559,6 @@ msgstr "Aprašymas"
#: selection:report.crm.case.section.categ.stage,month:0
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
#, fuzzy
msgid "May"
msgstr "Mano "
@@ -3741,13 +3657,11 @@ msgstr ""
#. module: crm
#: model:crm.case.category2,name:crm.categ2_fund1
#, fuzzy
msgid "Cash"
msgstr "Klausimas"
#. module: crm
#: view:crm.fundraising:0
#, fuzzy
msgid "Funds by Categories"
msgstr "Kategorijos"
@@ -3791,7 +3705,6 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_helpdesk
#, fuzzy
msgid "Helpdesk Cases"
msgstr "Atviri klausimai"
@@ -3830,13 +3743,11 @@ msgstr "Klausimai pagal sekciją"
#. module: crm
#: view:crm.job:0
#, fuzzy
msgid "New Jobs"
msgstr "Naujas "
#. module: crm
#: field:crm.menu.config_wizard,fund:0
#, fuzzy
msgid "Fund Raising Operations"
msgstr "Profiliavimo parinktys"
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
+1
View File
@@ -117,6 +117,7 @@ class lead2opportunity(wizard.interface):
'date_deadline': lead.date_deadline,
'partner_address_id':lead.partner_address_id.id,
'priority':lead.priority,
'categ_id':lead.categ_id.id,
'date': lead.date,
})
+14 -10
View File
@@ -70,7 +70,7 @@ def _mass_mail_send(self, cr, uid, data, context):
attach = map(lambda x: x and ('Attachment'+str(attach.index(x)+1), base64.decodestring(x)), attach)
pool = pooler.get_pool(cr.dbname)
case_pool=pool.get('crm.case')
case_pool=pool.get(data.get('model'))
case = case_pool.browse(cr,uid,data['ids'])[0]
case_pool.write(cr, uid, [case.id], {
@@ -80,20 +80,18 @@ def _mass_mail_send(self, cr, uid, data, context):
emails = [data['form']['to']] + (data['form']['cc'] or '').split(',')
emails = filter(None, emails)
body = data['form']['text']
if not case.user_id.address_id.email:
raise wizard.except_wizard(_('Warning!'),_("Please specify user's email address !"))
if case.user_id.signature:
body += '\n\n%s' % (case.user_id.signature)
case_pool._history(cr, uid, [case], _('Send'), history=True, email=False, details=body)
case_pool._history(cr, uid, [case], _('Send'), history=True, email=data['form']['to'], details=body)
flag = tools.email_send(
case.user_id.address_id.email,
emails,
data['form']['subject'],
body,
case_pool.format_body(body),
attach=attach,
reply_to=case.section_id.reply_to,
tinycrm=str(case.id)
openobject_id=str(case.id),
subtype="html"
)
if flag:
if data['form']['state'] == 'unchanged':
@@ -110,13 +108,19 @@ def _mass_mail_send(self, cr, uid, data, context):
def _get_info(self, cr, uid, data, context):
if not data['id']:
return {}
pool = pooler.get_pool(cr.dbname)
case = pool.get('crm.case').browse(cr,uid,data['ids'])[0]
#if not case.email_from:
# raise wizard.except_wizard(_('Error'),_('You must put a Partner eMail to use this action!'))
case = pool.get(data.get('model')).browse(cr, uid, data['id'])
if not case.user_id:
raise wizard.except_wizard(_('Error'),_('You must define a responsible user for this case in order to use this action!'))
return {'to': case.email_from,'subject': case.name,'cc': case.email_cc or ''}
if not case.user_id.address_id.email:
raise wizard.except_wizard(_('Warning!'),_("Please specify user's email address !"))
return {
'to': case.email_from,
'subject': case.name,
'cc': case.email_cc or ''
}
class wizard_send_mail(wizard.interface):
states = {
+2 -2
View File
@@ -51,7 +51,7 @@ email_send_fields = {
# this sends an email to ALL the addresses of the selected partners.
def _mass_mail_send(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
case_pool=pool.get('crm.case')
case_pool=pool.get(data['model'])
hist_obj = pool.get('crm.case.history').browse(cr,uid,data['ids'])[0]
case = hist_obj.log_id.case_id
@@ -71,7 +71,7 @@ def _mass_mail_send(self, cr, uid, data, context):
data['form']['subject'],
case_pool.format_body(body),
reply_to=case.section_id.reply_to,
tinycrm=str(case.id)
openobject_id=str(case.id)
)
return {}
-1
View File
@@ -48,6 +48,5 @@
],
'installable': True,
'active': False,
'certificate': '',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+31
View File
@@ -107,6 +107,7 @@
</data>
<data>
<record id="survey_question_job_0" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -130,6 +131,7 @@
</data>
<data>
<record id="survey_question_job_1" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -153,6 +155,7 @@
</data>
<data>
<record id="survey_question_job_2" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -176,6 +179,7 @@
</data>
<data>
<record id="survey_question_job_3" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -199,6 +203,7 @@
</data>
<data>
<record id="survey_question_job_4" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -221,12 +226,14 @@
</record>
<record id="survey_answer_job_70" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Male</field>
<field name="question_id" ref="crm_hr.survey_question_job_4"/>
<field eval="1" name="sequence"/>
</record>
<record id="survey_answer_job_71" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Female</field>
<field name="question_id" ref="crm_hr.survey_question_job_4"/>
<field eval="2" name="sequence"/>
@@ -235,6 +242,7 @@
</data>
<data>
<record id="survey_question_job_5" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -257,41 +265,49 @@
</record>
<record id="survey_answer_job_81" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">0 - 15</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="1" name="sequence"/>
</record>
<record id="survey_answer_job_82" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">16 - 20</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="2" name="sequence"/>
</record>
<record id="survey_answer_job_83" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">21 - 30</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="3" name="sequence"/>
</record>
<record id="survey_answer_job_84" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">31 - 40</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="4" name="sequence"/>
</record>
<record id="survey_answer_job_85" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">41 - 50</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="5" name="sequence"/>
</record>
<record id="survey_answer_job_86" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">51 - 60</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="6" name="sequence"/>
</record>
<record id="survey_answer_job_87" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">61 - 70</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="7" name="sequence"/>
</record>
<record id="survey_answer_job_88" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">71 +</field>
<field name="question_id" ref="crm_hr.survey_question_job_5"/>
<field eval="8" name="sequence"/>
@@ -300,6 +316,7 @@
</data>
<data>
<record id="survey_question_job_6" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -323,6 +340,7 @@
</data>
<data>
<record id="survey_question_job_7" model="survey.question">
<field name="in_visible_answer_type">1</field>
<field name="validation_type">do_not_validate</field>
<field name="comment_valid_type">do_not_validate</field>
<field name="make_comment_field_err_msg">Please enter a comment.</field>
@@ -387,6 +405,7 @@
<data>
<record id="survey_answer_job_0" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Good pay</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="1" name="sequence"/>
@@ -394,6 +413,7 @@
</data>
<data>
<record id="survey_answer_job_1" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Getting on with colleagues</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="2" name="sequence"/>
@@ -401,6 +421,7 @@
</data>
<data>
<record id="survey_answer_job_2" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Office environment (décor, light, space etc)</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="3" name="sequence"/>
@@ -408,6 +429,7 @@
</data>
<data>
<record id="survey_answer_job_3" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Desk space</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="4" name="sequence"/>
@@ -415,6 +437,7 @@
</data>
<data>
<record id="survey_answer_job_4" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">State of the art technology</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="5" name="sequence"/>
@@ -422,6 +445,7 @@
</data>
<data>
<record id="survey_answer_job_5" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Office location (proximity to home)</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="6" name="sequence"/>
@@ -429,6 +453,7 @@
</data>
<data>
<record id="survey_answer_job_6" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Good management/boss</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="7" name="sequence"/>
@@ -436,6 +461,7 @@
</data>
<data>
<record id="survey_answer_job_7" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Freebies such as tea, coffee and stationery</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="8" name="sequence"/>
@@ -443,6 +469,7 @@
</data>
<data>
<record id="survey_answer_job_8" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Perks such as free parking, gym passes etc</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="9" name="sequence"/>
@@ -450,6 +477,7 @@
</data>
<data>
<record id="survey_answer_job_9" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">No out of hours working</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="10" name="sequence"/>
@@ -457,6 +485,7 @@
</data>
<data>
<record id="survey_answer_job_10" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Dress code</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="11" name="sequence"/>
@@ -464,6 +493,7 @@
</data>
<data>
<record id="survey_answer_job_11" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Regular meetings</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="12" name="sequence"/>
@@ -471,6 +501,7 @@
</data>
<data>
<record id="survey_answer_job_12" model="survey.answer">
<field name="in_visible_answer_type">1</field>
<field name="answer">Good social life (office nights out, good Christmas parties etc)</field>
<field name="question_id" ref="crm_hr.survey_question_job_1"/>
<field eval="13" name="sequence"/>
+1 -2
View File
@@ -22,7 +22,6 @@
import crm_project_bug
import crm_project_feature
import report
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+3 -3
View File
@@ -22,7 +22,7 @@
{
'name': 'CRM Stuff in Project Management',
'name': 'Bug Reporting in Project Management',
'version': '1.0',
'category': 'Generic Modules/CRM & SRM',
'description': """
@@ -35,9 +35,9 @@
'crm_bugs_data.xml'
],
'update_xml': [
'crm_bug_wizard.xml',
'crm_bugs_view.xml',
'crm_bugs_menu.xml',
'crm_feature_view.xml',
'crm_bugs_menu.xml',
'crm_feature_menu.xml',
'report_crm_project_bug_view.xml',
'security/crm_project_security.xml',
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<wizard
id="wizard_crm_bug_task_set"
keyword="client_action_multi"
model="crm.bug"
name="crm.bug.task_set"
multi="True"
string="Convert To Task"/>
</data>
</openerp>
+4 -15
View File
@@ -6,17 +6,12 @@
-->
<!-- For Bugs -->
<record model="crm.case.categ" id="categ1">
<record model="crm.case.categ" id="bug_categ">
<field name="name">Bugs</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.categ" id="categ2">
<field name="name">Patches</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.categ" id="categ3">
</record>
<record model="crm.case.categ" id="feature_request_categ">
<field name="name">Feature Requests</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
@@ -71,12 +66,6 @@
<field name="name">Works For Me</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage7">
<field name="name">Future</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
</record>
</data>
</openerp>
+18 -18
View File
@@ -15,7 +15,7 @@
<field eval="&quot;open&quot;" name="state"/>
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage1"/>
<field eval="15.0" name="duration"/>
<field eval="&quot;Bug in Accounts module&quot;" name="name"/>
@@ -40,7 +40,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="3.5" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage2"/>
<field eval="&quot;Program not giving proper output&quot;" name="name"/>
</record>
@@ -56,7 +56,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="2.3" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage3"/>
<field eval="&quot;Output incorrect&quot;" name="name"/>
</record>
@@ -72,7 +72,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="4.0" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage4"/>
<field eval="&quot;Problem loading page&quot;" name="name"/>
</record>
@@ -87,7 +87,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="1.0" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Page not Found&quot;" name="name"/>
</record>
@@ -103,7 +103,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="4.0" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage6"/>
<field eval="&quot;Programming Error&quot;" name="name"/>
</record>
@@ -119,8 +119,8 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="2.0" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="stage_id" ref="stage7"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage6"/>
<field eval="&quot;Logical Error in Program&quot;" name="name"/>
</record>
@@ -135,7 +135,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="7.3" name="duration"/>
<field name="categ_id" ref="categ1"/>
<field name="categ_id" ref="bug_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Constraint Error&quot;" name="name"/>
</record>
@@ -150,7 +150,7 @@
<field eval="&quot;open&quot;" name="state"/>
<field eval="1" name="active"/>
<field eval="1.3" name="duration"/>
<field name="categ_id" ref="categ2"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Error in Program&quot;" name="name"/>
</record>
@@ -166,7 +166,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="13.0" name="duration"/>
<field name="categ_id" ref="categ2"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Patches Error in Program&quot;" name="name"/>
</record>
@@ -182,7 +182,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="3.2" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage1"/>
<field eval="&quot;New Features To Be Added&quot;" name="name"/>
</record>
@@ -198,7 +198,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="3.0" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage2"/>
<field eval="&quot;Add menus to the module&quot;" name="name"/>
<field eval="&quot;info@opensides.be&quot;" name="email_from"/>
@@ -215,7 +215,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="2.0" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage3"/>
<field eval="&quot;Include Attendance sheet in Project&quot;" name="name"/>
<field eval="&quot;contact@tecsas.fr&quot;" name="email_from"/>
@@ -234,7 +234,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="2.45" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Create new object&quot;" name="name"/>
</record>
@@ -250,8 +250,8 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="15.0" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="stage_id" ref="stage7"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage6"/>
<field eval="&quot;Improve Reports in HRMS&quot;" name="name"/>
</record>
@@ -266,7 +266,7 @@
<field name="section_id" ref="crm.section_sales_department"/>
<field eval="1" name="active"/>
<field eval="06.15" name="duration"/>
<field name="categ_id" ref="categ3"/>
<field name="categ_id" ref="feature_request_categ"/>
<field name="stage_id" ref="stage5"/>
<field eval="&quot;Improve Reports in PMS&quot;" name="name"/>
</record>
+5 -36
View File
@@ -1,50 +1,19 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<record model="crm.case.categ" id="categ1">
<field name="name">Bugs</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.categ" id="categ2">
<field name="name">Patches</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.categ" id="categ3">
<field name="name">Feature Requests</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage2">
<field name="name">Fixed</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage5">
<field name="name">Awaiting Response</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage7">
<field name="name">Future</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.bug')]" model="ir.model"/>
</record>
<data noupdate="1">
######################## BUG TRACKING (menu) ###########################
<!--
ALL BUGS
-->
<record model="ir.actions.act_window" id="crm_case_categ_act0">
<field name="name">Bugs</field>
<field name="name">Issues</field>
<field name="res_model">crm.project.bug</field>
<field name="view_type">form</field>
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_tree_view"/>
<field name="domain" eval="[('categ_id','=',ref('bug_categ'))]"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_bugs_filter"/>
</record>
@@ -67,7 +36,7 @@
<field name="act_window_id" ref="crm_case_categ_act0"/>
</record>
<!--<menuitem id="menu_aftertask" name="Bug" parent="base.menu_main_pm" visible="False"/>-->
<!--<menuitem id="menu_aftertask" name="Bug" parent="project.menu_main" visible="False"/>-->
<menuitem name="Issues" id="menu_crm_case_bug_track" parent="project.menu_project_management" action="crm_case_categ_act0"/>
</data>
</openerp>
+31 -35
View File
@@ -36,25 +36,29 @@
<field name="arch" type="xml">
<form string="Bug Tracker Form">
<group colspan="4" col="6">
<field name="project_id" required="True"/>
<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="name" string="Title" colspan="2"/>
<field name="project_id" required="True"/>
<field name="categ_id" on_change="onchange_categ_id(categ_id)" widget="selection" required="1" domain="[('object_id.model', '=', 'crm.project.bug')]"/>
<field name="user_id" />
<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>
<label string="Related Task: " align="1.0"/>
<group colspan="1" col="2">
<field name="task_id" nolabel="1"/>
<button string="Convert To Task" name="%(wizard_crm_bug_task_set)d" icon="gtk-index" type="action" attrs="{'invisible':[('task_id','!=',False)]}"/>
</group>
</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"/>
<field name="email_from" colspan="2"/>
<separator colspan="4"/>
<field name="type_id" string="Version"/>
<field name="categ_id" on_change="onchange_categ_id(categ_id)"/>
<field name="type_id" string="Version"/>
<field name="priority" string="Severity"/>
<newline/>
<separator string= "Description" colspan="4"/>
@@ -158,20 +162,7 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Bugs">
<group col="7" colspan="1">
<filter icon="gtk-apply" string="Fixed Bugs"
domain="[('stage_id.name','=','Fixed')]"
separator="1" help="All Fixed Bugs"
/>
<filter icon="gtk-media-pause" string="Waiting Bugs"
domain="[('stage_id.name','=','Awaiting Response')]"
separator="1" help="All Waiting Bugs"
/>
<filter icon="gtk-media-forward" string="Future Bugs"
domain="[('stage_id.name','=','Future')]"
separator="1" help="All Future Bugs"
/>
<separator orientation="vertical"/>
<group col="3" colspan="1">
<filter icon="gtk-home" string=" Today "
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
@@ -181,20 +172,25 @@
string=" 7 Days " separator="1"
domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d')), ('date','&gt;=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
help="Bugs during last 7 days"
/>
/>
</group>
<separator orientation="vertical"/>
<group col="4" colspan="2">
<group col="5" 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 Bugs" default="1"/>
</field>
<field name="section_id" select="1" widget="selection" string="Section" default="context.get('section_id', False)">
<field name="user_id" select="1" widget="selection">
<filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Bugs" default="1"/>
</field>
<field name="state" select="1">
<filter icon="gtk-new" domain="[('state','in',('open','draft'))]" help="Current Bugs" default="1"/>
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Bugs"/>
</field>
<field name="project_id" select="1" widget="selection" string="Project" default="context.get('project_id', False)">
<filter icon="terp-crm"
domain="[('section_id','=',context.get('section_id',False))]"
help="My section"
domain="[('project_id','=',context.get('project_id',False))]"
help="My Project"
/>
</field>
</field>
</group>
</search>
</field>
+9 -28
View File
@@ -1,55 +1,36 @@
<?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="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.future')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="future_fixed_categ">
<field name="name">Fixed</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.future')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="future_awaiting_categ">
<field name="name">Awaiting Response</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.project.future')]" model="ir.model"/>
</record>
<data noupdate="1">
######################## 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="res_model">crm.project.bug</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="view_id" ref="crm_case_tree_view"/>
<field name="domain" eval="[('categ_id','=',ref('feature_request_categ'))]"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_future_filter"/>
<field name="search_view_id" ref="view_crm_case_bugs_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="view_id" ref="crm_case_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="view_id" ref="crm_case_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="view_id" ref="crm_case_form_view"/>
<field name="act_window_id" ref="action_crm_case_future"/>
</record>
-191
View File
@@ -1,191 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- <menuitem name="CRM &amp; SRM" icon="terp-crm" id="menu_crm1"/> -->
# ------------------------------------------------------
# Future Request
# ------------------------------------------------------
<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" required="True"/>
<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="type_id" string="Version"/>
<field name="categ_id" on_change="onchange_categ_id(categ_id)"/>
<field name="priority" string="Severity"/>
<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="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="type_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','&lt;', time.strftime('%%Y-%%m-%%d')), ('date','&gt;=',(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"/>
</field>
<field name="section_id" select="1" widget="selection" string="Section" default="context.get('section_id', False)">
<filter icon="terp-crm"
domain="[('section_id','=',context.get('section_id',False))]"
help="My section"
/>
</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>
+8 -14
View File
@@ -38,7 +38,7 @@ from crm import crm
class crm_project_bug(osv.osv):
_name = "crm.project.bug"
_description = "Project Bug Cases"
_order = "id desc"
_order = "priority, id desc"
_inherit = 'crm.case'
_columns = {
'date_closed': fields.datetime('Closed', readonly=True),
@@ -51,34 +51,28 @@ class crm_project_bug(osv.osv):
'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \
"the partner mentality in relation to our services.The scale has" \
"to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
'categ_id': fields.many2one('crm.case.categ','Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.bug')]"),
'categ_id': fields.many2one('crm.case.categ','Category', domain="[('object_id.model', '=', 'crm.project.bug')]"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'type_id': fields.many2one('crm.case.resource.type', 'Bug Type', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.bug')]"),
'type_id': fields.many2one('crm.case.resource.type', 'Bug Type', domain="[('object_id.model', '=', 'crm.project.bug')]"),
'partner_name': fields.char("Employee's Name", size=64),
'partner_mobile': fields.char('Mobile', size=32),
'partner_phone': fields.char('Phone', size=32),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.bug')]"),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'crm.project.bug')]"),
'project_id':fields.many2one('project.project', 'Project'),
'duration': fields.float('Duration') ,
'duration': fields.float('Duration'),
'probability': fields.float('Probability (%)'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]")
}
def _get_project(self, cr, uid, context):
user = self.pool.get('res.users').browse(cr,uid,uid, context=context)
if user.context_project_id:
return user.context_project_id
return False
return False
_defaults = {
'project_id':_get_project
'project_id':_get_project,
}
def onchange_categ_id(self, cr, uid, ids, categ, context={}):
if not categ:
return {'value':{}}
cat = self.pool.get('crm.case.categ').browse(cr, uid, categ, context).probability
return {'value':{'probability':cat}}
crm_project_bug()
-82
View File
@@ -1,82 +0,0 @@
#-*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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
from crm import crm
class crm_project_future_request(osv.osv):
_name = "crm.project.future"
_description = "Project Future Request"
_order = "id desc"
_inherit = 'crm.case'
_columns = {
'date_closed': fields.datetime('Closed', readonly=True),
'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
'canal_id': fields.many2one('res.partner.canal', 'Channel',help="The channels represent the different communication modes available with the customer." \
" With each commercial opportunity, you can indicate the canall which is this opportunity source."),
'planned_revenue': fields.float('Planned Revenue'),
'planned_cost': fields.float('Planned Costs'),
'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \
"the partner mentality in relation to our services.The scale has" \
"to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
'categ_id': fields.many2one('crm.case.categ','Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.future')]"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'type_id': fields.many2one('crm.case.resource.type', 'Bug Type', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.future')]"),
'partner_name': fields.char("Employee's Name", size=64),
'partner_mobile': fields.char('Mobile', size=32),
'partner_phone': fields.char('Phone', size=32),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.project.future')]"),
'project_id':fields.many2one('project.project', 'Project'),
'duration': fields.float('Duration') ,
'probability': fields.float('Probability (%)'),
}
def _get_project(self, cr, uid, context):
user = self.pool.get('res.users').browse(cr,uid,uid, context=context)
if user.context_project_id:
return user.context_project_id
return False
_defaults = {
'project_id':_get_project
}
def onchange_categ_id(self, cr, uid, ids, categ, context={}):
if not categ:
return {'value':{}}
cat = self.pool.get('crm.case.categ').browse(cr, uid, categ, context).probability
return {'value':{'probability':cat}}
crm_project_future_request()
@@ -68,8 +68,8 @@
<field name="view_id" ref="view_crm_project_bug_user_graph"/>
<field name="search_view_id" ref="view_crm_project_bug_user_filter"/>
</record>
<menuitem id="base.menu_project_report" name="Reporting" parent="project.menu_main" sequence="50"/>
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management"/>
<menuitem id="base.menu_project_report" name="Reporting" parent="base.menu_main_pm" sequence="50"/>
<menuitem name="Project Bug" id="menu_crm_project_bug_tree" parent="base.menu_project_report" sequence="1"/>
<menuitem action="action_report_crm_project_bug_user_tree" id="menu_crm_project_bug_user_tree" parent="menu_crm_project_bug_tree"/>
@@ -190,4 +190,4 @@
</record>
<menuitem action="action_report_crm_project_bug_section_tree" id="menu_crm_project_bug_section_tree" parent="menu_crm_project_bug_tree"/>
</data>
</openerp>
</openerp>
@@ -12,17 +12,7 @@
<record id="crm_project_bug_rule" model="ir.rule">
<field name="domain_force">['|',('project_id','=',False),('project_id','=',user.context_project_id)]</field>
<field name="rule_group" ref="crm_project_bug_rule_group"/>
</record>
<record model="ir.rule.group" id="crm_project_feature_rule_group">
<field name="name">crm.project.feature.rule.group</field>
<field name="model_id" search="[('model','=','crm.project.future')]" model="ir.model"/>
<field name="global" eval="True"/>
</record>
<record id="crm_project_feature_rule" model="ir.rule">
<field name="domain_force">['|',('project_id','=',False),('project_id','=',user.context_project_id)]</field>
<field name="rule_group" ref="crm_project_feature_rule_group"/>
</record>
</record>
</data>
</openerp>
@@ -1,6 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_crm_project_bug","crm.project.bug","model_crm_project_bug","crm.group_crm_manager",1,1,1,1
"access_crm_project_future","crm.project.future","model_crm_project_future","crm.group_crm_manager",1,1,1,1
"access_report_crm_project_bug_user","report.crm.project.bug.user","model_report_crm_project_bug_user","crm.group_crm_manager",1,0,0,0
"access_report_crm_project_bug_categ","report.crm.project.bug.categ","model_report_crm_project_bug_categ","crm.group_crm_manager",1,0,0,0
"access_repor_crm_project_bug_section","report.crm.project.bug.section","model_report_crm_project_bug_section","crm.group_crm_manager",1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crm_project_bug crm.project.bug model_crm_project_bug crm.group_crm_manager 1 1 1 1
access_crm_project_future crm.project.future model_crm_project_future crm.group_crm_manager 1 1 1 1
3 access_report_crm_project_bug_user report.crm.project.bug.user model_report_crm_project_bug_user crm.group_crm_manager 1 0 0 0
4 access_report_crm_project_bug_categ report.crm.project.bug.categ model_report_crm_project_bug_categ crm.group_crm_manager 1 0 0 0
5 access_repor_crm_project_bug_section report.crm.project.bug.section model_report_crm_project_bug_section crm.group_crm_manager 1 0 0 0
+25
View File
@@ -0,0 +1,25 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
import crm_bug_wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 bug2task(wizard.interface):
def _check_state(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
case_obj = pool.get('crm.project.bug')
for case in case_obj.browse(cr, uid, data['ids']):
if case.state != 'open':
raise wizard.except_wizard(_('Warning !'),
_('Bugs or Feature Requests should be in \'Open\' state before converting into Task.'))
return {}
def _makeTask(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, 'project', 'view_task_search_form')
res = data_obj.read(cr, uid, result, ['res_id'])
id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2')
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
bug_case_obj = pool.get('crm.project.bug')
task_obj = pool.get('project.task')
for bug in bug_case_obj.browse(cr, uid, data['ids']):
new_task_id = task_obj.create(cr, uid, {
'name': bug.name,
'partner_id': bug.partner_id.id,
'description':bug.description,
'date': bug.date,
'project_id':bug.project_id.id,
'priority':bug.priority,
'user_id':bug.user_id.id,
'planned_hours': 0.0,
})
new_task = task_obj.browse(cr, uid, new_task_id)
vals = {
'task_id': new_task_id,
}
bug_case_obj.write(cr, uid, [bug.id], vals)
value = {
'name': _('Tasks'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'project.task',
'res_id': int(new_task_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': [_check_state],
'result': {'type': 'action', 'action': _makeTask, 'state':'end' }
}
}
bug2task('crm.bug.task_set')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
+3 -3
View File
@@ -201,7 +201,7 @@ class event_registration(osv.osv):
if reg_id.email_cc:
dest += [reg_id.email_cc]
if dest and src:
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, tinycrm = str(reg_id.case_id.id))
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id))
if not src:
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
return False
@@ -216,9 +216,9 @@ class event_registration(osv.osv):
if reg_id.event_id.mail_auto_confirm or reg_id.event_id.mail_auto_registr:
if dest and src:
if reg_id.event_id.state in ['draft', 'fixed', 'open','confirm','running'] and reg_id.event_id.mail_auto_registr:
tools.email_send(src, dest,'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, tinycrm = str(reg_id.case_id.id))
tools.email_send(src, dest,'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, openobject_id = str(reg_id.case_id.id))
if (reg_id.event_id.state in ['confirm','running']) and reg_id.event_id.mail_auto_confirm:
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, tinycrm = str(reg_id.case_id.id))
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id))
if not src:
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
return False
+1 -1
View File
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr
@@ -12,7 +12,7 @@
<menuitem action="si_so" id="menu_si_so" parent="menu_hr_time_tracking" type="wizard" sequence="1"
groups="group_hr_attendance"/>
<!--Time Tracking menu for Project Management-->
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management"/>
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management"/>
<menuitem
id="base.menu_project_management_time_tracking"
name="Time Tracking"
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_expense
+11 -1
View File
@@ -540,6 +540,11 @@
<field name="routing_id" select='1'/>
<field name="origin" select='1'/>
</group>
<group expand="context.get('report',False)" string="Group By..." colspan="4" col="8">
<filter string="By Product" icon="terp-mrp" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="By State" icon="terp-mrp" domain="[]" context="{'group_by':'state'}"/>
<filter string="Scheduled Date" icon="terp-mrp" domain="[]" context="{'group_by':'date_planned'}"/>
</group>
</search>
</field>
</record>
@@ -669,7 +674,7 @@
<field name="model">mrp.procurement</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Procurement Lines">
<tree string="Procurement Lines" colors="red:state=='draft';black:state=='running';green:state=='confirmed';gray:state in ['done','cancel']">
<field name="name"/>
<field name="product_id"/>
<field name="product_qty"/>
@@ -753,6 +758,11 @@
<field name="date_planned" select='1'/>
<field name="state" select='1'/>
</group>
<group expand="context.get('report',False)" string="Group By..." colspan="4" col="8">
<filter string="By Product" icon="terp-mrp" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="By State" icon="terp-mrp" domain="[]" context="{'group_by':'state'}"/>
<filter string="Scheduled Date" icon="terp-mrp" domain="[]" context="{'group_by':'date_planned'}"/>
</group>
</search>
</field>
</record>
+13 -13
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-01-23 17:16+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-05 00:18+0000\n"
"Last-Translator: Guilherme Santos <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2009-12-16 05:26+0000\n"
"X-Launchpad-Export-Date: 2010-02-05 05:01+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_repair
@@ -35,12 +35,12 @@ msgstr ""
#. module: mrp_repair
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Nome de modelo inválido na definição da ação"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Untaxed amount"
msgstr ""
msgstr "Valor sem impostos"
#. module: mrp_repair
#: field:mrp.repair,state:0
@@ -56,7 +56,7 @@ msgstr ""
#: field:mrp.repair.fee,product_uom_qty:0
#: rml:repair.order:0
msgid "Quantity"
msgstr ""
msgstr "Quantidade"
#. module: mrp_repair
#: view:mrp.repair:0
@@ -82,12 +82,12 @@ msgstr ""
#: field:mrp.repair.fee,price_subtotal:0
#: field:mrp.repair.line,price_subtotal:0
msgid "Subtotal"
msgstr ""
msgstr "Sub-total"
#. module: mrp_repair
#: rml:repair.order:0
msgid "Invoice address :"
msgstr ""
msgstr "Endereço de faturamento"
#. module: mrp_repair
#: field:mrp.repair,guarantee_limit:0
@@ -139,7 +139,7 @@ msgstr ""
#. module: mrp_repair
#: field:mrp.repair,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Parceiro"
#. module: mrp_repair
#: model:ir.actions.act_window,name:mrp_repair.action_repair_quotation_tree
@@ -172,7 +172,7 @@ msgstr ""
#: field:mrp.repair,prodlot_id:0
#: rml:repair.order:0
msgid "Lot Number"
msgstr ""
msgstr "Numero do Lote"
#. module: mrp_repair
#: selection:mrp.repair,state:0
@@ -233,7 +233,7 @@ msgstr ""
#. module: mrp_repair
#: rml:repair.order:0
msgid "Total :"
msgstr ""
msgstr "Total :"
#. module: mrp_repair
#: field:mrp.repair,pricelist_id:0
@@ -260,7 +260,7 @@ msgstr ""
#. module: mrp_repair
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Invalido XML para Arquitetura da View"
msgstr "XML inválido para Arquitetura da View"
#. module: mrp_repair
#: help:mrp.repair,guarantee_limit:0
@@ -279,7 +279,7 @@ msgstr ""
#. module: mrp_repair
#: rml:repair.order:0
msgid "N° :"
msgstr ""
msgstr "N° :"
#. module: mrp_repair
#: field:mrp.repair,invoice_method:0
+1 -1
View File
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: olap
+1 -2
View File
@@ -49,7 +49,7 @@ Main features :
'pos_data.xml',
'pos_workflow.xml',
'statement_view.xml',
'statement_report.xml',
'statement_report.xml',
'statement_data.xml',
'statement_wizard.xml'
],
@@ -66,6 +66,5 @@ Main features :
],
'demo_xml': ['pos_demo.xml','singer_statement_demo.xml','multi_company_stock_data.xml'],
'installable': True,
'certificate': '',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+9 -6
View File
@@ -108,7 +108,7 @@ class project(osv.osv):
'category_id': fields.many2one('account.analytic.account','Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc."),
'priority': fields.integer('Sequence'),
'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team."),
'resource_ids': fields.many2many('resource.resource', 'project_resource_rel', 'project_id', 'resource_id', 'Project Members', help="Project's member. Not used in any computation, just for information purpose."),
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose."),
'tasks': fields.one2many('project.task', 'project_id', "Project tasks"),
'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project."),
'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project."),
@@ -521,18 +521,21 @@ class message(osv.osv):
_name = "project.message"
_description = "Message"
_columns = {
'subject': fields.char('Subject', size=128),
'description': fields.char('Description', size =128),
'subject': fields.char('Subject', size=128, required="True"),
'description': fields.text('Description'),
'project_id': fields.many2one('project.project', 'Project', ondelete='cascade'),
'date': fields.date('Date'),
'user_id': fields.many2one('res.users', 'User'),
'user_id': fields.many2one('res.users', 'User', required="True"),
}
def _default_project(self, cr, uid, context={}):
if 'project_id' in context and context['project_id']:
return int(context['project_id'])
return False
return False
_defaults = {
'project_id':_default_project}
'user_id' : lambda self,cr,uid,ctx : uid,
'project_id':_default_project}
message()
def _project_get(self, cr, uid, context={}):
+23 -19
View File
@@ -28,12 +28,13 @@
<field name="priority"/>
<field name="resource_calendar_id"/>
<field name="active" select="2"/>
<newline/>
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time"/>
<newline/>
<separator colspan="4" string="Project's members"/>
<field colspan="4" name="resource_ids" nolabel="1"/>
<field colspan="4" name="members" nolabel="1"/>
<group col="9" colspan="8">
<field name="state" select="1"/>
<button name="set_template" string="Set as Template" type="object" states="open" icon="gtk-convert"/>
@@ -346,22 +347,24 @@
<tree colors="grey:state in ('cancelled','done');blue:remaining_hours&lt;0;red:bool(date_deadline) and (date_deadline&lt;current_date) and (state in ('draft','open'));black:state not in ('cancelled','done')" string="Tasks">
<field name="sequence" invisible="1"/>
<field name="name"/>
<field name="project_id" icon="gtk-indent"/>
<field name="project_id" icon="gtk-indent" invisible="context.get('set_visible',False)"/>
<field name="user_id"/>
<field name="remaining_hours" widget="float_time" sum="Remaining Hours"/>
<field name="date_deadline"/>
<field name="type" groups="base.group_extended"/>
<button name="next_type"
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" invisible="context.get('set_visible',False)"/>
<field name="date_deadline" invisible="context.get('set_visible',False)"/>
<field name="type" groups="base.group_extended" invisible="context.get('set_visible',False)"/>
<field name="date_start" invisible="1"/>
<field name="date_end" invisible="1"/>
<button name="next_type" invisible="context.get('set_visible',False)"
states="draft,open,pending"
string="Change Stage"
type="object"
icon="gtk-go-forward"
groups="base.group_extended"
help="Change Type"/>
<field name="progress" widget="progressbar"/>
<field name="state"/>
<button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state"/>
<button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state"/>
<field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
<field name="state" invisible="context.get('set_visible',False)"/>
<button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state" invisible="context.get('set_visible',False)"/>
<button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state" />
<button name="%(wizard_close_task)d" states="pending,open" string="Done" type="action" icon="gtk-jump-to" help="For changing to done state"/>
<button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
</tree>
@@ -447,7 +450,7 @@
<filter domain="[('manager_id','=',False)]" help="Unassigned Project" icon="terp-project"/>
</field>
<field name="user_id" select="1" widget="selection">
<filter domain="[('user_id','=',uid)]" help="My Tasks" icon="gtk-execute"/>
<filter domain="[('user_id','=',uid)]" help="My Tasks" icon="gtk-execute" default="1"/>
<filter domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="gtk-execute" separator="1"/>
</field>
</group>
@@ -612,14 +615,15 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Messages">
<group colspan="6">
<field name="subject" select="1"/>
<field name="description"/>
<field name="project_id" />
<field name="date" select="2"/>
<field name="user_id" select="1"/>
</group>
</form>
<group colspan="6">
<field name="subject" select="1" string="Title"/>
<field name="project_id"/>
<field name="user_id" select="1"/>
<field name="date" select="2"/>
</group>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4"/>
</form>
</field>
</record>
+2 -2
View File
@@ -5,11 +5,11 @@
<wizard id="wizard_delegate_task" menu="False" model="project.task" name="project.task.delegate" string="Delegate Task"/>
<wizard id="wizard_compute_task" model="project.task" name="wizard.compute.tasks" string="Compute Task Scheduling"/>
<menuitem icon="terp-project" id="menu_main" name="Project Management"/>
<menuitem id="base.menu_pm_planning" name="Planning" parent="base.menu_main" sequence="3"/>
<menuitem
action="wizard_compute_task"
id="menu_wizard_compute_task"
parent="menu_main"
parent="base.menu_pm_planning"
type="wizard"
sequence="1"/>
@@ -1,6 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","account.model_account_analytic_account","project.group_project_user",1,1,1,1
"access_project_project","project.project","model_project_project","project.group_project_user",1,0,0,0
"access_account_analytic_account","account.analytic.account","account.model_account_analytic_account","project.group_project_user",1,0,0,0
"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,0,0,1
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_project_project_manager project.project manager model_project_project project.group_project_manager 1 1 1 1
3 access_account_analytic_account_manager account.analytic.account account.model_account_analytic_account project.group_project_user 1 1 1 1
4 access_project_project project.project model_project_project project.group_project_user 1 0 0 0
5 access_account_analytic_account account.analytic.account account.model_account_analytic_account project.group_project_user 1 0 0 0
6 access_project_task_type_user project.task.type user model_project_task_type project.group_project_user 1 0 0 1
7 access_project_task_type project.task.type model_project_task_type project.group_project_manager 1 1 1 1
8 access_project_task_manager project.task manager model_project_task project.group_project_manager 1 1 1 1
+2 -1
View File
@@ -25,7 +25,8 @@ class project_task(osv.osv):
_name = "project.task"
_inherit = ["calendar.todo", "project.task"]
_columns = {
'attendee_ids': fields.many2many('calendar.attendee', 'task_attendee_rel', 'task_id', 'attendee_id', 'Attendees'),
'attendee_ids': fields.many2many('calendar.attendee', \
'task_attendee_rel', 'task_id', 'attendee_id', 'Attendees'),
}
project_task()
+10 -141
View File
@@ -3,7 +3,7 @@
<data noupdate="1">
<record model="basic.calendar" id="base_calendar.basic_calendar2">
<field name="name">Meeting-Todo</field>
<field name="name">Todo</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_todo">
@@ -69,7 +69,15 @@
<field name="field_id" search="[('name','=','progress'),('model_id.model','=','project.task')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_10">
<field name="name" ref="base_calendar.field_todo_vtimezone"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','vtimezone'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_11">
<field name="name" ref="base_calendar.field_todo_summary"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
@@ -134,14 +142,6 @@
<field name="fn">field</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_event2">
<field name="name">vevent</field>
<field name="calendar_id" ref="base_calendar.basic_calendar2" />
<field name="object_id" search="[('model','=','crm.meeting')]" />
<field name="domain">[('user_id','=', uid)]</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_alarm2">
<field name="name">valarm</field>
<field name="calendar_id" ref="base_calendar.basic_calendar2" />
@@ -154,137 +154,6 @@
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_event_1">
<field name="name" ref="base_calendar.field_event_uid"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_2">
<field name="name" ref="base_calendar.field_event_recurrence-id"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','recurrent_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_4">
<field name="name" ref="base_calendar.field_event_attendee" />
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_5">
<field name="name" ref="base_calendar.field_event_rrule"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','rrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_6">
<field name="name" ref="base_calendar.field_event_dtend"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','date_deadline'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_7">
<field name="name" ref="base_calendar.field_event_valarm"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','caldav_alarm_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_8">
<field name="name" ref="base_calendar.field_event_priority"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','priority'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_9">
<field name="name" ref="base_calendar.field_event_location"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','location'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_10">
<field name="name" ref="base_calendar.field_event_exrule"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','exrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_11">
<field name="name" ref="base_calendar.field_event_status"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','crm.meeting')]" />
<field name="mapping">{'tentative': 'draft', 'confirmed': 'open', 'cancelled': 'cancel'}</field>
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_12">
<field name="name" ref="base_calendar.field_event_exdate"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','exdate'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_13">
<field name="name" ref="base_calendar.field_event_dtstamp"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_14">
<field name="name" ref="base_calendar.field_event_description"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_15">
<field name="name" ref="base_calendar.field_event_dtstart"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_16">
<field name="name" ref="base_calendar.field_event_class"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','class'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_18">
<field name="name" ref="base_calendar.field_event_created"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','create_date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_19">
<field name="name" ref="base_calendar.field_event_url"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','caldav_url'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_20">
<field name="name" ref="base_calendar.field_event_summary"/>
<field name="type_id" ref="caldav.calendar_lines_event2" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_1">
<field name="name" ref="base_calendar.field_alarm_attendee"/>
@@ -86,6 +86,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="vtimezone" colspan="2" />
<field name="location" colspan="2" />
<field name="alarm_id" string="Reminder" widget="selection" />
<field name="caldav_url" widget="url" />
+12 -12
View File
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@@ -15,7 +15,7 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
@@ -49,7 +49,7 @@ class project_gtd_context(osv.osv):
'sequence': lambda *args: 1
}
_order = "sequence, name"
project_gtd_context()
@@ -61,7 +61,7 @@ class project_gtd_timebox(osv.osv):
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of timebox."),
'icon': fields.selection(tools.icons, 'Icon', size=64),
}
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
res = super(project_gtd_timebox,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
if (res['type']=='form') and ('record_id' in context):
@@ -123,14 +123,14 @@ class project_task(osv.osv):
'timebox_id': fields.many2one('project.gtd.timebox', "Timebox"),
'context_id': fields.many2one('project.gtd.context', "Context"),
}
def copy_data(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
default['timebox_id']=False
default['context_id']=False
return super(project_task,self).copy_data(cr, uid, id, default, context)
def _get_context(self,cr, uid, ctx):
ids = self.pool.get('project.gtd.context').search(cr, uid, [], context=ctx)
return ids and ids[0] or False
@@ -169,19 +169,19 @@ class project_task(osv.osv):
timebox_obj = self.pool.get('project.gtd.timebox')
if res['type'] == 'search':
tt = timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[]))
search_extended ='''<newline/><group col="%d" expand="1" string="%s" groups="project_gtd.group_project_getting">''' % (len(tt)+6,_('Getting Things Done'))
search_extended += '''<filter domain="[('timebox_id','=', False)]" icon="gtk-new" string="Inbox"/>'''
search_extended ='''<newline/><group col="%d" expand="1" string="%s" groups="project_gtd.group_project_getting">''' % (len(tt)+7,_('Getting Things Done'))
search_extended += '''<filter domain="[('timebox_id','=', False)]" context="{'set_editable':True,'set_visible':True}" icon="gtk-new" string="Inbox"/>'''
search_extended += '''<separator orientation="vertical"/>'''
for time in tt:
if time.icon:
icon = time.icon
else :
icon=""
search_extended += '''<filter domain="[('timebox_id','=', ''' + str(time.id) + ''')]" icon="''' + icon + '''" string="''' + time.name + '''"/>'''
search_extended += '''<filter domain="[('timebox_id','=', ''' + str(time.id) + ''')]" icon="''' + icon + '''" string="''' + time.name + '''" context="{'set_visible':True}"/>'''
search_extended += '''
<separator orientation="vertical"/>
<field name="context_id" select="1" widget="selection"/>
<field name="priority" select="1"/>
<field name="context_id" select="1" widget="selection" />
<field name="priority" select="1" />
</group>
</search> '''
if search_extended:
@@ -191,7 +191,7 @@ class project_task(osv.osv):
context_id_info['context_id']['selection'] = attrs_sel
res['fields'].update(context_id_info)
return res
# Override read for using this method if context set !!!
#_order = "((55-ascii(coalesce(priority,'2')))*2 + coalesce((date_start::date-current_date)/2,8))"
project_task()
+8 -32
View File
@@ -75,9 +75,10 @@
<field name="inherit_id" ref="project.view_task_tree2" />
<field name="arch" type="xml">
<field name="remaining_hours" position="after">
<field name="timebox_id" groups="project_gtd.group_project_getting"/>
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open" groups="project_gtd.group_project_getting"/>
<button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open" groups="project_gtd.group_project_getting"/>
<field name="timebox_id" groups="project_gtd.group_project_getting" invisible=" not context.get('set_visible',False)"/>
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open" groups="project_gtd.group_project_getting" invisible=" not context.get('set_visible',False)"/>
<button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open" groups="project_gtd.group_project_getting" invisible=" not context.get('set_visible',False)"/>
<button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert" help="For reopening the tasks" invisible="not context.get('set_visible',False)"/>
</field>
</field>
</record>
@@ -100,38 +101,13 @@
<field name="name">Tasks</field>
<field name="model">project.task</field>
<field name="type">tree</field>
<field name="inherit_id" ref="project.view_task_tree2"/>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<tree editable="top" colors="grey:state in ('done',);red:state in ('cancelled');black:state not in ('done','cancelled')" string="Tasks">
<field name="sequence" invisible="1"/>
<field name="name"/>
<field name="planned_hours" widget="float_time"/>
<field name="user_id"/>
<field name="timebox_id" widget="selection" groups="project_gtd.group_project_getting"/>
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open" groups="project_gtd.group_project_getting"/>
<button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open" groups="project_gtd.group_project_getting"/>
<field name="state" invisible="1"/>
<button name="%(project.wizard_close_task)d" states="draft,pending,open" string="Done" type="action" icon="gtk-jump-to" help="For changing to done state"/>
<button groups="base.group_extended" name="%(project.wizard_delegate_task)d" states="pending,open" string="Delegate" type="action" icon="gtk-sort-descending"/>
<button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
<button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert" help="For reopening the tasks"/>
</tree>
<field name="name" position="after">
<field name="planned_hours" widget="float_time" invisible="not context.get('set_visible',False)"/>
</field>
</field>
</record>
<record model="ir.actions.act_window" id="action_prject_task_tree">
<field name="res_model">project.task</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="view_id" ref="view_project_task_tree2"/>
<field name="search_view_id" ref="project.view_task_search_form"/>
</record>
<menuitem name="To-Dos"
groups="group_project_getting"
id="menu_task_inbox"
parent="project.menu_project_management"
action="action_prject_task_tree"/>
</data>
</openerp>
+5
View File
@@ -161,6 +161,11 @@
<filter icon="terp-purchase" domain="[('create_uid','child_of',[uid])]" help="My Departments Purchase Orders"/>
</field>
</group>
<group expand="context.get('report',False)" string="Group By..." colspan="4" col="10">
<filter string="By Supplier" icon="terp-purchase" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="By State" icon="terp-purchase" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Order Date" icon="terp-purchase" domain="[]" context="{'group_by':'date_order'}"/>
</group>
</search>
</field>
</record>
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-02 04:48+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: report_project
+14 -1
View File
@@ -64,6 +64,12 @@
<field name="month" select="1"/>
<field name="product_id" select="1"/>
<field name="state" select="1"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Year" icon="terp-sale" domain="[]" context="{'group_by':'name'}"/>
<filter string="By Month" icon="terp-sale" domain="[]" context="{'group_by':'month'}"/>
<filter string="By State" icon="terp-sale" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Product" icon="terp-sale" domain="[]" context="{'group_by':'product_id'}"/>
</group>
</search>
</field>
@@ -145,7 +151,14 @@
<field name="month" select="1"/>
<field name="category_id" select="1"/>
<field name="state" select="1"/>
</group>
</group>
<group expand="1" string="Group By..." colspan="4" col="20">
<filter string="By Year" icon="terp-sale" domain="[]" context="{'group_by':'name'}"/>
<filter string="By Month" icon="terp-sale" domain="[]" context="{'group_by':'month'}"/>
<filter string="By State" icon="terp-sale" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Category" icon="terp-sale" domain="[]" context="{'group_by':'category_id'}"/>
</group>
</search>
</field>
</record>
+2 -2
View File
@@ -8,6 +8,7 @@
sequence="40" />
<!-- Tasks by projects and users -->
<record id="view_task_project_form" model="ir.ui.view">
<field name="name">report.project.task.form</field>
@@ -81,8 +82,7 @@
<field name="domain">[]</field>
<field name="search_view_id" ref="view_report_task_user_pipeline_open_search"/>
</record>
<menuitem id="base.menu_project_report" name="Reporting" parent="project.menu_main" sequence="50"/>
<!-- <menuitem id="next_id_57" name="Reporting" parent="project.menu_main" sequence="50"/>-->
<menuitem id="base.menu_project_report" name="Reporting" parent="base.menu_main_pm" sequence="50"/>
<menuitem action="action_project_task" id="menu_project_task_user_tree" parent="base.menu_project_report"/>
<!-- Closed Task in Random Acitivities dashboard -->
+7 -1
View File
@@ -242,7 +242,13 @@
<filter icon="terp-sale" domain="[('user_id','child_of',[uid])]" help="My Departments Sale Orders"/>
</field>
<field name="date_order" select="1"/>
</group>
</group>
<group expand="context.get('report',False)" string="Group By..." colspan="4" col="8">
<filter string="By Parnter" icon="terp-sale" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="By State" icon="terp-sale" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Order Date" icon="terp-sale" domain="[]" context="{'group_by':'date_order'}"/>
</group>
</search>
</field>
</record>
+3 -7
View File
@@ -8,13 +8,9 @@
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
<field name="arch" type="xml">
<field name="user_id" position="replace">
<label string="Responsible: " align="1.0"/>
<group colspan="1" col="2">
<field name="user_id" select="2" nolabel="1" string="Responsible"/>
<button string="Convert to Quote" icon="terp-sale" name="%(sale_crm_wizard)d" type="action"/>
</group>
</field>
<xpath expr="/form[@string='Opportunities']/group/group/button[@string='Schedule Call']" position="after">
<button string="Quotation" icon="terp-sale" name="%(sale_crm_wizard)d" type="action"/>
</xpath>
</field>
</record>
+37
View File
@@ -665,6 +665,11 @@
<field name="name" select="1"/>
<field name="address_id" select="1"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Partner" icon="terp-stock" domain="[]" context="{'group_by':'address_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -786,6 +791,11 @@
<field name="name" select="1"/>
<field name="origin" select="1"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="10">
<filter string="By Partner" icon="terp-stock" domain="[]" context="{'group_by':'address_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Order Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -939,6 +949,11 @@
<field name="address_id" select="1"/>
<field name="company_id" select="1" widget="selection"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Partner" icon="terp-stock" domain="[]" context="{'group_by':'address_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -1094,6 +1109,11 @@
<field name="address_id" select="1"/>
<field name="company_id" select="1" widget="selection"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Partner" icon="terp-stock" domain="[]" context="{'group_by':'address_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -1142,6 +1162,11 @@
<field name="address_id" select="1"/>
<field name="company_id" select="1" widget="selection"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Partner" icon="terp-stock" domain="[]" context="{'group_by':'address_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -1254,6 +1279,13 @@
<field name="location_dest_id" select="1"/>
<field name="product_id" select="1"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Location" icon="terp-stock" domain="[]" context="{'group_by':'location_id'}"/>
<filter string="By Product" icon="terp-stock" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Destion Location" icon="terp-stock" domain="[]" context="{'group_by':'location_dest_id'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
@@ -1373,6 +1405,11 @@
<field name="partner_id" string="Supplier" select="1"/>
<field name="product_id"/>
</group>
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="By Product" icon="terp-stock" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="By State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/>
<filter string="By Date" icon="terp-stock" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
+24 -22
View File
@@ -144,13 +144,13 @@ class survey_analysis(report_rml):
for col in range(0, len(que.column_heading_ids) + 1):
cols_widhts.append(float(300 / (len(que.column_heading_ids) + 1)))
colWidths = ",".join(map(tools.ustr, cols_widhts))
matrix_ans = ['',]
matrix_ans = [(0,'')]
for col in que.column_heading_ids:
if col.title not in matrix_ans:
matrix_ans.append(col.title)
matrix_ans.append((col.id,col.title))
rml+="""<blockTable colWidths=" """ + colWidths + """ " style="Table1"><tr>"""
for mat_col in matrix_ans:
rml+="""<td><para style="response">""" + to_xml(tools.ustr(mat_col)) + """</para></td>"""
for mat_col in range(0, len(matrix_ans)):
rml+="""<td><para style="response">""" + to_xml(tools.ustr(matrix_ans[mat_col][1])) + """</para></td>"""
rml+="""<td><para style="response">Response Count</para></td>
</tr>"""
last_col = cols_widhts[-1]
@@ -158,16 +158,16 @@ class survey_analysis(report_rml):
rml+="""<tr><td><para style="answer">""" + to_xml(tools.ustr(ans.answer)) + """</para></td>"""
cr.execute("select count(id) from survey_response_answer sra where sra.answer_id = %d"%(ans.id))
tot_res = cr.fetchone()[0]
cr.execute("select count(id) ,sra.answer from survey_response_answer sra where sra.answer_id = %d group by sra.answer" % ans.id)
cr.execute("select count(id) ,sra.column_id from survey_response_answer sra where sra.answer_id = %d group by sra.column_id" % ans.id)
calc_res = cr.dictfetchall()
for mat_col in range(1, len(matrix_ans)):
percantage = 0
cal_count = 0
for cal in calc_res:
if cal['answer'] == matrix_ans[mat_col]:
if cal['column_id'] == matrix_ans[mat_col][0]:
cal_count = cal['count']
if tot_res:
percantage = float(cal_count)*100 / tot_res
percantage = round(float(cal_count)*100 / tot_res,2)
if percantage:
rml += """<td color="#FFF435"><para style="answer_bold">""" + tools.ustr(percantage) +"% (" + tools.ustr(cal_count) + """)</para></td>"""
else:
@@ -181,7 +181,7 @@ class survey_analysis(report_rml):
rml+="""<blockTable colWidths=" """+ str(500 - last_col) +"," + str(last_col) + """ " style="Table1"><tr><td><para style="answer_right">""" + to_xml(tools.ustr(que.comment_label)) + """</para></td>
<td><para style="answer">""" + tools.ustr(tot_res) + """</para></td></tr></blockTable>"""
elif que.type in['multiple_choice_only_one_ans', 'multiple_choice_multiple_ans', 'multiple_textboxes','date_and_time','date']:
elif que.type in['multiple_choice_only_one_ans', 'multiple_choice_multiple_ans', 'multiple_textboxes','date_and_time','date','multiple_textboxes_diff_type']:
rml +="""<blockTable colWidths="280.0,120,100.0" style="Table1">"""
rml += """ <tr>
<td> <para style="Standard"> </para></td>
@@ -234,13 +234,13 @@ class survey_analysis(report_rml):
for col in range(0,len(que.column_heading_ids) + 2):
cols_widhts.append(float(300 / (len(que.column_heading_ids) + 2)))
colWidths = ",".join(map(tools.ustr, cols_widhts))
matrix_ans = ['',]
matrix_ans = [(0,'')]
for col in que.column_heading_ids:
if col.title not in matrix_ans:
matrix_ans.append(col.title)
matrix_ans.append((col.id,col.title))
rml+="""<blockTable colWidths=" """ + colWidths + """ " style="Table1"><tr>"""
for mat_col in matrix_ans:
rml+="""<td><para style="response">""" + to_xml(tools.ustr(mat_col)) + """</para></td>"""
for mat_col in range(0,len(matrix_ans)):
rml+="""<td><para style="response">""" + to_xml(tools.ustr(matrix_ans[mat_col][1])) + """</para></td>"""
rml+="""<td><para style="response">Rating Average</para></td>
<td><para style="response">Response Count</para></td>
</tr>"""
@@ -250,21 +250,23 @@ class survey_analysis(report_rml):
rating_weight_sum = 0
for mat_col in range(1, len(matrix_ans)):
cr.execute("select count(sra.answer_id) from survey_response_line sr, survey_response_answer sra\
where sr.id = sra.response_id and sra.answer_id = %d and sra.answer ='%s'" % (ans.id,matrix_ans[mat_col]))
where sr.id = sra.response_id and sra.answer_id = %d and sra.column_id ='%d'" % (ans.id,matrix_ans[mat_col][0]))
tot_res = cr.fetchone()[0]
cr.execute("select count(sra.answer_id),sqc.rating_weight from survey_response_line sr, survey_response_answer sra ,\
survey_question_column_heading sqc where sr.id = sra.response_id and \
sqc.question_id = sr.question_id and sra.answer_id = %d and sqc.title ='%s'\
group by sra.answer_id,sqc.rating_weight" % (ans.id,matrix_ans[mat_col]))
group by sra.answer_id,sqc.rating_weight" % (ans.id,matrix_ans[mat_col][1]))
col_weight = cr.fetchone()
if not col_weight :
if not col_weight:
col_weight= (0,0)
elif not col_weight[1]:
col_weight = (col_weight[0],0)
res_count = col_weight[0]
if tot_res:
rating_weight_sum += col_weight[1] * tot_res
if tot_res and res_count:
rating_weight_sum += int(col_weight[1]) * tot_res
tot_per = round((float(tot_res) * 100) / int(res_count), 2)
else:
tot_res = 0
tor_res = 0
tot_per = 0.0
if tot_res:
rml += """<td><para style="answer_bold">""" + tools.ustr(tot_per) + "%(" + tools.ustr(tot_res) + """)</para></td>"""
@@ -292,10 +294,10 @@ class survey_analysis(report_rml):
rml += """<td><para style="response">""" + to_xml(tools.ustr(menu)) + """</para></td>"""
rml += """<td><para style="response">Response Count</para></td></tr>"""
cr.execute("select count(id), sra.answer_id from survey_response_answer sra \
where sra.answer='%s' group by sra.answer_id " % (column.title))
where sra.column_id='%s' group by sra.answer_id " % (column.id))
res_count = cr.dictfetchall()
cr.execute("select count(sra.id),sra.value_choice, sra.answer_id, sra.answer from survey_response_answer sra \
where sra.answer='%s' group by sra.value_choice ,sra.answer_id, sra.answer" % (column.title))
cr.execute("select count(sra.id),sra.value_choice, sra.answer_id, sra.column_id from survey_response_answer sra \
where sra.column_id='%s' group by sra.value_choice ,sra.answer_id, sra.column_id" % (column.id))
calc_percantage = cr.dictfetchall()
for ans in que.answer_choice_ids:
rml+="""<tr><td><para style="answer_right">""" + to_xml(tools.ustr(ans.answer)) + """</para></td>"""
@@ -309,7 +311,7 @@ class survey_analysis(report_rml):
calc = per['count']
percantage = 0.00
if calc and response:
percantage = (float(calc)* 100) / response
percantage = round((float(calc)* 100) / response,2)
if calc:
rml+="""<td><para style="answer_bold">""" +tools.ustr(percantage)+"% (" + tools.ustr(calc) + """)</para></td>"""
else:
+27 -13
View File
@@ -51,6 +51,10 @@ class survey_browse_response(report_rml):
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6"/>
</blockTableStyle>
<blockTableStyle id="note_table">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
@@ -139,11 +143,11 @@ class survey_browse_response(report_rml):
response_id = surv_resp_obj.search(cr, uid, [('survey_id','in',ids)])
surv_resp_line_obj = pooler.get_pool(cr.dbname).get('survey.response.line')
surv_obj = pooler.get_pool(cr.dbname).get('survey')
for response in surv_resp_obj.browse(cr,uid, response_id):
for response in surv_resp_obj.browse(cr,uid, response_id):
for survey in surv_obj.browse(cr, uid, [response.survey_id.id]):
status = "Skip"
status = "Not Finished"
if response.state == "done":
status = "Complete"
status = "Finished"
rml += """<blockTable colWidths="230.0,120.0,100.0,50" style="Table_heading">
<tr>
<td>
@@ -183,6 +187,13 @@ class survey_browse_response(report_rml):
<td><para style="page">Page :- """ + to_xml(tools.ustr(page.title)) + """</para></td>
</tr>
</blockTable>"""
if page.note:
rml += """<para style="P2"></para>
<blockTable colWidths="500" style="note_table">
<tr>
<td><para style="response">""" + to_xml(tools.ustr(page.note)) + """</para></td>
</tr>
</blockTable>"""
for que in page.question_ids:
rml += """<para style="P2"></para>
<blockTable colWidths="500" style="Table5">
@@ -213,11 +224,14 @@ class survey_browse_response(report_rml):
rml +="""<blockTable colWidths=" """ + str(colWidths) + """ " style="Table51"><tr>"""
table_data = col_heading.browse(cr, uid, col_heading.search(cr, uid, [('response_table_id', '=', answer[0].id),('name','=',row)]))
for column in matrix_ans:
value = """<font color="white"> </font>"""
value = False
for col in table_data:
if column == col.column_id.title:
value = col.value
rml += """<td> <para style="terp_default_9">""" + to_xml(tools.ustr(value)) +"""</para></td>"""
if value:
rml += """<td> <para style="terp_default_9">""" + to_xml(tools.ustr(value)) +"""</para></td>"""
else:
rml += """<td><para style="terp_default_9"><font color ="white"> </font></para></td>"""
rml += """</tr></blockTable>"""
else:
rml +="""<blockTable colWidths="500" style="Table1">
@@ -237,7 +251,7 @@ class survey_browse_response(report_rml):
rml +="""<blockTable colWidths="500" style="Table1">
<tr> <td> <para style="response">No Response</para></td> </tr>
</blockTable>"""
elif que.type in ['multiple_textboxes','date','date_and_time','numerical_textboxes']:
elif que.type in ['multiple_textboxes_diff_type','multiple_textboxes','date','date_and_time','numerical_textboxes','multiple_textboxes_diff_type']:
if len(answer) and answer[0].state == "done":
for ans in answer[0].response_answer_ids:
rml +="""<blockTable colWidths="200,300" style="Table1">
@@ -287,16 +301,16 @@ class survey_browse_response(report_rml):
i+=1
cols_widhts.append(round(tmp,2))
colWidths = ",".join(map(tools.ustr, cols_widhts))
matrix_ans = ['',]
matrix_ans = [(0,''),]
for col in que.column_heading_ids:
if col.title not in matrix_ans:
matrix_ans.append(col.title)
matrix_ans.append((col.id,col.title))
len_matrix = len(matrix_ans)
if que.type in ['matrix_of_choices_only_one_ans','rating_scale'] and que.comment_column:
matrix_ans.append(que.column_name)
rml+="""<blockTable colWidths=" """ + colWidths + """ " style="Table1"><tr>"""
for mat_col in matrix_ans:
rml+="""<td><para style="response">""" + to_xml(tools.ustr(mat_col)) + """</para></td>"""
for mat_col in range(0, len(matrix_ans)):
rml+="""<td><para style="response">""" + to_xml(tools.ustr(matrix_ans[mat_col][1])) + """</para></td>"""
rml +="""</tr>"""
rml+="""</blockTable>"""
i=0
@@ -312,7 +326,7 @@ class survey_browse_response(report_rml):
for mat_col in range(1, len_matrix):
value = """"""
for res_ans in answer[0].response_answer_ids:
if res_ans.answer_id.id == ans.id and res_ans.answer == matrix_ans[mat_col]:
if res_ans.answer_id.id == ans.id and res_ans.column_id.id == matrix_ans[mat_col][0]:
comment_value = to_xml(tools.ustr(res_ans.comment_field))
if que.type in ['matrix_of_drop_down_menus']:
value = """<para style="response">""" + to_xml(tools.ustr(res_ans.value_choice)) + """</para>"""
@@ -354,8 +368,8 @@ class survey_browse_response(report_rml):
rml +="""<blockTable colWidths="500" style="Table1">
<tr> <td> <para style="response">No Response</para></td> </tr>
</blockTable>"""
rml += """<pageBreak/>"""
rml += """<pageBreak/>"""
rml += """</story></document>"""
report_type = datas.get('report_type', 'pdf')
create_doc = self.generators[report_type]
+14 -15
View File
@@ -102,6 +102,10 @@ class survey_form(report_rml):
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#8f8f8f" start="0,-1" stop="1,-1"/>
</blockTableStyle>
<blockTableStyle id="note_table">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
@@ -147,6 +151,10 @@ class survey_form(report_rml):
<blockTable colWidths='"""+_tbl_widths+"""' style="page_tbl">
<tr><td><para style="page">"""+ tools.ustr(seq) + """. """ + to_xml(tools.ustr(page.title)) + """</para></td></tr>
</blockTable>"""
if page.note:
rml += """<para style="P2"></para><blockTable colWidths='"""+_tbl_widths+"""' style="note_table">
<tr><td><para style="descriptive_text">""" + to_xml(tools.ustr(page.note or '')) + """</para></td></tr>
</blockTable>"""
for que in page.question_ids:
cols_widhts=[]
rml +="""
@@ -280,16 +288,11 @@ class survey_form(report_rml):
else:
rml+="""<td><illustration>""" + value + """</illustration></td>"""
rml+= """</tr></blockTable>"""
elif que.type in ['multiple_textboxes','numerical_textboxes', 'date_and_time','date']:
elif que.type in ['multiple_textboxes','numerical_textboxes', 'date_and_time','date','multiple_textboxes_diff_type']:
cols_widhts.append(float(_tbl_widths.replace('cm',''))/2)
cols_widhts.append(float(_tbl_widths.replace('cm',''))/2)
colWidths = "cm,".join(map(tools.ustr, cols_widhts))
colWidths = tools.ustr(colWidths) + 'cm'
rect_len = ""
if que.type in ['multiple_textboxes']:
rect_len = tools.ustr(cols_widhts[0] - 0.3) + "cm"
else:
rect_len = "6cm"
for ans in que.answer_choice_ids:
rml +="""<para style="P1"></para>
<blockTable colWidths=" """+ colWidths + """ " style="ans_tbl">
@@ -297,7 +300,7 @@ class survey_form(report_rml):
<td><para style="answer">""" + to_xml(tools.ustr(ans.answer)) + """</para></td>
<td>
<illustration>
<rect x="0.0cm" y="-0.5cm" width='""" + tools.ustr(rect_len) + """' height="0.6cm" fill="no" stroke="yes"/>
<rect x="0.0cm" y="-0.5cm" width='""" + tools.ustr(str(cols_widhts[0] - 0.3) + "cm") + """' height="0.6cm" fill="no" stroke="yes"/>
</illustration>
</td>
</tr>
@@ -305,14 +308,11 @@ class survey_form(report_rml):
elif que.type in ['comment']:
cols_widhts.append(float(_tbl_widths.replace('cm','')))
colWidths = "cm,".join(map(tools.ustr, cols_widhts))
colWidths = colWidths+'cm'
rect_len = ""
rect_len = tools.ustr(cols_widhts[0] - 0.4) + "cm"
rml+="""<blockTable colWidths=" """ + colWidths + """ " style="ans_tbl">
rml+="""<blockTable colWidths=" """ + colWidths + """cm " style="ans_tbl">
<tr>
<td><para style="comment"><font color="white"> </font></para>
<illustration>
<rect x="0.0cm" y="0.3cm" width='""" + tools.ustr(rect_len) + """' height="1.5cm" fill="no" stroke="yes"/>
<rect x="0.1cm" y="0.3cm" width='""" + tools.ustr(str(float(colWidths) - 0.6) +'cm') + """' height="1.5cm" fill="no" stroke="yes"/>
</illustration>
</td>
</tr>
@@ -320,13 +320,12 @@ class survey_form(report_rml):
elif que.type in ['single_textbox']:
cols_widhts.append(float(_tbl_widths.replace('cm','')))
colWidths = "cm,".join(map(tools.ustr, cols_widhts))
colWidths = colWidths+'cm'
rml+="""<para style="P2"><font color="white"> </font></para>
<blockTable colWidths=" """ + colWidths + """ " style="ans_tbl">
<blockTable colWidths=" """ + colWidths + """cm " style="ans_tbl">
<tr>
<td>
<illustration>
<rect x="0.2cm" y="0.3cm" width="15.0 cm" height="0.6cm" fill="no" stroke="yes"/>
<rect x="0.2cm" y="0.3cm" width='""" + tools.ustr(str(float(colWidths) - 0.7) +'cm') + """' height="0.6cm" fill="no" stroke="yes"/>
</illustration>
</td>
</tr>
+106 -56
View File
@@ -92,7 +92,10 @@ class survey(osv.osv):
def survey_cancel(self, cr, uid, ids, arg):
self.write(cr, uid, ids, { 'state' : 'cancel' })
return True
def copy(self, cr, uid, id, default=None,context={}):
raise osv.except_osv(_('Error !'),_('You cannot duplicate the resource!'))
survey()
class survey_history(osv.osv):
@@ -129,7 +132,7 @@ class survey_page(osv.osv):
def default_get(self, cr, uid, fields, context={}):
data = super(survey_page, self).default_get(cr, uid, fields, context)
if context.has_key('line_order') and context['line_order']:
if len(context['line_order'][-1]) > 2 and context['line_order'][-1][2].has_key('sequence'):
if len(context['line_order'][-1]) > 2 and type(context['line_order'][-1][2]) == type({}) and context['line_order'][-1][2].has_key('sequence'):
data['sequence'] = context['line_order'][-1][2]['sequence'] + 1
if context.has_key('survey_id'):
data['survey_id'] = context['survey_id']
@@ -150,6 +153,9 @@ class survey_page(osv.osv):
'context': context
}
def copy(self, cr, uid, id, default=None,context={}):
raise osv.except_osv(_('Error !'),_('You cannot duplicate the resource!'))
survey_page()
class survey_question(osv.osv):
@@ -194,7 +200,9 @@ class survey_question(osv.osv):
('matrix_of_choices_only_multi_ans','Matrix of Choices (Multiple Answers Per Row)'),
('matrix_of_drop_down_menus','Matrix of Drop-down Menus'),
('rating_scale','Rating Scale'),('single_textbox','Single Textbox'),
('multiple_textboxes','Multiple Textboxes'),('comment','Comment/Essay Box'),
('multiple_textboxes','Multiple Textboxes'),
('multiple_textboxes_diff_type','Multiple Textboxes With Different Type'),
('comment','Comment/Essay Box'),
('numerical_textboxes','Numerical Textboxes'),('date','Date'),
('date_and_time','Date and Time'),('descriptive_text','Descriptive Text'),
('table','Table'),
@@ -238,6 +246,7 @@ class survey_question(osv.osv):
'rating_allow_one_column_require' : fields.boolean('Allow Only One Response per Column (Forced Ranking)'),
'in_visible_rating_weight':fields.boolean('Is Rating Scale Invisible?'),
'in_visible_menu_choice':fields.boolean('Is Menu Choice Invisible?'),
'in_visible_answer_type':fields.boolean('Is Answer Type Invisible?'),
'comment_column':fields.boolean('Add comment column in matrix'),
'column_name':fields.char('Column Name',size=256),
'no_of_rows' : fields.integer('No of Rows'),
@@ -256,9 +265,12 @@ class survey_question(osv.osv):
'validation_valid_err_msg' : lambda * a : 'The comment you entered is in an invalid format.',
'numeric_required_sum_err_msg' : lambda * a :'The choices need to add up to [enter sum here].',
'make_comment_field_err_msg' : lambda * a : 'Please enter a comment.',
'in_visible_answer_type' : lambda * a: 1
}
def on_change_type(self, cr, uid, ids, type, context=None):
if type in ['multiple_textboxes_diff_type']:
return {'value': {'in_visible_answer_type':False}}
if type in ['rating_scale']:
return {'value': {'in_visible_rating_weight':False,'in_visible_menu_choice':True}}
elif type in ['matrix_of_drop_down_menus']:
@@ -266,7 +278,7 @@ class survey_question(osv.osv):
elif type in ['single_textbox']:
return {'value': {'in_visible_rating_weight':True,'in_visible_menu_choice':True}}
else:
return {'value': {'in_visible_rating_weight':True,'in_visible_menu_choice':True}}
return {'value': {'in_visible_rating_weight':True,'in_visible_menu_choice':True,'in_visible_answer_type':True}}
def write(self, cr, uid, ids, vals, context=None):
questions = self.read(cr,uid, ids, ['answer_choice_ids', 'type', 'required_type','req_ans', 'minimum_req_ans', 'maximum_req_ans', 'column_heading_ids'])
@@ -331,9 +343,9 @@ class survey_question(osv.osv):
raise osv.except_osv(_('Error !'),_("Maximum Required Answer is greater than Minimum Required Answer"))
if question['type'] == 'matrix_of_drop_down_menus' and vals.has_key('column_heading_ids'):
for col in vals['column_heading_ids']:
if col[2] and col[2].has_key('menu_choice') and not col[2]['menu_choice']:
if not col[2] or not col[2].has_key('menu_choice') or not col[2]['menu_choice']:
raise osv.except_osv(_('Error !'),_("You must enter one or more menu choices in column heading"))
elif col[2] and col[2].has_key('menu_choice') and col[2]['menu_choice'].strip() == '':
elif not col[2] or not col[2].has_key('menu_choice') or col[2]['menu_choice'].strip() == '':
raise osv.except_osv(_('Error !'),_("You must enter one or more menu choices in column heading (white spaces not allowed)"))
return super(survey_question, self).write(cr, uid, ids, vals, context=context)
@@ -348,22 +360,22 @@ class survey_question(osv.osv):
raise osv.except_osv(_('Error !'),_("You must enter one or more column heading."))
if vals['type'] in ['multiple_choice_multiple_ans','matrix_of_choices_only_one_ans', 'matrix_of_choices_only_multi_ans', 'matrix_of_drop_down_menus', 'rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time']:
if vals.has_key('is_require_answer') and vals.has_key('required_type') and vals['required_type'] in ['at least', 'at most', 'exactly']:
if vals['req_ans'] > len(vals['answer_choice_ids']) or not vals['req_ans']:
if vals.has_key('answer_choice_ids') and vals['req_ans'] > len(vals['answer_choice_ids']) or not vals['req_ans']:
raise osv.except_osv(_('Error !'),_("#Required Answer you entered is greater than the number of answer. Please use a number that is smaller than %d.") % (len(vals['answer_choice_ids'])+1))
if vals.has_key('is_require_answer') and vals.has_key('required_type') and vals['required_type'] == 'a range':
minimum_ans = vals['minimum_req_ans']
maximum_ans = vals['maximum_req_ans']
if vals['minimum_req_ans'] > len(vals['answer_choice_ids']) or not vals['minimum_req_ans']:
if vals.has_key('answer_choice_ids') or vals['minimum_req_ans'] > len(vals['answer_choice_ids']) or not vals['minimum_req_ans']:
raise osv.except_osv(_('Error !'),_("Minimum Required Answer you entered is greater than the number of answer. Please use a number that is smaller than %d.") % (len(vals['answer_choice_ids'])+1))
if vals['maximum_req_ans'] > len(vals['answer_choice_ids']) or not vals['maximum_req_ans']:
if vals.has_key('answer_choice_ids') or vals['maximum_req_ans'] > len(vals['answer_choice_ids']) or not vals['maximum_req_ans']:
raise osv.except_osv(_('Error !'),_("Maximum Required Answer you entered for your maximum is greater than the number of answer. Please use a number that is smaller than %d.") % (len(vals['answer_choice_ids'])+1))
if maximum_ans <= minimum_ans:
raise osv.except_osv(_('Error !'),_("Maximum Required Answer is greater than Minimum Required Answer"))
if vals['type'] == 'matrix_of_drop_down_menus':
for col in vals['column_heading_ids']:
if not col[2]['menu_choice']:
if not col[2] or not col[2].has_key('menu_choice') or not col[2]['menu_choice']:
raise osv.except_osv(_('Error !'),_("You must enter one or more menu choices in column heading"))
elif col[2]['menu_choice'].strip() == '':
elif not col[2] or not col[2].has_key('menu_choice') or col[2]['menu_choice'].strip() == '':
raise osv.except_osv(_('Error !'),_("You must enter one or more menu choices in column heading (white spaces not allowed)"))
res = super(survey_question, self).create(cr, uid, vals, context)
return res
@@ -386,7 +398,8 @@ class survey_question(osv.osv):
def default_get(self, cr, uid, fields, context={}):
data = super(survey_question, self).default_get(cr, uid, fields, context)
if context.has_key('line_order') and context['line_order']:
if len(context['line_order'][-1]) > 2 and context['line_order'][-1][2].has_key('sequence'):
if len(context['line_order'][-1]) > 2 and type(context['line_order'][-1][2]) == type({}) and context['line_order'][-1][2].has_key('sequence'):
data['sequence'] = context['line_order'][-1][2]['sequence'] + 1
if context.has_key('page_id'):
data['page_id']= context['page_id']
@@ -450,21 +463,30 @@ class survey_answer(osv.osv):
}
return val
def _get_in_visible_answer_type(self,cr, uid, context={}):
if context.get('in_visible_answer_type',False):
return context['in_visible_answer_type']
return False
_columns = {
'question_id' : fields.many2one('survey.question', 'Question', ondelete='cascade'),
'answer' : fields.char('Answer', size=128, required=1),
'sequence' : fields.integer('Sequence'),
'response' : fields.function(_calc_response_avg, method=True, string="#Response", multi='sums'),
'average' : fields.function(_calc_response_avg, method=True, string="#Avg", multi='sums'),
'type' : fields.selection([('char','Character'),('date','Date'),('datetime','Date & Time'),('integer','Integer'),('float','Float')], "Type of Answer",required=1),
'in_visible_answer_type':fields.boolean('Is Answer Type Invisible??')
}
_defaults = {
'sequence' : lambda * a: 1
'sequence' : lambda * a: 1,
'type' : lambda * a: 'char',
'in_visible_answer_type':_get_in_visible_answer_type,
}
def default_get(self, cr, uid, fields, context={}):
data = super(survey_answer, self).default_get(cr, uid, fields, context)
if context.has_key('line_order') and context['line_order']:
if len(context['line_order'][-1]) > 2 and context['line_order'][-1][2].has_key('sequence'):
if len(context['line_order'][-1]) > 2 and type(context['line_order'][-1][2]) == type({}) and context['line_order'][-1][2].has_key('sequence'):
data['sequence'] = context['line_order'][-1][2]['sequence'] + 1
return data
@@ -479,18 +501,13 @@ class survey_response(osv.osv):
'user_id' : fields.many2one('res.users', 'User'),
'response_type' : fields.selection([('manually', 'Manually'), ('link', 'Link')], 'Response Type', required=1),
'question_ids' : fields.one2many('survey.response.line', 'response_id', 'Response Answer'),
'state' : fields.selection([('done', 'Completed '),('skip', 'Skiped')], 'Status', readonly=True),
'state' : fields.selection([('done', 'Finished '),('skip', 'Not Finished')], 'Status', readonly=True),
}
_defaults = {
'state' : lambda * a: "skip",
}
def response_done(self, cr, uid, ids, arg):
self.write(cr, uid, ids, { 'state' : 'done' })
return True
def response_skip(self, cr, uid, ids, arg):
self.write(cr, uid, ids, { 'state' : 'skip' })
return True
def copy(self, cr, uid, id, default=None,context={}):
raise osv.except_osv(_('Error !'),_('You cannot duplicate the resource!'))
survey_response()
@@ -502,7 +519,7 @@ class survey_response_line(osv.osv):
'response_id' : fields.many2one('survey.response', 'Response', ondelete='cascade'),
'date_create' : fields.datetime('Create Date', required=1),
'state' : fields.selection([('draft', 'Draft'), ('done', 'Answered'),('skip', 'Skiped')], 'Status', readonly=True),
'question_id' : fields.many2one('survey.question', 'Question', ondelete='cascade'),
'question_id' : fields.many2one('survey.question', 'Question'),
'page_id' : fields.related('question_id', 'page_id', type='many2one', relation='survey.page', string='Page'),
'response_answer_ids' : fields.one2many('survey.response.answer', 'response_id', 'Response Answer'),
'response_table_ids' : fields.one2many('survey.tbl.column.heading', 'response_table_id', 'Response Answer'),
@@ -532,7 +549,7 @@ class survey_tbl_column_heading(osv.osv):
_order = 'name'
_columns = {
'name' : fields.integer('Row Number'),
'column_id' : fields.many2one('survey.question.column.heading', 'Column', ondelete='cascade'),
'column_id' : fields.many2one('survey.question.column.heading', 'Column'),
'value' : fields.char('Value', size = 255),
'response_table_id' : fields.many2one('survey.response.line', 'Response', ondelete='cascade'),
}
@@ -545,7 +562,8 @@ class survey_response_answer(osv.osv):
_rec_name = 'response_id'
_columns = {
'response_id' : fields.many2one('survey.response.line', 'Response', ondelete='cascade'),
'answer_id' : fields.many2one('survey.answer', 'Answer', required=1, ondelete='cascade'),
'answer_id' : fields.many2one('survey.answer', 'Answer', required=1),
'column_id' : fields.many2one('survey.question.column.heading','Column'),
'answer' : fields.char('Value', size =255),
'value_choice' : fields.char('Value Choice', size =255),
'comment' : fields.text('Notes'),
@@ -734,7 +752,7 @@ class survey_question_wiz(osv.osv_memory):
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_selection_" + tools.ustr(row['id']),'string':to_xml(tools.ustr(row['answer']))})
selection = [('','')]
for col in que_col_head.read(cr, uid, que_rec['column_heading_ids']):
selection.append((col['title'], col['title']))
selection.append((str(col['id']), col['title']))
fields[tools.ustr(que) + "_selection_" + tools.ustr(row['id'])] = {'type':'selection', 'selection' : selection, 'string': "Answer"}
if que_rec['comment_column']:
fields[tools.ustr(que) + "_commentcolumn_"+tools.ustr(row['id']) + "_field"] = {'type':'char', 'size' : 255, 'string':tools.ustr(que_rec['column_name']), 'views':{}}
@@ -747,8 +765,8 @@ class survey_question_wiz(osv.osv_memory):
for row in ans_ids:
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(row['answer'])) +' :-', 'align': '0.0'})
for col in que_col_head.read(cr, uid, que_rec['column_heading_ids']):
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['title']), 'nolabel':"1"})
fields[tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['title'])] = {'type':'boolean', 'string': col['title']}
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['id']), 'nolabel':"1"})
fields[tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['id'])] = {'type':'boolean', 'string': col['title']}
elif que_rec['type'] == 'matrix_of_drop_down_menus':
xml_group = etree.SubElement(xml_group, 'group', {'col': str(len(que_rec['column_heading_ids']) + 1), 'colspan': '4'})
etree.SubElement(xml_group, 'separator', {'string': '.','colspan': '1'})
@@ -761,27 +779,38 @@ class survey_question_wiz(osv.osv_memory):
if col['menu_choice']:
for item in col['menu_choice'].split('\n'):
if item and not item.strip() == '': selection.append((item ,item))
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['title']),'nolabel':'1'})
fields[tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['title'])] = {'type':'selection', 'string': col['title'], 'selection':selection}
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['id']),'nolabel':'1'})
fields[tools.ustr(que) + "_" + tools.ustr(row['id']) + "_" + tools.ustr(col['id'])] = {'type':'selection', 'string': col['title'], 'selection':selection}
elif que_rec['type'] == 'multiple_textboxes':
xml_group = etree.SubElement(xml_group, 'group', {'col': '1', 'colspan': '4'})
xml_group = etree.SubElement(xml_group, 'group', {'col': '4', 'colspan': '4'})
type = "char"
if que_rec['is_validation_require']:
if que_rec['validation_type'] in ['must_be_whole_number']:
type = "integer"
elif que_rec['validation_type'] in ['must_be_decimal_number']:
type = "float"
elif que_rec['validation_type'] in ['must_be_date']:
type = "date"
for ans in ans_ids:
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"})
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"] = {'type':'char', 'size':255, 'string':ans['answer']}
etree.SubElement(xml_group, 'field', {'width':"300",'colspan': '1','name': tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"})
if type == "char" :
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"] = {'type':'char', 'size':255, 'string':ans['answer']}
else:
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"] = {'type': str(type), 'string':ans['answer']}
elif que_rec['type'] == 'numerical_textboxes':
xml_group = etree.SubElement(xml_group, 'group', {'col': '2', 'colspan': '2'})
xml_group = etree.SubElement(xml_group, 'group', {'col': '4', 'colspan': '4'})
for ans in ans_ids:
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_numeric"})
etree.SubElement(xml_group, 'field', {'width':"300",'colspan': '1','name': tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_numeric"})
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_numeric"] = {'type':'integer', 'string':ans['answer']}
elif que_rec['type'] == 'date':
xml_group = etree.SubElement(xml_group, 'group', {'col': '2', 'colspan': '2'})
xml_group = etree.SubElement(xml_group, 'group', {'col': '4', 'colspan': '4'})
for ans in ans_ids:
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(ans['id'])})
etree.SubElement(xml_group, 'field', {'width':"300",'colspan': '1','name': tools.ustr(que) + "_" + tools.ustr(ans['id'])})
fields[tools.ustr(que) + "_" + tools.ustr(ans['id'])] = {'type':'date', 'string':ans['answer']}
elif que_rec['type'] == 'date_and_time':
xml_group = etree.SubElement(xml_group, 'group', {'col': '2', 'colspan': '2'})
xml_group = etree.SubElement(xml_group, 'group', {'col': '4', 'colspan': '4'})
for ans in ans_ids:
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_" + tools.ustr(ans['id'])})
etree.SubElement(xml_group, 'field', {'width':"300",'colspan': '1','name': tools.ustr(que) + "_" + tools.ustr(ans['id'])})
fields[tools.ustr(que) + "_" + tools.ustr(ans['id'])] = {'type':'datetime', 'string':ans['answer']}
elif que_rec['type'] == 'descriptive_text':
for que_test in que_rec['descriptive_text'].split('\n'):
@@ -800,6 +829,15 @@ class survey_question_wiz(osv.osv_memory):
for col in que_col_head.read(cr, uid, que_rec['column_heading_ids']):
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_table_" + tools.ustr(col['id']) +"_"+ tools.ustr(row), 'nolabel':"1"})
fields[tools.ustr(que) + "_table_" + tools.ustr(col['id']) +"_"+ tools.ustr(row)] = {'type':'char','size':255,'views':{}}
elif que_rec['type'] == 'multiple_textboxes_diff_type':
xml_group = etree.SubElement(xml_group, 'group', {'col': '4', 'colspan': '4'})
for ans in ans_ids:
etree.SubElement(xml_group, 'field', {'width':"300",'colspan': '1','name': tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"})
if ans['type'] == "char" :
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"] = {'type':'char', 'size':255, 'string':ans['answer']}
else:
fields[tools.ustr(que) + "_" + tools.ustr(ans['id']) + "_multi"] = {'type': str(ans['type']), 'string':ans['answer']}
if que_rec['type'] in ['multiple_choice_only_one_ans', 'multiple_choice_multiple_ans', 'matrix_of_choices_only_one_ans', 'matrix_of_choices_only_multi_ans', 'matrix_of_drop_down_menus', 'rating_scale'] and que_rec['is_comment_require']:
if que_rec['type'] in ['multiple_choice_only_one_ans', 'multiple_choice_multiple_ans'] and que_rec['comment_field_type'] in ['char','text'] and que_rec['make_comment_field']:
etree.SubElement(xml_group, 'field', {'name': tools.ustr(que) + "_otherfield", 'colspan':"4"})
@@ -981,7 +1019,7 @@ class survey_question_wiz(osv.osv_memory):
continue
elif val1 and key1.split('_')[1] == "selection" and key1.split('_')[0] == que_id:
if len(key1.split('_')) > 2:
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[-1], 'answer' : val1})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[-1], 'column_id' : val1})
selected_value.append(val1)
response_list.append(str(ans_create_id) + "_" + str(key1.split('_')[-1]))
else:
@@ -1064,16 +1102,23 @@ class survey_question_wiz(osv.osv_memory):
sur_name_read['store_ans'][resp_id].update({key1:val1})
select_count += 1
elif val1 and que_id == key1.split('_')[0] and len(key1.split('_')) > 2 and key1.split('_')[2] == 'numeric':
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'answer' : val1})
sur_name_read['store_ans'][resp_id].update({key1:val1})
select_count += 1
numeric_sum += int(val1)
if not val1=="0":
try:
numeric_sum += int(val1)
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'answer' : val1})
sur_name_read['store_ans'][resp_id].update({key1:val1})
select_count += 1
except:
for res in resp_id_list:
sur_name_read['store_ans'].pop(res)
raise osv.except_osv(_('Error !'), _("'" + que_rec['question'] + "' \nPlease enter an integer value " ))
elif val1 and que_id == key1.split('_')[0] and len(key1.split('_')) == 3:
if type(val1) == type('') or type(val1) == type(u''):
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'answer' : key1.split('_')[2], 'value_choice' : val1})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'column_id' : key1.split('_')[2], 'value_choice' : val1})
sur_name_read['store_ans'][resp_id].update({key1:val1})
else:
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'answer' : key1.split('_')[2]})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':resp_id, 'answer_id':key1.split('_')[1], 'column_id' : key1.split('_')[2]})
sur_name_read['store_ans'][resp_id].update({key1:True})
matrix_list.append(key1.split('_')[0] + '_' + key1.split('_')[1])
select_count += 1
@@ -1102,7 +1147,7 @@ class survey_question_wiz(osv.osv_memory):
for res in resp_id_list:
sur_name_read['store_ans'].pop(res)
raise osv.except_osv(_('Error re !'), _("'" + que_rec['question'] + "' " + tools.ustr(que_rec['numeric_required_sum_err_msg'])))
if que_rec['type'] in ['multiple_choice_multiple_ans','matrix_of_choices_only_one_ans','matrix_of_choices_only_multi_ans','matrix_of_drop_down_menus','rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time'] and que_rec['is_require_answer']:
if que_rec['type'] in ['multiple_textboxes_diff_type', 'multiple_choice_multiple_ans','matrix_of_choices_only_one_ans','matrix_of_choices_only_multi_ans','matrix_of_drop_down_menus','rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time'] and que_rec['is_require_answer']:
if matrix_list:
if (que_rec['required_type'] == 'all' and len(list(set(matrix_list))) < len(que_rec['answer_choice_ids'])) or \
(que_rec['required_type'] == 'at least' and len(list(set(matrix_list))) < que_rec['req_ans']) or \
@@ -1155,7 +1200,7 @@ class survey_question_wiz(osv.osv_memory):
continue
elif val and key.split('_')[1] == "selection":
if len(key.split('_')) > 2:
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':key.split('_')[-1], 'answer' : val})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':key.split('_')[-1], 'column_id' : val})
selected_value.append(val)
response_list.append(str(ans_create_id) + "_" + str(key.split('_')[-1]))
else:
@@ -1235,18 +1280,23 @@ class survey_question_wiz(osv.osv_memory):
sur_name_read['store_ans'][update].update({key:val})
select_count += 1
elif val and len(key.split('_')) > 2 and key.split('_')[2] == 'numeric':
resp_obj.write(cr, uid, update, {'state': 'done'})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'answer' : val})
sur_name_read['store_ans'][update].update({key:val})
select_count += 1
numeric_sum += int(val)
if not val=="0":
try:
numeric_sum += int(val)
resp_obj.write(cr, uid, update, {'state': 'done'})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'answer' : val})
sur_name_read['store_ans'][update].update({key:val})
select_count += 1
except:
raise osv.except_osv(_('Error !'), _("'" + que_rec['question'] + "' \n Please enter an integer value " ))
elif val and len(key.split('_')) == 3:
resp_obj.write(cr, uid, update, {'state': 'done'})
if type(val) == type('') or type(val) == type(u''):
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'answer' : ans_id_len[2], 'value_choice' : val})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'column_id' : ans_id_len[2], 'value_choice' : val})
sur_name_read['store_ans'][update].update({key:val})
else:
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'answer' : ans_id_len[2]})
ans_create_id = res_ans_obj.create(cr, uid, {'response_id':update, 'answer_id':ans_id_len[1], 'column_id' : ans_id_len[2]})
sur_name_read['store_ans'][update].update({key:True})
matrix_list.append(key.split('_')[0] + '_' + key.split('_')[1])
select_count += 1
@@ -1270,7 +1320,7 @@ class survey_question_wiz(osv.osv_memory):
raise osv.except_osv(_('Error re !'), _("'" + que_rec['question'] + "' " + tools.ustr(que_rec['numeric_required_sum_err_msg'])))
if not select_count:
resp_obj.write(cr, uid, update, {'state': 'skip'})
if que_rec['type'] in ['multiple_choice_multiple_ans','matrix_of_choices_only_one_ans','matrix_of_choices_only_multi_ans','matrix_of_drop_down_menus','rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time'] and que_rec['is_require_answer']:
if que_rec['type'] in ['multiple_textboxes_diff_type','multiple_choice_multiple_ans','matrix_of_choices_only_one_ans','matrix_of_choices_only_multi_ans','matrix_of_drop_down_menus','rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time'] and que_rec['is_require_answer']:
if matrix_list:
if (que_rec['required_type'] == 'all' and len(list(set(matrix_list))) < len(que_rec['answer_choice_ids'])) or \
(que_rec['required_type'] == 'at least' and len(list(set(matrix_list))) < que_rec['req_ans']) or \
File diff suppressed because it is too large Load Diff
+53 -48
View File
@@ -47,12 +47,13 @@
<field name="type" on_change="on_change_type(type)"/>
<field name="in_visible_rating_weight" invisible="1"/>
<field name="in_visible_menu_choice" invisible="1"/>
<field name="in_visible_answer_type" invisible="1"/>
<notebook colspan="4">
<page string="Options">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<group attrs="{'invisible':[('type','!=','multiple_textboxes_diff_type'),('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<separator string="Answer" colspan="4"/>
<group colspan="4" attrs="{'invisible':[('type','=','table')]}">
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}"/>
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}" default_get="{'in_visible_answer_type': in_visible_answer_type}"/>
</group>
<group colspan="4" attrs="{'invisible':[('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','table')]}">
<field name="column_heading_ids" colspan="4" nolabel="1" default_get="{'in_visible_rating_weight':in_visible_rating_weight,'in_visible_menu_choice':in_visible_menu_choice}"/>
@@ -93,16 +94,15 @@
<field name="comment_valid_err_msg" nolabel="1" colspan="4"/>
</group>
</group>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','single_textbox'), ('type','!=','multiple_textboxes')]}">
<separator string="Validation" colspan="4"/>
<group colspan="4">
@@ -129,12 +129,12 @@
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment')]}">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment'),('type','!=','multiple_textboxes_diff_type')]}">
<separator string="Required Answer" colspan="4"/>
<newline/>
<field name="is_require_answer"/>
<group col="6" colspan="4" attrs="{'invisible':[('is_require_answer','=',False)]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time')]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','multiple_textboxes_diff_type')]}">
<field name="required_type"/>
<group colspan="2" attrs="{'invisible':[('required_type','!=','at least'),('required_type','!=','at most'),('required_type','!=','exactly')]}">
<field name="req_ans" />
@@ -306,12 +306,13 @@
<field name="type" on_change="on_change_type(type)"/>
<field name="in_visible_rating_weight" invisible="1"/>
<field name="in_visible_menu_choice" invisible="1"/>
<notebook colspan="4">
<field name="in_visible_answer_type" invisible="1"/>
<notebook colspan="4">
<page string="Options">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<group attrs="{'invisible':[('type','!=','multiple_textboxes_diff_type'),('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<separator string="Answer" colspan="4"/>
<group colspan="4" attrs="{'invisible':[('type','=','table')]}">
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}"/>
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}" default_get="{'in_visible_answer_type': in_visible_answer_type}"/>
</group>
<group colspan="4" attrs="{'invisible':[('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','table')]}">
<field name="column_heading_ids" colspan="4" nolabel="1" default_get="{'in_visible_rating_weight':in_visible_rating_weight,'in_visible_menu_choice':in_visible_menu_choice}"/>
@@ -352,16 +353,15 @@
<field name="comment_valid_err_msg" nolabel="1" colspan="4"/>
</group>
</group>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','single_textbox'), ('type','!=','multiple_textboxes')]}">
<separator string="Validation" colspan="4"/>
<group colspan="4">
@@ -388,12 +388,12 @@
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment')]}">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment'),('type','!=','multiple_textboxes_diff_type')]}">
<separator string="Required Answer" colspan="4"/>
<newline/>
<field name="is_require_answer"/>
<group col="6" colspan="4" attrs="{'invisible':[('is_require_answer','=',False)]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time')]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','multiple_textboxes_diff_type')]}">
<field name="required_type"/>
<group colspan="2" attrs="{'invisible':[('required_type','!=','at least'),('required_type','!=','at most'),('required_type','!=','exactly')]}">
<field name="req_ans" />
@@ -427,6 +427,7 @@
</group>
</page>
</notebook>
</form>
<tree string="Survey Question">
<field name="sequence" string="Seq"/>
@@ -500,12 +501,13 @@
<field name="type" on_change="on_change_type(type)"/>
<field name="in_visible_rating_weight" invisible="1"/>
<field name="in_visible_menu_choice" invisible="1"/>
<field name="in_visible_answer_type" invisible="1"/>
<notebook colspan="4">
<page string="Options">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<group attrs="{'invisible':[('type','!=','multiple_textboxes_diff_type'),('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<separator string="Answer" colspan="4"/>
<group colspan="4" attrs="{'invisible':[('type','=','table')]}">
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}"/>
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}" default_get="{'in_visible_answer_type': in_visible_answer_type}"/>
</group>
<group colspan="4" attrs="{'invisible':[('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','table')]}">
<field name="column_heading_ids" colspan="4" nolabel="1" default_get="{'in_visible_rating_weight':in_visible_rating_weight,'in_visible_menu_choice':in_visible_menu_choice}"/>
@@ -546,16 +548,15 @@
<field name="comment_valid_err_msg" nolabel="1" colspan="4"/>
</group>
</group>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','single_textbox'), ('type','!=','multiple_textboxes')]}">
<separator string="Validation" colspan="4"/>
<group colspan="4">
@@ -582,12 +583,12 @@
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment')]}">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment'),('type','!=','multiple_textboxes_diff_type')]}">
<separator string="Required Answer" colspan="4"/>
<newline/>
<field name="is_require_answer"/>
<group col="6" colspan="4" attrs="{'invisible':[('is_require_answer','=',False)]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time')]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','multiple_textboxes_diff_type')]}">
<field name="required_type"/>
<group colspan="2" attrs="{'invisible':[('required_type','!=','at least'),('required_type','!=','at most'),('required_type','!=','exactly')]}">
<field name="req_ans" />
@@ -665,12 +666,13 @@
<field name="type" on_change="on_change_type(type)"/>
<field name="in_visible_rating_weight" invisible="1"/>
<field name="in_visible_menu_choice" invisible="1"/>
<field name="in_visible_answer_type" invisible="1"/>
<notebook colspan="4">
<page string="Options">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<group attrs="{'invisible':[('type','!=','multiple_textboxes_diff_type'),('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','table')]}">
<separator string="Answer" colspan="4"/>
<group colspan="4" attrs="{'invisible':[('type','=','table')]}">
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}"/>
<field name="answer_choice_ids" nolabel="1" colspan="4" context="{'line_order': answer_choice_ids}" default_get="{'in_visible_answer_type': in_visible_answer_type}"/>
</group>
<group colspan="4" attrs="{'invisible':[('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','table')]}">
<field name="column_heading_ids" colspan="4" nolabel="1" default_get="{'in_visible_rating_weight':in_visible_rating_weight,'in_visible_menu_choice':in_visible_menu_choice}"/>
@@ -711,7 +713,7 @@
<field name="comment_valid_err_msg" nolabel="1" colspan="4"/>
</group>
</group>
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale')]}">
<group attrs="{'invisible':[('type','!=','matrix_of_choices_only_one_ans'),('type','!=','rating_scale')]}">
<field name="comment_column"/>
<group colspan="2" attrs="{'invisible':[('comment_column','!=',True)]}">
<field name="column_name" colspan="2"/>
@@ -746,12 +748,12 @@
</group>
</group>
<newline/>
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment')]}">
<group attrs="{'invisible':[('type','!=','multiple_choice_only_one_ans'), ('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','single_textbox'),('type','!=','comment'),('type','!=','multiple_textboxes_diff_type')]}">
<separator string="Required Answer" colspan="4"/>
<newline/>
<field name="is_require_answer"/>
<group col="6" colspan="4" attrs="{'invisible':[('is_require_answer','=',False)]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time')]}">
<group colspan="4" attrs="{'invisible':[('type','!=','multiple_choice_multiple_ans'),('type','!=','matrix_of_choices_only_one_ans'),('type','!=','matrix_of_choices_only_multi_ans'),('type','!=','matrix_of_drop_down_menus'),('type','!=','rating_scale'),('type','!=','multiple_textboxes'),('type','!=','numerical_textboxes'),('type','!=','date'),('type','!=','date_and_time'),('type','!=','multiple_textboxes_diff_type')]}">
<field name="required_type"/>
<group colspan="2" attrs="{'invisible':[('required_type','!=','at least'),('required_type','!=','at most'),('required_type','!=','exactly')]}">
<field name="req_ans" />
@@ -805,6 +807,10 @@
<form string="Survey Answer">
<field name="answer" colspan="4" select="1"/>
<field name="sequence"/>
<field name="in_visible_answer_type" invisible="1"/>
<group colspan="4" attrs="{'invisible':[('in_visible_answer_type','=',True)]}">
<field name="type"/>
</group>
</form>
</field>
</record>
@@ -815,7 +821,7 @@
<field name="model">survey.answer</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree editable="bottom" string="Survey Answer">
<tree editable="top" string="Survey Answer">
<field name="sequence" string="Seq"/>
<field name="answer" select="1"/>
</tree>
@@ -903,13 +909,7 @@
<field name="user_id" select="1"/>
<field name="response_type" select="1"/>
<field name="question_ids" nolabel="1" colspan="4" />
<group col="5" colspan="4">
<field name="state"/>
<button name="response_done" string="Done"
states="skip" type="object" icon="gtk-go-forward"/>
<button name="response_skip" string="Skip"
states="done" type="object" icon="gtk-close"/>
</group>
<field name="state" select="1"/>
</form>
</field>
</record>
@@ -924,6 +924,7 @@
<field name="date_create" select="1"/>
<field name="user_id" select="1"/>
<field name="response_type" select="1"/>
<field name="state" select="1"/>
</tree>
</field>
</record>
@@ -944,7 +945,10 @@
</group>
<field name="value_choice"/>
<label string="(Use Only Question Type is matrix_of_drop_down_menus)" align="0.0"/>
<field name="comment_field"/>
<group colspan="4" col="4">
<field name="comment_field"/>
<field name="column_id"/>
</group>
</form>
</field>
</record>
@@ -958,6 +962,7 @@
<field name="answer_id"/>
<field name="answer" />
<field name="value_choice" />
<field name="column_id"/>
<field name="comment_field"/>
</tree>
</field>
+1 -1
View File
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-03 04:47+0000\n"
"X-Launchpad-Export-Date: 2010-02-04 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: thunderbird