diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 0825aad8831..18484a7d1c8 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -1,7 +1,6 @@
-
@@ -434,6 +433,7 @@
Most of customer invoices are automatically generated in draft mode by OpenERP flows, following a purchase order for instance. Review, confirm or cancel, pay or refund your customers' invoices here. A manual invoice can be created here.
+
tree
@@ -446,6 +446,7 @@
+
diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml
index bc581955571..b5f234aa7cb 100644
--- a/addons/base_calendar/base_calendar_view.xml
+++ b/addons/base_calendar/base_calendar_view.xml
@@ -158,7 +158,7 @@
+ parent="base.menu_base_config" sequence="6" groups="base.group_system,base.group_sale_manager" />
diff --git a/addons/base_calendar/security/ir.model.access.csv b/addons/base_calendar/security/ir.model.access.csv
index aa269e9ff18..0ae628fb720 100644
--- a/addons/base_calendar/security/ir.model.access.csv
+++ b/addons/base_calendar/security/ir.model.access.csv
@@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_calendar_attendee","calendar.attendee","model_calendar_attendee","base.group_user",1,1,1,1
+"access_calendar_attendee","calendar.attendee","model_calendar_attendee","base.group_user",1,1,1,0
"access_calendar_alarm","calendar.alarm","model_calendar_alarm","base.group_user",1,1,1,1
"access_res_alarm","res.alarm","model_res_alarm","base.group_user",1,1,1,1
"access_calendar_todo","calendar.todo","model_calendar_todo","base.group_user",1,1,1,1
diff --git a/addons/base_calendar/wizard/base_calendar_invite_attendee.py b/addons/base_calendar/wizard/base_calendar_invite_attendee.py
index 47f5681addf..a18388f5b3c 100644
--- a/addons/base_calendar/wizard/base_calendar_invite_attendee.py
+++ b/addons/base_calendar/wizard/base_calendar_invite_attendee.py
@@ -36,11 +36,11 @@ class base_calendar_invite_attendee(osv.osv_memory):
_columns = {
'type': fields.selection([('internal', 'Internal User'), \
('external', 'External Email'), \
- ('partner', 'Partner Contacts')], 'Type', required=True),
+ ('partner', 'Partner Contacts')], 'Type', required=True, help="Select whom you want to Invite"),
'user_ids': fields.many2many('res.users', 'invite_user_rel',
'invite_id', 'user_id', 'Users'),
'partner_id': fields.many2one('res.partner', 'Partner'),
- 'email': fields.char('Email', size=124),
+ 'email': fields.char('Email', size=124, help="Provide external email address who will receive this invitation."),
'contact_ids': fields.many2many('res.partner.address', 'invite_contact_rel',
'invite_id', 'contact_id', 'Contacts'),
'send_mail': fields.boolean('Send mail?', help='Check this if you want to \
diff --git a/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml b/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml
index 494787bbf97..ef7193e05fe 100644
--- a/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml
+++ b/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml
@@ -10,42 +10,31 @@
form
diff --git a/addons/crm/board_crm_statistical_view.xml b/addons/crm/board_crm_statistical_view.xml
index 01aa479479f..bd952d9e9ba 100644
--- a/addons/crm/board_crm_statistical_view.xml
+++ b/addons/crm/board_crm_statistical_view.xml
@@ -119,7 +119,8 @@
action="open_board_statistical_dash"
sequence="0"
id="menu_board_statistics_dash"
- icon="terp-graph"/>
+ icon="terp-graph"
+ groups="base.group_sale_manager"/>
diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml
index 1f4853b4446..72368d1413a 100644
--- a/addons/crm/board_crm_view.xml
+++ b/addons/crm/board_crm_view.xml
@@ -157,6 +157,8 @@
name="Sales Dashboard" parent="board.menu_dasboard"
action="open_board_crm"
sequence="1"
- id="menu_board_crm" icon="terp-graph"/>
+ id="menu_board_crm" icon="terp-graph"
+ groups="base.group_sale_salesman"/>
+
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 71415038a58..d6194254c65 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -538,7 +538,7 @@ class crm_case_section(osv.osv):
'resource_calendar_id': fields.many2one('resource.calendar', "Resource's Calendar"),
'note': fields.text('Description'),
'working_hours': fields.float('Working Hours', digits=(16,2 )),
- 'stage_ids':fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'),
+ 'stage_ids': fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'),
}
_defaults = {
@@ -628,6 +628,14 @@ class crm_case_categ(osv.osv):
crm_case_categ()
+class crm_case_stage(osv.osv):
+ _inherit = "crm.case.stage"
+ _columns = {
+ 'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', 'Sections'),
+ }
+crm_case_stage()
+
+
class crm_case_resource_type(osv.osv):
""" Resource Type of case """
_name = "crm.case.resource.type"
diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml
index 9b7b1da2031..0051ac7b44a 100644
--- a/addons/crm/crm_lead_demo.xml
+++ b/addons/crm/crm_lead_demo.xml
@@ -128,13 +128,10 @@
-
-
-
@@ -145,13 +142,9 @@
-
-
-
-
@@ -162,8 +155,6 @@
-
-
@@ -177,12 +168,9 @@
-
-
-
@@ -193,12 +181,9 @@
-
-
-
diff --git a/addons/crm/crm_lead_menu.xml b/addons/crm/crm_lead_menu.xml
index b98d26a0e6e..b26dcc29f41 100644
--- a/addons/crm/crm_lead_menu.xml
+++ b/addons/crm/crm_lead_menu.xml
@@ -31,7 +31,7 @@
parent="base.menu_base_partner" sequence="1" />
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 722a17d2931..99ebcf63592 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -54,7 +54,7 @@
-
+
-
+
-
-
+
+
+
+
diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py
index 9cef18594a0..5f469da1574 100644
--- a/addons/crm/report/crm_lead_report.py
+++ b/addons/crm/report/crm_lead_report.py
@@ -37,41 +37,6 @@ class crm_lead_report(osv.osv):
_auto = False
_description = "CRM Lead Report"
- def _get_data(self, cr, uid, ids, field_name, arg, context={}):
-
- """ @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case and section Data’s IDs
- @param context: A standard dictionary for contextual values """
-
- res = {}
- avg_ans = 0.0
-
- for case in self.browse(cr, uid, ids, context):
- if field_name != 'avg_answers':
- state = field_name[5:]
- cr.execute("select count(id) from crm_lead where \
- section_id =%s and state='%s'"%(case.section_id.id, state))
- state_cases = cr.fetchone()[0]
- perc_state = (state_cases / float(case.nbr)) * 100
-
- res[case.id] = perc_state
- else:
- model_name = self._name.split('report.')
- if len(model_name) < 2:
- res[case.id] = 0.0
- else:
- model_name = model_name[1]
-
- cr.execute("select count(id) from crm_case_log l, ir_model m \
- where l.model_id=m.id and m.model = '%s'" , model_name)
- logs = cr.fetchone()[0]
-
- avg_ans = logs / case.nbr
- res[case.id] = avg_ans
-
- return res
-
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
@@ -80,9 +45,6 @@ class crm_lead_report(osv.osv):
'channel_id':fields.many2one('res.partner.canal', 'Channel', readonly=True),
'type_id':fields.many2one('crm.case.resource.type', 'Campaign', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@@ -147,9 +109,6 @@ class crm_lead_report(osv.osv):
c.planned_revenue,
c.planned_revenue*(c.probability/100) as probable_revenue,
1 as nbr,
- 0 as avg_answers,
- 0.0 as perc_done,
- 0.0 as perc_cancel,
(SELECT count(id) FROM mailgate_message WHERE model='crm.lead' AND res_id=c.id AND history=True) AS email,
date_trunc('day',c.create_date) as create_date,
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index c37c7bcec57..da0aa1cffba 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -29,7 +29,6 @@
-
@@ -75,10 +74,10 @@
domain="[('create_date','<=', time.strftime('%%Y-%%m-%%d')),('create_date','>=',time.strftime('%%Y-01-01'))]"
help="Leads/Opportunities created in current year"/>
@@ -99,40 +98,40 @@
-
+ help="My Sales Team(s)" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
@@ -154,14 +153,14 @@
domain="[]" context="{'group_by':'month'}" help="Month in which lead/opportunity is created"/>
-
-
+
+
-
+
crm.lead.report.tree
crm.lead.report
tree
@@ -246,11 +245,11 @@
+ parent="base.next_id_64" action="action_report_crm_lead" sequence="3"/>
+ parent="base.next_id_64" action="action_report_crm_opportunity" sequence="4"/>
diff --git a/addons/crm/report/crm_phonecall_report.py b/addons/crm/report/crm_phonecall_report.py
index 80d973ee0e8..6288e5acc01 100644
--- a/addons/crm/report/crm_phonecall_report.py
+++ b/addons/crm/report/crm_phonecall_report.py
@@ -39,41 +39,6 @@ class crm_phonecall_report(osv.osv):
_description = "Phone calls by user and section"
_auto = False
- def _get_data(self, cr, uid, ids, field_name, arg, context={}):
-
- """ @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case and section Data’s IDs
- @param context: A standard dictionary for contextual values """
-
- res = {}
- avg_ans = 0.0
-
- for case in self.browse(cr, uid, ids, context):
- if field_name != 'avg_answers':
- state = field_name[5:]
- cr.execute("select count(*) from crm_lead where \
- section_id =%s and state='%s'"%(case.section_id.id, state))
- state_cases = cr.fetchone()[0]
- perc_state = (state_cases / float(case.nbr)) * 100
-
- res[case.id] = perc_state
- else:
- model_name = self._name.split('report.')
- if len(model_name) < 2:
- res[case.id] = 0.0
- else:
- model_name = model_name[1]
-
- cr.execute("select count(*) from crm_case_log l, ir_model m \
- where l.model_id=m.id and m.model = '%s'" , model_name)
- logs = cr.fetchone()[0]
-
- avg_ans = logs / case.nbr
- res[case.id] = avg_ans
-
- return res
-
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
@@ -81,9 +46,6 @@ class crm_phonecall_report(osv.osv):
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@@ -130,9 +92,6 @@ class crm_phonecall_report(osv.osv):
c.company_id,
c.priority,
1 as nbr,
- 0 as avg_answers,
- 0.0 as perc_done,
- 0.0 as perc_cancel,
date_trunc('day',c.create_date) as create_date,
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
diff --git a/addons/crm/report/crm_phonecall_report_view.xml b/addons/crm/report/crm_phonecall_report_view.xml
index 0f5452ad736..9100c75a7ae 100644
--- a/addons/crm/report/crm_phonecall_report_view.xml
+++ b/addons/crm/report/crm_phonecall_report_view.xml
@@ -9,7 +9,7 @@
crm.phonecall.report
tree
-
+
@@ -41,9 +41,7 @@
-
-
-
+
@@ -79,14 +77,13 @@
help="Phone calls made in current year"/>
-
-
+
-
+
-
-
-
+ context="{'invisible_section': False}">
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
@@ -168,7 +162,7 @@
Get an anlysis of Phone Calls number and delay to close, stage, user suits to different groups for a global or a fine grained analysis.
-
+
tree
diff --git a/addons/crm/res_partner_view.xml b/addons/crm/res_partner_view.xml
index 75189fb70f5..15390b23a76 100644
--- a/addons/crm/res_partner_view.xml
+++ b/addons/crm/res_partner_view.xml
@@ -11,7 +11,7 @@
-
+
@@ -44,7 +44,7 @@
icon="gtk-go-up" />
-
+
@@ -52,7 +52,7 @@
-
+
diff --git a/addons/crm/security/crm_security.xml b/addons/crm/security/crm_security.xml
index 5f3863882f5..78018a4031b 100644
--- a/addons/crm/security/crm_security.xml
+++ b/addons/crm/security/crm_security.xml
@@ -10,20 +10,30 @@
Sales / User
-
- Sales / User / See Personal Leads
+
+ Sales / User - See All Leads
Personal Leads
['|',('user_id','=',user.id),('user_id','=',False)]
-
+
+
+
+ All Leads
+
+ [(1,'=',1)]
+
+
+
diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv
index e67a15b3e31..5f695b5e5c1 100644
--- a/addons/crm/security/ir.model.access.csv
+++ b/addons/crm/security/ir.model.access.csv
@@ -5,14 +5,14 @@
"access_crm_segmentation_line","crm.segmentation.line","model_crm_segmentation_line","base.group_sale_manager",1,1,1,1
"access_crm_case_section","crm.case.section","model_crm_case_section","base.group_sale_salesman",1,1,1,0
"access_crm_case_categ","crm.case.categ","model_crm_case_categ","base.group_sale_salesman",1,1,1,0
-"access_crm_meeting_manager","crm.meeting.manager","model_crm_meeting","base.group_sale_manager",1,0,0,0
-"access_crm_lead_manager","crm.lead.manager","model_crm_lead","base.group_sale_manager",1,0,0,0
+"access_crm_meeting_manager","crm.meeting.manager","model_crm_meeting","base.group_sale_manager",1,1,1,1
+"access_crm_lead_manager","crm.lead.manager","model_crm_lead","base.group_sale_manager",1,1,1,1
"access_crm_phonecall_system","crm.phonecall.system","model_crm_phonecall","base.group_system",1,0,0,0
-"access_crm_phonecall_manager","crm.phonecall.manager","model_crm_phonecall","base.group_sale_manager",1,0,0,0
+"access_crm_phonecall_manager","crm.phonecall.manager","model_crm_phonecall","base.group_sale_manager",1,1,1,1
"access_crm_case_categ","crm.case.categ","model_crm_case_categ","base.group_user",1,0,0,0
-"access_crm_meeting","crm.meeting","model_crm_meeting","base.group_sale_salesman",1,0,0,0
+"access_crm_meeting","crm.meeting","model_crm_meeting","base.group_sale_salesman",1,1,1,0
"access_crm_meeting_all","crm.meeting_allll","model_crm_meeting","base.group_user",1,0,0,0
-"access_crm_lead","crm.lead","model_crm_lead","base.group_sale_salesman",1,1,1,1
+"access_crm_lead","crm.lead","model_crm_lead","base.group_sale_salesman",1,1,1,0
"access_crm_lead.all","crm.lead.all","model_crm_lead","base.group_user",1,0,0,0
"access_crm_phonecall","crm.phonecall","model_crm_phonecall","base.group_sale_salesman",1,1,1,0
"access_crm_phonecall.all","crm.phonecall.all","model_crm_phonecall","base.group_user",1,0,0,0
@@ -41,12 +41,13 @@
"mail_gateway_mailgate_message_user","mail_gateway.mailgate.message.user","mail_gateway.model_mailgate_message","base.group_sale_salesman",1,1,1,1
"access_base_res_bank_system","base.res.bank system","base.model_res_bank","base.group_system",1,1,1,1
"access_crm_case_stage_system","crm.case.stage system","model_crm_case_stage","base.group_system",1,1,1,1
-"access_crm_case_categ_manager","crm.case.categ manager","model_crm_case_categ","base.group_sale_manager",1,1,1,0
+"access_crm_case_categ_manager","crm.case.categ manager","model_crm_case_categ","base.group_sale_manager",1,1,1,1
"access_crm_case_resource_type_system","crm.case.resource.type system","model_crm_case_resource_type","base.group_system",1,1,1,1
"access_crm_case_section_system","crm.case.section system","model_crm_case_section","base.group_system",1,1,1,1
"access_crm_lead_report_system","crm.lead.report system","model_crm_lead_report","base.group_system",1,1,1,1
"access_base_res_country_system","base.res.country system","base.model_res_country","base.group_system",1,1,1,1
"access_base_res_country_state_system","base.res.country.state system","base.model_res_country_state","base.group_system",1,1,1,1
+"access_base_action_rule_manager","base.action.rule manager","model_base_action_rule","base.group_sale_manager",1,1,1,1
"access_base_action_rule_system","base.action.rule system","model_base_action_rule","base.group_system",1,1,1,1
"access_crm_segmentation_system","crm.segmentation system","model_crm_segmentation","base.group_system",1,1,1,1
"access_crm_segmentation_line_system","crm.segmentation.line system","model_crm_segmentation_line","base.group_system",1,1,1,1
@@ -61,3 +62,4 @@
"access_calendar_attendee_system","calendar.attendee.system","model_calendar_attendee","base.group_system",1,0,0,0
"access_res_partner_bank_type_crm_user","res.partner.bank.type.crm.user","base.model_res_partner_bank_type","base.group_sale_salesman",1,0,0,0
"access_res_partner_bank_type_crm_manager","res.partner.bank.type.crm.manager","base.model_res_partner_bank_type","base.group_sale_manager",1,0,0,0
+"access_res_partner_canal_manager","res.partner.canal.manager","base.model_res_partner_canal","base.group_sale_manager",1,1,1,1
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index 8c5e13db4c1..ccf85a36422 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -157,41 +157,7 @@ class crm_lead2opportunity_partner(osv.osv_memory):
'partner_id': fields.many2one('res.partner', 'Partner'),
'action': fields.selection([('exist', 'Link to an existing partner'), ('create', 'Create a new partner'), ('no','Do not create a partner')], 'Action'),
}
-
- def default_get(self, cr, uid, fields, context=None):
- """
- This function gets default values
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param fields: List of fields for default value
- @param context: A standard dictionary for contextual values
- @return : default values of fields.
- """
- lead_obj = self.pool.get('crm.lead')
- partner_obj = self.pool.get('res.partner')
- contact_obj = self.pool.get('res.partner.address')
- partner_id = False
-
- data = context and context.get('active_ids', []) or []
- res = super(crm_lead2opportunity_partner, self).default_get(cr, uid, fields, context=context)
-
- for lead in lead_obj.browse(cr, uid, data, context=context):
- partner_ids = partner_obj.search(cr, uid, [('name', '=', lead.partner_name or lead.name)])
- if not partner_ids and lead.email_from:
- address_ids = contact_obj.search(cr, uid, [('email', '=', lead.email_from)])
- if address_ids:
- addresses = contact_obj.browse(cr, uid, address_ids)
- partner_ids = addresses and [addresses[0].partner_id.id] or False
- partner_id = partner_ids and partner_ids[0] or False
-
- if 'partner_id' in fields:
- res.update({'partner_id': partner_id})
- if 'action' in fields:
- res.update({'action': partner_id and 'exist' or 'create'})
- return res
-
def make_partner(self, cr, uid, ids, context=None):
"""
This function Makes partner based on action.
diff --git a/addons/crm/wizard/crm_lead_to_opportunity_view.xml b/addons/crm/wizard/crm_lead_to_opportunity_view.xml
index bc3c0ebbf46..6b0cca78cb3 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity_view.xml
+++ b/addons/crm/wizard/crm_lead_to_opportunity_view.xml
@@ -46,6 +46,9 @@
Preventive
@@ -44,31 +44,26 @@
Accepted as Claim
-
-
+
Fixed
-
Won't fix
-
-
+
Invalid
-
-
+
Awaiting Response
-
diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml
index 3a4b63047ea..c02bc33340d 100644
--- a/addons/crm_claim/crm_claim_menu.xml
+++ b/addons/crm_claim/crm_claim_menu.xml
@@ -3,7 +3,7 @@
diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml
index a52c5d7e93f..9839f03bd6d 100644
--- a/addons/crm_claim/crm_claim_view.xml
+++ b/addons/crm_claim/crm_claim_view.xml
@@ -107,11 +107,10 @@
-
-
-
+
+ domain="[('object_id.model', '=', 'crm.claim'), ('section_ids', '=', section_id)]" />
@@ -251,66 +250,66 @@
search
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+ domain="[]" help="Partner"
+ context="{'group_by':'partner_id'}" />
+ domain="[]" help="Responsible User"
+ context="{'group_by':'user_id'}" />
+ domain="[]" help="Sales Team"
+ context="{'group_by':'section_id'}" />
-
-
-
-
-
-
+ domain="[]" help="Claim Date"
+ context="{'group_by':'date'}" />
+
+
+
+
+
-
-
+
-
-
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ context="{'group_by':'stage_id'}" />
+ context="{'group_by':'priority'}" />
+ context="{'group_by':'type_action'}" help="Action Type"/>
-
+
-
-
+
+
@@ -188,30 +192,29 @@
Claims Analysis
crm.claim.report
form
- tree,graph
- {"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}
+ tree,graph
+ {"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}
-
-
+
tree
-
+
graph
-
+
diff --git a/addons/crm_claim/security/ir.model.access.csv b/addons/crm_claim/security/ir.model.access.csv
index d6c00551af0..e2563f7541a 100644
--- a/addons/crm_claim/security/ir.model.access.csv
+++ b/addons/crm_claim/security/ir.model.access.csv
@@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_crm_claim_manager","crm.claim.manager","model_crm_claim","base.group_sale_manager",1,0,0,0
+"access_crm_claim_manager","crm.claim.manager","model_crm_claim","base.group_sale_manager",1,1,1,1
"access_crm_claim_user","crm.claim.user","model_crm_claim","base.group_sale_salesman",1,1,1,0
"access_crm_claim_report_manager","crm.claim.report.manager","model_crm_claim_report","base.group_sale_manager",1,1,1,1
"access_crm_claim_system","crm.claim.system","model_crm_claim","base.group_system",1,0,0,0
diff --git a/addons/crm_fundraising/crm_fundraising_data.xml b/addons/crm_fundraising/crm_fundraising_data.xml
index 03613d87a7f..ef4bd9559f5 100644
--- a/addons/crm_fundraising/crm_fundraising_data.xml
+++ b/addons/crm_fundraising/crm_fundraising_data.xml
@@ -3,56 +3,52 @@
-
+
Social Rehabilitation And Rural Upliftment
-
+
-
+
Learning And Education
-
-
-
+
+
+
Healthcare
-
-
-
+
+
+
Arts And Culture
-
-
+
+
-
+
Cash
-
-
+
Cheque
-
-
+
Credit Card
-
-
+
Demand Draft
-
-
+
diff --git a/addons/crm_fundraising/crm_fundraising_menu.xml b/addons/crm_fundraising/crm_fundraising_menu.xml
index ea94e8be92a..d521bc91592 100644
--- a/addons/crm_fundraising/crm_fundraising_menu.xml
+++ b/addons/crm_fundraising/crm_fundraising_menu.xml
@@ -5,7 +5,7 @@
@@ -40,8 +40,8 @@
+ parent="base.menu_fundrising"
+ action="crm_case_category_act_fund_all1" sequence="1" />
diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml
index f38b46c0a5e..51650f8b7d5 100644
--- a/addons/crm_fundraising/crm_fundraising_view.xml
+++ b/addons/crm_fundraising/crm_fundraising_view.xml
@@ -3,8 +3,8 @@
+ groups="base.group_extended"
+ parent="base.menu_base_config" sequence="8" />
@@ -273,9 +273,9 @@
help="Unassigned" />
-
+ help="My Sales Team(s)" />
diff --git a/addons/crm_fundraising/report/crm_fundraising_report_view.xml b/addons/crm_fundraising/report/crm_fundraising_report_view.xml
index ab90f7ad0c1..957db9ec9c3 100644
--- a/addons/crm_fundraising/report/crm_fundraising_report_view.xml
+++ b/addons/crm_fundraising/report/crm_fundraising_report_view.xml
@@ -9,15 +9,15 @@
crm.fundraising.report
tree
-
-
-
-
+
+
+
+
-
+
-
-
+
+
@@ -26,7 +26,7 @@
-
+
@@ -37,11 +37,11 @@
crm.fundraising.report
form
-
diff --git a/addons/crm_fundraising/security/ir.model.access.csv b/addons/crm_fundraising/security/ir.model.access.csv
index ce7d699f36b..53d593589d4 100644
--- a/addons/crm_fundraising/security/ir.model.access.csv
+++ b/addons/crm_fundraising/security/ir.model.access.csv
@@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_crm_fundraising_manager","crm.fundraising.manager","model_crm_fundraising","base.group_sale_manager",1,0,0,0
+"access_crm_fundraising_manager","crm.fundraising.manager","model_crm_fundraising","base.group_sale_manager",1,1,1,1
"access_crm_fundraising_user","crm.fundraising.user","model_crm_fundraising","base.group_sale_salesman",1,1,1,0
"access_crm_fundraising_report_user","crm.fundraising.report.user","model_crm_fundraising_report","base.group_sale_salesman",1,0,0,0
"access_crm_fundraising_report_manager","crm.fundraising.report.manager","model_crm_fundraising_report","base.group_sale_manager",1,1,1,1
diff --git a/addons/crm_helpdesk/crm_helpdesk_menu.xml b/addons/crm_helpdesk/crm_helpdesk_menu.xml
index 867c8358c83..7bc6faf4ee0 100644
--- a/addons/crm_helpdesk/crm_helpdesk_menu.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_menu.xml
@@ -1,44 +1,45 @@
-
+
-
- Helpdesk Requests
- crm.helpdesk
- tree,calendar,form
-
- {"search_default_user_id":uid, 'search_default_section_id': section_id}
-
- Alike records and processing of claims, Helpdesk and Support is a good tool to trace your interventions. This menu is more adapted to an oral communication, which is not necessarily related to a claim. Select a customer, add notes and categorize your interventions with a channel and a priority level.
-
+
+ Helpdesk Requests
+ crm.helpdesk
+ tree,calendar,form
+
+ {"search_default_user_id":uid, 'search_default_section_id': section_id}
+
+ Alike records and processing of claims, Helpdesk and Support is a good tool to trace your interventions. This menu is more adapted to an oral communication, which is not necessarily related to a claim. Select a customer, add notes and categorize your interventions with a channel and a priority level.
+
-
-
- tree
-
-
-
+
+
+ tree
+
+
+
-
-
- calendar
-
-
-
+
+
+ calendar
+
+
+
-
-
- form
-
-
-
+
+
+ form
+
+
+
-
+
diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml
index b792097534d..9c0fe7ac254 100644
--- a/addons/crm_helpdesk/crm_helpdesk_view.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_view.xml
@@ -248,21 +248,21 @@
-
+ help="My Sales Team(s)" />
+ domain="[]" help="Partner"
+ context="{'group_by':'partner_id'}" />
+ domain="[]" help="Responsible User"
+ context="{'group_by':'user_id'}" />
+ domain="[]" help="Sales Team"
+ context="{'group_by':'section_id'}" />
@@ -270,11 +270,11 @@
context="{'group_by':'state'}" />
-
+ domain="[]" help="Request Date"
+ context="{'group_by':'date'}" />
+
diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
index 9490172e3e8..cee5d12045b 100644
--- a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
+++ b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
@@ -9,7 +9,7 @@
crm.helpdesk.report
tree
-
+
@@ -38,16 +38,16 @@
form
@@ -75,56 +75,51 @@
search
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -134,21 +129,17 @@
-
-
+ context="{'group_by':'canal_id'}" />
-
-
@@ -156,8 +147,8 @@
domain="[]" context="{'group_by':'month'}" help="Month of helpdesk requests"/>
-
-
+
+
diff --git a/addons/crm_helpdesk/security/ir.model.access.csv b/addons/crm_helpdesk/security/ir.model.access.csv
index e7c1bbb7d89..79cac379f91 100644
--- a/addons/crm_helpdesk/security/ir.model.access.csv
+++ b/addons/crm_helpdesk/security/ir.model.access.csv
@@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_crm_helpdesk_manager","crm.helpdesk.manager","model_crm_helpdesk","base.group_sale_manager",1,0,0,0
-"access_crm_helpdesk_user","crm.helpdesk.user","model_crm_helpdesk","base.group_sale_salesman",1,1,1,1
+"access_crm_helpdesk_manager","crm.helpdesk.manager","model_crm_helpdesk","base.group_sale_manager",1,1,1,1
+"access_crm_helpdesk_user","crm.helpdesk.user","model_crm_helpdesk","base.group_sale_salesman",1,1,1,0
"access_report_crm_helpdesk_manager","report.crm.helpdesk.manager","model_crm_helpdesk_report","base.group_sale_manager",1,1,1,1
"access_crm_helpdesk_system","crm.helpdesk.system","model_crm_helpdesk","base.group_system",1,0,0,0
diff --git a/addons/crm_partner_assign/partner_geo_assign.py b/addons/crm_partner_assign/partner_geo_assign.py
index 9a761740c8d..ab794cba468 100644
--- a/addons/crm_partner_assign/partner_geo_assign.py
+++ b/addons/crm_partner_assign/partner_geo_assign.py
@@ -171,7 +171,8 @@ class crm_lead(osv.osv):
AND partner_weight > 0) AS d
ORDER BY distance LIMIT 1""", (result[1],result[0]))
res = cr.dictfetchone()
- part_ids.append(res['id'])
+ if res:
+ part_ids.append(res['id'])
total = 0
toassign = []
diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml
index 2bfc5a6f200..8f102f5936d 100644
--- a/addons/document/board_document_view.xml
+++ b/addons/document/board_document_view.xml
@@ -16,9 +16,7 @@
-
+ view_mode="tree,form"/>
+ view_mode="graph,tree"
+ />
).
#
@@ -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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -29,7 +29,7 @@ from tools.translate import _
class document_directory(osv.osv):
_name = 'document.directory'
_description = 'Directory'
- _order = 'name desc'
+ _order = 'name'
_columns = {
'name': fields.char('Name', size=64, required=True, select=1),
'write_date': fields.datetime('Date Modified', readonly=True),
@@ -44,13 +44,12 @@ class document_directory(osv.osv):
'child_ids': fields.one2many('document.directory', 'parent_id', 'Children'),
'file_ids': fields.one2many('ir.attachment', 'parent_id', 'Files'),
'content_ids': fields.one2many('document.directory.content', 'directory_id', 'Virtual Files'),
- 'type': fields.selection([
+ 'type': fields.selection([
('directory','Static Directory'),
('ressource','Folders per resource'),
],
'Type', required=True, select=1,
- help="Defines directory's behaviour."),
-
+ help="Each directory can either have the type Static or be linked to another resource. A static directory, as with Operating Systems, is the classic directory that can contain a set of files. The directories linked to systems resources automatically possess sub-directories for each of resource types defined in the parent directory."),
'ressource_type_id': fields.many2one('ir.model', 'Resource model',
help="Select an object here and there will be one folder per record of that resource."),
'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'),
@@ -95,13 +94,13 @@ class document_directory(osv.osv):
return objid.browse(cr, uid, mid, context=context).res_id
except Exception:
return None
-
+
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'document.directory', context=c),
'user_id': lambda self,cr,uid,ctx: uid,
'domain': lambda self,cr,uid,ctx: '[]',
'type': lambda *args: 'directory',
- 'ressource_id': lambda *a: 0,
+ 'ressource_id': lambda *a: 0,
'storage_id': _get_def_storage,
'resource_find_all': True,
}
@@ -151,7 +150,7 @@ class document_directory(osv.osv):
_constraints = [
(_check_recursion, 'Error! You can not create recursive Directories.', ['parent_id'])
]
-
+
def __init__(self, *args, **kwargs):
super(document_directory, self).__init__(*args, **kwargs)
@@ -172,7 +171,7 @@ class document_directory(osv.osv):
"""
if not context:
context = {}
-
+
return nodes.get_node_context(cr, uid, context).get_uri(cr, uri)
def get_dir_permissions(self, cr, uid, ids ):
@@ -180,7 +179,7 @@ class document_directory(osv.osv):
"""
assert len(ids) == 1
id = ids[0]
-
+
cr.execute( "SELECT count(dg.item_id) AS needs, count(ug.uid) AS has " \
" FROM document_directory_group_rel dg " \
" LEFT OUTER JOIN res_groups_users_rel ug " \
@@ -197,7 +196,7 @@ class document_directory(osv.osv):
Return a tuple (node_dir, remaining_path)
"""
return (nodes.node_database(context=ncontext), uri)
-
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default ={}
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index 13e4cff02d4..840c8a4c9e1 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -148,6 +148,7 @@
+
@@ -276,38 +277,42 @@
-
-
- IR Attachment
+
+
+ IR Attachment0
ir.attachment
search
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ IR Attachment2
+ ir.attachment
+ search
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
ir.attachment
ir.attachment
@@ -318,6 +323,7 @@
+
@@ -332,8 +338,7 @@
ir.actions.act_window
ir.attachment
form
-
- Documents give your access to all attached documents; it's a repository of all attached documents (mails, documents attached to a project, etc.)
+ The Documents repository gives you access to all attachments, such as mails, project documents, invoices etc.
-
-
-
-
-
diff --git a/addons/document/report/document_report.py b/addons/document/report/document_report.py
index 419b37ca68e..34b61f01c01 100644
--- a/addons/document/report/document_report.py
+++ b/addons/document/report/document_report.py
@@ -34,6 +34,7 @@ class report_document_user(osv.osv):
'user_id':fields.integer('Owner', readonly=True),
'user':fields.char('User',size=64,readonly=True),
'directory': fields.char('Directory',size=64,readonly=True),
+ 'datas_fname': fields.char('File Name',size=64,readonly=True),
'create_date': fields.datetime('Date Created', readonly=True),
'change_date': fields.datetime('Modified Date', readonly=True),
'file_size': fields.integer('File Size', readonly=True),
@@ -52,6 +53,7 @@ class report_document_user(osv.osv):
u.name as user,
count(*) as nbr,
d.name as directory,
+ f.datas_fname as datas_fname,
f.create_date as create_date,
f.file_size as file_size,
min(d.type) as type,
@@ -59,11 +61,13 @@ class report_document_user(osv.osv):
FROM ir_attachment f
left join document_directory d on (f.parent_id=d.id and d.name<>'')
inner join res_users u on (f.user_id=u.id)
- group by to_char(f.create_date, 'YYYY'), to_char(f.create_date, 'MM'),d.name,f.parent_id,d.type,f.create_date,f.user_id,f.file_size,u.name,d.type,f.write_date
+ group by to_char(f.create_date, 'YYYY'), to_char(f.create_date, 'MM'),d.name,f.parent_id,d.type,f.create_date,f.user_id,f.file_size,u.name,d.type,f.write_date,f.datas_fname
)
""")
report_document_user()
+
+
class report_files_partner(osv.osv):
_name = "report.files.partner"
_description = "Files details by Partners"
@@ -86,7 +90,7 @@ class report_files_partner(osv.osv):
to_char(date_trunc('month', f.create_date),'MM') AS month,
SUM(f.file_size) AS file_size,
p.name AS partner
-
+
FROM ir_attachment f
LEFT JOIN res_partner p ON (f.partner_id=p.id)
WHERE f.datas_fname IS NOT NULL
diff --git a/addons/document/report/document_report_view.xml b/addons/document/report/document_report_view.xml
index d0ba1303a39..b9a1652388c 100644
--- a/addons/document/report/document_report_view.xml
+++ b/addons/document/report/document_report_view.xml
@@ -10,6 +10,7 @@
+
@@ -25,10 +26,11 @@
-
-
-
-
+
+
+
+
+
@@ -60,8 +62,8 @@
All Users files
report.document.user
form
- tree
- {'search_default_user': 'user_id'}
+ tree,form
+ {'group_by': ['name','month']}
@@ -112,30 +114,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
Files by Resource Type
report.document.user
-
+
form
- tree
+ graph,tree
@@ -150,7 +140,7 @@
-
+
report.document.user.tree
diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml
index 32434962ba2..53d5a2b78bf 100644
--- a/addons/document_ftp/test/document_ftp_test2.yml
+++ b/addons/document_ftp/test/document_ftp_test2.yml
@@ -196,7 +196,7 @@
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
- ftp.mkd("Test-Folder2")
+ ftp.mkd("Test-Folder3")
# TODO move
-
I remove the 'Test-Folder3'
diff --git a/addons/document_ftp/test_easyftp.py b/addons/document_ftp/test_easyftp.py
index c5526371065..1f7324b821e 100644
--- a/addons/document_ftp/test_easyftp.py
+++ b/addons/document_ftp/test_easyftp.py
@@ -31,7 +31,7 @@ def get_plain_ftp(timeout=10.0):
ftp = FTP()
host = config.get('ftp_server_host', '127.0.0.1')
port = config.get('ftp_server_port', '8021')
- ftp.connect(host, port, timeout=timeout)
+ ftp.connect(host, port,timeout)
return ftp
def get_ftp_login(cr, uid, ormobj):
diff --git a/addons/document_ftp/wizard/ftp_browse_view.xml b/addons/document_ftp/wizard/ftp_browse_view.xml
index 7a52c1fd291..90182b70e0d 100644
--- a/addons/document_ftp/wizard/ftp_browse_view.xml
+++ b/addons/document_ftp/wizard/ftp_browse_view.xml
@@ -8,7 +8,7 @@
+
+
+
@@ -174,6 +181,7 @@
+
@@ -285,6 +293,7 @@
view_type="form"/>
+
@@ -507,6 +516,12 @@
name="Registrations"
id="menu_action_registration" parent="base.menu_event_main"
action="action_registration"/>
+
+
+
diff --git a/addons/hr_evaluation/report/hr_evaluation_report_view.xml b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
index 59dade23d6f..c766390025c 100644
--- a/addons/hr_evaluation/report/hr_evaluation_report_view.xml
+++ b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
@@ -49,9 +49,12 @@
-
+
+ domain="[('create_date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('create_date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Evaluation done in last month"/>
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index 5d22113272c..3d92a76a3c3 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -139,7 +139,7 @@
help="Expenses to Invoice"/>
+ domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"/>
diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml
index 3de4776b29f..70b8625d7b6 100644
--- a/addons/hr_expense/report/hr_expense_report_view.xml
+++ b/addons/hr_expense/report/hr_expense_report_view.xml
@@ -58,10 +58,11 @@
help="Expenses during current year"/>
+ domain="[('date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Expenses during last month"/>
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 1f57b25d402..b5380c4e5a9 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -16,7 +16,7 @@
+ domain="[('date_from','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date_from','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"/>
-
-
+
+
diff --git a/addons/hr_holidays/report/hr_holidays_report_view.xml b/addons/hr_holidays/report/hr_holidays_report_view.xml
index e2ffc0fc0e9..e59cf852366 100644
--- a/addons/hr_holidays/report/hr_holidays_report_view.xml
+++ b/addons/hr_holidays/report/hr_holidays_report_view.xml
@@ -48,9 +48,12 @@
-
+
+ domain="[('date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Leaves taken in last month"/>
diff --git a/addons/hr_recruitment/i18n/en_US.po b/addons/hr_recruitment/i18n/en_US.po
index e4065c4a94d..7bd8e6c1b96 100644
--- a/addons/hr_recruitment/i18n/en_US.po
+++ b/addons/hr_recruitment/i18n/en_US.po
@@ -254,11 +254,6 @@ msgstr "Convert To Partner"
msgid "Recruitments Statistics"
msgstr "Recruitments Statistics"
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_done:0
-msgid "%Done"
-msgstr "%Done"
-
#. module: hr_recruitment
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -312,11 +307,6 @@ msgstr "Email"
msgid "Availability (Days)"
msgstr "Availability (Days)"
-#. module: hr_recruitment
-#: field:hr.recruitment.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr "Avg. Answers"
-
#. module: hr_recruitment
#: view:hr.recruitment.report:0
msgid "Available"
@@ -464,11 +454,6 @@ msgstr "Stage of Recruitment"
msgid "Stages"
msgstr "Stages"
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_cancel:0
-msgid "%Cancel"
-msgstr "%Cancel"
-
#. module: hr_recruitment
#: field:hr.applicant,probability:0
msgid "Probability"
diff --git a/addons/hr_recruitment/i18n/fr.po b/addons/hr_recruitment/i18n/fr.po
index becba8296cd..16e1782e223 100644
--- a/addons/hr_recruitment/i18n/fr.po
+++ b/addons/hr_recruitment/i18n/fr.po
@@ -257,11 +257,6 @@ msgstr ""
msgid "Recruitments Statistics"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: hr_recruitment
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -315,11 +310,6 @@ msgstr ""
msgid "Availability (Days)"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: hr_recruitment
#: view:hr.recruitment.report:0
msgid "Available"
@@ -467,11 +457,6 @@ msgstr ""
msgid "Stages"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: hr_recruitment
#: field:hr.applicant,probability:0
msgid "Probability"
diff --git a/addons/hr_recruitment/i18n/hr_recruitment.pot b/addons/hr_recruitment/i18n/hr_recruitment.pot
index 9ab2d5b02df..27e32ce7f71 100644
--- a/addons/hr_recruitment/i18n/hr_recruitment.pot
+++ b/addons/hr_recruitment/i18n/hr_recruitment.pot
@@ -254,11 +254,6 @@ msgstr ""
msgid "Recruitments Statistics"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: hr_recruitment
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -464,11 +459,6 @@ msgstr ""
msgid "Stages"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: hr_recruitment
#: field:hr.applicant,probability:0
msgid "Probability"
diff --git a/addons/hr_recruitment/i18n/mn.po b/addons/hr_recruitment/i18n/mn.po
index 9f1704c7112..ab849b831c8 100644
--- a/addons/hr_recruitment/i18n/mn.po
+++ b/addons/hr_recruitment/i18n/mn.po
@@ -258,11 +258,6 @@ msgstr ""
msgid "Recruitments Statistics"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: hr_recruitment
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -316,11 +311,6 @@ msgstr ""
msgid "Availability (Days)"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: hr_recruitment
#: view:hr.recruitment.report:0
msgid "Available"
@@ -468,11 +458,6 @@ msgstr ""
msgid "Stages"
msgstr ""
-#. module: hr_recruitment
-#: field:hr.recruitment.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: hr_recruitment
#: field:hr.applicant,probability:0
msgid "Probability"
diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py
index 2a2ab8fce2b..405897e95f4 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report.py
+++ b/addons/hr_recruitment/report/hr_recruitment_report.py
@@ -36,26 +36,10 @@ class hr_recruitment_report(osv.osv):
_auto = False
_rec_name = 'date'
- def _get_data(self, cr, uid, ids, field_name, arg, context={}):
-
- """ @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case and section Data’s IDs
- @param context: A standard dictionary for contextual values """
-
- res = {}
- state_perc = 0.0
- avg_ans = 0.0
- #TODO: Calculate avg_answer, perc_done, perc_cancel
- return res
-
_columns = {
'user_id':fields.many2one('res.users', 'User', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
index d29ecabefb0..f5e74724c25 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
@@ -55,12 +55,12 @@
help="Recruitment performed in current year"/>
+
hr.timesheet.employee.extd_form
diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
index 33b92d09241..6b436f4ef99 100644
--- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
+++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
@@ -52,7 +52,7 @@
help="Timesheet lines in this year"/>
diff --git a/addons/hr_timesheet_sheet/security/ir.model.access.csv b/addons/hr_timesheet_sheet/security/ir.model.access.csv
index 54d303d116a..9d0159bbc1a 100644
--- a/addons/hr_timesheet_sheet/security/ir.model.access.csv
+++ b/addons/hr_timesheet_sheet/security/ir.model.access.csv
@@ -4,6 +4,5 @@
"access_hr_timesheet_sheet_sheet_day","hr_timesheet_sheet.sheet.day","model_hr_timesheet_sheet_sheet_day","base.group_hr_user",1,1,1,1
"access_hr_timesheet_sheet_sheet_account","hr_timesheet_sheet.sheet.account","model_hr_timesheet_sheet_sheet_account","base.group_hr_user",1,1,1,1
"access_hr_timesheet_report","hr.timesheet.report","model_hr_timesheet_report","base.group_hr_manager",1,1,1,1
-"access_timesheet_report_employee","timesheet.report.employee","model_hr_timesheet_report","base.group_hr_user",1,1,1,1
"access_hr_analytic_timesheet_system_user","hr.analytic.timesheet.system.user","model_hr_analytic_timesheet","base.group_user",1,0,0,0
"access_hr_timesheet_sheet_sheet_day","hr.timesheet.sheet.sheet.day.user","model_hr_timesheet_sheet_sheet_day","base.group_user",1,0,0,0
diff --git a/addons/idea/report/report_vote_view.xml b/addons/idea/report/report_vote_view.xml
index c68c829794b..26608a71301 100644
--- a/addons/idea/report/report_vote_view.xml
+++ b/addons/idea/report/report_vote_view.xml
@@ -33,12 +33,12 @@
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]"
help="Idea Vote created in curren year"/>
-
+
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index 0ecdea5c017..7fb2a7056ef 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -368,13 +368,13 @@
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]"
help="Box amount in current year"/>
+ name="month"
+ domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Box amount in current month"/>
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index 9900540acae..a116a18b56d 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -199,11 +199,11 @@ class mailgate_message(osv.osv):
if action_ids:
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
action_data.update({
- 'res_id': res_id,
+ 'domain' : "[('id','=',%d)]"%(res_id),
'nodestroy': True
})
return action_data
-
+
def open_attachment(self, cr, uid, ids, context):
""" To Open attachments
@param self: The object pointer.
@@ -214,11 +214,12 @@ class mailgate_message(osv.osv):
"""
action_data = False
action_pool = self.pool.get('ir.actions.act_window')
+ message_pool = self.browse(cr ,uid, ids)[0]
action_ids = action_pool.search(cr, uid, [('res_model', '=', 'ir.attachment')])
if action_ids:
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
action_data.update({
- 'domain': [('res_id','in',ids),('res_model','=',self._name)],
+ 'domain': [('res_id','=',message_pool.res_id),('res_model','=',message_pool.model)],
'nodestroy': True
})
return action_data
diff --git a/addons/mail_gateway/res_partner_view.xml b/addons/mail_gateway/res_partner_view.xml
index 3cb1bb7fe5a..dbae434d46f 100644
--- a/addons/mail_gateway/res_partner_view.xml
+++ b/addons/mail_gateway/res_partner_view.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index 6f88981fd5f..01b3381b0bb 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -53,12 +53,12 @@
help="Production performed during current year"/>
diff --git a/addons/outlook/README b/addons/outlook/README
index 404f2121c6a..adfd4401cb3 100644
--- a/addons/outlook/README
+++ b/addons/outlook/README
@@ -4,6 +4,7 @@ Pre requirements :
======================================================================================
1.Python 2.6+ . python can be downloaded from http://www.python.org/download/releases/ .
2.Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. It can be downloaded from http://sourceforge.net/projects/pywin32/files/ or http://starship.python.net/crew/mhammond/win32/
+3.If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)". It can be downloaded from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e17e7f31-079a-43a9-bff2-0a110307611e&displaylang=en
How to install openerp-outlook plug-in?
======================================================================================
diff --git a/addons/outlook/installer.py b/addons/outlook/installer.py
index 84349a64d17..1fe408d7e67 100755
--- a/addons/outlook/installer.py
+++ b/addons/outlook/installer.py
@@ -55,6 +55,7 @@ class outlook_installer(osv.osv_memory):
Pre-requirements :
1. Python 2.6+ .
2. Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python.
+ 3. If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)".
How to install openerp-outlook plug-in?
1. Extract zip file “openerp-outlook-plugin.zip” .
@@ -65,6 +66,9 @@ How to install openerp-outlook plug-in?
6. See User Guide for more information.
7. Keep All extratced files in some safe places
(e.g. python installation Directory "C:\pythonXX\" or Windows installation Directory "C:\Program Files\" ).
+
+Note :
+ Please refer README file for dependecies external link, openobject-addons/outlook/README.
"""
}
outlook_installer()
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat b/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
index 6e024b39d35..aa3c0dac378 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
+++ b/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
@@ -1,2 +1,2 @@
python addin.py
-pause
+pause
\ No newline at end of file
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat b/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
index 1fcc6a95563..0f821974661 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
+++ b/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
@@ -1,2 +1,2 @@
-python addin.py --unregister
-pause
+python addin.py --unregister
+pause
\ No newline at end of file
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/addin.py b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
index f8f96dcb962..dbd6f172182 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/addin.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
@@ -67,7 +67,7 @@ class ButtonEvent:
mngr = manager.GetManager()
mngr.ShowManager()
except Exception,e:
- win32ui.MessageBox("Fail to Initialize dialog.\n"+str(e),"OpenERP Configuration", win32con.MB_ICONERROR)
+ win32ui.MessageBox("Fail to Initialize dialog.\n"+str(e),"OpenERP Configuration", win32con.MB_ICONERROR)
return cancel
#
class ViewPartners:
@@ -89,6 +89,47 @@ class ViewPartners:
win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Open Contact",win32con.MB_ICONINFORMATION)
return cancel
#
+class OpenPartner:
+ def OnClick(self, button, cancel):
+ import win32ui
+ from manager import ustr
+ mngr = manager.GetManager()
+ data=mngr.LoadConfig()
+ outlook = Dispatch("Outlook.Application")
+ ex = outlook.ActiveExplorer()
+ if ex:
+ is_login = str(data['login'])
+ if is_login == 'False':
+ win32ui.MessageBox("Please login to the database first", "OpenERP Connection", win32con.MB_ICONEXCLAMATION)
+ elif ex.Selection.Count == 1:
+ mngr = manager.GetManager()
+ mngr.ShowManager("IDD_OPEN_PARTNER_DIALOG")
+ elif ex.Selection.Count == 0:
+ win32ui.MessageBox("No mail selected to push to OpenERP","Push to OpenERP",win32con.MB_ICONINFORMATION)
+ elif ex.Selection.Count > 1:
+ win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Push to OpenERP",win32con.MB_ICONINFORMATION)
+ return cancel
+#
+class OpenDocument:
+ def OnClick(self, button, cancel):
+ from win32com.client import Dispatch
+ import win32con
+ import win32ui
+ mngr = manager.GetManager()
+ data=mngr.LoadConfig()
+ outlook = Dispatch("Outlook.Application")
+ ex = outlook.ActiveExplorer()
+ if ex:
+ is_login = str(data['login'])
+ if is_login == 'False':
+ win32ui.MessageBox("Please login to the database first", "OpenERP Connection", win32con.MB_ICONEXCLAMATION)
+ elif ex.Selection.Count == 1 or ex.Selection.Count == 0:
+ mngr = manager.GetManager()
+ mngr.ShowManager("IDD_OPEN_DOCUEMNT_DIALOG")
+ elif ex.Selection.Count > 1:
+ win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Open Document",win32con.MB_ICONINFORMATION)
+ return cancel
+#
class ArchiveEvent:
def OnClick(self, button, cancel):
from win32com.client import Dispatch
@@ -151,7 +192,22 @@ class OutlookAddin:
item.Enabled = True
# Adding Menu in Menu Bar to the Web Menu of the Outlook
+ toolbaradvance = bars.Item("Advanced")
toolbarweb = bars.Item("Web")
+
+ item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
+ item = self.toolbarButtonOpenPartner = DispatchWithEvents(item, OpenPartner)
+ item.Caption = "Open Partners"
+ item.TooltipText = "Click to Open OpenERP Partner Contact Information."
+ item.Enabled = True
+
+
+ item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
+ item = self.toolbarButtonOpenDocument = DispatchWithEvents(item, OpenDocument)
+ item.Caption = "Open Document"
+ item.TooltipText = "Click to Open Document that ha been pushed to server."
+ item.Enabled = True
+
# Hook events for the item
item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
item = self.toolbarButtonPartner = DispatchWithEvents(item, ViewPartners)
@@ -159,6 +215,7 @@ class OutlookAddin:
item.TooltipText = "Click to Open OpenERP Partner Contact Information."
item.Enabled = True
+
item = tools_menu.Controls.Add(Type=constants.msoControlButton, Temporary=True)
# Hook events for the item
item = self.menu_bar_viewpartner_Button = DispatchWithEvents(item, ViewPartners)
@@ -166,6 +223,14 @@ class OutlookAddin:
item.TooltipText = "Click to Open Partner detail"
item.Enabled = True
+ item = tools_menu.Controls.Add(Type=constants.msoControlButton, Temporary=True)
+ # Hook events for the item
+ item = self.menu_bar_openpartner_Button = DispatchWithEvents(item, OpenPartner)
+ item.Caption = "Open Partner"
+ item.TooltipText = "Click to Open Partner detail"
+ item.Enabled = True
+
+
def OnDisconnection(self, mode, custom):
mngr = manager.GetManager()
mngr.config['login'] = False
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
index 14e9741d09b..e9e68c6e2d0 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
@@ -635,6 +635,8 @@ class CkSocket(_object):
def GetSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_GetSslAcceptableClientCaDn(self, *args)
def getSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_getSslAcceptableClientCaDn(self, *args)
def AddSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_AddSslAcceptableClientCaDn(self, *args)
+ def get_ReceivedCount(self): return _chilkat.CkSocket_get_ReceivedCount(self)
+ def put_ReceivedCount(self, *args): return _chilkat.CkSocket_put_ReceivedCount(self, *args)
def UnlockComponent(self, *args): return _chilkat.CkSocket_UnlockComponent(self, *args)
def IsUnlocked(self): return _chilkat.CkSocket_IsUnlocked(self)
def AsyncSendBytes(self, *args): return _chilkat.CkSocket_AsyncSendBytes(self, *args)
@@ -2173,6 +2175,11 @@ class CkMailMan(_object):
def put_Pop3Stls(self, *args): return _chilkat.CkMailMan_put_Pop3Stls(self, *args)
def AddPfxSourceData(self, *args): return _chilkat.CkMailMan_AddPfxSourceData(self, *args)
def AddPfxSourceFile(self, *args): return _chilkat.CkMailMan_AddPfxSourceFile(self, *args)
+ def SmtpSendRawCommand(self, *args): return _chilkat.CkMailMan_SmtpSendRawCommand(self, *args)
+ def smtpSendRawCommand(self, *args): return _chilkat.CkMailMan_smtpSendRawCommand(self, *args)
+ def Pop3SendRawCommand(self, *args): return _chilkat.CkMailMan_Pop3SendRawCommand(self, *args)
+ def pop3SendRawCommand(self, *args): return _chilkat.CkMailMan_pop3SendRawCommand(self, *args)
+ def Pop3EndSessionNoQuit(self): return _chilkat.CkMailMan_Pop3EndSessionNoQuit(self)
def lastErrorText(self): return _chilkat.CkMailMan_lastErrorText(self)
def lastErrorXml(self): return _chilkat.CkMailMan_lastErrorXml(self)
def lastErrorHtml(self): return _chilkat.CkMailMan_lastErrorHtml(self)
@@ -3155,7 +3162,7 @@ class CkHttp(_object):
def put_UseBgThread(self, *args): return _chilkat.CkHttp_put_UseBgThread(self, *args)
def BgResponseObject(self): return _chilkat.CkHttp_BgResponseObject(self)
def BgTaskAbort(self): return _chilkat.CkHttp_BgTaskAbort(self)
- def ClearEventLog(self): return _chilkat.CkHttp_ClearEventLog(self)
+ def ClearBgEventLog(self): return _chilkat.CkHttp_ClearBgEventLog(self)
def EventLogName(self, *args): return _chilkat.CkHttp_EventLogName(self, *args)
def eventLogName(self, *args): return _chilkat.CkHttp_eventLogName(self, *args)
def EventLogValue(self, *args): return _chilkat.CkHttp_EventLogValue(self, *args)
@@ -3759,6 +3766,8 @@ class CkSpider(_object):
def put_ProxyPassword(self, *args): return _chilkat.CkSpider_put_ProxyPassword(self, *args)
def get_ProxyPort(self): return _chilkat.CkSpider_get_ProxyPort(self)
def put_ProxyPort(self, *args): return _chilkat.CkSpider_put_ProxyPort(self, *args)
+ def get_VerboseLogging(self): return _chilkat.CkSpider_get_VerboseLogging(self)
+ def put_VerboseLogging(self, *args): return _chilkat.CkSpider_put_VerboseLogging(self, *args)
def put_UserAgent(self, *args): return _chilkat.CkSpider_put_UserAgent(self, *args)
def userAgent(self): return _chilkat.CkSpider_userAgent(self)
def get_UserAgent(self, *args): return _chilkat.CkSpider_get_UserAgent(self, *args)
@@ -3781,6 +3790,7 @@ class CkSpider(_object):
def CanonicalizeUrl(self, *args): return _chilkat.CkSpider_CanonicalizeUrl(self, *args)
def getDomain(self, *args): return _chilkat.CkSpider_getDomain(self, *args)
def getBaseDomain(self, *args): return _chilkat.CkSpider_getBaseDomain(self, *args)
+
def canonicalizeUrl(self, *args): return _chilkat.CkSpider_canonicalizeUrl(self, *args)
def lastErrorText(self): return _chilkat.CkSpider_lastErrorText(self)
def lastErrorXml(self): return _chilkat.CkSpider_lastErrorXml(self)
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
index 26f0bed01ce..c82a7a7fc85 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
@@ -31,7 +31,7 @@ import addin
from dialogs import ShowDialog, MakePropertyPage
import win32ui
-
+import webbrowser
import commctrl
import win32con
import win32gui
@@ -168,6 +168,20 @@ global name
name=''
global email
email=''
+global web_server
+web_server = 'localhost'
+global web_server_port
+web_server_port = '8080'
+global country_ref
+country_ref = ""
+global state_ref
+state_ref = ""
+global new_con_country
+new_con_country= ""
+global new_con_state
+new_con_state= ""
+global search_country
+search_country = None
def check():
server = NewConn.getitem('_server')
@@ -251,7 +265,6 @@ class OKButtonProcessor(ButtonProcessor):
try:
port = int(win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[1]))
except ValueError, e:
- print "Exception : %s"%str(e)
win32ui.MessageBox("Port should be an integer", "OpenERP Connection", flag_excl)
return
except Exception,e:
@@ -277,6 +290,27 @@ class DoneButtonProcessor(ButtonProcessor):
self.window.manager.SaveConfig()
win32gui.EndDialog(self.window.hwnd, id)
+class WEBOKButtonProcessor(ButtonProcessor):
+ def __init__(self, window, control_ids):
+ self.mngr = window.manager
+ ControlProcessor.__init__(self, window, control_ids)
+
+ def OnClicked(self, id):
+ global web_server
+ global web_server_port
+ server = win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[0])
+ try:
+ port = int(win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[1]))
+ except ValueError, e:
+ win32ui.MessageBox("Port should be an integer", "OpenERP Connection", flag_excl)
+ return
+ if server.strip() == "" or server.strip() == "http:\\\\":
+ win32ui.MessageBox("Invalid web Server address.", "OpenERP Connection", flag_excl)
+ return
+ web_server = server
+ web_server_port = port
+ win32gui.EndDialog(self.window.hwnd, id)
+
class MessageProcessor(ControlProcessor):
def Init(self):
text = " This Outlook Plugin for OpenERP has been developed by OpenERP s.a.\n\n \
@@ -404,6 +438,8 @@ def TestConnection(btnProcessor,*args):
win32ui.MessageBox("No database found on host "+ server+" at port "+str(port), "OpenERP Connection", flag_excl)
return
+
+
uname = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
pwd = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[2])
@@ -596,6 +632,8 @@ def GetSelectedItems(hwndList):
def MakeAttachment(btnProcessor,*args):
#Check if server running or user logged in
+ from win32com.client import Dispatch
+ import win32com
b = check()
if not b:
return
@@ -603,7 +641,6 @@ def MakeAttachment(btnProcessor,*args):
assert ex.Selection.Count == 1
mail = ex.Selection.Item(1)
mail = GetMail(btnProcessor)
-
#get selected records
hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
r = GetSelectedItems(hwndList)
@@ -646,17 +683,21 @@ def CreateCase(btnProcessor,*args):
for rec in r:
if rec[0] == 'res.partner':
partner_ids.append(rec[1])
-
+ f = False
#Create new case
try:
- NewConn.CreateCase(str(section), mail, partner_ids)
+ f = NewConn.CreateCase(str(section), mail, partner_ids)
msg="New Document created."
flag=flag_info
except Exception,e:
msg="New Document not created \n\n"+str(e)
flag=flag_error
- win32ui.MessageBox(msg, "Create Document", flag)
- return
+ if f:
+ win32ui.MessageBox(msg, "Create Document", flag)
+ return
+ else:
+ win32ui.MessageBox("Error While creating document.\n Document can not be created.", "Create Document", flag_error)
+ return
else:
win32ui.MessageBox("Document can not be created. CRM not installed", "Create Object", flag_info)
except Exception, e:
@@ -784,6 +825,8 @@ def CreateContact(btnProcessor,*args):
street2 = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6])
city = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[7])
zip = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[8])
+ state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[10])
+ country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[11])
if not name:
win32ui.MessageBox("Please enter name.", "Create Contact", flag_stop)
return
@@ -798,9 +841,10 @@ def CreateContact(btnProcessor,*args):
'street':ustr(street),
'street2':ustr(street2),
'city':ustr(city),
- 'zip':ustr(zip)
+ 'zip':ustr(zip),
+ 'state_id':ustr(state),
+ 'country_id':ustr(country)
}
-
try:
id = NewConn.CreateContact(str(res))
if not partner:
@@ -818,6 +862,10 @@ def CreateContact(btnProcessor,*args):
def SetAllText(txtProcessor,*args):
# Set values for url, uname, pwd from config file
+ global web_server
+ global web_server_port
+ serverBox = txtProcessor.GetControl(txtProcessor.other_ids[2])
+ win32gui.SendMessage(serverBox, win32con.WM_SETTEXT, 0, "http:\\\\"+str(web_server)+":"+str(web_server_port))
url = NewConn.getitem('_uri')
tbox = txtProcessor.GetControl()
win32gui.SendMessage(tbox, win32con.WM_SETTEXT, 0, str(url))
@@ -893,10 +941,26 @@ def SetDefaultContact(txtProcessor,*args):
global name
global email
global partner_ref
- win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[1],partner_ref)
+ global new_con_country
+ global new_con_state
+ global state_ref
+ global country_ref
+ state = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[2])
+ country = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[3])
if txtProcessor.init_done:
+ if new_con_country == "":
+ new_con_country = country
+ if new_con_state == "":
+ new_con_state = state
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[1],partner_ref)
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.control_id,name)
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0],email)
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[2],new_con_state)
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[3],new_con_country)
+ new_con_country = ""
+ new_con_state = ""
+ state_ref = ""
+ country_ref =""
return
#
try:
@@ -978,7 +1042,7 @@ def CreatePartner(btnProcessor,*args):
b = check()
if not b:
return
-
+ global partner_ref
partner_name = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
if not partner_name:
win32ui.MessageBox("Please enter Partner name.", "Create Partner", flag_excl)
@@ -992,6 +1056,7 @@ def CreatePartner(btnProcessor,*args):
return
if id:
win32ui.MessageBox("New Partner '%s' created."%partner_name, "Create Partner", flag_info)
+ partner_ref = str(partner_name)
win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.id)
else:
win32ui.MessageBox("Partner '%s' already Exists."%partner_name, "Create Partner", flag_info)
@@ -1010,13 +1075,37 @@ def set_name_email(dialogProcessor,*args):
name = win32gui.GetDlgItemText(dialogProcessor.window.hwnd, dialogProcessor.other_ids[0])
email = win32gui.GetDlgItemText(dialogProcessor.window.hwnd, dialogProcessor.other_ids[1])
+#Function for Getting default mail when dialog is loaded and finding contact related to this
+#setting values to the appropriate text areas
def GetDefaultEmail(txtProcessor,*args):
from win32com.client import Dispatch
import win32con
b = check()
global partner_ref
+ global country_ref
+ global state_ref
+ global new_con_country
+ global new_con_state
+ partner_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0])
+ state_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[10])
+ country_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11])
+ if partner_ref == "":
+ partner_ref = partner_n
+ if country_ref == "":
+ country_ref = country_n
+ if state_ref == "":
+ state_ref = state_n
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0], ustr(partner_ref))
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[10], ustr(state_ref))
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11], ustr(country_ref))
+ partner_ref = ""
+ country_ref = ""
+ state_ref = ""
+ new_con_country = ""
+ new_con_state = ""
+ if country_ref == None:
+ country_ref = ""
if not b:
return
#Acquiring control of the text box
@@ -1077,6 +1166,8 @@ def GetDefaultEmail(txtProcessor,*args):
if val[0] == 'country_id' and val[1] != False :
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11], ustr(val[1][1]))
+ global search_country
+ search_country = ustr(val[1][1])
if val[0] == 'phone' and val[1] != False :
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[5], ustr(val[1]))
@@ -1140,6 +1231,8 @@ def SearchPartner(btnProcessor,*args):
if val[0] == 'country_id' and val[1] != False :
win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[12], ustr(val[1][1]))
+ global search_country
+ search_country = ustr(val[1][1])
if val[0] == 'phone' and val[1] != False :
win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6], ustr(val[1]))
@@ -1167,6 +1260,8 @@ def WritePartner(btnProcessor,*args):
street = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[2])
street2 = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[3])
city = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[4])
+ state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[5])
+ country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6])
phone = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[7])
mobile = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[8])
fax = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[9])
@@ -1185,6 +1280,9 @@ def WritePartner(btnProcessor,*args):
new_vals.append(['email',email])
new_vals.append(['fax',fax])
new_vals.append(['zip',zip])
+ new_vals.append(['state',state])
+ new_vals.append(['country',country])
+ new_vals.append(['state',state])
flag = 0
try:
#writing the updated values to the Server.
@@ -1198,7 +1296,7 @@ def WritePartner(btnProcessor,*args):
elif flag == 0:
win32ui.MessageBox("Error in Updating the Changes.\n Please check the Database Connection.", "Open Contact", flag_error)
elif flag == -1:
- win32ui.MessageBox("Contact can not be Save.\nFirst select contact using Search.","Open Contact", flag_info)
+ win32ui.MessageBox("Contact can not be Save.\nFirst select partner using Search.","Open Contact", flag_info)
def SetPartnerNameColumn(listProcessor,*args):
hwndList = listProcessor.GetControl()
@@ -1235,7 +1333,7 @@ def SelectPartnerFromList(btnProcessor,*args):
sel_text = nombre[0:size]
global partner_ref
if str(sel_text).strip() == "":
- win32ui.MessageBox("Invalid Partner Selected.","Search Partner")
+ win32ui.MessageBox("Invalid partner selected.","Search Partner")
return
try:
partner_ref = str(sel_text)
@@ -1244,10 +1342,10 @@ def SelectPartnerFromList(btnProcessor,*args):
win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
return
elif sel_count < 1:
- win32ui.MessageBox("You should Select atleast one partner.","Search Partner")
+ win32ui.MessageBox("You should select one partner.","Search Partner")
return
else:
- win32ui.MessageBox("Multiple Selection is not allowded.","Search Partner")
+ win32ui.MessageBox("Multiple Selection is not allowed.","Search Partner")
return
def SearchPartnerList(btnProcessor,*args):
@@ -1275,82 +1373,375 @@ def SearchPartnerList(btnProcessor,*args):
win32ui.MessageBox(msg, "Search Partner", flag_error)
pass
+def ConnectWebServer(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ server = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ webbrowser.open_new(str(server)+"\\openerp\\")
+
+
+def OpenPartnerForm(txtProcessor,*args):
+ from win32com.client import Dispatch
+ import win32con
+ b = check()
+ if not b:
+ return
+ #Acquiring control of the text box
+ partner_link = txtProcessor.GetControl()
+ #Reading Current Selected Email.
+ ex = txtProcessor.window.manager.outlook.ActiveExplorer()
+ assert ex.Selection.Count == 1
+ mail = ex.Selection.Item(1)
+ partner_text = ""
+ try:
+ partner_text = ustr(mail.SenderName).encode('iso-8859-1')
+ except Exception,e:
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, "< Error in reading email.>")
+ pass
+ vals = NewConn.SearchPartner(partner_text)
+ if vals == None:
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, "< No Partner with named "+str(partner_text)+" found.>")
+ txtProcessor.init_done=True
+ return
+ global web_server
+ global web_server_port
+ if web_server.strip() == "" or web_server.strip() == "http:\\\\":
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, " ")
+ txtProcessor.init_done=True
+ return
+ try:
+ linktopartner = "http:\\\\"+web_server+":"+str(web_server_port)+"\\openerp\\form\\view?model=res.partner&id="+str(vals)
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, linktopartner)
+ except Exception,e:
+ win32ui.MessageBox("Error While Opening Partner.\n"+str(e),"Open Partner", flag_error)
+ webbrowser.open_new(linktopartner)
+ txtProcessor.init_done=True
+
+def SerachOpenDocuemnt(txtProcessor,*args):
+ from win32com.client import Dispatch
+ import win32con
+ import win32ui
+ import win32com
+ from win32com.mapi import mapi, mapiutil, mapitags
+ import pythoncom
+ b = check()
+ if not b:
+ return
+ global web_server
+ global web_server_port
+ #Reading Current Selected Email.
+ ex = txtProcessor.window.manager.outlook.ActiveExplorer()
+ assert ex.Selection.Count == 1
+ mail = ex.Selection.Item(1)
+ #Acquiring control of the text box
+ link_box = txtProcessor.GetControl()
+ #Checking for the web server Parameters
+ if web_server.strip() == "" or web_server.strip() == "http:\\\\":
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, " ")
+ txtProcessor.init_done=True
+ return
+ linktodoc = ""
+ message_id = None
+ try:
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ except Exception,e:
+ win32ui.MessageBox(str(e),"Open Document")
+ vals = NewConn.SearchEmailResources(message_id)
+ if vals == None:
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, "< Mail is still not archived.>")
+ txtProcessor.init_done=True
+ return
+ try:
+ linktodoc = "http:\\\\" +web_server+ ":"+str(web_server_port)+"\\openerp\\form\\view?model="+vals[0][1]+"&id="+str(vals[1][1])
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, str(linktodoc))
+ except Exception,e:
+ win32ui.MessageBox("Error While Opening Document.\n"+str(e),"Open Document", flag_error)
+ webbrowser.open_new(linktodoc)
+ txtProcessor.init_done=True
+
+def SearchCountry(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ try :
+ search_country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ if not search_country:
+ win32ui.MessageBox("Please enter country name to search for.", "Search Country", flag_excl)
+ return
+ #Searching the contact.
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ countries = list(NewConn.GetCountry(search_country))
+ win32gui.SendMessage(hwndList, commctrl.LVM_DELETEALLITEMS)
+ if not countries:
+ win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0],"")
+ win32ui.MessageBox("No country found with name {0}.".format(search_country),"Search Country",flag_error)
+ for country in countries:
+ num_items = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMCOUNT)
+ item = LVITEM(text=country[1],iItem = num_items)
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTITEM, 0, item.toparam())
+ except Exception,e:
+ msg = getMessage(e)
+ win32ui.MessageBox(msg, "Search Country", flag_error)
+ pass
+
+def SetCountryList(listProcessor,*args):
+
+ hwndList = listProcessor.GetControl()
+ child_ex_style = win32gui.SendMessage(hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+ child_ex_style |= commctrl.LVS_EX_FULLROWSELECT
+ win32gui.SendMessage(hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style)
+
+ # set header row
+ lvc = LVCOLUMN(
+ mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | \
+ commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM
+ )
+ lvc.fmt = commctrl.LVCFMT_LEFT
+ lvc.iSubItem = 1
+ lvc.text = "Country Name"
+ lvc.cx = 275
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam())
+ listProcessor.init_done = True
+
+def SelectCountryFromList(btnProcessor,*args):
+
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ sel_count = win32gui.SendMessage(hwndList, commctrl.LVM_GETSELECTEDCOUNT)
+ sel_text = ''
+ if sel_count == 1:
+ sel=-1
+ for i in range(0,sel_count):
+ sel = win32gui.SendMessage(hwndList, commctrl.LVM_GETNEXTITEM, sel, commctrl.LVNI_SELECTED)
+ buf,extra = win32gui_struct.EmptyLVITEM(1, 0)
+ size = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMTEXT, sel, buf)
+ sel_text = ''
+ for n in extra:
+ nombre = n.tostring()
+ sel_text = nombre[0:size]
+ global country_ref
+ global new_con_country
+ global search_country
+ if str(sel_text).strip() == "":
+ win32ui.MessageBox("Invalid country selected.","Search Country")
+ return
+ try:
+ country_ref = str(sel_text)
+ new_con_country = str(sel_text)
+ search_country = str(sel_text)
+ except Exception,e:
+ pass
+ win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ return
+ elif sel_count < 1:
+ win32ui.MessageBox("You must one country.","Search Country")
+ return
+ else:
+ win32ui.MessageBox("Multiple selection is not allowed.","Search Country")
+ return
+
+def SearchState(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ try :
+ global new_con_country
+ global search_country
+ search_state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ if not search_state:
+ win32ui.MessageBox("Please enter state name to search for.", "Search Fed.State", flag_excl)
+ return
+ #Searching the contact.
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ states = list(NewConn.GetStates(search_state, search_country))
+ win32gui.SendMessage(hwndList, commctrl.LVM_DELETEALLITEMS)
+ if not states:
+ win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0],"")
+ win32ui.MessageBox("No state found with name {0}.".format(search_state),"Search Fed.State",flag_error)
+ for state in states:
+ num_items = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMCOUNT)
+ item = LVITEM(text=state[1],iItem = num_items)
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTITEM, 0, item.toparam())
+ except Exception,e:
+ msg = getMessage(e)
+ win32ui.MessageBox(msg, "Search Fed.State", flag_error)
+ pass
+
+def SetStateList(listProcessor,*args):
+ hwndList = listProcessor.GetControl()
+ child_ex_style = win32gui.SendMessage(hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+ child_ex_style |= commctrl.LVS_EX_FULLROWSELECT
+ win32gui.SendMessage(hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style)
+
+ # set header row
+ lvc = LVCOLUMN(
+ mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | \
+ commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM
+ )
+ lvc.fmt = commctrl.LVCFMT_LEFT
+ lvc.iSubItem = 1
+ lvc.text = "Fed.State Name"
+ lvc.cx = 275
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam())
+ listProcessor.init_done = True
+
+def SelectStateFromList(btnProcessor,*args):
+
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ sel_count = win32gui.SendMessage(hwndList, commctrl.LVM_GETSELECTEDCOUNT)
+ sel_text = ''
+ if sel_count == 1:
+ sel=-1
+ for i in range(0,sel_count):
+ sel = win32gui.SendMessage(hwndList, commctrl.LVM_GETNEXTITEM, sel, commctrl.LVNI_SELECTED)
+ buf,extra = win32gui_struct.EmptyLVITEM(1, 0)
+ size = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMTEXT, sel, buf)
+ sel_text = ''
+ for n in extra:
+ nombre = n.tostring()
+ sel_text = nombre[0:size]
+ global state_ref
+ global new_con_state
+ if str(sel_text).strip() == "":
+ win32ui.MessageBox("Invalid fed. state selected.","Search Fed.State")
+ return
+ try:
+ state_ref = str(sel_text)
+ new_con_state = str(sel_text)
+ win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ except Exception,e:
+ pass
+
+ return
+ elif sel_count < 1:
+ win32ui.MessageBox("You must select state.","Search Fed.State")
+ return
+ else:
+ win32ui.MessageBox("Multiple selection is not allowed.","Search Fed.State")
+ return
+
+
dialog_map = {
- "IDD_MANAGER" : (
- (CancelButtonProcessor, "IDCANCEL", resetConnAttribs, ()),
- (TabProcessor, "IDC_TAB IDC_LIST",
- """IDD_GENERAL IDD_OBJECT_SETTINGS IDD_ABOUT"""),
- (DoneButtonProcessor, "ID_DONE"),
- ),
+ "IDD_MANAGER" : (
+ (CancelButtonProcessor, "IDCANCEL", resetConnAttribs, ()),
+ (TabProcessor, "IDC_TAB IDC_LIST",
+ """IDD_GENERAL IDD_OBJECT_SETTINGS IDD_ABOUT"""),
+ (DoneButtonProcessor, "ID_DONE"),
+ ),
- "IDD_GENERAL": (
- (DBComboProcessor, "ID_DB_DROPDOWNLIST", GetConn, ()),
- (TextProcessor, "ID_SERVER_PORT ID_USERNAME ID_PASSWORD", SetAllText, ()),
- (CommandButtonProcessor, "ID_BUT_TESTCONNECTION ID_DB_DROPDOWNLIST ID_USERNAME \
- ID_PASSWORD", TestConnection, ()),
- (CommandButtonProcessor, "IDC_RELOAD", ReloadAllControls, ()),
- (DialogCommand, "IDC_BUT_SET_SERVER_PORT", "IDD_SERVER_PORT_DIALOG"),
- ),
+ "IDD_GENERAL": (
+ (DBComboProcessor, "ID_DB_DROPDOWNLIST", GetConn, ()),
+ (TextProcessor, "ID_SERVER_PORT ID_USERNAME ID_PASSWORD IDET_WED_SERVER", SetAllText, ()),
+ (CommandButtonProcessor, "ID_BUT_TESTCONNECTION ID_DB_DROPDOWNLIST ID_USERNAME \
+ ID_PASSWORD", TestConnection, ()),
+ (CommandButtonProcessor, "IDC_RELOAD", ReloadAllControls, ()),
+ (DialogCommand, "IDC_BUT_SET_SERVER_PORT", "IDD_SERVER_PORT_DIALOG"),
+ (DialogCommand, "ID_SET_WEB_CONNECTION", "IDD_WEB_SERVER_PORT_DIALOG" ),
+ (CommandButtonProcessor, "IDPB_WEB_CONNECTION IDET_WED_SERVER", ConnectWebServer, ()),
+ ),
- "IDD_OBJECT_SETTINGS" : (
- (CommandButtonProcessor, "IDC_BUT_LOAD_IMAGE IDC_IMAGE_PATH", GetImagePath, ()),
- (CommandButtonProcessor, "IDC_BUT_SAVE_OBJECT IDC_OBJECT_TITLE IDC_OBJECT_NAME \
- IDC_IMAGE_PATH IDC_LIST", AddNewObject, ()),
- (CommandButtonProcessor, "IDC_BUT_DEL_OBJECT IDC_LIST", DeleteSelectedObjects, ()),
- (ListBoxProcessor, "IDC_LIST", SetDefaultList, ())
- ),
+ "IDD_OBJECT_SETTINGS" : (
+ (CommandButtonProcessor, "IDC_BUT_LOAD_IMAGE IDC_IMAGE_PATH", GetImagePath, ()),
+ (CommandButtonProcessor, "IDC_BUT_SAVE_OBJECT IDC_OBJECT_TITLE IDC_OBJECT_NAME \
+ IDC_IMAGE_PATH IDC_LIST", AddNewObject, ()),
+ (CommandButtonProcessor, "IDC_BUT_DEL_OBJECT IDC_LIST", DeleteSelectedObjects, ()),
+ (ListBoxProcessor, "IDC_LIST", SetDefaultList, ())
+ ),
- "IDD_ABOUT" : (
- (ImageProcessor, "IDB_OPENERPLOGO"),
- (MessageProcessor, "IDC_ABOUT"),
- ),
+ "IDD_ABOUT" : (
+ (ImageProcessor, "IDB_OPENERPLOGO"),
+ (MessageProcessor, "IDC_ABOUT"),
+ ),
- "IDD_SERVER_PORT_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (OKButtonProcessor, "IDOK ID_SERVER ID_PORT IDR_XML_PROTOCOL"),
- (RadioButtonProcessor, "IDR_XML_PROTOCOL", GetConn, ()),
- (RadioButtonProcessor, "IDR_XMLS_PROTOCOL", GetConn, ()),
- (RadioButtonProcessor, "IDR_NETRPC_PROTOCOL", GetConn, ()),
- ),
+ "IDD_SERVER_PORT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (OKButtonProcessor, "IDOK ID_SERVER ID_PORT IDR_XML_PROTOCOL"),
+ ),
- "IDD_SYNC" : (
- (CommandButtonProcessor, "ID_SEARCH ID_SEARCH_TEXT IDC_NAME_LIST", SearchObjectsForText,()),
- (GroupProcessor, "IDC_STATIC_GROUP", setCheckList, ()),
- (CSComboProcessor, "ID_ATT_METHOD_DROPDOWNLIST", GetConn,()),
- (TextProcessor, "ID_SEARCH_TEXT", GetSearchText, ()),
- (DialogCommand, "ID_CREATE_CONTACT ID_SEARCH_TEXT", "IDD_NEW_CONTACT_DIALOG", set_search_text, ()),
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_MAKE_ATTACHMENT IDC_NAME_LIST IDD_SYNC", MakeAttachment, ()),
- (CommandButtonProcessor, "ID_CREATE_CASE ID_ATT_METHOD_DROPDOWNLIST IDC_NAME_LIST", CreateCase, ()),
- (ListBoxProcessor, "IDC_NAME_LIST", SetNameColumn, ())
- ),
+ "IDD_SYNC" : (
+ (CommandButtonProcessor, "ID_SEARCH ID_SEARCH_TEXT IDC_NAME_LIST", SearchObjectsForText,()),
+ (GroupProcessor, "IDC_STATIC_GROUP", setCheckList, ()),
+ (CSComboProcessor, "ID_ATT_METHOD_DROPDOWNLIST", GetConn,()),
+ (TextProcessor, "ID_SEARCH_TEXT", GetSearchText, ()),
+ (DialogCommand, "ID_CREATE_CONTACT ID_SEARCH_TEXT", "IDD_NEW_CONTACT_DIALOG", set_search_text, ()),
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_MAKE_ATTACHMENT IDC_NAME_LIST IDD_SYNC", MakeAttachment, ()),
+ (CommandButtonProcessor, "ID_CREATE_CASE ID_ATT_METHOD_DROPDOWNLIST IDC_NAME_LIST", CreateCase, ()),
+ (ListBoxProcessor, "IDC_NAME_LIST", SetNameColumn, ())
+ ),
- "IDD_NEW_CONTACT_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_CONTACT_SAVE_BUTTON ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_CONTACT_OFFICE_TEXT ID_CONTACT_MOBILE_TEXT ID_FAX_TEXT ID_STREET_TEXT ID_STREET2_TEXT ID_PARTNER_CITY_TEXT ID_ZIP_TEXT ID_PARTNER_TEXT", CreateContact, ()),
- (TextProcessor, "ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_PARTNER_TEXT" , SetDefaultContact, ()),
- (DialogCommand, "ID_NEW_PARTNER_BUTTON", "IDD_SELECT_PARTNER"),
- ),
+ "IDD_NEW_CONTACT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_CONTACT_SAVE_BUTTON ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_CONTACT_OFFICE_TEXT ID_CONTACT_MOBILE_TEXT ID_FAX_TEXT ID_STREET_TEXT ID_STREET2_TEXT ID_PARTNER_CITY_TEXT ID_ZIP_TEXT ID_PARTNER_TEXT IDET_NC_PARTNER_STATE IDET_NC_PARTNER_COUNTRY", CreateContact, ()),
+ (TextProcessor, "ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_PARTNER_TEXT IDET_NC_PARTNER_STATE IDET_NC_PARTNER_COUNTRY" , SetDefaultContact, ()),
+ (DialogCommand, "ID_NEW_PARTNER_BUTTON", "IDD_SELECT_PARTNER"),
+ (DialogCommand, "IDPB_NEW_PARTNER_BUTTON", "IDD_NEW_PARTNER_DIALOG"),
+ (DialogCommand, "IDPB_NC_SEARCH_STATE1", "IDD_SELECT_STATE"),
+ (DialogCommand, "IDPB_NC_SEARCH_COUNTRY1", "IDD_SELECT_COUNTRY"),
+ ),
- "IDD_NEW_PARTNER_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_SAVE_PARTNER_BUTTON ID_PARTNER_NAME_TEXT", CreatePartner, ()),
- ),
+ "IDD_NEW_PARTNER_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_SAVE_PARTNER_BUTTON ID_PARTNER_NAME_TEXT", CreatePartner, ()),
+ ),
- "IDD_VIEW_PARTNER_DIALOG" : (
- (TextProcessor, "IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", GetDefaultEmail, ()),
- (CommandButtonProcessor, "IDPB_SEARCH_PARTNER IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", SearchPartner, ()),
- (CommandButtonProcessor, "IDPB_WRITE_CHANGES IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_STATE IDET_PARTNER_COUNTRY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP", WritePartner, ()),
- (CloseButtonProcessor, "IDCANCEL"),
- (DialogCommand, "ID_NEW_PART_BUTTON", "IDD_SELECT_PARTNER" ),
- (DialogCommand, "IDPB_NEWPARTNER_BUTTON" , "IDD_NEW_CONTACT_DIALOG")
- ),
- "IDD_SELECT_PARTNER" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (ListBoxProcessor, "IDC_LIST_PARTNER" ,SetPartnerNameColumn, ()),
- (CommandButtonProcessor, "IDPB_PARTNER_SEARCH IDET_PARTNER_SEARCH_NAME IDC_LIST_PARTNER", SearchPartnerList,()),
- (CommandButtonProcessor, "IDPB_SELECT_PARTNER IDC_LIST_PARTNER IDD_SELECT_PARTNER" , SelectPartnerFromList,()),
- (DialogCommand, "IDPB_CREATE_NEW_PARTNER" , "IDD_NEW_PARTNER_DIALOG")
- ),
+ "IDD_VIEW_PARTNER_DIALOG" : (
+ (TextProcessor, "IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", GetDefaultEmail, ()),
+ (CommandButtonProcessor, "IDPB_SEARCH_PARTNER IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", SearchPartner, ()),
+ (CommandButtonProcessor, "IDPB_WRITE_CHANGES IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_STATE IDET_PARTNER_COUNTRY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP", WritePartner, ()),
+ (CloseButtonProcessor, "IDCANCEL"),
+ (DialogCommand, "ID_NEW_PART_BUTTON", "IDD_SELECT_PARTNER" ),
+ (DialogCommand, "IDPB_NEWPARTNER_BUTTON" , "IDD_NEW_CONTACT_DIALOG"),
+ (DialogCommand, "IDPB_NEW_PART_BUTTON", "IDD_NEW_PARTNER_DIALOG"),
+ (DialogCommand, "IDPB_SEARCH_COUNTRY1", "IDD_SELECT_COUNTRY"),
+ (DialogCommand, "IDPB_SEARCH_STATE1", "IDD_SELECT_STATE"),
+
+ ),
+ "IDD_SELECT_PARTNER" : (
+ (ListBoxProcessor, "IDC_LIST_PARTNER" ,SetPartnerNameColumn, ()),
+ (CommandButtonProcessor, "IDPB_PARTNER_SEARCH IDET_PARTNER_SEARCH_NAME IDC_LIST_PARTNER", SearchPartnerList,()),
+ (CommandButtonProcessor, "IDPB_SELECT_PARTNER IDC_LIST_PARTNER IDD_SELECT_PARTNER" , SelectPartnerFromList,()),
+ (DialogCommand, "IDPB_CREATE_NEW_PARTNER" , "IDD_NEW_PARTNER_DIALOG")
+ ),
+ "IDD_OPEN_PARTNER_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (TextProcessor, "IDET_PARTNER_LINK_TEXT", OpenPartnerForm, ()),
+ ),
+ "IDD_OPEN_DOCUEMNT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (TextProcessor, "IDEB_OPENDOC_LINK_TEXT", SerachOpenDocuemnt,()),
+ ),
+ "IDD_WEB_SERVER_PORT_DIALOG" :(
+ (CloseButtonProcessor, "IDCANCEL"),
+ (WEBOKButtonProcessor, "ID_WEB_OK IDET_WEB_SERVER IDET_WEB_PORT")
+ ),
+ "IDD_SELECT_COUNTRY" : (
+ (CommandButtonProcessor, "IDPB_SEARCH_COUNTRY IDET_COUNTRY_SEARCH_NAME IDC_LIST_COUNTRY" , SearchCountry, ()),
+ (ListBoxProcessor, "IDC_LIST_COUNTRY" ,SetCountryList, ()),
+ (CommandButtonProcessor, "IDPB_SELECT_COUNTRY IDC_LIST_COUNTRY IDD_SELECT_COUNTRY" , SelectCountryFromList,()),
+ ),
+ "IDD_SELECT_STATE" : (
+ (CommandButtonProcessor, "IDPB_STATE_SEARCH IDET_STATE_SEARCH_NAME IDC_LIST_STATE" , SearchState, ()),
+ (ListBoxProcessor, "IDC_LIST_STATE" ,SetStateList, ()),
+ (CommandButtonProcessor, "IDPB_SELECT_STATE IDC_LIST_STATE IDD_SELECT_STATE" , SelectStateFromList,()),
+ ),
}
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
index bb028c0da90..a816b9838ab 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
@@ -177,6 +177,37 @@
#define IDPB_PARTNER_SEARCH 2077
#define IDPB_CREATE_NEW_PARTNER 2078
#define ID_PARTNER_TEXT 2079
+#define IDET_WED_SERVER 2080
+#define IDET_WEB_PORT 2081
+#define ID_SET_WEB_CONNECTION 2082
+#define IDPB_WEB_CONNECTION 2083
+#define IDD_OPEN_PARTNER_DIALOG 2084
+#define IDET_PARTNER_LINK_TEXT 2085
+#define IDEB_OPENDOC_LINK_TEXT 2086
+#define IDD_OPEN_DOCUEMNT_DIALOG 2087
+#define IDD_WEB_SERVER_PORT_DIALOG 2088
+#define IDET_WEB_SERVER 2089
+#define IDET_WEB_PORT 2090
+#define ID_WEB_OK 2091
+#define IDPB_NEW_PARTNER_BUTTON 2092
+#define IDPB_NEW_PART_BUTTON 2093
+#define IDD_SELECT_COUNTRY 2094
+#define IDET_COUNTRY_SEARCH_NAME 2095
+#define IDC_LIST_COUNTRY 2096
+#define IDPB_SELECT_COUNTRY 2097
+#define IDPB_SEARCH_COUNTRY 2098
+#define IDD_SELECT_STATE 2099
+#define IDET_STATE_SEARCH_NAME 2100
+#define IDC_LIST_STATE 2101
+#define IDPB_SELECT_STATE 2102
+#define IDPB_SEARCH_STATE 2103
+#define IDPB_SEARCH_STATE1 2104
+#define IDPB_SEARCH_COUNTRY1 2105
+
+#define IDET_NC_PARTNER_STATE 2106
+#define IDPB_NC_SEARCH_STATE1 2107
+#define IDET_NC_PARTNER_COUNTRY 2108
+#define IDPB_NC_SEARCH_COUNTRY1 2109
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
index 3dac98b5fb0..5f5a0cdca50 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
@@ -1,11 +1,11 @@
-#C:\Documents and Settings\TinyERP\Desktop\OpenERP-Outlook-PlugIn\openerp-outlook-plugin\dialogs\resources\dialogs.py
-#This is a generated file. Please edit C:\Documents and Settings\TinyERP\Desktop\OpenERP-Outlook-PlugIn\openerp-outlook-plugin\dialogs\resources\dialogs.rc instead.
-_rc_size_=11883
-_rc_mtime_=1285738756
+#C:\workspace\openerp-outlook-plugin\dialogs\resources\dialogs.py
+#This is a generated file. Please edit C:\workspace\openerp-outlook-plugin\dialogs\resources\dialogs.rc instead.
+_rc_size_=16028
+_rc_mtime_=1286860723
class FakeParser:
- dialogs = {'IDD_VIEW_PARTNER_DIALOG': [['Open Contact', (0, 0, 350, 215), -1865940928, 1024, (8, 'Tahoma')], [130, 'Email ID : ', -1, (32, 17, 40, 12), 1342177280], [129, '', 2051, (70, 15, 200, 12), 1350631552], [128, 'Search Contact ', 2052, (280, 15, 60, 14), 1342242816], [130, 'Partner Name : ', -1, (13, 42, 50, 17), 1342177280], [129, '', 2064, (70, 42, 200, 12), 1350568064], [128, 'Search Partner', 2070, (280, 41, 60, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 65, 175, 125), 1342177287], [130, 'Contact Name : ', -1, (18, 83, 50, 17), 1342177280], [129, '', 2046, (76, 82, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 97, 50, 17), 1342177280], [129, '', 2053, (76, 96, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 112, 50, 17), 1342177280], [129, '', 2054, (76, 111, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 126, 50, 14), 1342177280], [129, '', 40010, (76, 125, 100, 12), 1350631552], [130, 'City : ', -1, (18, 140, 50, 17), 1342177280], [129, '', 40011, (76, 139, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 154, 50, 17), 1342177280], [129, '', 2062, (76, 153, 100, 12), 1350568064], [130, 'Country :', -1, (18, 169, 35, 17), 1342177280], [129, '', 2063, (76, 168, 100, 12), 1350568064], [128, 'Communication ', 2024, (188, 65, 152, 125), 1342177287], [130, 'Phone : ', -1, (194, 83, 30, 17), 1342177280], [129, '', 2048, (224, 82, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 97, 30, 17), 1342177280], [129, '', 2050, (224, 96, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 111, 30, 17), 1342177280], [129, '', 2058, (224, 110, 100, 12), 1350568064], [130, 'Fax : ', -1, (194, 125, 30, 17), 1342177280], [129, '', 2047, (224, 124, 100, 12), 1350631552], [128, 'Create a New Contact', 2071, (124, 195, 82, 14), 1342242816], [128, 'Save', 2059, (213, 195, 60, 14), 1342242816], [128, 'Cancel', 2, (281, 195, 60, 14), 1342242816]], 'IDD_GENERAL': [['Connection Parameters', (0, 0, 430, 210), 1355284544, None, (8, 'Tahoma')], [128, '', 2024, (10, 10, 250, 130), 1342177287], [130, 'Server : ', -1, (30, 30, 100, 17), 1342177280], [129, '', 2003, (85, 30, 120, 12), 1350633472], [128, 'Change', 2021, (210, 30, 30, 13), 1342242816], [130, 'Database : ', -1, (30, 50, 100, 17), 1342177280], [133, '', 2004, (85, 50, 120, 40), 1344339971], [128, 'Reload', 2038, (210, 50, 30, 13), 1342242816], [130, 'Username : ', -1, (30, 70, 100, 17), 1342177280], [129, '', 2005, (85, 70, 154, 12), 1350631552], [130, 'Password : ', -1, (30, 90, 100, 17), 1342177280], [129, '', 2006, (85, 90, 154, 12), 1350631584], [128, 'Connect', 2007, (179, 110, 60, 13), 1342242816]], 'IDD_OBJECT_SETTINGS': [['Documents Setting', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'Document Attributes', 2024, (2, 2, 340, 32), 1342177287], [130, 'Title', -1, (6, 15, 30, 17), 1342177280], [129, '', 2013, (20, 14, 57, 12), 1350631552], [130, 'Document Name', -1, (83, 15, 60, 17), 1342177280], [129, '', 2014, (138, 14, 57, 12), 1350631552], [130, 'Image', -1, (200, 15, 20, 17), 1342177280], [129, '', 2015, (220, 14, 57, 12), 1350631552], [128, 'Load Image', 2010, (286, 13, 50, 15), 1342242816], [128, 'Add', 2011, (347, 13, 38, 15), 1342242816], [128, 'Remove', 2012, (391, 13, 38, 15), 1342242816], ['SysListView32', 'List1', 2016, (8, 40, 535, 160), 1353711657]], 'IDD_NEW_PARTNER_DIALOG': [['Create a New Partner', (0, 0, 140, 40), -1865940928, 1024, (8, 'Tahoma')], [130, 'Name : ', -1, (5, 3, 100, 17), 1342177280], [129, '', 2036, (40, 3, 94, 12), 1350631552], [128, 'Cancel', 2, (90, 22, 45, 14), 1342242816], [128, 'Save', 2035, (40, 22, 45, 14), 1342242817]], 'IDD_MANAGER': [['OpenERP Configuarion', (0, 0, 460, 260), -1865940800, None, (8, 'Tahoma')], [128, 'Close', 2008, (400, 239, 50, 14), 1342177281], ['SysTabControl32', '', 1068, (8, 7, 440, 228), 1342177280], ['SysListView32', '', 2016, (0, 0, 0, 0), 1353711657]], 'IDD_ABOUT': [['About', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'About Plugin', -1, (7, 3, 422, 200), 1342177287], [130, '1062', 1062, (60, 30, 20, 20), 1342179342], [130, '', 2028, (80, 90, 300, 100), 1342177280]], 'IDD_NEW_CONTACT_DIALOG': [['Create a New Contact', (0, 0, 350, 150), -1865940928, 1024, (8, 'Tahoma')], [130, 'Select Partner : ', -1, (13, 20, 50, 17), 1342177280], [129, '', 2079, (70, 18, 200, 12), 1350568064], [128, 'Search Partner', 2033, (280, 17, 60, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 35, 175, 90), 1342177287], [130, 'Contact Name : ', -1, (18, 53, 100, 17), 1342177280], [129, '', 40005, (76, 52, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 67, 40, 17), 1342177280], [129, '', 2062, (76, 66, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 81, 40, 17), 1342177280], [129, '', 2063, (76, 80, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 94, 50, 17), 1342177280], [129, '', 2068, (76, 93, 100, 12), 1350631552], [130, 'City : ', -1, (18, 106, 50, 17), 1342177280], [129, '', 2067, (76, 107, 100, 12), 1350631552], [128, 'Communication ', 2024, (188, 35, 150, 90), 1342177287], [130, 'Office : ', -1, (194, 53, 30, 17), 1342177280], [129, '', 40006, (224, 52, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 67, 30, 17), 1342177280], [129, '', 40007, (224, 66, 100, 12), 1350631552], [130, 'Fax : ', -1, (194, 81, 30, 17), 1342177280], [129, '', 2066, (224, 80, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 95, 30, 17), 1342177280], [129, '', 40008, (224, 94, 100, 12), 1350631552], [128, 'Cancel', 2, (290, 130, 45, 14), 1342242816], [128, 'Save', 40009, (240, 130, 45, 14), 1342242816]], 'IDD_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2001, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2002, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 1, (60, 35, 45, 14), 1342242817]], 'IDD_SELECT_PARTNER': [['Search Partner', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2076, (55, 10, 100, 12), 1350631552], [128, 'Search', 2077, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2072, (8, 40, 200, 185), 1353711657], [128, 'Create New Partner', 2078, (10, 230, 100, 14), 1342242816], [128, 'Select', 2075, (130, 230, 40, 14), 1342242816], [128, 'Cancel', 2, (175, 230, 40, 14), 1342242816]], 'IDD_SYNC': [['Push to OpenERP', (0, 0, 470, 320), -1865940928, 1024, (8, 'Tahoma')], [128, 'Link to an Existing Documents ', 2024, (8, 5, 250, 290), 1342242823], [130, 'Search for : ', -1, (15, 17, 40, 12), 1342177280], [129, '', 40003, (60, 15, 120, 12), 1350631552], [128, 'Search', 40004, (187, 15, 40, 14), 1342242816], [130, 'Documents : ', -1, (15, 140, 100, 14), 1342177280], ['SysListView32', 'List1', 2026, (15, 150, 234, 110), 1350631433], [128, 'Push', 2019, (160, 270, 85, 14), 1342242816], [128, ' Create a Document ', 2024, (263, 5, 202, 100), 1342242823], [130, 'Type of Document : ', -1, (266, 25, 100, 12), 1342177280], [133, '', 2025, (332, 24, 75, 45), 1344339971], [128, 'Create', 2020, (412, 23, 50, 14), 1342242816], [128, ' Create a Contact ', 2024, (263, 110, 202, 185), 1342242823], [130, 'Create a New Contact : ', -1, (280, 140, 100, 12), 1342177280], [128, 'Create Contact', 2018, (360, 138, 60, 14), 1342242816], [128, 'Close', 2, (385, 300, 60, 14), 1342242816]]}
- ids = {'IDC_BUT_DEL_OBJECT': 2012, 'IDC_DELAY1_SLIDER': 1056, 'IDC_PROGRESS': 1000, 'IDD_MANAGER': 101, 'IDC_ABOUT': 2028, 'IDD_DIAGNOSTIC': 113, 'IDET_PARTNER_COUNTRY': 2063, 'IDD_TRAINING': 102, 'ID_CONTACT_EMAIL_TEXT': 40008, 'IDC_DELAY2_TEXT': 1059, 'IDC_DELAY1_TEXT': 1057, 'IDD_WIZARD': 114, 'IDC_CHKBX': 2023, 'IDC_STATIC_HAM': 1002, 'IDC_PROGRESS_TEXT': 1001, 'IDR_XMLS_PROTOCOL': 2042, 'IDD_GENERAL': 108, 'IDD_ABOUT': 2027, 'IDD_SYNC': 40002, 'IDC_TAB': 1068, 'IDC_FOLDER_UNSURE': 1033, 'IDC_VERBOSE_LOG': 1061, 'IDC_EDIT1': 1094, 'IDC_BROWSE': 1037, 'ID_DB_DROPDOWNLIST': 2004, 'IDC_BACK_BTN': 1069, 'IDPB_PARTNER_SEARCH': 2077, 'IDD_WIZARD_FINISHED_UNCONFIGURED': 119, 'IDC_ACTION_CERTAIN': 1025, 'IDC_BUT_ACT_ALL': 1019, 'IDD_FILTER_NOW': 104, 'ID_PROTOCOL_GRP': 2040, 'IDC_HEADER': 2017, 'IDC_MARK_SPAM_AS_READ': 1047, 'ID_PARTNER_NAME_TEXT': 2036, 'IDC_RECOVER_RS': 1075, 'IDC_NAME_LIST1': 2037, 'ID_CONTACT_OFFICE_TEXT': 40006, 'IDC_STATIC': -1, 'IDC_PAGE_PLACEHOLDER': 1078, 'IDC_BROWSE_WATCH': 1039, 'IDET_ZIP': 40010, 'IDET_PARTNER_CITY': 40011, 'IDC_FOLDER_HAM': 1083, 'IDD_WIZARD_FOLDERS_REST': 117, 'IDC_SHOW_DATA_FOLDER': 1071, 'IDC_BUT_ACT_SCORE': 1018, '_APS_NEXT_RESOURCE_VALUE': 128, '_APS_NEXT_SYMED_VALUE': 101, 'IDC_CONTACT_LIST': 2029, 'IDC_SLIDER_CERTAIN': 1023, 'IDET_PARTNER_STREET': 2053, 'IDC_BUT_UNREAD': 1020, 'ID_PARTNER_DROPDOWNLIST': 2032, 'ID_COUNTRY_DROPLIST': 2065, 'IDC_BUT_ABOUT': 1017, 'IDC_BUT_RESCORE': 1008, 'IDC_BUT_SEARCHSUB': 1041, 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER': 1010, 'IDET_PARTNER_MOBILENO': 2050, 'IDD_VIEW_PARTNER_DIALOG': 2044, 'IDD_WIZARD_FOLDERS_TRAIN': 120, 'IDC_BUT_FILTER_ENABLE': 1013, 'IDC_ABOUT_BTN': 1072, 'IDD_WIZARD_FINISHED_TRAINED': 122, 'ID_SERVER': 2001, 'IDD_SELECT_PARTNER': 2073, 'IDD_FOLDER_SELECTOR': 105, 'IDC_BUT_SET_SERVER_PORT': 2021, 'ID_DONE': 2008, 'IDC_LIST_FOLDERS': 1040, 'IDC_IMAGE_PATH': 2015, 'IDB_SBWIZLOGO': 125, 'IDB_OPENERPLOGO': 1062, 'ID_ZIP_TEXT': 2068, 'IDD_NEW_PARTNER_DIALOG': 2034, 'ID_PARTNER_DROPLIST': 2069, 'IDC_BUT_VIEW_LOG': 1093, 'IDC_STATUS2': 1044, 'IDC_STATUS1': 1043, 'IDCANCEL': 2, 'IDC_BROWSE_HAM': 1004, 'ID_BUT_TESTCONNECTION': 2007, 'IDR_NETRPC_PROTOCOL': 2043, 'IDC_BROWSE_SPAM': 1005, 'IDD_WIZARD_FINISHED_UNTRAINED': 116, 'IDC_MARK_UNSURE_AS_READ': 1051, 'ID_PARTNER_CITY_TEXT': 2067, 'IDC_BUT_WIZARD': 1070, 'IDC_VERSION': 1009, 'ID_NEW_PARTNER_BUTTON': 2033, 'IDC_FOLDER_NAMES': 1036, 'ID_ATT_METHOD_DROPDOWNLIST': 2025, 'IDC_BUT_TIMER_ENABLED': 1091, 'IDPB_WRITE_CHANGES': 2059, 'IDC_SLIDER_UNSURE': 1029, 'IDC_BUT_NEW': 1046, 'IDC_FOLDER_WATCH': 1038, 'IDPB_CREATE_NEW_PARTNER': 2078, 'IDC_BUT_UNTRAINED': 1088, 'IDC_STATIC_SPAM': 1003, 'IDD_NEW_CONTACT_DIALOG': 2031, 'IDC_EDIT_UNSURE': 1030, 'IDC_BUT_CLEARALL': 1042, 'IDC_BUT_UNSEEN': 1021, 'IDC_OBJECT_NAME': 2014, 'IDD_WIZARD_FOLDERS_WATCH': 118, 'IDC_BUT_SAVE_OBJECT': 2011, 'ID_FED_STATE_DROPLIST': 2064, 'ID_ALL_COUNTRY_DROPDOWNLIST': 2061, 'IDC_EDIT_CERTAIN': 1024, 'IDC_BUT_FILTER_DEFINE': 1016, 'ID_NEW_PART_BUTTON': 2070, 'ID_FAX_TEXT': 2066, 'IDD_WIZARD_TRAINING_IS_IMPORTANT': 123, 'ID_ALL_STATE_DROPDOWNLIST': 2060, 'IDC_INBOX_TIMER_ONLY': 1060, 'IDPB_SEARCH_PARTNER': 2052, 'ID_USERNAME': 2005, '_APS_NEXT_CONTROL_VALUE': 1096, 'IDC_WIZ_GRAPHIC': 1092, 'IDD_OBJECT_SETTINGS': 2009, 'IDD_FILTER_UNSURE': 111, 'IDC_DEL_SPAM_RS': 1074, 'ID_SERVER_PORT': 2003, 'IDR_XML_PROTOCOL': 2041, 'IDET_PARTNER_OFFICENO': 2048, 'IDB_FOLDERS': 127, 'IDC_BUT_PREPARATION': 1081, 'ID_STREET2_TEXT': 2063, 'IDC_DELAY2_SLIDER': 1058, 'IDET_PARTNER': 2064, 'IDC_SAVE_SPAM_SCORE': 1048, 'IDC_OBJECT_TITLE': 2013, 'IDC_FOLDER_CERTAIN': 1027, 'IDC_BROWSE_UNSURE': 1034, 'IDC_STATISTICS': 1095, 'ID_MAKE_ATTACHMENT': 2019, 'IDC_BUT_LOAD_IMAGE': 2010, 'IDC_NAME_LIST': 2026, 'IDC_BUT_TRAIN_TO_SPAM_FOLDER': 1011, 'IDET_PARTNER_SEARCH_NAME': 2076, 'IDC_BUT_RESET': 1073, 'IDET_PARTNER_CONTACT_NAME': 2046, 'ID_CONTACT_MOBILE_TEXT': 40007, 'IDC_ACTION_UNSURE': 1031, 'IDD_WIZARD_TRAIN': 121, 'IDC_STATIC_GROUP': 2024, 'IDPB_NEWPARTNER_BUTTON': 2071, 'ID_PARTNER_TEXT': 2079, 'IDD_WIZARD_FINISHED_TRAIN_LATER': 124, 'IDET_PARTNER_NAME': 2045, 'ID_CONTACT_NAME_TEXT': 40005, 'IDC_BUT_REBUILD': 1007, 'IDET_PARTNER_STREET2': 2054, 'ID_SAVE_PARTNER_BUTTON': 2035, 'IDPB_SELECT_PARTNER': 2075, 'ID_STREET_TEXT': 2062, '_APS_NEXT_COMMAND_VALUE': 40001, 'IDET_SEARCH_PARTNER': 2051, 'IDC_LIST_PARTNER': 2072, 'ID_PORT': 2002, 'IDD_SERVER_PORT_DIALOG': 2022, 'IDET_PARTNER_STATE': 2062, 'ID_SEARCH_TEXT': 40003, 'ID_SEARCH': 40004, 'ID_CREATE_CONTACT': 2018, 'IDC_FORWARD_BTN': 1077, 'IDC_TRAINING_STATUS': 1035, 'IDD_WIZARD_WELCOME': 115, 'IDET_PARTNER_FAX': 2058, 'IDC_BUT_TRAIN': 1089, 'IDC_LIST': 2016, 'ID_CREATE_CASE': 2020, 'IDET_PARTNER_EMAIL': 2047, 'IDC_START': 1006, 'IDD_FILTER': 103, 'IDC_RELOAD': 2038, 'ID_PASSWORD': 2006, 'ID_NAME_TEXT': 2030, 'IDC_FILTER_STATUS': 1014, 'ID_CONTACT_SAVE_BUTTON': 40009, 'IDOK': 1, 'IDC_BROWSE_CERTAIN': 1028, 'IDC_BUT_SHOW_DIAGNOSTICS': 1080, 'IDC_BUT_TRAIN_NOW': 1012}
- names = {1024: 'IDC_EDIT_CERTAIN', 1: 'IDOK', 2: 'IDCANCEL', 1027: 'IDC_FOLDER_CERTAIN', 1028: 'IDC_BROWSE_CERTAIN', 1029: 'IDC_SLIDER_UNSURE', 1030: 'IDC_EDIT_UNSURE', 1031: 'IDC_ACTION_UNSURE', 1033: 'IDC_FOLDER_UNSURE', 1034: 'IDC_BROWSE_UNSURE', 1035: 'IDC_TRAINING_STATUS', 1036: 'IDC_FOLDER_NAMES', 1037: 'IDC_BROWSE', 1038: 'IDC_FOLDER_WATCH', 1039: 'IDC_BROWSE_WATCH', 1040: 'IDC_LIST_FOLDERS', 1041: 'IDC_BUT_SEARCHSUB', 1042: 'IDC_BUT_CLEARALL', 1043: 'IDC_STATUS1', 1044: 'IDC_STATUS2', 2069: 'ID_PARTNER_DROPLIST', 1046: 'IDC_BUT_NEW', 1047: 'IDC_MARK_SPAM_AS_READ', 1048: 'IDC_SAVE_SPAM_SCORE', 2052: 'IDPB_SEARCH_PARTNER', 1051: 'IDC_MARK_UNSURE_AS_READ', 2076: 'IDET_PARTNER_SEARCH_NAME', 2077: 'IDPB_PARTNER_SEARCH', 2078: 'IDPB_CREATE_NEW_PARTNER', 2053: 'IDET_PARTNER_STREET', 1056: 'IDC_DELAY1_SLIDER', 1057: 'IDC_DELAY1_TEXT', 1058: 'IDC_DELAY2_SLIDER', 1059: 'IDC_DELAY2_TEXT', 1060: 'IDC_INBOX_TIMER_ONLY', 1061: 'IDC_VERBOSE_LOG', 1062: 'IDB_OPENERPLOGO', 2047: 'IDET_PARTNER_EMAIL', 1068: 'IDC_TAB', 1069: 'IDC_BACK_BTN', 1070: 'IDC_BUT_WIZARD', 1071: 'IDC_SHOW_DATA_FOLDER', 1072: 'IDC_ABOUT_BTN', 1073: 'IDC_BUT_RESET', 1074: 'IDC_DEL_SPAM_RS', 1075: 'IDC_RECOVER_RS', 1077: 'IDC_FORWARD_BTN', 1078: 'IDC_PAGE_PLACEHOLDER', 2057: 'IDET_PARTNER_COUNTRY', 1080: 'IDC_BUT_SHOW_DIAGNOSTICS', 1081: 'IDC_BUT_PREPARATION', 1083: 'IDC_FOLDER_HAM', 2058: 'IDET_PARTNER_FAX', 1088: 'IDC_BUT_UNTRAINED', 1089: 'IDC_BUT_TRAIN', 40002: 'IDD_SYNC', 1091: 'IDC_BUT_TIMER_ENABLED', 1025: 'IDC_ACTION_CERTAIN', 1093: 'IDC_BUT_VIEW_LOG', 1094: 'IDC_EDIT1', 1095: 'IDC_STATISTICS', 1096: '_APS_NEXT_CONTROL_VALUE', 2060: 'ID_ALL_STATE_DROPDOWNLIST', 40010: 'IDET_ZIP', 40011: 'IDET_PARTNER_CITY', 2061: 'ID_ALL_COUNTRY_DROPDOWNLIST', 2062: 'IDET_PARTNER_STATE', 2063: 'IDET_PARTNER_COUNTRY', 2064: 'IDET_PARTNER', 101: 'IDD_MANAGER', 102: 'IDD_TRAINING', 103: 'IDD_FILTER', 104: 'IDD_FILTER_NOW', 105: 'IDD_FOLDER_SELECTOR', 106: 'IDD_ABOUT', 108: 'IDD_GENERAL', 2066: 'ID_FAX_TEXT', 111: 'IDD_FILTER_UNSURE', 113: 'IDD_DIAGNOSTIC', 114: 'IDD_WIZARD', 115: 'IDD_WIZARD_WELCOME', 116: 'IDD_WIZARD_FINISHED_UNTRAINED', 117: 'IDD_WIZARD_FOLDERS_REST', 118: 'IDD_WIZARD_FOLDERS_WATCH', 119: 'IDD_WIZARD_FINISHED_UNCONFIGURED', 120: 'IDD_WIZARD_FOLDERS_TRAIN', 121: 'IDD_WIZARD_TRAIN', 122: 'IDD_WIZARD_FINISHED_TRAINED', 123: 'IDD_WIZARD_TRAINING_IS_IMPORTANT', 124: 'IDD_WIZARD_FINISHED_TRAIN_LATER', 125: 'IDB_SBWIZLOGO', 127: 'IDB_FOLDERS', 2067: 'ID_PARTNER_CITY_TEXT', 2050: 'IDET_PARTNER_MOBILENO', 2070: 'ID_NEW_PART_BUTTON', 2071: 'IDPB_NEWPARTNER_BUTTON', 2072: 'IDC_LIST_PARTNER', 2073: 'IDD_SELECT_PARTNER', 2068: 'ID_ZIP_TEXT', 2051: 'IDET_SEARCH_PARTNER', 2075: 'IDPB_SELECT_PARTNER', 2079: 'ID_PARTNER_TEXT', 40004: 'ID_SEARCH', 2046: 'IDET_PARTNER_CONTACT_NAME', 2054: 'IDET_PARTNER_STREET2', 128: '_APS_NEXT_RESOURCE_VALUE', 2040: 'ID_PROTOCOL_GRP', 2065: 'ID_COUNTRY_DROPLIST', 2048: 'IDET_PARTNER_OFFICENO', 2024: 'IDC_STATIC_GROUP', 2041: 'IDR_XML_PROTOCOL', 2025: 'ID_ATT_METHOD_DROPDOWNLIST', 2026: 'IDC_NAME_LIST', 2027: 'IDD_ABOUT', 40001: '_APS_NEXT_COMMAND_VALUE', 2028: 'IDC_ABOUT', 2029: 'IDC_CONTACT_LIST', 2059: 'IDPB_WRITE_CHANGES', 2042: 'IDR_XMLS_PROTOCOL', 40003: 'ID_SEARCH_TEXT', 2030: 'ID_NAME_TEXT', 1092: 'IDC_WIZ_GRAPHIC', 2031: 'IDD_NEW_CONTACT_DIALOG', 40005: 'ID_CONTACT_NAME_TEXT', 2032: 'ID_PARTNER_DROPDOWNLIST', 40006: 'ID_CONTACT_OFFICE_TEXT', 2033: 'ID_NEW_PARTNER_BUTTON', 40007: 'ID_CONTACT_MOBILE_TEXT', 2034: 'IDD_NEW_PARTNER_DIALOG', 2043: 'IDR_NETRPC_PROTOCOL', 40008: 'ID_CONTACT_EMAIL_TEXT', 2035: 'ID_SAVE_PARTNER_BUTTON', 40009: 'ID_CONTACT_SAVE_BUTTON', 2036: 'ID_PARTNER_NAME_TEXT', 2037: 'IDC_NAME_LIST1', 2038: 'IDC_RELOAD', 2044: 'IDD_VIEW_PARTNER_DIALOG', 2001: 'ID_SERVER', 2002: 'ID_PORT', 2003: 'ID_SERVER_PORT', 2004: 'ID_DB_DROPDOWNLIST', 2005: 'ID_USERNAME', 2006: 'ID_PASSWORD', 2007: 'ID_BUT_TESTCONNECTION', 2008: 'ID_DONE', 2009: 'IDD_OBJECT_SETTINGS', 2010: 'IDC_BUT_LOAD_IMAGE', 2011: 'IDC_BUT_SAVE_OBJECT', 2012: 'IDC_BUT_DEL_OBJECT', 2013: 'IDC_OBJECT_TITLE', 2014: 'IDC_OBJECT_NAME', 2015: 'IDC_IMAGE_PATH', 2016: 'IDC_LIST', 2017: 'IDC_HEADER', 2018: 'ID_CREATE_CONTACT', 2019: 'ID_MAKE_ATTACHMENT', 2020: 'ID_CREATE_CASE', 2021: 'IDC_BUT_SET_SERVER_PORT', 2022: 'IDD_SERVER_PORT_DIALOG', 2023: 'IDC_CHKBX', 1000: 'IDC_PROGRESS', 1001: 'IDC_PROGRESS_TEXT', 1002: 'IDC_STATIC_HAM', 1003: 'IDC_STATIC_SPAM', 1004: 'IDC_BROWSE_HAM', 1005: 'IDC_BROWSE_SPAM', 1006: 'IDC_START', 1007: 'IDC_BUT_REBUILD', 1008: 'IDC_BUT_RESCORE', 1009: 'IDC_VERSION', 1010: 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER', 1011: 'IDC_BUT_TRAIN_TO_SPAM_FOLDER', 1012: 'IDC_BUT_TRAIN_NOW', 1013: 'IDC_BUT_FILTER_ENABLE', 1014: 'IDC_FILTER_STATUS', 2045: 'IDET_PARTNER_NAME', 1016: 'IDC_BUT_FILTER_DEFINE', 1017: 'IDC_BUT_ABOUT', 1018: 'IDC_BUT_ACT_SCORE', 1019: 'IDC_BUT_ACT_ALL', 1020: 'IDC_BUT_UNREAD', 1021: 'IDC_BUT_UNSEEN', -1: 'IDC_STATIC', 1023: 'IDC_SLIDER_CERTAIN'}
+ dialogs = {'IDD_OPEN_DOCUEMNT_DIALOG': [['Open Document', (0, 0, 200, 65), -1865940928, 1024, (8, 'Tahoma')], [130, 'Link to Document : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ', -1, (5, 3, 190, 25), 1342177280], [129, '', 2086, (5, 31, 190, 12), 1350631552], [128, 'Ok', 2, (150, 45, 45, 14), 1342242816]], 'IDD_VIEW_PARTNER_DIALOG': [['Open Contact', (0, 0, 350, 215), -1865940928, 1024, (8, 'Tahoma')], [130, 'Email ID : ', -1, (32, 17, 40, 12), 1342177280], [129, '', 2051, (70, 15, 200, 12), 1350631552], [128, 'Search Contact ', 2052, (280, 15, 60, 14), 1342242816], [130, 'Partner Name : ', -1, (13, 42, 50, 17), 1342177280], [129, '', 2064, (70, 42, 150, 12), 1350568064], [128, 'Search Partner', 2070, (225, 41, 60, 14), 1342242816], [128, 'New Partner', 2093, (290, 41, 50, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 65, 175, 125), 1342177287], [130, 'Contact Name : ', -1, (18, 83, 50, 17), 1342177280], [129, '', 2046, (76, 82, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 97, 50, 17), 1342177280], [129, '', 2053, (76, 96, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 112, 50, 17), 1342177280], [129, '', 2054, (76, 111, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 126, 50, 14), 1342177280], [129, '', 40010, (76, 125, 100, 12), 1350631552], [130, 'City : ', -1, (18, 140, 50, 17), 1342177280], [129, '', 40011, (76, 139, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 154, 50, 17), 1342177280], [129, '', 2062, (76, 153, 54, 12), 1350568064], [128, 'Search', 2104, (135, 153, 40, 12), 1342242816], [130, 'Country :', -1, (18, 169, 35, 17), 1342177280], [129, '', 2063, (76, 168, 54, 12), 1350568064], [128, 'Search', 2105, (135, 168, 40, 12), 1342242816], [128, 'Communication ', 2024, (188, 65, 152, 125), 1342177287], [130, 'Phone : ', -1, (194, 83, 30, 17), 1342177280], [129, '', 2048, (224, 82, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 97, 30, 17), 1342177280], [129, '', 2050, (224, 96, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 111, 30, 17), 1342177280], [129, '', 2058, (224, 110, 100, 12), 1350568064], [130, 'Fax : ', -1, (194, 125, 30, 17), 1342177280], [129, '', 2047, (224, 124, 100, 12), 1350631552], [128, 'Create a New Contact', 2071, (124, 195, 82, 14), 1342242816], [128, 'Save', 2059, (213, 195, 60, 14), 1342242816], [128, 'Cancel', 2, (281, 195, 60, 14), 1342242816]], 'IDD_OPEN_PARTNER_DIALOG': [['Open Partner', (0, 0, 200, 65), -1865940928, 1024, (8, 'Tahoma')], [130, 'Link to Partner : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ', -1, (5, 3, 190, 25), 1342177280], [129, '', 2085, (5, 31, 190, 12), 1350631552], [128, 'Ok', 2, (150, 45, 45, 13), 1342242816]], 'IDD_SELECT_STATE': [['Search Fed. State', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2100, (55, 10, 100, 12), 1350631552], [128, 'Search', 40012, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2101, (8, 40, 200, 185), 1353711657], [128, 'Select', 2102, (170, 230, 40, 14), 1342242816]], 'IDD_GENERAL': [['Connection Parameters', (0, 0, 430, 210), 1355284544, None, (8, 'Tahoma')], [128, '', 2024, (10, 10, 250, 130), 1342177287], [130, 'Server : ', -1, (30, 30, 100, 17), 1342177280], [129, '', 2003, (85, 30, 120, 12), 1350633472], [128, 'Change', 2021, (210, 30, 30, 13), 1342242816], [130, 'Database : ', -1, (30, 50, 100, 17), 1342177280], [133, '', 2004, (85, 50, 120, 40), 1344339971], [128, 'Reload', 2038, (210, 50, 30, 13), 1342242816], [130, 'Username : ', -1, (30, 70, 100, 17), 1342177280], [129, '', 2005, (85, 70, 154, 12), 1350631552], [130, 'Password : ', -1, (30, 90, 100, 17), 1342177280], [129, '', 2006, (85, 90, 154, 12), 1350631584], [128, 'Connect', 2007, (179, 110, 60, 13), 1342242816], [128, 'WebServer Parameters', 2024, (270, 10, 150, 130), 1342177287], [130, 'Server : ', -1, (280, 30, 50, 15), 1342177280], [129, '', 2080, (310, 29, 90, 12), 1350568064], [128, 'Change', 2082, (295, 50, 50, 12), 1342242816], [128, 'Connect', 2083, (350, 50, 50, 12), 1342242816]], 'IDD_OBJECT_SETTINGS': [['Documents Setting', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'Document Attributes', 2024, (2, 2, 340, 32), 1342177287], [130, 'Title', -1, (6, 15, 30, 17), 1342177280], [129, '', 2013, (20, 14, 57, 12), 1350631552], [130, 'Document Name', -1, (83, 15, 60, 17), 1342177280], [129, '', 2014, (138, 14, 57, 12), 1350631552], [130, 'Image', -1, (200, 15, 20, 17), 1342177280], [129, '', 2015, (220, 14, 57, 12), 1350631552], [128, 'Load Image', 2010, (286, 13, 50, 15), 1342242816], [128, 'Add', 2011, (347, 13, 38, 15), 1342242816], [128, 'Remove', 2012, (391, 13, 38, 15), 1342242816], ['SysListView32', 'List1', 2016, (8, 40, 535, 160), 1353711657]], 'IDD_NEW_PARTNER_DIALOG': [['Create a New Partner', (0, 0, 140, 40), -1865940928, 1024, (8, 'Tahoma')], [130, 'Name : ', -1, (5, 3, 100, 17), 1342177280], [129, '', 2036, (40, 3, 94, 12), 1350631552], [128, 'Cancel', 2, (90, 22, 45, 14), 1342242816], [128, 'Save', 2035, (40, 22, 45, 14), 1342242817]], 'IDD_MANAGER': [['OpenERP Configuration', (0, 0, 460, 260), -1865940800, None, (8, 'Tahoma')], [128, 'Close', 2008, (400, 239, 50, 14), 1342177281], ['SysTabControl32', '', 1068, (8, 7, 440, 228), 1342177280], ['SysListView32', '', 2016, (0, 0, 0, 0), 1353711657]], 'IDD_WEB_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2089, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2090, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 2091, (60, 35, 45, 14), 1342242817]], 'IDD_ABOUT': [['About', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'About Plugin', -1, (7, 3, 422, 200), 1342177287], [130, '1062', 1062, (60, 30, 20, 20), 1342179342], [130, '', 2028, (80, 90, 300, 100), 1342177280]], 'IDD_NEW_CONTACT_DIALOG': [['Create a New Contact', (0, 0, 350, 180), -1865940928, 1024, (8, 'Tahoma')], [130, 'Select Partner : ', -1, (13, 20, 50, 17), 1342177280], [129, '', 2079, (70, 18, 150, 12), 1350568064], [128, 'Search Partner', 2033, (225, 17, 60, 14), 1342242816], [128, 'New Partner', 2092, (290, 17, 50, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 35, 175, 123), 1342177287], [130, 'Contact Name : ', -1, (18, 53, 100, 17), 1342177280], [129, '', 40005, (76, 52, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 67, 40, 17), 1342177280], [129, '', 2062, (76, 66, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 81, 40, 17), 1342177280], [129, '', 2063, (76, 80, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 94, 50, 17), 1342177280], [129, '', 2068, (76, 93, 100, 12), 1350631552], [130, 'City : ', -1, (18, 106, 50, 17), 1342177280], [129, '', 2067, (76, 107, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 121, 50, 17), 1342177280], [129, '', 2106, (76, 122, 54, 12), 1350568064], [128, 'Search', 2107, (135, 121, 40, 12), 1342242816], [130, 'Country :', -1, (18, 134, 35, 17), 1342177280], [129, '', 2108, (76, 135, 54, 12), 1350568064], [128, 'Search', 2109, (135, 136, 40, 12), 1342242816], [128, 'Communication ', 2024, (188, 35, 150, 123), 1342177287], [130, 'Office : ', -1, (194, 53, 30, 17), 1342177280], [129, '', 40006, (224, 52, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 67, 30, 17), 1342177280], [129, '', 40007, (224, 66, 100, 12), 1350631552], [130, 'Fax : ', -1, (194, 81, 30, 17), 1342177280], [129, '', 2066, (224, 80, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 95, 30, 17), 1342177280], [129, '', 40008, (224, 94, 100, 12), 1350631552], [128, 'Cancel', 2, (290, 162, 45, 13), 1342242816], [128, 'Save', 40009, (240, 162, 45, 13), 1342242816]], 'IDD_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2001, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2002, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 1, (60, 35, 45, 14), 1342242817]], 'IDD_SELECT_PARTNER': [['Search Partner', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2076, (55, 10, 100, 12), 1350631552], [128, 'Search', 2077, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2072, (8, 40, 200, 185), 1353711657], [128, 'Create New Partner', 2078, (10, 230, 100, 14), 1342242816], [128, 'Select', 2075, (170, 230, 40, 14), 1342242816]], 'IDD_SYNC': [['Push to OpenERP', (0, 0, 470, 320), -1865940928, 1024, (8, 'Tahoma')], [128, 'Link to an Existing Documents ', 2024, (8, 5, 250, 290), 1342242823], [130, 'Search for : ', -1, (15, 17, 40, 12), 1342177280], [129, '', 40003, (60, 15, 120, 12), 1350631552], [128, 'Search', 40004, (187, 15, 40, 14), 1342242816], [130, 'Documents : ', -1, (15, 140, 100, 14), 1342177280], ['SysListView32', 'List1', 2026, (15, 150, 234, 110), 1350631433], [128, 'Push', 2019, (160, 270, 85, 14), 1342242816], [128, ' Create a Document ', 2024, (263, 5, 202, 100), 1342242823], [130, 'Type of Document : ', -1, (266, 25, 100, 12), 1342177280], [133, '', 2025, (332, 24, 75, 45), 1344339971], [128, 'Create', 2020, (412, 23, 50, 14), 1342242816], [128, ' Create a Contact ', 2024, (263, 110, 202, 185), 1342242823], [130, 'Create a New Contact : ', -1, (280, 140, 100, 12), 1342177280], [128, 'Create Contact', 2018, (360, 138, 60, 14), 1342242816], [128, 'Close', 2, (385, 300, 60, 14), 1342242816]], 'IDD_SELECT_COUNTRY': [['Search Country', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2095, (55, 10, 100, 12), 1350631552], [128, 'Search', 2098, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2096, (8, 40, 200, 185), 1353711657], [128, 'Select', 2097, (170, 230, 40, 14), 1342242816]]}
+ ids = {'IDC_BUT_DEL_OBJECT': 2012, 'IDD_OPEN_PARTNER_DIALOG': 2084, 'IDD_SELECT_STATE': 2099, 'IDC_DELAY1_SLIDER': 1056, 'IDC_PROGRESS': 1000, 'IDD_MANAGER': 101, 'IDC_ABOUT': 2028, 'IDD_DIAGNOSTIC': 113, 'IDET_PARTNER_COUNTRY': 2063, 'IDD_TRAINING': 102, 'ID_CONTACT_EMAIL_TEXT': 40008, 'IDC_DELAY2_TEXT': 1059, 'IDC_DELAY1_TEXT': 1057, 'IDD_WIZARD': 114, 'IDC_CHKBX': 2023, 'IDC_STATIC_HAM': 1002, 'IDC_PROGRESS_TEXT': 1001, 'IDR_XMLS_PROTOCOL': 2042, 'IDD_GENERAL': 108, 'IDD_ABOUT': 2027, 'IDD_SYNC': 40002, 'IDC_TAB': 1068, 'IDC_FOLDER_UNSURE': 1033, '_APS_NEXT_SYMED_VALUE': 101, 'IDC_VERBOSE_LOG': 1061, 'IDC_EDIT1': 1094, 'IDC_BROWSE': 1037, 'ID_DB_DROPDOWNLIST': 2004, 'IDC_BACK_BTN': 1069, 'ID_CONTACT_NAME_TEXT': 40005, 'IDPB_PARTNER_SEARCH': 2077, 'IDD_WIZARD_FINISHED_UNCONFIGURED': 119, 'IDC_ACTION_CERTAIN': 1025, 'IDC_BUT_ACT_ALL': 1019, 'IDD_FILTER_NOW': 104, 'IDET_WED_SERVER': 2080, 'ID_WEB_OK': 2091, 'ID_PROTOCOL_GRP': 2040, 'IDC_HEADER': 2017, 'IDC_MARK_SPAM_AS_READ': 1047, 'IDPB_NEW_PARTNER_BUTTON': 2092, 'ID_PARTNER_NAME_TEXT': 2036, 'IDC_RECOVER_RS': 1075, 'IDC_NAME_LIST1': 2037, 'ID_CONTACT_OFFICE_TEXT': 40006, 'IDC_STATIC': -1, 'IDC_PAGE_PLACEHOLDER': 1078, 'IDC_BROWSE_WATCH': 1039, 'IDET_ZIP': 40010, 'IDET_PARTNER_CITY': 40011, 'IDET_PARTNER_LINK_TEXT': 2085, 'IDC_FOLDER_HAM': 1083, 'IDC_LIST_COUNTRY': 2096, 'IDD_WIZARD_FOLDERS_REST': 117, 'IDC_SHOW_DATA_FOLDER': 1071, 'IDC_BUT_ACT_SCORE': 1018, 'IDET_STATE_SEARCH_NAME': 2100, 'IDET_WEB_SERVER': 2089, '_APS_NEXT_RESOURCE_VALUE': 128, 'ID_SET_WEB_CONNECTION': 2082, 'IDC_LIST_STATE': 2101, 'IDC_CONTACT_LIST': 2029, 'IDC_SLIDER_CERTAIN': 1023, 'IDET_PARTNER_STREET': 2053, 'IDC_BUT_UNREAD': 1020, 'ID_PARTNER_DROPDOWNLIST': 2032, 'ID_COUNTRY_DROPLIST': 2065, 'IDC_BUT_ABOUT': 1017, 'IDC_BUT_RESCORE': 1008, 'IDC_BUT_SEARCHSUB': 1041, 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER': 1010, 'IDET_PARTNER_MOBILENO': 2050, 'ID_CONTACT_MOBILE_TEXT': 40007, 'IDD_VIEW_PARTNER_DIALOG': 2044, 'IDD_WIZARD_FOLDERS_TRAIN': 120, 'IDC_BUT_FILTER_ENABLE': 1013, 'IDPB_WEB_CONNECTION': 2083, 'IDC_ABOUT_BTN': 1072, 'IDD_WIZARD_FINISHED_TRAINED': 122, 'ID_SERVER': 2001, 'IDD_SELECT_PARTNER': 2073, 'IDET_NC_PARTNER_STATE': 2106, 'IDD_FOLDER_SELECTOR': 105, 'IDC_BUT_SET_SERVER_PORT': 2021, 'ID_DONE': 2008, 'IDC_LIST_FOLDERS': 1040, 'IDC_IMAGE_PATH': 2015, 'IDB_SBWIZLOGO': 125, 'IDB_OPENERPLOGO': 1062, 'ID_ZIP_TEXT': 2068, 'IDEB_OPENDOC_LINK_TEXT': 2086, 'IDD_NEW_PARTNER_DIALOG': 2034, 'ID_PARTNER_DROPLIST': 2069, 'IDC_BUT_VIEW_LOG': 1093, 'IDC_STATUS2': 1044, 'IDC_STATUS1': 1043, 'IDCANCEL': 2, 'IDC_BROWSE_HAM': 1004, 'ID_BUT_TESTCONNECTION': 2007, 'IDR_NETRPC_PROTOCOL': 2043, 'IDC_BROWSE_SPAM': 1005, 'IDD_OPEN_DOCUEMNT_DIALOG': 2087, 'IDD_WIZARD_FINISHED_UNTRAINED': 116, 'IDC_MARK_UNSURE_AS_READ': 1051, 'IDPB_SEARCH_COUNTRY1': 2105, 'ID_PARTNER_CITY_TEXT': 2067, 'IDC_BUT_WIZARD': 1070, 'IDC_VERSION': 1009, 'ID_NEW_PARTNER_BUTTON': 2033, 'IDC_FOLDER_NAMES': 1036, 'ID_ATT_METHOD_DROPDOWNLIST': 2025, 'IDC_BUT_TIMER_ENABLED': 1091, 'IDPB_WRITE_CHANGES': 2059, 'IDC_SLIDER_UNSURE': 1029, 'IDC_BUT_NEW': 1046, 'IDC_FOLDER_WATCH': 1038, 'IDPB_CREATE_NEW_PARTNER': 2078, 'IDC_BUT_UNTRAINED': 1088, 'IDC_STATIC_SPAM': 1003, 'IDD_NEW_CONTACT_DIALOG': 2031, 'IDC_EDIT_UNSURE': 1030, 'IDC_BUT_CLEARALL': 1042, 'IDC_BUT_UNSEEN': 1021, 'IDC_OBJECT_NAME': 2014, 'IDD_WIZARD_FOLDERS_WATCH': 118, 'IDPB_SEARCH_STATE': 2103, 'IDET_COUNTRY_SEARCH_NAME': 2095, 'IDC_BUT_SAVE_OBJECT': 2011, 'ID_FED_STATE_DROPLIST': 2064, 'ID_ALL_COUNTRY_DROPDOWNLIST': 2061, 'IDC_EDIT_CERTAIN': 1024, 'IDC_BUT_FILTER_DEFINE': 1016, 'ID_NEW_PART_BUTTON': 2070, 'ID_FAX_TEXT': 2066, 'IDD_WIZARD_TRAINING_IS_IMPORTANT': 123, 'ID_ALL_STATE_DROPDOWNLIST': 2060, 'IDPB_SEARCH_STATE1': 2104, 'IDC_INBOX_TIMER_ONLY': 1060, 'IDPB_SEARCH_PARTNER': 2052, 'ID_USERNAME': 2005, '_APS_NEXT_CONTROL_VALUE': 1096, 'IDC_WIZ_GRAPHIC': 1092, 'IDD_OBJECT_SETTINGS': 2009, 'IDD_FILTER_UNSURE': 111, 'IDC_DEL_SPAM_RS': 1074, 'IDD_SELECT_COUNTRY': 2094, 'ID_SERVER_PORT': 2003, 'IDR_XML_PROTOCOL': 2041, 'IDET_PARTNER_OFFICENO': 2048, 'IDB_FOLDERS': 127, 'IDC_BUT_PREPARATION': 1081, 'ID_STREET2_TEXT': 2063, 'IDC_DELAY2_SLIDER': 1058, 'IDET_PARTNER': 2064, 'IDC_SAVE_SPAM_SCORE': 1048, 'IDC_OBJECT_TITLE': 2013, 'IDC_FOLDER_CERTAIN': 1027, 'IDET_WEB_PORT': 2090, 'IDC_BROWSE_UNSURE': 1034, 'IDC_STATISTICS': 1095, 'IDPB_STATE_SEARCH': 40012, 'ID_MAKE_ATTACHMENT': 2019, 'IDC_BUT_LOAD_IMAGE': 2010, 'IDC_NAME_LIST': 2026, 'IDC_BUT_TRAIN_TO_SPAM_FOLDER': 1011, 'IDET_PARTNER_SEARCH_NAME': 2076, 'IDC_BUT_RESET': 1073, 'ID_SEARCH': 40004, 'IDET_PARTNER_CONTACT_NAME': 2046, 'IDPB_SELECT_STATE': 2102, 'IDC_ACTION_UNSURE': 1031, 'IDD_WIZARD_TRAIN': 121, 'IDC_STATIC_GROUP': 2024, 'IDPB_NEWPARTNER_BUTTON': 2071, 'ID_PARTNER_TEXT': 2079, 'IDD_WIZARD_FINISHED_TRAIN_LATER': 124, 'IDET_PARTNER_NAME': 2045, 'IDPB_NEW_PART_BUTTON': 2093, 'IDC_BUT_REBUILD': 1007, 'IDET_PARTNER_STREET2': 2054, 'IDPB_SEARCH_COUNTRY': 2098, 'ID_SAVE_PARTNER_BUTTON': 2035, 'IDPB_SELECT_PARTNER': 2075, 'ID_STREET_TEXT': 2062, '_APS_NEXT_COMMAND_VALUE': 40001, 'IDET_SEARCH_PARTNER': 2051, 'IDC_LIST_PARTNER': 2072, 'IDD_WEB_SERVER_PORT_DIALOG': 2088, 'ID_PORT': 2002, 'IDD_SERVER_PORT_DIALOG': 2022, 'IDET_PARTNER_STATE': 2062, 'IDPB_SELECT_COUNTRY': 2097, 'ID_SEARCH_TEXT': 40003, 'IDET_NC_PARTNER_COUNTRY': 2108, 'ID_CREATE_CONTACT': 2018, 'IDC_FORWARD_BTN': 1077, 'IDC_TRAINING_STATUS': 1035, 'IDD_WIZARD_WELCOME': 115, 'IDET_PARTNER_FAX': 2058, 'IDC_BUT_TRAIN': 1089, 'IDC_LIST': 2016, 'ID_CREATE_CASE': 2020, 'IDET_PARTNER_EMAIL': 2047, 'IDC_START': 1006, 'IDD_FILTER': 103, 'IDC_RELOAD': 2038, 'ID_PASSWORD': 2006, 'ID_NAME_TEXT': 2030, 'IDC_FILTER_STATUS': 1014, 'IDPB_NC_SEARCH_STATE1': 2107, 'ID_CONTACT_SAVE_BUTTON': 40009, 'IDOK': 1, 'IDC_BROWSE_CERTAIN': 1028, 'IDC_BUT_SHOW_DIAGNOSTICS': 1080, 'IDC_BUT_TRAIN_NOW': 1012, 'IDPB_NC_SEARCH_COUNTRY1': 2109}
+ names = {1024: 'IDC_EDIT_CERTAIN', 1: 'IDOK', 2: 'IDCANCEL', 1027: 'IDC_FOLDER_CERTAIN', 1028: 'IDC_BROWSE_CERTAIN', 1029: 'IDC_SLIDER_UNSURE', 1030: 'IDC_EDIT_UNSURE', 1031: 'IDC_ACTION_UNSURE', 1033: 'IDC_FOLDER_UNSURE', 1034: 'IDC_BROWSE_UNSURE', 1035: 'IDC_TRAINING_STATUS', 1036: 'IDC_FOLDER_NAMES', 1037: 'IDC_BROWSE', 1038: 'IDC_FOLDER_WATCH', 1039: 'IDC_BROWSE_WATCH', 1040: 'IDC_LIST_FOLDERS', 1041: 'IDC_BUT_SEARCHSUB', 1042: 'IDC_BUT_CLEARALL', 1043: 'IDC_STATUS1', 1044: 'IDC_STATUS2', 2069: 'ID_PARTNER_DROPLIST', 1046: 'IDC_BUT_NEW', 1047: 'IDC_MARK_SPAM_AS_READ', 1048: 'IDC_SAVE_SPAM_SCORE', 2052: 'IDPB_SEARCH_PARTNER', 1051: 'IDC_MARK_UNSURE_AS_READ', 2076: 'IDET_PARTNER_SEARCH_NAME', 2077: 'IDPB_PARTNER_SEARCH', 2078: 'IDPB_CREATE_NEW_PARTNER', 2053: 'IDET_PARTNER_STREET', 1056: 'IDC_DELAY1_SLIDER', 1057: 'IDC_DELAY1_TEXT', 1058: 'IDC_DELAY2_SLIDER', 1059: 'IDC_DELAY2_TEXT', 1060: 'IDC_INBOX_TIMER_ONLY', 1061: 'IDC_VERBOSE_LOG', 1062: 'IDB_OPENERPLOGO', 2047: 'IDET_PARTNER_EMAIL', 2088: 'IDD_WEB_SERVER_PORT_DIALOG', 2089: 'IDET_WEB_SERVER', 2090: 'IDET_WEB_PORT', 2091: 'ID_WEB_OK', 1068: 'IDC_TAB', 1069: 'IDC_BACK_BTN', 1070: 'IDC_BUT_WIZARD', 1071: 'IDC_SHOW_DATA_FOLDER', 1072: 'IDC_ABOUT_BTN', 1073: 'IDC_BUT_RESET', 1074: 'IDC_DEL_SPAM_RS', 1075: 'IDC_RECOVER_RS', 2100: 'IDET_STATE_SEARCH_NAME', 1077: 'IDC_FORWARD_BTN', 1078: 'IDC_PAGE_PLACEHOLDER', 2057: 'IDET_PARTNER_COUNTRY', 1080: 'IDC_BUT_SHOW_DIAGNOSTICS', 1081: 'IDC_BUT_PREPARATION', 2106: 'IDET_NC_PARTNER_STATE', 1083: 'IDC_FOLDER_HAM', 2108: 'IDET_NC_PARTNER_COUNTRY', 2058: 'IDET_PARTNER_FAX', 1088: 'IDC_BUT_UNTRAINED', 1089: 'IDC_BUT_TRAIN', 40002: 'IDD_SYNC', 1091: 'IDC_BUT_TIMER_ENABLED', 1025: 'IDC_ACTION_CERTAIN', 1093: 'IDC_BUT_VIEW_LOG', 1094: 'IDC_EDIT1', 1095: 'IDC_STATISTICS', 1096: '_APS_NEXT_CONTROL_VALUE', 2060: 'ID_ALL_STATE_DROPDOWNLIST', 40010: 'IDET_ZIP', 40011: 'IDET_PARTNER_CITY', 40012: 'IDPB_STATE_SEARCH', 2061: 'ID_ALL_COUNTRY_DROPDOWNLIST', 2062: 'IDET_PARTNER_STATE', 2063: 'IDET_PARTNER_COUNTRY', 2064: 'IDET_PARTNER', 101: 'IDD_MANAGER', 102: 'IDD_TRAINING', 103: 'IDD_FILTER', 104: 'IDD_FILTER_NOW', 105: 'IDD_FOLDER_SELECTOR', 106: 'IDD_ABOUT', 108: 'IDD_GENERAL', 2066: 'ID_FAX_TEXT', 111: 'IDD_FILTER_UNSURE', 113: 'IDD_DIAGNOSTIC', 114: 'IDD_WIZARD', 115: 'IDD_WIZARD_WELCOME', 116: 'IDD_WIZARD_FINISHED_UNTRAINED', 117: 'IDD_WIZARD_FOLDERS_REST', 118: 'IDD_WIZARD_FOLDERS_WATCH', 119: 'IDD_WIZARD_FINISHED_UNCONFIGURED', 120: 'IDD_WIZARD_FOLDERS_TRAIN', 121: 'IDD_WIZARD_TRAIN', 122: 'IDD_WIZARD_FINISHED_TRAINED', 123: 'IDD_WIZARD_TRAINING_IS_IMPORTANT', 124: 'IDD_WIZARD_FINISHED_TRAIN_LATER', 125: 'IDB_SBWIZLOGO', 127: 'IDB_FOLDERS', 2067: 'ID_PARTNER_CITY_TEXT', 2050: 'IDET_PARTNER_MOBILENO', 2070: 'ID_NEW_PART_BUTTON', 2071: 'IDPB_NEWPARTNER_BUTTON', 2072: 'IDC_LIST_PARTNER', 2073: 'IDD_SELECT_PARTNER', 2068: 'ID_ZIP_TEXT', 2051: 'IDET_SEARCH_PARTNER', 2075: 'IDPB_SELECT_PARTNER', 2079: 'ID_PARTNER_TEXT', 2080: 'IDET_WED_SERVER', 2081: 'IDET_WEB_PORT', 2082: 'ID_SET_WEB_CONNECTION', 2083: 'IDPB_WEB_CONNECTION', 2084: 'IDD_OPEN_PARTNER_DIALOG', 2085: 'IDET_PARTNER_LINK_TEXT', 40004: 'ID_SEARCH', 2086: 'IDEB_OPENDOC_LINK_TEXT', 2087: 'IDD_OPEN_DOCUEMNT_DIALOG', 2046: 'IDET_PARTNER_CONTACT_NAME', 2105: 'IDPB_SEARCH_COUNTRY1', 2054: 'IDET_PARTNER_STREET2', 128: '_APS_NEXT_RESOURCE_VALUE', 2092: 'IDPB_NEW_PARTNER_BUTTON', 2093: 'IDPB_NEW_PART_BUTTON', 2094: 'IDD_SELECT_COUNTRY', 2095: 'IDET_COUNTRY_SEARCH_NAME', 2096: 'IDC_LIST_COUNTRY', 2097: 'IDPB_SELECT_COUNTRY', 2098: 'IDPB_SEARCH_COUNTRY', 2099: 'IDD_SELECT_STATE', 2101: 'IDC_LIST_STATE', 2102: 'IDPB_SELECT_STATE', 2103: 'IDPB_SEARCH_STATE', 2104: 'IDPB_SEARCH_STATE1', 2040: 'ID_PROTOCOL_GRP', 2065: 'ID_COUNTRY_DROPLIST', 2048: 'IDET_PARTNER_OFFICENO', 2107: 'IDPB_NC_SEARCH_STATE1', 2109: 'IDPB_NC_SEARCH_COUNTRY1', 2024: 'IDC_STATIC_GROUP', 2041: 'IDR_XML_PROTOCOL', 2025: 'ID_ATT_METHOD_DROPDOWNLIST', 2026: 'IDC_NAME_LIST', 2027: 'IDD_ABOUT', 40001: '_APS_NEXT_COMMAND_VALUE', 2028: 'IDC_ABOUT', 2029: 'IDC_CONTACT_LIST', 2059: 'IDPB_WRITE_CHANGES', 2042: 'IDR_XMLS_PROTOCOL', 40003: 'ID_SEARCH_TEXT', 2030: 'ID_NAME_TEXT', 1092: 'IDC_WIZ_GRAPHIC', 2031: 'IDD_NEW_CONTACT_DIALOG', 40005: 'ID_CONTACT_NAME_TEXT', 2032: 'ID_PARTNER_DROPDOWNLIST', 40006: 'ID_CONTACT_OFFICE_TEXT', 2033: 'ID_NEW_PARTNER_BUTTON', 40007: 'ID_CONTACT_MOBILE_TEXT', 2034: 'IDD_NEW_PARTNER_DIALOG', 2043: 'IDR_NETRPC_PROTOCOL', 40008: 'ID_CONTACT_EMAIL_TEXT', 2035: 'ID_SAVE_PARTNER_BUTTON', 40009: 'ID_CONTACT_SAVE_BUTTON', 2036: 'ID_PARTNER_NAME_TEXT', 2037: 'IDC_NAME_LIST1', 2038: 'IDC_RELOAD', 2044: 'IDD_VIEW_PARTNER_DIALOG', 2001: 'ID_SERVER', 2002: 'ID_PORT', 2003: 'ID_SERVER_PORT', 2004: 'ID_DB_DROPDOWNLIST', 2005: 'ID_USERNAME', 2006: 'ID_PASSWORD', 2007: 'ID_BUT_TESTCONNECTION', 2008: 'ID_DONE', 2009: 'IDD_OBJECT_SETTINGS', 2010: 'IDC_BUT_LOAD_IMAGE', 2011: 'IDC_BUT_SAVE_OBJECT', 2012: 'IDC_BUT_DEL_OBJECT', 2013: 'IDC_OBJECT_TITLE', 2014: 'IDC_OBJECT_NAME', 2015: 'IDC_IMAGE_PATH', 2016: 'IDC_LIST', 2017: 'IDC_HEADER', 2018: 'ID_CREATE_CONTACT', 2019: 'ID_MAKE_ATTACHMENT', 2020: 'ID_CREATE_CASE', 2021: 'IDC_BUT_SET_SERVER_PORT', 2022: 'IDD_SERVER_PORT_DIALOG', 2023: 'IDC_CHKBX', 1000: 'IDC_PROGRESS', 1001: 'IDC_PROGRESS_TEXT', 1002: 'IDC_STATIC_HAM', 1003: 'IDC_STATIC_SPAM', 1004: 'IDC_BROWSE_HAM', 1005: 'IDC_BROWSE_SPAM', 1006: 'IDC_START', 1007: 'IDC_BUT_REBUILD', 1008: 'IDC_BUT_RESCORE', 1009: 'IDC_VERSION', 1010: 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER', 1011: 'IDC_BUT_TRAIN_TO_SPAM_FOLDER', 1012: 'IDC_BUT_TRAIN_NOW', 1013: 'IDC_BUT_FILTER_ENABLE', 1014: 'IDC_FILTER_STATUS', 2045: 'IDET_PARTNER_NAME', 1016: 'IDC_BUT_FILTER_DEFINE', 1017: 'IDC_BUT_ABOUT', 1018: 'IDC_BUT_ACT_SCORE', 1019: 'IDC_BUT_ACT_ALL', 1020: 'IDC_BUT_UNREAD', 1021: 'IDC_BUT_UNSEEN', -1: 'IDC_STATIC', 1023: 'IDC_SLIDER_CERTAIN'}
bitmaps = {'IDB_OPENERPLOGO': 'OpenERP_Logo.bmp'}
def ParseDialogs(s):
return FakeParser()
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
index fb060ecdab3..4514d17b0eb 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
@@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_MANAGER DIALOGEX 0, 0, 460, 260
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME
-CAPTION "OpenERP Configuarion"
+CAPTION "OpenERP Configuration"
FONT 8, "Tahoma", 1000, 0, 0x0
BEGIN
DEFPUSHBUTTON "Close",ID_DONE,400,239,50,14//,WS_VISIBLE //| WS_TABSTOP
@@ -57,6 +57,12 @@ BEGIN
LTEXT "Password : ",IDC_STATIC,30,90,100,17
EDITTEXT ID_PASSWORD,85,90,154,12,ES_AUTOHSCROLL | WS_VISIBLE | WS_TABSTOP | ES_PASSWORD
PUSHBUTTON "Connect",ID_BUT_TESTCONNECTION,179,110,60,13, WS_VISIBLE | WS_TABSTOP
+
+ GROUPBOX "WebServer Parameters",IDC_STATIC_GROUP, 270, 10,150,130
+ LTEXT "Server : ",IDC_STATIC, 280, 30, 50, 15
+ EDITTEXT IDET_WED_SERVER,310, 29, 90, 12,ES_AUTOHSCROLL | ES_READONLY
+ PUSHBUTTON "Change",ID_SET_WEB_CONNECTION, 295, 50, 50, 12 , WS_VISIBLE | WS_TABSTOP
+ PUSHBUTTON "Connect",IDPB_WEB_CONNECTION, 350, 50, 50, 12 , WS_VISIBLE | WS_TABSTOP
END
IDD_OBJECT_SETTINGS DIALOGEX 0, 0, 430, 210
@@ -131,7 +137,7 @@ BEGIN
PUSHBUTTON "Close",IDCANCEL,385,300,60,14,WS_TABSTOP
END
-IDD_NEW_CONTACT_DIALOG DIALOGEX 0, 0, 350, 150
+IDD_NEW_CONTACT_DIALOG DIALOGEX 0, 0, 350, 180
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Create a New Contact"
@@ -139,10 +145,11 @@ FONT 8, "Tahoma", 1000, 0, 0x0
BEGIN
LTEXT "Select Partner : ",IDC_STATIC,13,20,50,17
- EDITTEXT ID_PARTNER_TEXT, 70, 18, 200, 12 , ES_AUTOHSCROLL |ES_READONLY
- PUSHBUTTON "Search Partner",ID_NEW_PARTNER_BUTTON,280,17,60,14, WS_TABSTOP
+ EDITTEXT ID_PARTNER_TEXT, 70, 18, 150, 12 , ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search Partner",ID_NEW_PARTNER_BUTTON,225,17,60,14, WS_TABSTOP
+ PUSHBUTTON "New Partner",IDPB_NEW_PARTNER_BUTTON,290, 17, 50, 14, WS_TABSTOP
- GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,35,175,90
+ GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,35,175,123
LTEXT "Contact Name : ",IDC_STATIC, 18, 53, 100, 17
EDITTEXT ID_CONTACT_NAME_TEXT, 76, 52, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "Street : ",IDC_STATIC, 18, 67, 40, 17
@@ -153,9 +160,15 @@ BEGIN
EDITTEXT ID_ZIP_TEXT,76, 93, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "City : ",IDC_STATIC, 18,106, 50, 17
EDITTEXT ID_PARTNER_CITY_TEXT,76,107,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ LTEXT "Fed. State : ",IDC_STATIC,18,121,50,17
+ EDITTEXT IDET_NC_PARTNER_STATE, 76, 122, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_NC_SEARCH_STATE1 ,135, 121, 40, 12, WS_TABSTOP
+ LTEXT "Country :",IDC_STATIC, 18, 134, 35, 17
+ EDITTEXT IDET_NC_PARTNER_COUNTRY, 76, 135, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_NC_SEARCH_COUNTRY1, 135, 136, 40, 12, WS_TABSTOP
- GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 35, 150, 90
+ GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 35, 150, 123
LTEXT "Office : ",IDC_STATIC,194, 53, 30, 17
EDITTEXT ID_CONTACT_OFFICE_TEXT, 224, 52, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "Mobile : ",IDC_STATIC,194, 67, 30, 17
@@ -165,8 +178,8 @@ BEGIN
LTEXT "Email : ",IDC_STATIC, 194, 95, 30, 17
EDITTEXT ID_CONTACT_EMAIL_TEXT, 224, 94, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
- PUSHBUTTON "Cancel",IDCANCEL,290,130,45,14, WS_TABSTOP
- PUSHBUTTON "Save",ID_CONTACT_SAVE_BUTTON,240,130,45,14, WS_TABSTOP
+ PUSHBUTTON "Cancel",IDCANCEL,290,162,45,13, WS_TABSTOP
+ PUSHBUTTON "Save",ID_CONTACT_SAVE_BUTTON,240,162,45,13, WS_TABSTOP
END
IDD_NEW_PARTNER_DIALOG DIALOGEX 0, 0, 140,40
@@ -192,8 +205,9 @@ BEGIN
PUSHBUTTON "Search Contact ",IDPB_SEARCH_PARTNER,280,15,60,14,WS_TABSTOP
LTEXT "Partner Name : ",IDC_STATIC,13,42,50,17
- EDITTEXT IDET_PARTNER,70, 42, 200, 12,ES_AUTOHSCROLL |ES_READONLY
- PUSHBUTTON "Search Partner",ID_NEW_PART_BUTTON,280,41,60,14, WS_TABSTOP
+ EDITTEXT IDET_PARTNER,70, 42, 150, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search Partner",ID_NEW_PART_BUTTON,225,41,60,14, WS_TABSTOP
+ PUSHBUTTON "New Partner",IDPB_NEW_PART_BUTTON,290,41,50,14, WS_TABSTOP
GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,65,175,125
LTEXT "Contact Name : ",IDC_STATIC,18,83,50,17
@@ -206,10 +220,14 @@ BEGIN
EDITTEXT IDET_ZIP, 76, 125, 100, 12 , ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "City : ",IDC_STATIC,18,140,50,17
EDITTEXT IDET_PARTNER_CITY,76,139,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+
LTEXT "Fed. State : ",IDC_STATIC,18,154,50,17
- EDITTEXT IDET_PARTNER_STATE, 76, 153, 100, 12,ES_AUTOHSCROLL |ES_READONLY
+ EDITTEXT IDET_PARTNER_STATE, 76, 153, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_SEARCH_STATE1 ,135, 153, 40, 12, WS_TABSTOP
+
LTEXT "Country :",IDC_STATIC, 18, 169, 35, 17
- EDITTEXT IDET_PARTNER_COUNTRY, 76, 168, 100, 12,ES_AUTOHSCROLL |ES_READONLY
+ EDITTEXT IDET_PARTNER_COUNTRY, 76, 168, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_SEARCH_COUNTRY1, 135, 168, 40, 12, WS_TABSTOP
GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 65, 152, 125
LTEXT "Phone : ",IDC_STATIC, 194, 83, 30, 17
@@ -240,7 +258,75 @@ BEGIN
CONTROL "List1",IDC_LIST_PARTNER,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
PUSHBUTTON "Create New Partner", IDPB_CREATE_NEW_PARTNER, 10, 230, 100, 14, WS_TABSTOP
- PUSHBUTTON "Select", IDPB_SELECT_PARTNER, 130, 230, 40, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 175, 230, 40, 14, WS_TABSTOP
+ PUSHBUTTON "Select", IDPB_SELECT_PARTNER, 170, 230, 40, 14, WS_TABSTOP
+END
+
+IDD_OPEN_PARTNER_DIALOG DIALOGEX 0, 0, 200,65
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Open Partner"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Link to Partner : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ",IDC_STATIC,5,3,190,25
+ EDITTEXT IDET_PARTNER_LINK_TEXT,5,31,190,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Ok",IDCANCEL,150,45,45,13,WS_TABSTOP
+
+END
+
+IDD_OPEN_DOCUEMNT_DIALOG DIALOGEX 0, 0, 200,65
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Open Document"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Link to Document : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ",IDC_STATIC,5,3,190,25
+ EDITTEXT IDEB_OPENDOC_LINK_TEXT,5,31,190,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Ok",IDCANCEL,150,45,45,14,WS_TABSTOP
+END
+
+IDD_WEB_SERVER_PORT_DIALOG DIALOGEX 0, 0, 160, 55
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "OpenERP Connection"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Server : ",IDC_STATIC,5,3,150,17
+ EDITTEXT IDET_WEB_SERVER,40,3,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ LTEXT "Port : ",IDC_STATIC,5,18,100,17
+ EDITTEXT IDET_WEB_PORT,40,18,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Close",IDCANCEL,110,35,45,14,WS_TABSTOP
+ DEFPUSHBUTTON "OK",ID_WEB_OK,60,35,45,14,WS_TABSTOP
+END
+
+IDD_SELECT_COUNTRY DIALOGEX 0, 0, 220, 250
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Search Country"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+
+ LTEXT "Enter Name : ",IDC_STATIC,8,12,80,17
+ EDITTEXT IDET_COUNTRY_SEARCH_NAME, 55, 10, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Search", IDPB_SEARCH_COUNTRY, 160, 10, 50, 14, WS_TABSTOP
+
+ CONTROL "List1",IDC_LIST_COUNTRY,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
+ LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
+ PUSHBUTTON "Select", IDPB_SELECT_COUNTRY, 170, 230, 40, 14, WS_TABSTOP
+END
+
+IDD_SELECT_STATE DIALOGEX 0, 0, 220, 250
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Search Fed. State"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+
+ LTEXT "Enter Name : ",IDC_STATIC,8,12,80,17
+ EDITTEXT IDET_STATE_SEARCH_NAME, 55, 10, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Search", IDPB_STATE_SEARCH, 160, 10, 50, 14, WS_TABSTOP
+
+ CONTROL "List1",IDC_LIST_STATE,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
+ LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
+ PUSHBUTTON "Select", IDPB_SELECT_STATE, 170, 230, 40, 14, WS_TABSTOP
END
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/eml.py b/addons/outlook/plugin/openerp-outlook-plugin/eml.py
index e18b7c5414d..ded81a16c6d 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/eml.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/eml.py
@@ -26,7 +26,8 @@ import chilkat
import os
from manager import ustr
import win32ui
-email = chilkat.CkEmail()
+import email
+cemail = chilkat.CkEmail()
dt = chilkat.SYSTEMTIME()
def generateEML(mail):
sub = (mail.Subject).replace(' ','')
@@ -36,20 +37,21 @@ def generateEML(mail):
sender_name = mail.SenderEmailAddress
attachments=mail.Attachments
- email = chilkat.CkEmail()
- email.put_Subject (ustr(sub).encode('iso-8859-1'))
- email.put_Body (ustr(body).encode('utf-8'))
- email.put_FromAddress (ustr(sender_email).encode('iso-8859-1'))
- email.put_From (ustr(sender_email).encode('iso-8859-1'))
+ cemail = chilkat.CkEmail()
+ cemail.put_Subject (ustr(sub).encode('iso-8859-1'))
+ cemail.put_Body (ustr(body).encode('utf-8'))
+ cemail.put_FromAddress (ustr(sender_email).encode('iso-8859-1'))
+ cemail.put_From (ustr(sender_email).encode('iso-8859-1'))
for i in xrange(1, recipients.Count+1):
name = ustr(recipients.Item(i).Name).encode('iso-8859-1')
address = ustr(recipients.Item(i).Address).encode('iso-8859-1')
- email.AddTo(name,address)
+ cemail.AddTo(name,address)
eml_name= ustr(sub).encode('iso-8859-1')+'-'+str(mail.EntryID)[-9:]
ls = ['*', '/', '\\', '<', '>', ':', '?', '"', '|', '\t', '\n']
- mails_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\")
+ #mails_folder_path = os.path.abspath("%temp%\\dialogs\\resources\\mails\\")
+ mails_folder_path = os.path.abspath("C:\\printing")
attachments_folder_path = mails_folder_path + "\\attachments\\"
if not os.path.exists(attachments_folder_path):
os.makedirs(attachments_folder_path)
@@ -70,7 +72,7 @@ def generateEML(mail):
os.remove(att_file)
f1 = att_file
attachments[i].SaveAsFile(att_file)
- contentType = email.addFileAttachment(att_file)
+ contentType = cemail.addFileAttachment(att_file)
if (contentType == None ):
print mail.lastErrorText()
sys.exit()
@@ -85,9 +87,11 @@ def generateEML(mail):
f = eml_name.split('-')
eml_name = f[0][0:l] + '.' + f[-1]
eml_path = ustr(os.path.join(mails_folder_path,eml_name+".eml")).encode('iso-8859-1')
- success = email.SaveEml(eml_path)
+ success = cemail.SaveEml(eml_path)
+ fp = open(eml_path, 'rb')
+ new_mail = email.message_from_file(fp)
+ fp.close()
if (success == False):
- print email.lastErrorText()
+ print cemail.lastErrorText()
sys.exit()
-
- return eml_path
\ No newline at end of file
+ return new_mail
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
index 45fdeaa5d82..af2c5afd35c 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
@@ -27,7 +27,9 @@ import pythoncom
import time
from manager import ustr
import email
-
+from win32com.mapi import mapi, mapiutil, mapitags
+import pythoncom
+import win32com
waittime = 10
wait_count = 0
wait_limit = 12
@@ -58,7 +60,8 @@ class XMLRpcConn(object):
_public_methods_ = ['GetDBList', 'login', 'GetAllObjects', 'GetObjList', 'InsertObj', 'DeleteObject', 'GetCSList', \
'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
- 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry' ]
+ 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
+ 'GetCountry', 'GetStates', 'FindCountryForState']
_reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER
_reg_clsid_ = "{C6399AFD-763A-400F-8191-7F9D0503CAE2}"
_reg_progid_ = "Python.OpenERP.XMLRpcConn"
@@ -135,24 +138,42 @@ class XMLRpcConn(object):
import win32ui, win32con
conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object')
import eml
+ flag = False
new_msg = files = ext_msg =""
- eml_path=eml.generateEML(mail)
- att_name = ustr(eml_path.split('\\')[-1])
- flag=False
- attachments=mail.Attachments
-
+ message_id = referances = None
try:
- fp = open(eml_path, 'rb')
- msg =fp.read()
- fp.close()
- new_mail = email.message_from_string(str(msg))
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ referances = headers.get('References')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ if not referances == None:
+ startCut = referances.find("<")
+ endCut = referances.find(">")
+ referances = referances[startCut:endCut+1]
except Exception,e:
- win32ui.MessageBox(str(e),"Reading Error Mail")
-
+ win32ui.MessageBox(str(e),"Archive To OpenERP")
+ return
+ new_mail=eml.generateEML(mail)
+ attachments=mail.Attachments
for rec in recs: #[('res.partner', 3, 'Agrolait')]
model = rec[0]
res_id = rec[1]
-
#Check if mailgate installed
object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
if not object_id:
@@ -164,13 +185,12 @@ class XMLRpcConn(object):
#Reading the Object ir.model Name
- ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',mail.EntryID),('model','=',model),('res_id','=',res_id)])
+ ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
if ext_ids:
name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
- ext_msg += """This mail is already archived to {1} '{2}'.
-""".format(object_name,name)
+ ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
+ flag = True
continue
-
msg = {
'subject':mail.Subject,
'date':str(mail.ReceivedTime),
@@ -178,22 +198,20 @@ class XMLRpcConn(object):
'cc':mail.CC,
'from':mail.SenderEmailAddress,
'to':mail.To,
- 'message-id':str(new_mail.get('Message-Id')),
- 'references':str(new_mail.get('References')),
+ 'message-id':message_id,
+ 'references':ustr(referances),
}
result = {}
if attachments:
result = self.MakeAttachment([rec], mail)
-
attachment_ids = result.get(model, {}).get(res_id, [])
ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids)
-
new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
flag = True
if flag:
- t = ext_msg
- t += """Mail archived Successfully with attachments.\n"""+new_msg
+ t = """Mail archived Successfully with attachments.\n"""+ext_msg
+ t += "\n"+new_msg
win32ui.MessageBox(t,"Archived to OpenERP",win32con.MB_ICONINFORMATION)
return flag
@@ -250,27 +268,50 @@ class XMLRpcConn(object):
return res
def CreateCase(self, section, mail, partner_ids, with_attachments=True):
- res={}
import win32ui
import eml
- section=str(section)
- partner_ids=eval(str(partner_ids))
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ flag = False
+ id = -1
try:
- eml_path=eml.generateEML(mail)
- fp = open(eml_path, 'rb')
- msg =fp.read()
- fp.close()
- new_mail = email.message_from_string(str(msg))
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ email=eml.generateEML(mail)
+ message_id = referances = None
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ email.replace_header('Message-Id',message_id)
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(email))
+ if id > 0:
+ flag = True
+ return flag
+ else:
+ flag = False
+ return flag
except Exception,e:
- win32ui.MessageBox(str(e),"Mail Reading Error")
- execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(new_mail))
+ win32ui.MessageBox("Create Case\n"+str(e),"Mail Reading Error")
+ return flag
def MakeAttachment(self, recs, mail):
attachments = mail.Attachments
result = {}
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- att_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\attachments\\")
+ att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
if not os.path.exists(att_folder_path):
os.makedirs(att_folder_path)
for rec in recs: #[('res.partner', 3, 'Agrolait')]
@@ -303,12 +344,19 @@ class XMLRpcConn(object):
return result
def CreateContact(self, res=None):
- import win32ui
res=eval(str(res))
partner = res['partner_id']
+ state = res['state_id']
+ country = res['country_id']
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
res.update({'partner_id' : partner_id[0]})
+ if not state == "":
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country))])
+ res.update({'country_id' : country_id[0]})
+ if not country == "":
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state))])
+ res.update({'state_id' : state_id[0]})
id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner.address','create',res)
return id
@@ -340,10 +388,14 @@ class XMLRpcConn(object):
new_dict = dict(new_vals)
email=new_dict['email']
partner = new_dict['partner']
+ country_val = new_dict['country']
+ state_val = new_dict['state']
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country_val))])
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state_val))])
address_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(email))])
- if not address_id:
+ if not partner_id or not address_id or not country_id or not state_id:
return flag
address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','state_id','country_id'])
vals_res_address={
@@ -356,6 +408,8 @@ class XMLRpcConn(object):
'mobile' : new_dict['mobile'],
'fax' : new_dict['fax'],
'zip' : new_dict['zip'],
+ 'country_id' : country_id[0],
+ 'state_id' : state_id[0]
}
temp = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'write', address_id, vals_res_address)
if temp:
@@ -385,3 +439,69 @@ class XMLRpcConn(object):
obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country','read', [country_id], ['id','name'])[0]
country_list.append((obj['id'], ustr(obj['name'])))
return country_list
+
+ def SearchPartner(self, partner = ""):
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ if not partner_id:
+ return None
+ return partner_id[0]
+
+ def SearchEmailResources(self, message_id):
+ import win32ui
+ import eml
+
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ sub = ""
+ res_vals = []
+ mail_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message', 'search', [('message_id','=',message_id)])
+ if not mail_id:
+ return None
+ address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message','read',mail_id[0],['model','res_id'])
+ for key, vals in address.items():
+ res_vals.append([key,vals])
+ return res_vals
+
+
+ def GetCountry(self, country_search=''):
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids=[]
+ obj_list=[]
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','ilike',ustr(country_search))])
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
+
+ def GetStates(self, state_search='', country=None):
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = []
+ c_id = []
+ obj_list = []
+ if country == None:
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','ilike',ustr(state_search))])
+ if not country == None:
+ c_id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','=',ustr(country))])
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','ilike',ustr(state_search)),('country_id','=',c_id[0])])
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
+ def FindCountryForState(self, state_search=''):
+ import win32ui
+ res_vals = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','=',ustr(state_search))])
+ if not ids:
+ return None
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',ids)[0]
+ country = object['country_id'][1]
+ return country
diff --git a/addons/point_of_sale/report/report_cash_register_view.xml b/addons/point_of_sale/report/report_cash_register_view.xml
index df0dfc877de..40e59e38f0b 100644
--- a/addons/point_of_sale/report/report_cash_register_view.xml
+++ b/addons/point_of_sale/report/report_cash_register_view.xml
@@ -31,12 +31,12 @@
domain="[('year','=',time.strftime('%%Y'))]"
help="Cash Analysis created during this year"/>
'cancelled'
GROUP BY
project_id''',(tuple(all_projects),))
- progress = dict(map(lambda x: (x[0], (x[1], x[2], x[3])), cr.fetchall()))
+ progress = dict(map(lambda x: (x[0], (x[1] or 0.0, x[2] or 0.0, x[3] or 0.0)), cr.fetchall()))
user_uom, def_uom = self._get_user_and_default_uom_ids(cr, uid)
for project in self.browse(cr, uid, par_child_projects.keys(), context=context):
@@ -145,12 +145,10 @@ class project(osv.osv):
s[0] = uom_obj._compute_qty(cr, uid, user_uom, s[0], def_uom)
s[1] = uom_obj._compute_qty(cr, uid, user_uom, s[1], def_uom)
s[2] = uom_obj._compute_qty(cr, uid, user_uom, s[2], def_uom)
-
if project.state == 'close':
progress_rate = 100.0
else:
progress_rate = s[1] and round(min(100.0 * s[2] / s[1], 99.99), 2)
-
res[project.id] = {
'planned_hours': s[0],
'effective_hours': s[2],
@@ -159,6 +157,23 @@ class project(osv.osv):
}
return res
+ def _get_project_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for task in self.pool.get('project.task').browse(cr, uid, ids, context=context):
+ if task.project_id: result[task.project_id.id] = True
+ return result.keys()
+
+ def _get_project_work(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id and work.task_id.project_id: result[work.task_id.project_id.id] = True
+ return result.keys()
+
+
def unlink(self, cr, uid, ids, *args, **kwargs):
for proj in self.browse(cr, uid, ids):
if proj.tasks:
@@ -174,10 +189,30 @@ class project(osv.osv):
'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.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'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.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'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 and its child projects.", store=True),
- '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 and its child projects.", store=True),
- 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.", store=True),
- 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.", store=True),
+ '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 and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ '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 and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
@@ -414,6 +449,14 @@ class task(osv.osv):
res[task.id] = False
return res
+ def _get_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id: result[work.task_id.id] = True
+ return result.keys()
+
_columns = {
'active': fields.function(_is_template, method=True, store=True, string='Not a Template Task', type='boolean', help="This field is computed automatically and have the same behavior than the boolean 'active' field: if the task is linked to a template or unactivated project, it will be hidden unless specifically asked."),
'name': fields.char('Task Summary', size=128, required=True),
@@ -433,12 +476,27 @@ class task(osv.osv):
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
'notes': fields.text('Notes'),
'planned_hours': fields.float('Planned Hours', help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
- 'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', store=True, help="Computed using the sum of the task work done."),
+ 'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', help="Computed using the sum of the task work done.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
'remaining_hours': fields.float('Remaining Hours', digits=(16,2), help="Total remaining time, can be re-estimated periodically by the assignee of the task."),
- 'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', store=True, help="Computed as: Time Spent + Remaining Time."),
- 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", store=True, help="Computed as: Time Spent / Total Time."),
- 'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', store=True, help="Computed as difference of the time estimated by the project manager and the real time to close the task."),
-
+ 'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', help="Computed as: Time Spent + Remaining Time.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
+ 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
+ 'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', help="Computed as difference of the time estimated by the project manager and the real time to close the task.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
'user_id': fields.many2one('res.users', 'Assigned to'),
'delegated_user_id': fields.related('child_ids', 'user_id', type='many2one', relation='res.users', string='Delegated To'),
'partner_id': fields.many2one('res.partner', 'Partner'),
@@ -579,6 +637,7 @@ class task(osv.osv):
if context is None:
context = {}
request = self.pool.get('res.request')
+
for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid):
@@ -593,6 +652,7 @@ class task(osv.osv):
})
self.write(cr, uid, [task.id], {'state': 'open'})
+
return True
def do_cancel(self, cr, uid, ids, *args):
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 6fd11bd245f..3ea6dab6649 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -5,10 +5,10 @@
+ groups="group_project_manager,group_project_user,base.group_system,group_project_finance_user"/>
-
-
+
+
@@ -114,7 +114,7 @@
-
+
@@ -304,7 +304,7 @@
tree
-
+
@@ -328,7 +328,7 @@
-
+
@@ -380,7 +380,7 @@
-
+
@@ -392,6 +392,8 @@
+
+
@@ -405,7 +407,7 @@
-
+
@@ -492,7 +494,7 @@
-
+
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index f4d8b32e569..989f646724e 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -89,7 +89,7 @@ class report_project_task_user(osv.osv):
planned_hours as hours_planned,
(extract('epoch' from (t.date_end-t.create_date)))/(3600*24) as closing_days,
(extract('epoch' from (t.date_start-t.create_date)))/(3600*24) as opening_days,
- (extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24) as delay_endings_days
+ abs((extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24)) as delay_endings_days
FROM project_task t
GROUP BY
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index cb30a4b861c..246bbfbecf7 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -63,12 +63,12 @@
help="Current Year"/>
+ help="My Projects" domain="[('project_id.user_id','=',uid)]"/>
@@ -108,14 +108,16 @@
+
-
-
-
-
-
+
+
+
+
+
+
@@ -129,9 +131,9 @@
-
-
-
+
+
+
diff --git a/addons/project/test/test_project.yml b/addons/project/test/test_project.yml
index d57cc274366..bc65ab67f77 100644
--- a/addons/project/test/test_project.yml
+++ b/addons/project/test/test_project.yml
@@ -136,7 +136,6 @@
- planned_hours == 30
- remaining_hours == 30
- delay_hours == 0.0
- - total_hours == 30
- effective_hours == 0.0
-
Make a work task entry 'Training on OpenERP modules, models and classes' of 10 hours
@@ -153,8 +152,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 10 hours effective_hours must be equal to 10}:
- remaining_hours == 20
- effective_hours == 10.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on OpenERP xml views' of 10 hours
-
@@ -170,8 +167,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 20}:
- remaining_hours == 10
- effective_hours == 20.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on workflows' of 10 hours
-
@@ -187,8 +182,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 30}:
- remaining_hours == 0
- effective_hours == 30.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Set remaining hours of 10 hours for reevaluating the task
-
@@ -210,8 +203,6 @@
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 30.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on reports and wizards' of 10 hours
-
@@ -228,8 +219,6 @@
- planned_hours == 30
- remaining_hours == 0
- effective_hours == 40.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close the task
-
@@ -265,8 +254,6 @@
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 40.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on yml' of 5 hours
-
@@ -283,8 +270,6 @@
- planned_hours == 30
- remaining_hours == 5.0
- effective_hours == 45.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close the task
-
@@ -302,8 +287,6 @@
- planned_hours == 30
- remaining_hours == 0.0
- effective_hours == 45.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close project 'OpenERP Training Programme'
-
diff --git a/addons/project/wizard/project_task_delegate_view.xml b/addons/project/wizard/project_task_delegate_view.xml
index dc299826419..f9b27af05b3 100644
--- a/addons/project/wizard/project_task_delegate_view.xml
+++ b/addons/project/wizard/project_task_delegate_view.xml
@@ -13,19 +13,20 @@
-
+
+
-
+
-
+
diff --git a/addons/project_gtd/project_gtd.py b/addons/project_gtd/project_gtd.py
index e8008b65357..092738d2cf6 100644
--- a/addons/project_gtd/project_gtd.py
+++ b/addons/project_gtd/project_gtd.py
@@ -108,7 +108,7 @@ class project_task(osv.osv):
tt = timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[]))
search_extended ='''''' % (len(tt)+7,_('Getting Things Done'))
search_extended += '''''' % (_('Inbox'),)
- search_extended += '''''' % (_('GTD'),)
+ search_extended += '''''' % (_('GTD'),)
search_extended += ''''''
for time in tt:
if time.icon:
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index ff8bf0801f1..2351869e003 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -126,7 +126,7 @@
-
+
diff --git a/addons/project_issue/i18n/en_US.po b/addons/project_issue/i18n/en_US.po
index 1f4a96616e2..20af7b04708 100644
--- a/addons/project_issue/i18n/en_US.po
+++ b/addons/project_issue/i18n/en_US.po
@@ -230,11 +230,6 @@ msgstr "Invalid model name in the action definition."
msgid "Section"
msgstr "Section"
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr "%Done"
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -291,11 +286,6 @@ msgstr "Email"
msgid "Channel"
msgstr "Channel"
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr "Avg. Answers"
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -399,11 +389,6 @@ msgstr "The channels represent the different communication modes available with
msgid "Tasks"
msgstr "Tasks"
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr "%Cancel"
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/fr.po b/addons/project_issue/i18n/fr.po
index 8da8b573b87..02404eab350 100644
--- a/addons/project_issue/i18n/fr.po
+++ b/addons/project_issue/i18n/fr.po
@@ -235,11 +235,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -296,11 +291,6 @@ msgstr ""
msgid "Channel"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -407,11 +397,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/nl.po b/addons/project_issue/i18n/nl.po
index 59019439416..f2f86f499a1 100644
--- a/addons/project_issue/i18n/nl.po
+++ b/addons/project_issue/i18n/nl.po
@@ -236,11 +236,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -297,11 +292,6 @@ msgstr ""
msgid "Channel"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -408,11 +398,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/pl.po b/addons/project_issue/i18n/pl.po
index be144507e7e..52c4443a77a 100644
--- a/addons/project_issue/i18n/pl.po
+++ b/addons/project_issue/i18n/pl.po
@@ -240,11 +240,6 @@ msgstr "Nieprawidłowa nazwa modelu w definicji akcji."
msgid "Section"
msgstr "Sekcja"
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr "%Wykonano"
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -301,11 +296,6 @@ msgstr "E-mail"
msgid "Channel"
msgstr "Kanał"
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr "Śred. odpowiedzi"
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -414,11 +404,6 @@ msgstr ""
msgid "Tasks"
msgstr "Zadania"
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr "%Anulowanych"
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/project_issue.pot b/addons/project_issue/i18n/project_issue.pot
index 521eefb19c8..ec99de96b06 100644
--- a/addons/project_issue/i18n/project_issue.pot
+++ b/addons/project_issue/i18n/project_issue.pot
@@ -230,11 +230,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -399,11 +394,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index d892c8cdf87..0e9807c865b 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -141,7 +141,36 @@ class project_issue(crm.crm_case, osv.osv):
else:
res[issue.id][field] = abs(float(duration))
return res
-
+
+ def _get_issue_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ issues = []
+ issue_pool = self.pool.get('project.issue')
+ for task in self.pool.get('project.task').browse(cr, uid, ids, context=context):
+ issues += issue_pool.search(cr, uid, [('task_id','=',task.id)])
+ return issues
+
+ def _get_issue_work(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ issues = []
+ issue_pool = self.pool.get('project.issue')
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id:
+ issues += issue_pool.search(cr, uid, [('task_id','=',work.task_id.id)])
+ return issues
+
+ def _hours_get(self, cr, uid, ids, field_names, args, context=None):
+ task_pool = self.pool.get('project.task')
+ res = {}
+ for issue in self.browse(cr, uid, ids, context=context):
+ progress = 0.0
+ if issue.task_id:
+ progress = task_pool._hours_get(cr, uid, [issue.task_id.id], field_names, args, context=context)[issue.task_id.id]['progress']
+ res[issue.id] = {'progress' : progress}
+ return res
+
_columns = {
'id': fields.integer('ID'),
'name': fields.char('Issue', size=128, required=True),
@@ -172,12 +201,12 @@ class project_issue(crm.crm_case, osv.osv):
'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."),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('object_id.model', '=', 'crm.project.bug')]"),
- 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Severity'),
+ 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'version_id': fields.many2one('project.issue.version', 'Version'),
'partner_name': fields.char("Employee's Name", size=64),
'partner_mobile': fields.char('Mobile', size=32),
'partner_phone': fields.char('Phone', size=32),
- 'type_id': fields.many2one ('project.task.type', 'Resolution', domain="[('object_id.model', '=', 'project.issue')]"),
+ 'type_id': fields.many2one ('project.task.type', 'Resolution'),
'project_id':fields.many2one('project.project', 'Project'),
'duration': fields.float('Duration'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
@@ -193,7 +222,12 @@ class project_issue(crm.crm_case, osv.osv):
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
- 'progress': fields.related('task_id', 'progress', string='Progress (%)',group_operator="avg", store=True),
+ 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
+ store = {
+ 'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['task_id'], 10),
+ 'project.task': (_get_issue_task, ['progress'], 10),
+ 'project.task.work': (_get_issue_work, ['hours'], 10),
+ }),
}
def _get_project(self, cr, uid, context):
@@ -220,6 +254,7 @@ class project_issue(crm.crm_case, osv.osv):
data_obj = self.pool.get('ir.model.data')
task_obj = self.pool.get('project.task')
+
if context is None:
context = {}
@@ -246,7 +281,7 @@ class project_issue(crm.crm_case, osv.osv):
vals = {
'task_id': new_task_id,
- 'state':'open'
+ 'state':'pending'
}
case_obj.write(cr, uid, [bug.id], vals)
@@ -263,6 +298,7 @@ class project_issue(crm.crm_case, osv.osv):
'nodestroy': True
}
+
def _convert(self, cr, uid, ids, xml_id, context=None):
data_obj = self.pool.get('ir.model.data')
id2 = data_obj._get_id(cr, uid, 'project_issue', xml_id)
@@ -279,7 +315,6 @@ class project_issue(crm.crm_case, osv.osv):
def convert_to_bug(self, cr, uid, ids, context=None):
return self._convert(cr, uid, ids, 'bug_categ', context=context)
-
def next_type(self, cr, uid, ids, *args):
for task in self.browse(cr, uid, ids):
typeid = task.type_id.id
@@ -302,10 +337,11 @@ class project_issue(crm.crm_case, osv.osv):
self.write(cr, uid, task.id, {'type_id': index and types[index-1] or False})
return True
+
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
if context is None:
context = {}
- result = {}
+ result = {}
if not task_id:
return {'value':{}}
task = self.pool.get('project.task').browse(cr, uid, task_id, context)
@@ -430,7 +466,7 @@ class project_issue(crm.crm_case, osv.osv):
@param **args: Return Dictionary of Keyword Value
"""
return True
-
+
def copy(self, cr, uid, id, default=None, context=None):
if not context:
context={}
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 4623f968c05..1298a6f8852 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -213,7 +213,7 @@
-
+
@@ -326,6 +326,19 @@
# Project
# ------------------------------------------------------
+
+ Project Resource Calendar View
+ project.project
+ form
+
+
+
+
+
+
+
+
+
project.project.form.inherited
project.project
@@ -333,7 +346,6 @@
-
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 55096869306..d6f8cae363b 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -35,34 +35,11 @@ class project_issue_report(osv.osv):
_name = "project.issue.report"
_auto = False
- def _get_data(self, cr, uid, ids, field_names, arg, context=None):
- if context is None:
- context = {}
- """ @param cr: the current row, from the database cursor,
- @param uid: the current users ID for security checks,
- @param ids: List of case and section Datas IDs
- @param context: A standard dictionary for contextual values """
-
- res = {}
-
- for report in self.browse(cr, uid, ids, context):
- res[report.id]= {
- 'avg_answers': 0.0,
- 'perc_done' : 0.0,
- 'perc_cancel': 0.0
- }
- #TODO: Calculate
-
- return res
-
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
- 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
+ 'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, group_operator='avg', string='Avg. Answers', multi='avg_answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, group_operator='avg', string='%Done', multi='perc_done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, group_operator='avg', string='%Cancel', multi='perc_cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@@ -75,7 +52,7 @@ class project_issue_report(osv.osv):
'creation_date': fields.date('Creation Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
- 'type_id': fields.many2one ('project.task.type', 'Stage'),
+ 'type_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True),
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True),
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 365f217dee4..e6fc4cb5a43 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -7,7 +7,7 @@
project.issue.report
tree
-
+
@@ -59,10 +59,10 @@
/>
@@ -138,13 +138,13 @@
context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ domain="[]" context="{'group_by':'day'}" help="Creation Date"/>
+ domain="[]" context="{'group_by':'month'}" help="Creation Date"/>
+ domain="[]" context="{'group_by':'name'}" help="Creation Date"/>
@@ -152,7 +152,7 @@
- Issue Analysis
+ Issues Analysis
project.issue.report
form
graph,tree
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 0c31c485753..d6d43f83c5d 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -91,8 +91,8 @@ class project_phase(osv.osv):
model_data_obj = self.pool.get('ir.model.data')
model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour')
return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id']
-
- def _compute(self, cr, uid, ids,field_name, arg, context=None):
+
+ def _compute(self, cr, uid, ids, field_name, arg, context=None):
res = {}
if not ids:
return res
@@ -143,7 +143,7 @@ class project_phase(osv.osv):
project_id = project_obj.browse(cr, uid, project, context=context)
result['date_start'] = project_id.date_start
return {'value': result}
-
+
def onchange_days(self, cr, uid, ids, project, context=None):
result = {}
for id in ids:
@@ -219,7 +219,7 @@ class project_phase(osv.osv):
cal_id = resource_obj.browse(cr, uid, resource_id[0], context=context).calendar_id.id
if cal_id:
calendar_id = cal_id
-
+
avg_hours = uom_obj._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id)
# Change the date_start and date_end
# for previous and next phases respectively based on valid condition
@@ -232,7 +232,7 @@ class project_phase(osv.osv):
if prv_phase.id == phase.id:
continue
self._check_date_start(cr, uid, prv_phase, dt_start, context=context)
-
+
if vals.get('date_end', False) and vals['date_end'] > phase.date_end:
dt_end = datetime.strptime(vals['date_end'], '%Y-%m-%d')
work_times = resource_calendar_obj.interval_min_get(cr, uid, calendar_id, dt_end, avg_hours or 0.0, resource_id and resource_id[0] or False)
@@ -242,7 +242,7 @@ class project_phase(osv.osv):
if next_phase.id == phase.id:
continue
self._check_date_end(cr, uid, next_phase, dt_end, context=context)
-
+
return res
def copy(self, cr, uid, id, default=None, context=None):
@@ -293,10 +293,11 @@ class project_phase(osv.osv):
Schedule phase with the start date till all the next phases are completed.
@param: start_dsate : start date for the phase
@param: calendar_id : working calendar of the project
- """
+ """
if context is None:
context = {}
resource_pool = self.pool.get('resource.resource')
+ resource_allocation_pool = self.pool.get('project.resource.allocation')
uom_pool = self.pool.get('product.uom')
if context is None:
context = {}
@@ -304,7 +305,7 @@ class project_phase(osv.osv):
for phase in self.browse(cr, uid, ids, context=context):
if not phase.responsible_id:
raise osv.except_osv(_('No responsible person assigned !'),_("You must assign a responsible person for phase '%s' !") % (phase.name,))
-
+
phase_resource_obj = resource_pool.generate_resources(cr, uid, [phase.responsible_id.id], calendar_id, context=context)
avg_hours = uom_pool._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id)
duration = str(avg_hours) + 'H'
@@ -344,7 +345,12 @@ class project_phase(osv.osv):
'date_start': start_date.strftime('%Y-%m-%d'),
'date_end': end_date.strftime('%Y-%m-%d')
}, context=ctx)
-
+ # write dates into Resources Allocation
+ for resource in phase.resource_ids:
+ resource_allocation_pool.write(cr, uid, [resource.id], {
+ 'date_start': start_date.strftime('%Y-%m-%d'),
+ 'date_end': end_date.strftime('%Y-%m-%d')
+ }, context=ctx)
# Recursive call till all the next phases scheduled
for phase in phase.next_phase_ids:
if phase.state in ['draft', 'open', 'pending']:
@@ -369,7 +375,7 @@ class project_phase(osv.osv):
if not start_date and phase.project_id.date_start:
start_date = phase.project_id.date_start
if not start_date:
- start_date = datetime.now().strftime("%Y-%m-%d")
+ start_date = datetime.now().strftime("%Y-%m-%d")
resources = resources_list.get(phase.id, [])
calendar_id = phase.project_id.resource_calendar_id.id
task_ids = map(lambda x : x.id, (filter(lambda x : x.state in ['open', 'draft', 'pending'] , phase.task_ids)))
@@ -396,7 +402,7 @@ class project_resource_allocation(osv.osv):
'user_id': fields.related('resource_id', 'user_id', type='many2one', relation="res.users", string='User'),
'date_start': fields.date('Start Date', help="Starting Date"),
'date_end': fields.date('End Date', help="Ending Date"),
- 'useability': fields.float('Usability', help="Usability of this resource for this project phase in percentage (=50%)"),
+ 'useability': fields.float('Availability', help="Availability of this resource for this project phase in percentage (=50%)"),
}
_defaults = {
'useability': 100,
@@ -458,19 +464,19 @@ class project(osv.osv):
resource_pool = self.pool.get('resource.resource')
if context is None:
context = {}
-
+
resources_list = self.generate_members(cr, uid, ids, context=context)
return_msg = {}
for project in self.browse(cr, uid, ids, context=context):
start_date = project.date_start
if not start_date:
- start_date = datetime.now().strftime("%Y-%m-%d")
+ start_date = datetime.now().strftime("%Y-%m-%d")
resources = resources_list.get(project.id, [])
calendar_id = project.resource_calendar_id.id
task_ids = task_pool.search(cr, uid, [('project_id', '=', project.id),
('state', 'in', ['draft', 'open', 'pending'])
])
-
+
if task_ids:
task_pool.generate_schedule(cr, uid, task_ids, resources, calendar_id, start_date, context=context)
@@ -481,7 +487,7 @@ class project(osv.osv):
else:
return_msg["warning"] = return_msg["warning"] + "\n" + warning_msg
- return return_msg
+ return return_msg
project()
@@ -504,7 +510,7 @@ class project_task(osv.osv):
_columns = {
'phase_id': fields.many2one('project.phase', 'Project Phase'),
}
-
+
def generate_schedule(self, cr, uid, ids, resources, calendar_id, start_date, context=None):
"""
Schedule the tasks according to resource available and priority.
@@ -554,10 +560,10 @@ class project_task(osv.osv):
if task_resource.__name__ == task_resource:
real_resource = task_resource
break
-
+
task = create_tasks(task_number, hours, priorty, real_resource)
task_number += 1
-
+
face_projects = Task.BalancedProject(Project)
loop_no = 0
diff --git a/addons/project_long_term/project_long_term_demo.xml b/addons/project_long_term/project_long_term_demo.xml
index 30acac99377..4730706f758 100644
--- a/addons/project_long_term/project_long_term_demo.xml
+++ b/addons/project_long_term/project_long_term_demo.xml
@@ -1,13 +1,13 @@
-
-
+
- Phoung
+ Phuong
phu
phu
@@ -19,7 +19,7 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
al
- Qwintin
+ Quentin
qdp
qdp
@@ -37,7 +37,7 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
jth
- Alien
+ Aline
apr
apr
@@ -91,8 +91,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
Project Finacial Manager
-
-
+
+
@@ -101,12 +101,12 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
normal
Integrate an Sale and Warehouse Management.
Integrate an Sale and Warehouse Management.
@@ -213,7 +213,7 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
-
+
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index f2e4c6efd68..713322f5f0e 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -13,9 +13,9 @@
project.resource.allocation
gantt
-
-
-
+
+
+
@@ -27,7 +27,7 @@
calendar
-
+
@@ -81,9 +81,9 @@
-
+
-
+
@@ -110,22 +110,18 @@
form
@@ -247,7 +243,7 @@
gantt
-
+
@@ -275,7 +271,7 @@
-
+
@@ -292,7 +288,7 @@
project.phase
form
gantt,tree,form,calendar
- {'search_default_responsible_id':uid}
+ {'search_default_responsible_id':uid,'search_default_project':1}
You can subdivide your larger projects into several phases. For each phase, you can define your resources allocation (humans or engine), describe de differend task and link your phase with previous and next one, add constraints date and scheduling. A gantt view of your project phase is also available from this menu. Gantt view is a graphically draw of the project plan; it includes any task dependencies by visually adjusting task durations and priorities, and by linking tasks to each other.
@@ -302,7 +298,7 @@
project.phase
form
tree,form,calendar
- {'search_default_responsible_id':uid}
+ {'search_default_responsible_id':uid,'search_default_project':1}
@@ -311,8 +307,8 @@
# Project
# ------------------------------------------------------
-
- phase.project.form1
+
+ Project Resource Calendar View
project.project
form
@@ -327,7 +323,7 @@
# ------------------------------------------------------
# Project Task
# ------------------------------------------------------
-
+
phase.task.form2
project.task
@@ -349,8 +345,8 @@
-
-
+
+
+ name="Resource Allocations" parent="base.menu_project_long_term" sequence="3"/>
-
+
diff --git a/addons/project_messages/project_messages_view.xml b/addons/project_messages/project_messages_view.xml
index e8a013cf2ae..e270d2d001a 100644
--- a/addons/project_messages/project_messages_view.xml
+++ b/addons/project_messages/project_messages_view.xml
@@ -70,7 +70,7 @@
-
+
diff --git a/addons/project_planning/board_project_planning_view.xml b/addons/project_planning/board_project_planning_view.xml
index b48ab78dec2..867dba5767f 100644
--- a/addons/project_planning/board_project_planning_view.xml
+++ b/addons/project_planning/board_project_planning_view.xml
@@ -5,14 +5,14 @@
board.project.planning.form
board.board
-
+
form
-
+
- "
+
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index 8e14631fb2c..5c8d4cc5af9 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -219,7 +219,7 @@
parent="base.menu_main_pm" />
+ id="menu_report_account_analytic_planning" parent="base.menu_project_long_term" sequence="3" groups="project.group_project_user,project.group_project_manager,base.group_system,project.group_project_finance_user"/>
+
diff --git a/addons/project_scrum/__openerp__.py b/addons/project_scrum/__openerp__.py
index 3e18db77f68..767163fe114 100644
--- a/addons/project_scrum/__openerp__.py
+++ b/addons/project_scrum/__openerp__.py
@@ -54,6 +54,8 @@
'project_scrum_report.xml',
'wizard/project_scrum_backlog_create_task_view.xml',
'wizard/project_scrum_backlog_merger_view.xml',
+ 'wizard/project_scrum_postpone_view.xml',
+ "wizard/project_scrum_email_view.xml",
'project_scrum_view.xml',
'wizard/project_scrum_backlog_sprint_view.xml',
'process/project_scrum_process.xml',
diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 76094000888..2d146c94367 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -6,7 +6,7 @@
project.scrum.sprint
tree
-
+
@@ -14,7 +14,6 @@
-
@@ -26,8 +25,46 @@
+
+ project.task.graph
+ project.task
+ graph
+
+
+
+
+
+
+
+
+
+ Task Progress
+ project.task
+ form
+ graph
+
+
+
+
+ project.scrum.sprint.graph
+ project.scrum.product.backlog
+ graph
+
+
+
+
+
+
+
+
+
+ Backlog Progress
+ project.scrum.product.backlog
+ form
+ graph
+
- Sprint's List
+ Sprints
project.scrum.sprint
form
tree,form
@@ -41,8 +78,12 @@
diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py
index f472369211b..e02e16c478b 100644
--- a/addons/project_scrum/project_scrum.py
+++ b/addons/project_scrum/project_scrum.py
@@ -43,7 +43,7 @@ project_scrum_project()
class project_scrum_sprint(osv.osv):
_name = 'project.scrum.sprint'
_description = 'Project Scrum Sprint'
-
+ _order = 'date_start'
def _compute(self, cr, uid, ids, fields, arg, context=None):
res = {}.fromkeys(ids, 0.0)
progress = {}
@@ -319,7 +319,7 @@ class project_scrum_meeting(osv.osv):
'question_blocks': fields.text('Blocks encountered'),
'question_backlog': fields.text('Backlog Accurate'),
'task_ids': fields.many2many('project.task', 'meeting_task_rel', 'metting_id', 'task_id', 'Tasks'),
- 'user_id': fields.related('sprint_id', 'scrum_master_id', type='many2one', relation='res.users', string='Responsible', readonly=True),
+ 'user_id': fields.related('sprint_id', 'scrum_master_id', type='many2one', relation='res.users', string='Scrum Master', readonly=True),
}
#
# TODO: Find the right sprint thanks to users and date
diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml
index 2c627c89b09..e99ca00ba8b 100644
--- a/addons/project_scrum/project_scrum_demo.xml
+++ b/addons/project_scrum/project_scrum_demo.xml
@@ -1,26 +1,153 @@
-
-
-
-
-
- [24, 25, 28, 26, 27, 29, 30, 31, 32, 33, 34, 35, 37, 36, 38]
-
- 156.0
- OpenERP - dev branch
-
-
-
-
- 2005-12-20
- Sprint for V3.2.0
-
+
+ Sprint 1
+
+
+
-
+
+ open
+
+
+
+ Sprint 2
+
+
+ 100.0
+
+
+
+ open
+
+
+
+ Sprint 3
+
+
+ 89.0
+
+
+
+ open
+
+
+
+ Sprint 4
+
+
+ 125.0
+
+
+
+ open
+
+
+
+ Sprint 5
+
+
+ 178.0
+
+
+
+ open
+
+
+
+ Sprint 6
+
+
+
+ 200.0
+
+
+ open
+
+
+
+ Sprint 7
+
+
+ 175.0
+
+
+
+ open
+
+
+
+ Sprint 8
+
+
+
+
+ 122.0
+
+ open
+
+
+
+ Sprint 9
+
+
+
+
+
+ open
+
+
+
+ Sprint 10
+
+
+ 78.0
+
+
+
+ open
+
+
+
+ Sprint 11
+
+
+
+
+
+ open
+
+
+
+ Sprint 12
+
+
+
+
+
+ open
+
+
+
+ Sprint 13
+
+
+
+
+
+ open
+
+
+
+ Sprint 14
+
+
+
+
+
open
@@ -33,61 +160,107 @@
This new system will enable you to migrate automatically from an old version of OpenERP to a new one. This system will migrate not only the OpenERP system but also the customers particularities. This happens without any kind of script or programming. It has been possible to carry out such a system thanks to the descriptive approach of OpenERP components.
done
-
+
3
New accounting module
111.0
The accounting module of OpenERP (financial accounting and management accounting) is being reshaped. New functionalities will be added: intangible assets, a new way of presenting ledgers and bookings, new stock valuation calculation, and lots of predefined reports.
-
+
open
-
+
3
Automated Plugin System to install/uninstall modules
4.0
We have to develop a plug-in system which will enable to install/remove modules. The basic version of OpenERP will include only the required minimum, and you will select the modules thanks to the plug-in manager. This allows you to limit your system to your real needs: quality management, localisations, project and service management, marketing campaigns, and so on...
-
+
open
-
+
Review all terms
8.0
-
+
done
-
+
Bugfixes
6.0
-
+
open
-
+
Test for 3.2.0 Publishing
5.0
- Test OpenERP to release stable 3.2.0 version. (may be 3.2.0-pre1 ?)
-
-
+ Test OpenERP to release stable 3.2.0 version. (may be 3.2.0-pre1 eval="time.strftime('%Y-%m-05 12:01:01')"?)
+
+
Reshape the complete menu
4.0
Restructure the OpenERP menu to be more like other ERPs.
-
+
open
-
+
+
Editable Trees
12.0
Editable trees in list and one2many_list widgets.
-
-
+
+
+
+
+
+ Reshape the complete menu
+ 3.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Analysis Product phase
+ 10.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Rearrange the Menu
+ 9.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Complete change in list view
+ 8.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Reshape the complete menu
+ 2.0
+ Set rule for Tax according to 2010-2011 Rules
+
+ open
+
@@ -95,7 +268,7 @@
4.0
-
+
Review all English Terms
done
@@ -104,7 +277,7 @@
4.0
-
+
Review all french terms
done
@@ -113,7 +286,7 @@
24.0
-
+
Analytic Accounting features
done
@@ -122,7 +295,7 @@
6.0
-
+
Test and improve automatic migration system
open
@@ -130,7 +303,7 @@
24.0
-
+
General accounting features
open
@@ -138,14 +311,14 @@
24.0
-
+
Accounting Budgets
24.0
-
+
Cash book, general ledger, accounts list, aged trial balance
Accounting Report General
open
@@ -155,14 +328,14 @@
7.0
-
+
Accounting Report Budget
8.0
-
+
Accounting Report Analytic
open
@@ -170,7 +343,7 @@
4.0
-
+
Bugfix - memory leak
done
@@ -179,7 +352,7 @@
2.0
-
+
Bugfix - Translations
open
@@ -188,7 +361,7 @@
4.0
-
+
Finish the automated plugin system
pending
@@ -196,14 +369,14 @@
4.0
-
+
Reshape the complete menu structure
5.0
-
+
Test 3.2.0 before releasing
open
@@ -211,7 +384,7 @@
12.0
-
+
default values, onchange, required, add on top or bottom and shortcuts (Ctrl S, Ctrl X, ...)
Editable trees
open
@@ -228,7 +401,7 @@ Demo: Work on Editable trees
Demo :Bugfix - memory leak
-
+
diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index 7ae07d9eea8..cd4eb8e61b4 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -46,7 +46,6 @@
-
@@ -62,7 +61,7 @@
-
@@ -105,7 +104,7 @@
-
+
@@ -141,7 +140,7 @@
-
+
@@ -192,7 +191,7 @@
-
+
project.scrum.sprint.calendar
project.scrum.sprint
@@ -204,7 +203,7 @@
-
+
project.scrum.sprint.tree
project.scrum.sprint
@@ -224,6 +223,8 @@
+
@@ -347,7 +348,7 @@
form
tree,form,calendar
- {"search_default_filter_current": 1, "search_default_scrum_master_id":uid}
+ {"search_default_filter_current": 1}
- Convert into Tasks
+ Convert to Task
ir.actions.act_window
project.scrum.backlog.create.task
form
diff --git a/addons/project_scrum/wizard/project_scrum_email.py b/addons/project_scrum/wizard/project_scrum_email.py
new file mode 100644
index 00000000000..4d09cecf8ed
--- /dev/null
+++ b/addons/project_scrum/wizard/project_scrum_email.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import fields, osv
+from tools.translate import _
+from datetime import datetime
+import tools
+
+class project_scrum_email(osv.osv_memory):
+ _name = 'project.scrum.email'
+
+ def default_get(self, cr, uid, fields, context=None):
+ """
+ This function gets default values
+ @param self: The object pointer
+ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks,
+ @param fields: List of fields for default value
+ @param context: A standard dictionary for contextual values
+
+ @return : default values of fields.
+ """
+ meeting_pool = self.pool.get('project.scrum.meeting')
+ record_ids = context and context.get('active_ids', []) or []
+ res = super(project_scrum_email, self).default_get(cr, uid, fields, context=context)
+ for meeting in meeting_pool.browse(cr, uid, record_ids, context=context):
+ sprint = meeting.sprint_id
+ if 'scrum_master_email' in fields:
+ res.update({'scrum_master_email': sprint.scrum_master_id and sprint.scrum_master_id.user_email or False})
+ if 'product_owner_email' in fields:
+ res.update({'product_owner_email': sprint.product_owner_id and sprint.product_owner_id.user_email or False})
+ if 'subject' in fields:
+ subject = _("Scrum Meeting : %s") %(meeting.date)
+ res.update({'subject': subject})
+ if 'message' in fields:
+ message = _("Hello , \nI am sending you Scrum Meeting : %s for the Sprint '%s' of Project '%s'") %(meeting.date, sprint.name, sprint.project_id.name)
+ res.update({'message': message})
+ return res
+
+ _columns = {
+ 'scrum_master_email': fields.char('Scrum Master Email', size=64, help="Email Id of Scrum Master"),
+ 'product_owner_email': fields.char('Product Owner Email', size=64, help="Email Id of Product Owner"),
+ 'subject':fields.char('Subject', size=64),
+ 'message':fields.text('Message'),
+
+ }
+
+ def button_send_scrum_email(self, cr, uid, ids, context=None):
+ if context is None:
+ context={}
+
+ active_id = context.get('active_id', False)
+ scrum_meeting_pool = self.pool.get('project.scrum.meeting')
+ user_pool = self.pool.get('res.users')
+ meeting = scrum_meeting_pool.browse(cr, uid, active_id, context=context)
+
+# wizard data
+ data_id = ids and ids[0] or False
+ if not data_id or not active_id:
+ return False
+ data = self.browse(cr, uid, data_id, context=context)
+
+ email_from = tools.config.get('email_from', False)
+ user = user_pool.browse(cr, uid, uid, context=context)
+ user_email = email_from or user.address_id.email
+
+ body = "%s\n" %(data.message)
+ body += "\n%s\n" %_('Tasks since yesterday')
+ body += "_______________________\n"
+ body += "\n%s\n" %(meeting.question_yesterday or _('None'))
+ body += "\n%s\n" %_("Task for Today")
+ body += "_______________________ \n"
+ body += "\n%s\n" %(meeting.question_today or _('None'))
+ body += "\n%s\n" % _('Blocking points encountered:')
+ body += "_______________________ \n"
+ body += "\n%s\n" %(meeting.question_blocks or _('None'))
+ body += "\n%s\n%s" %(_('Thank you,'), user.name)
+ if user.signature:
+ body += "\n%s" %(user.signature)
+ if data.scrum_master_email == data.product_owner_email:
+ data.product_owner_email = False
+ if data.scrum_master_email:
+ tools.email_send(user_email, [data.scrum_master_email], data.subject, body, reply_to=user_email)
+ if data.product_owner_email:
+ tools.email_send(user_email, [data.product_owner_email], data.subject, body, reply_to=user_email)
+ return {}
+project_scrum_email()
diff --git a/addons/project_scrum/wizard/project_scrum_email_view.xml b/addons/project_scrum/wizard/project_scrum_email_view.xml
new file mode 100644
index 00000000000..d86fcdfae54
--- /dev/null
+++ b/addons/project_scrum/wizard/project_scrum_email_view.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ Scrum Meeting
+ project.scrum.email
+ form
+
+
+
+
+
+
+ Scrum Meeting
+ ir.actions.act_window
+ project.scrum.email
+ form
+ form
+ new
+
+
+
diff --git a/addons/project_scrum/wizard/project_scrum_postpone.py b/addons/project_scrum/wizard/project_scrum_postpone.py
new file mode 100644
index 00000000000..27173cf9fe0
--- /dev/null
+++ b/addons/project_scrum/wizard/project_scrum_postpone.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+from osv import osv
+from osv import fields
+
+class postpone_wizard(osv.osv_memory):
+ _name = "postpone.wizard"
+ def button_postpone(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ self.pool.get('project.scrum.product.backlog').button_postpone(cr, uid, context.get('active_ids',[]), context)
+ return {}
+postpone_wizard()
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_scrum/wizard/project_scrum_postpone_view.xml b/addons/project_scrum/wizard/project_scrum_postpone_view.xml
new file mode 100644
index 00000000000..995e84d612e
--- /dev/null
+++ b/addons/project_scrum/wizard/project_scrum_postpone_view.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ postpone_wizard
+ postpone.wizard
+ form
+
+
+
+
+
+ Postpone
+ postpone.wizard
+ form
+ form
+ new
+
+
+
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index d6ed37a8aae..f5480793adc 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -82,27 +82,28 @@ class project_work(osv.osv):
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
if result['product_uom_id'] != default_uom:
vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id'])
- acc_id = obj_task.project_id.analytic_account_id.id
- vals_line['account_id'] = acc_id
- res = obj_timesheet.on_change_account_id(cr, uid, False, acc_id)
- if res.get('value'):
- vals_line.update(res['value'])
- vals_line['general_account_id'] = result['general_account_id']
- vals_line['journal_id'] = result['journal_id']
- vals_line['amount'] = 0.0
- vals_line['product_uom_id'] = result['product_uom_id']
- amount = vals_line['unit_amount']
- prod_id = vals_line['product_id']
- unit = False
- timeline_id = obj_timesheet.create(cr, uid, vals=vals_line, context=context)
+ acc_id = obj_task.project_id and obj_task.project_id.analytic_account_id.id or False
+ if acc_id:
+ vals_line['account_id'] = acc_id
+ res = obj_timesheet.on_change_account_id(cr, uid, False, acc_id)
+ if res.get('value'):
+ vals_line.update(res['value'])
+ vals_line['general_account_id'] = result['general_account_id']
+ vals_line['journal_id'] = result['journal_id']
+ vals_line['amount'] = 0.0
+ vals_line['product_uom_id'] = result['product_uom_id']
+ amount = vals_line['unit_amount']
+ prod_id = vals_line['product_id']
+ unit = False
+ timeline_id = obj_timesheet.create(cr, uid, vals=vals_line, context=context)
- # Compute based on pricetype
- amount_unit = obj_timesheet.on_change_unit_amount(cr, uid, timeline_id,
- prod_id, amount, False, unit, context=context)
- if amount_unit and 'amount' in amount_unit.get('value',{}):
- updv = { 'amount': amount_unit['value']['amount'] }
- obj_timesheet.write(cr, uid, [timeline_id], updv, context=context)
- vals['hr_analytic_timesheet_id'] = timeline_id
+ # Compute based on pricetype
+ amount_unit = obj_timesheet.on_change_unit_amount(cr, uid, timeline_id,
+ prod_id, amount, False, unit, context=context)
+ if amount_unit and 'amount' in amount_unit.get('value',{}):
+ updv = { 'amount': amount_unit['value']['amount'] }
+ obj_timesheet.write(cr, uid, [timeline_id], updv, context=context)
+ vals['hr_analytic_timesheet_id'] = timeline_id
return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
def write(self, cr, uid, ids, vals, context=None):
@@ -196,6 +197,8 @@ class task(osv.osv):
for task_obj in task_obj_l:
if len(task_obj.work_ids):
for task_work in task_obj.work_ids:
+ if not task_work.hr_analytic_timesheet_id:
+ continue
line_id = task_work.hr_analytic_timesheet_id.id
if vals.get('project_id',False):
vals_line['account_id'] = acc_id
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index 816efd65ac3..d2dbff3be94 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -57,14 +57,14 @@
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]"
help="Order in current year"/>
+ name="month"
+ domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Order in current month"/>
+ string=" Month-1 "
+ separator="1"
+ domain="[('date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
+ help="Order in last month"/>
resource.calendar.leaves
calendar
-
+
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 3d93d45cfc5..87f134e857c 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -56,12 +56,12 @@
help="Sales order created in current year"/>
+ title="&title.label;" onload="myPrefObserver.register();myPrefObserver.webregister();" unload="myPrefObserver.unregister()" height="410" width="900">
@@ -16,15 +16,16 @@
-
-
-
-
+
+
+
+
+
-
+
@@ -42,11 +43,33 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -106,7 +129,7 @@
-
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul
index 86f777ccb75..dece3457710 100644
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul
@@ -2,7 +2,7 @@
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change_web.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change_web.xul
new file mode 100644
index 00000000000..9a46642d18b
--- /dev/null
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change_web.xul
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul
index a3215a8c9df..0aeb4a9f16b 100644
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul
@@ -3,7 +3,7 @@
+ title="&title.label;" onload="myPrefObserver.createContact();" height="460" width="860">
@@ -57,7 +57,7 @@
-
+
@@ -80,19 +80,19 @@
-
+
-
+
-
+
-
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js
index 0bee6e705a6..7b722c75034 100755
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js
@@ -49,9 +49,9 @@ var myPrefObserver =
document.getElementById("txtname").value = getSenderName();
document.getElementById("txtemail").value = getSenderEmail();
document.getElementById("country").value = getAllCountry();
- document.getElementById("state").value = getAllState();
setPartnerId(0);
},
+
//sets the value of email information in preferences and adds observer for the window
register: function()
@@ -91,6 +91,15 @@ var myPrefObserver =
}
},
+ webregister: function()
+ {
+ preferenceBranch.addObserver("", myPrefObserver, false);
+ weburl = getWebServerURL();
+ document.getElementById("txtweburl").value = weburl;
+ var s = document.getElementById('txtweburl').value;
+
+ },
+
createContactAddress: function()
{
document.getElementById("txtselectpartner").value = getPartnerName();
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js
index 637d412d51b..cba4b450ca9 100755
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js
@@ -195,13 +195,10 @@ var openPartnerHandler = {
if(strlSearchResult=="partner_id"){
partner_id = strlSearchResultValue;
weburl = getWebServerURL();
- webport = getwebPort();
- var urlport = weburl+':'+webport
if (parseInt(partner_id) > 0){
- var t = urlport + "/openerp/form/view?model=res.partner&id="+partner_id;
- alert(t + ":" + " " + "\n\n" + "If you can not open this link directly in web browser then you can copy the link and paste in web browser.");
- window.open(t);
+ var t = weburl + "/openerp/form/view?model=res.partner&id="+partner_id;
+ window.open(t, "", "chrome","resizable=yes,scrollbars=yes,status=yes");
}
else{
@@ -296,6 +293,7 @@ function open_partner()
searchPartner(senderemail);
}
+
var listDocumentHandler = {
onResult: function(client, context, result) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
@@ -303,13 +301,17 @@ var listDocumentHandler = {
res_id = res.QueryElementAt(1, Components.interfaces.nsISupportsPRInt32);
model = res.QueryElementAt(0, Components.interfaces.nsISupportsCString);
weburl = getWebServerURL();
- webport = getwebPort();
-
- var urlport = weburl+':'+webport;
- var t = urlport + "/openerp/form/view?model=" + model +"&id=" + res_id;
- alert(t + ":" + " " + "\n\n" + "If you can not open this link directly in web browser then you can copy the link and paste in web browser.");
- window.open(t);
-
+ if(res_id==0)
+ {
+ alert("Document is not available.");
+ return;
+ }
+ else
+ {
+ var t = weburl + "/openerp/form/view?model=" + model +"&id=" + res_id;
+ window.open(t, "", "chrome","resizable=yes,scrollbars=yes,status=yes,");
+ }
+
},
onFault: function (client, ctxt, fault) {
@@ -346,7 +348,15 @@ function open_document()
IETtotal = emlsArray.length;
IETexported = 0;
var msguri = emlsArray[0];
+
+ //gives the selected email uri
+ var messageUri= gDBView.URIForFirstSelectedMessage;
+ var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);
+
+ //gives the selected email object
+ var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);
+
var branchobj = getPref();
setServerService('xmlrpc/object');
@@ -362,13 +372,11 @@ function open_document()
strmethod.data = 'search_message';
var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
strobj.data = 'thunderbird.partner';
- var eml_string = parse_eml()
- var a = ['message'];
- var b = [eml_string];
+ var a = ['message_id'];
+ var b = ['<'+message.messageId+'>'];
var arrofarr = dictcontact(a,b);
xmlRpcClient.asyncCall(listDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
}
-
function open_contact()
{
@@ -437,64 +445,6 @@ function open_contact()
searchContact();
}
-function search_document()
-{
- if (check() == false){
- return true
- }
-
- var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
- var version_obj = prefService.getBranch("extensions.");
- version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);
- version = version_obj.getCharPref("lastAppVersion");
- version = parseInt(version[0])
-
- file = getPredefinedFolder(2);
-
- if (version > 2)
- {
- var emlsArray = gFolderDisplay.selectedMessages;
- }
- else
- {
- var emlsArray = GetSelectedMessages();
- }
-
- IETtotal = emlsArray.length;
- IETexported = 0;
- var msguri = emlsArray[0];
-
-
- //gives the selected email uri
- var messageUri= gDBView.URIForFirstSelectedMessage;
-
- var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);
-
- //gives the selected email object
- var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);
-
- //functionality to split the author name and email
- if(message.author.charAt(0) == '"'){
- sendername = message.author.split('"')[1].split('"')[0];
- }
- else if(message.author.indexOf('<')!=-1){
- sendername = message.author.split('<')[0];
- }
- else{
- sendername = message.author;
- }
- if(message.author.indexOf('<')!=-1){
- senderemail = message.author.split('<')[1].split('>')[0];
- }
- else{
- senderemail = message.author
- }
-
- //set the initial information for the selected email
- setSenderEmail(senderemail);
- setSenderName(sendername);
- searchdocument();
-}
//function to open the configuration window
var Config = {
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul
index 230ab391ff1..e2c3b3b7cee 100755
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul
@@ -55,8 +55,7 @@
class="toolbarbutton-1"
image="&imagearchive.value;"
label= "Open Document"
- oncommand="search_document();" />
+ oncommand="open_document();" />
-
-
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js
index 34b68ee9bc3..23038f29860 100755
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js
@@ -773,10 +773,9 @@ var listAllCountryHandler = {
var popup = document.getElementById("country"); // a element
for (i=0;i element
for (i=0;i=1)
{
- alert("Mail Archived Successfully");
+ alert("Mail is Successfully Pushed.");
}
window.close();
@@ -1498,7 +1450,6 @@ function parse_eml(){
}
name = fpath + getFileName() +".eml"
-
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( name );
if ( file.exists() == false ) {
@@ -1841,6 +1792,7 @@ var listLoginHandler = {
}
}
+
//function to check the login information
function testConnection(){
if (getconnect_server() == "false")
@@ -1886,6 +1838,12 @@ function testConnection(){
}
+function testConnection_web(){
+ var branchobj = getPref();
+ weburl = getWebServerURL();
+ window.open(weburl, "", "chrome","resizable=yes,scrollbars=yes,status=yes");
+
+}
//xmlrpc request handler for handling the login information
var listcreateLoginHandler = {
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd
index 26495872037..d3a2ae7c8c4 100755
--- a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd
@@ -3,15 +3,20 @@
-
-
+
+
+
+
+
+
-
+
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change_web.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change_web.dtd
new file mode 100644
index 00000000000..5ec72d0b250
--- /dev/null
+++ b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change_web.dtd
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js b/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js
index 1383eb28ea7..950f5c0139e 100755
--- a/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js
+++ b/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js
@@ -2,7 +2,7 @@ pref("network.protocol-handler.app.http","/usr/bin/firefox");
pref("network.protocol-handler.app.https","/usr/bin/firefox");
pref("extensions.tiny.serverurl", "http://localhost");
pref("extensions.tiny.serverport", "8069");
-pref("extensions.tiny.webserverurl", "http://localhost");
+pref("extensions.tiny.webserverurl", "http://localhost:8080");
pref("extensions.tiny.webserverport", "8080");
pref("extensions.tiny.serverdbname", "terp");
pref("extensions.tiny.username","admin");
diff --git a/addons/wiki/wiki.py b/addons/wiki/wiki.py
index c0d3cebdcca..2d814485a7c 100644
--- a/addons/wiki/wiki.py
+++ b/addons/wiki/wiki.py
@@ -108,9 +108,9 @@ class wiki_wiki2(osv.osv):
'name': fields.char('Title', size=256, select=True, required=True),
'write_uid': fields.many2one('res.users', "Last Contributor", select=True),
'text_area': fields.text("Content"),
- 'create_uid': fields.many2one('res.users', 'Author', select=True),
- 'create_date': fields.datetime("Created on", select=True),
- 'write_date': fields.datetime("Modification Date", select=True),
+ 'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True),
+ 'create_date': fields.datetime("Created on", select=True, readonly=True),
+ 'write_date': fields.datetime("Modification Date", select=True, readonly=True),
'tags': fields.char('Keywords', size=1024, select=True),
'history_id': fields.one2many('wiki.wiki.history', 'wiki_id', 'History Lines'),
'minor_edit': fields.boolean('Minor edit', select=True),
@@ -184,16 +184,15 @@ class wiki_wiki2(osv.osv):
""" @param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks, """
-
- id = super(wiki_wiki2, self).create(cr, uid, vals, context)
- self.create_history(cr, uid, [id], vals, context)
- return id
+ wiki_id = super(wiki_wiki2, self).create(cr, uid,
+ vals, context)
+ self.create_history(cr, uid, [wiki_id], vals, context)
+ return wiki_id
def write(self, cr, uid, ids, vals, context=None):
""" @param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks, """
-
result = super(wiki_wiki2, self).write(cr, uid, ids, vals, context)
self.create_history(cr, uid, ids, vals, context)
return result