From ecbc6996e7428c7f570cb3c06ef5ee85bdd05965 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 22 Feb 2012 18:36:38 +0530
Subject: [PATCH 001/546] [IMP]hr_holidays: Improved button name and state and
redonly in confirm and draft
bzr revid: mma@tinyerp.com-20120222130638-buhl4qhdto4gpm3j
---
addons/hr_holidays/hr_holidays.py | 18 +++++++++---------
addons/hr_holidays/hr_holidays_view.xml | 22 +++++++++++-----------
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 3bb7a8e4982..3dc8ae0467c 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -111,25 +111,25 @@ class hr_holidays(osv.osv):
_columns = {
'name': fields.char('Description', required=True, size=64),
- 'state': fields.selection([('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'),
- ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')],
+ 'state': fields.selection([('draft', 'New'), ('confirm', 'To Approve'), ('refuse', 'Refused'),
+ ('validate1', 'Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')],
'State', readonly=True, help='The state is set to \'Draft\', when a holiday request is created.\
\nThe state is \'Waiting Approval\', when holiday request is confirmed by user.\
\nThe state is \'Refused\', when holiday request is refused by manager.\
\nThe state is \'Approved\', when holiday request is approved by manager.'),
'user_id':fields.related('employee_id', 'user_id', type='many2one', relation='res.users', string='User', store=True),
- 'date_from': fields.datetime('Start Date', readonly=True, states={'draft':[('readonly',False)]}, select=True),
- 'date_to': fields.datetime('End Date', readonly=True, states={'draft':[('readonly',False)]}),
- 'holiday_status_id': fields.many2one("hr.holidays.status", "Leave Type", required=True,readonly=True, states={'draft':[('readonly',False)]}),
- 'employee_id': fields.many2one('hr.employee', "Employee", select=True, invisible=False, readonly=True, states={'draft':[('readonly',False)]}, help='Leave Manager can let this field empty if this leave request/allocation is for every employee'),
+ 'date_from': fields.datetime('Start Date', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, select=True),
+ 'date_to': fields.datetime('End Date', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
+ 'holiday_status_id': fields.many2one("hr.holidays.status", "Leave Type", required=True,readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
+ 'employee_id': fields.many2one('hr.employee', "Employee", select=True, invisible=False, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='Leave Manager can let this field empty if this leave request/allocation is for every employee'),
#'manager_id': fields.many2one('hr.employee', 'Leave Manager', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'),
#'notes': fields.text('Notes',readonly=True, states={'draft':[('readonly',False)]}),
'manager_id': fields.many2one('hr.employee', 'First Approval', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'),
- 'notes': fields.text('Reasons',readonly=True, states={'draft':[('readonly',False)]}),
- 'number_of_days_temp': fields.float('Number of Days', readonly=True, states={'draft':[('readonly',False)]}),
+ 'notes': fields.text('Reasons',readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
+ 'number_of_days_temp': fields.float('Number of Days', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'number_of_days': fields.function(_compute_number_of_days, string='Number of Days', store=True),
'case_id': fields.many2one('crm.meeting', 'Meeting'),
- 'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone", select=True),
+ 'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone", select=True),
'parent_id': fields.many2one('hr.holidays', 'Parent'),
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True),
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 22d4d6e567d..302ca4fe6ee 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -65,9 +65,9 @@
@@ -316,7 +316,11 @@
-
+
+
+
+
+
@@ -338,6 +342,8 @@
+
+
From fc28796980955b346e3f8deed09350647b6e827f Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Thu, 23 Feb 2012 18:42:52 +0530
Subject: [PATCH 003/546] [IMP] account, account_voucher : Improvedworkflow
state name, button name and also the position.
bzr revid: mdi@tinyerp.com-20120223131252-b3x0zsbpczkadurz
---
addons/account/account_invoice.py | 2 +-
addons/account/account_invoice_view.xml | 4 ++--
addons/account_voucher/account_voucher_pay_invoice.xml | 2 +-
addons/account_voucher/account_voucher_view.xml | 2 +-
addons/account_voucher/voucher_payment_receipt_view.xml | 6 +++---
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 5e5ac5f482b..63191795ea3 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -202,7 +202,7 @@ class account_invoice(osv.osv):
('draft','Draft'),
('proforma','Pro-forma'),
('proforma2','Pro-forma'),
- ('open','Open'),
+ ('open','Validate'),
('paid','Paid'),
('cancel','Cancelled')
],'State', select=True, readonly=True,
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 59977c252f9..ccaa033bea3 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -207,11 +207,11 @@
+
+
-
-
diff --git a/addons/account_voucher/account_voucher_pay_invoice.xml b/addons/account_voucher/account_voucher_pay_invoice.xml
index 345241cb4ee..7a6aad55516 100644
--- a/addons/account_voucher/account_voucher_pay_invoice.xml
+++ b/addons/account_voucher/account_voucher_pay_invoice.xml
@@ -19,7 +19,7 @@
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index 53fdaef8c1f..c0061f15cd3 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -103,9 +103,9 @@
+
-
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 1a8d3680f5f..e7c9f4f4616 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -251,10 +251,10 @@
-
-
-
+
+
+
From 71e4d0a81ec28c8545ddc07a398e4aff5a0abcad Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Fri, 24 Feb 2012 11:23:51 +0530
Subject: [PATCH 004/546] [IMP]hr_evaluation: Addded Button in search view
which display next month deadline record of draft state
bzr revid: mma@tinyerp.com-20120224055351-jse9ui8rr72lr321
---
addons/hr_evaluation/hr_evaluation_view.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index a0ac133d495..8a2aebcacdc 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -259,6 +259,9 @@
+
@@ -282,6 +285,7 @@
form
tree,form,graph
+ {"search_default_next_month":1}
Each employee may be assigned an Appraisal Plan. Such a plan defines the frequency and the way you manage your periodic personnel evaluation. You will be able to define steps and attach interviews to each step. OpenERP manages all kind of evaluations: bottom-up, top-down, self-evaluation and final evaluation by the manager.
From fefd25861a820d489feeb85f665c79d88b017c24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 11:52:15 +0100
Subject: [PATCH 005/546] [IMP] new module google_docs
bzr revid: rlo@openerp.com-20120224105215-clev3ip7n8zhb3kt
---
addons/google_docs/__init__.py | 1 +
addons/google_docs/__openerp__.py | 6 ++
addons/google_docs/google_docs.py | 119 ++++++++++++++++++++++++++++++
3 files changed, 126 insertions(+)
create mode 100644 addons/google_docs/__init__.py
create mode 100644 addons/google_docs/__openerp__.py
create mode 100644 addons/google_docs/google_docs.py
diff --git a/addons/google_docs/__init__.py b/addons/google_docs/__init__.py
new file mode 100644
index 00000000000..dd6285502c0
--- /dev/null
+++ b/addons/google_docs/__init__.py
@@ -0,0 +1 @@
+import google_docs
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
new file mode 100644
index 00000000000..991a3e07e2c
--- /dev/null
+++ b/addons/google_docs/__openerp__.py
@@ -0,0 +1,6 @@
+{
+ 'name': 'Wiki',
+ 'version': '0.1',
+ 'depends': ['google_base_account'],
+ 'description': 'Module to attach a google document to any model.'
+}
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
new file mode 100644
index 00000000000..a2693ac95a7
--- /dev/null
+++ b/addons/google_docs/google_docs.py
@@ -0,0 +1,119 @@
+from osv import osv, fields
+import gdata.docs.data
+import gdata.docs.client
+from gdata.client import RequestError
+
+class google_docs(osv.osv):
+ _name = 'google.docs'
+
+ _table = 'google_docs_templates'
+ _columns = {
+ 'id': fields.integer('ID', readonly=True),
+ 'model': fields.many2one('ir.model', 'Model'),
+ 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
+ }
+
+ edit_url_template = 'https://docs.google.com/Edit?docid=%s'
+ prefix_gdoc_id_res = 'document:'
+
+ def copy_gdoc(self, cr, uid, model, context=None):
+ '''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
+ @param cr: the current row from the database cursor.
+ @param uid: the current user ID, for security checks.
+ @param model: the current model name.
+ @param context: a standard dictionary for contextual values.
+ @return the url of the copy itself.
+ @return -1 if the template hasn't been assigned yet.
+ @return -2 if the google_base_account hasn't been configured yet.'''
+
+ if context==None:
+ context={}
+
+ # check template for the current model
+ model_obj = self.pool.get(model)
+ res_gdocs_obj = self.pool.get('google.docs')
+ domain = [('model' , '=', model_obj)]
+ gdoc = res_gdocs_obj.search(cr,uid,domain,context=context)
+ if not gdoc:
+ return -1
+
+ # check google_base_account
+ users_obj = self.pool.get('res.users')
+ user = users_obj.browse(cr, uid, [uid])[0]
+ if not user.gmail_user or not user.gmail_password:
+ return -2
+
+ # copy the document
+ client = gdata.docs.client.DocsClient(source='openerp.com')
+ client.ssl = True
+ client.http_client.debug = False
+ client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+ resource = client.get_resource_by_id(gdoc.gdocs_res_id)
+ copied_resource = client.copy_resource(entry=resource, title=resource.title.text + ' (generated from OpenERP)')
+
+ return self.edit_url_template % (copied_resource.resource_id.text,)
+
+ def get_documents_list(self, cr, uid, context=None):
+ '''Return the list of google documents available at the user's account.
+ @param cr: the current row from the database cursor.
+ @param uid: the current user ID, for security checks.
+ @param context: a standard dictionary for contextual values.
+ @return a list with information about the documents in form of tuples (document_name, document_resource_id).
+ @return -2 if the google_base_account hasn't been configured yet.'''
+
+ if context == None:
+ context = {}
+
+ # check google_base_account
+ users_obj = self.pool.get('res.users')
+ user = users_obj.browse(cr, uid, [uid])[0]
+ if not user.gmail_user or not user.gmail_password:
+ return -2
+
+ # get the documents list
+ client = gdata.docs.client.DocsClient(source='openerp.com')
+ client.ssl = True
+ client.http_client.debug = False
+ client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+
+ return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith('document:'), client.get_all_resources()))
+
+
+ def set_model_document_template(self, cr, uid, model, resource_id, context=None):
+ '''Set the default document template for the specified model. This template doesn't have to be a google documents template itself, but just a document.
+ @param cr: current row for the database cursor.
+ @param uid: the current user ID, for security checks.
+ @param model: the current model name.
+ @param resource_id: resource_id associated to the chosen document.
+ @param context: a standard dictionary for contextual values.
+ @return 0 on successful execution.
+ @return -2 if the google_base_account hasn't been configured yet.
+ @retrurn -3 if the given resource_id doesn't exist in the user's google docs account.
+ '''
+
+ if context == None:
+ context = {}
+
+ # check google_base_account
+ users_obj = self.pool.get('res.users')
+ user = users_obj.browse(cr, uid, [uid])[0]
+ if not user.gmail_user or not user.gmail_password:
+ return -2
+
+ # check resource_id
+ client = gdata.docs.client.DocsClient(source='openerp.com')
+ client.ssl = True
+ client.http_client.debug = False
+ client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+ try:
+ client.get_resource_by_id(resource_id)
+ except RequestError:
+ return -3
+
+ # set the model document template
+ model_template_id = self.create(cr, uid,
+ { 'model': self.pool.get(model),
+ 'gdocs_res_id': resource_id
+ })
+
+ return 0
From e4a58bf7c57a8c00a8c7451372bed96704f522d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 12:03:09 +0100
Subject: [PATCH 006/546] [FIX]
bzr revid: rlo@openerp.com-20120224110309-0hdmfu8vo918906q
---
addons/google_docs/google_docs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index a2693ac95a7..957fcbf0871 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -88,7 +88,7 @@ class google_docs(osv.osv):
@param context: a standard dictionary for contextual values.
@return 0 on successful execution.
@return -2 if the google_base_account hasn't been configured yet.
- @retrurn -3 if the given resource_id doesn't exist in the user's google docs account.
+ @return -3 if the given resource_id doesn't exist in the user's google docs account.
'''
if context == None:
From 9d28250005d879408ebbd73a05c8be40ee1a8105 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 14:30:15 +0100
Subject: [PATCH 007/546] [imp]
bzr revid: rlo@openerp.com-20120224133015-2vt3gnkknnh2vrjd
---
addons/google_docs/google_docs.py | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 957fcbf0871..46db3eb4448 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -2,6 +2,7 @@ from osv import osv, fields
import gdata.docs.data
import gdata.docs.client
from gdata.client import RequestError
+from gdata.docs.service import DOCUMENT_LABEL
class google_docs(osv.osv):
_name = 'google.docs'
@@ -13,14 +14,16 @@ class google_docs(osv.osv):
'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
}
+ name_template = 'Sales order %s %s'
edit_url_template = 'https://docs.google.com/Edit?docid=%s'
- prefix_gdoc_id_res = 'document:'
+ prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
- def copy_gdoc(self, cr, uid, model, context=None):
+ def copy_gdoc(self, cr, uid, model, folder=None, context=None):
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
+ @param folder: folder in which to store the copy.
@param context: a standard dictionary for contextual values.
@return the url of the copy itself.
@return -1 if the template hasn't been assigned yet.
@@ -49,7 +52,7 @@ class google_docs(osv.osv):
client.http_client.debug = False
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
resource = client.get_resource_by_id(gdoc.gdocs_res_id)
- copied_resource = client.copy_resource(entry=resource, title=resource.title.text + ' (generated from OpenERP)')
+ copied_resource = client.copy_resource(entry=resource, title= self.name_template % (, model))
return self.edit_url_template % (copied_resource.resource_id.text,)
@@ -117,3 +120,10 @@ class google_docs(osv.osv):
})
return 0
+
+
+class google_docs_folder(osv.osv):
+ _name = 'google.docs.folder'
+ _columns = {
+ 'res_id': fields.char('GDocs resource id', size=64, translate=False),
+ }
From 9eaa5de2aca09c44976d5472dbb66565038be494 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 14:52:28 +0100
Subject: [PATCH 008/546] [fix]
bzr revid: rlo@openerp.com-20120224135228-rurois3a83l50lu1
---
addons/google_docs/google_docs.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 46db3eb4448..538511b51c2 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -12,9 +12,9 @@ class google_docs(osv.osv):
'id': fields.integer('ID', readonly=True),
'model': fields.many2one('ir.model', 'Model'),
'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
+ 'name_template': fields.char('Google resource ID', size=64, translate=False)
}
- name_template = 'Sales order %s %s'
edit_url_template = 'https://docs.google.com/Edit?docid=%s'
prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
@@ -32,6 +32,15 @@ class google_docs(osv.osv):
if context==None:
context={}
+ template_vars = {
+ 'db' : cr.dbname,
+ 'model' : model,
+ 'id' : id,
+ 'salt' : salt,
+ 'name' : '',
+ }
+ name_template = 'Sales order %s %s'
+
# check template for the current model
model_obj = self.pool.get(model)
res_gdocs_obj = self.pool.get('google.docs')
From 2df3400a35696a0a95925edd1592c2467e9802a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 14:53:15 +0100
Subject: [PATCH 009/546] [fix]
bzr revid: rlo@openerp.com-20120224135315-31phn9wvp1meth03
---
addons/google_docs/google_docs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 538511b51c2..d4f48edb91a 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -12,7 +12,7 @@ class google_docs(osv.osv):
'id': fields.integer('ID', readonly=True),
'model': fields.many2one('ir.model', 'Model'),
'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
- 'name_template': fields.char('Google resource ID', size=64, translate=False)
+ 'name_template': fields.char('GDoc name template', size=64, translate=False)
}
edit_url_template = 'https://docs.google.com/Edit?docid=%s'
From 33c3e277b6b496f8aa1c5a22c244390e29a6fba5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 14:54:58 +0100
Subject: [PATCH 010/546] [fix]
bzr revid: rlo@openerp.com-20120224135458-2bz5k9fyyjymylye
---
addons/google_docs/google_docs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index d4f48edb91a..0ad64124d04 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -88,7 +88,7 @@ class google_docs(osv.osv):
client.http_client.debug = False
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
- return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith('document:'), client.get_all_resources()))
+ return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith(prefix_gdoc_id_res), client.get_all_resources()))
def set_model_document_template(self, cr, uid, model, resource_id, context=None):
From d680f6c1a16d8f1415b78c8de674c32b6949aba3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 15:01:19 +0100
Subject: [PATCH 011/546] [fix]
bzr revid: rlo@openerp.com-20120224140119-hoapkm5d13uietx1
---
addons/google_docs/google_docs.py | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 0ad64124d04..718952fba34 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -27,19 +27,20 @@ class google_docs(osv.osv):
@param context: a standard dictionary for contextual values.
@return the url of the copy itself.
@return -1 if the template hasn't been assigned yet.
- @return -2 if the google_base_account hasn't been configured yet.'''
+ @return -2 if the google_base_account hasn't been configured yet.
+ '''
if context==None:
context={}
- template_vars = {
+ template_vars = {
'db' : cr.dbname,
'model' : model,
'id' : id,
'salt' : salt,
'name' : '',
}
- name_template = 'Sales order %s %s'
+ name_template = 'Sales order %s %s'
# check template for the current model
model_obj = self.pool.get(model)
@@ -71,7 +72,8 @@ class google_docs(osv.osv):
@param uid: the current user ID, for security checks.
@param context: a standard dictionary for contextual values.
@return a list with information about the documents in form of tuples (document_name, document_resource_id).
- @return -2 if the google_base_account hasn't been configured yet.'''
+ @return -2 if the google_base_account hasn't been configured yet.
+ '''
if context == None:
context = {}
From 38291a99acc380b8f5e4f17736f06dfe28815267 Mon Sep 17 00:00:00 2001
From: Antony Lesuisse
Date: Fri, 24 Feb 2012 15:39:23 +0100
Subject: [PATCH 012/546] commit
bzr revid: al@openerp.com-20120224143923-pm9home907bxztqt
---
addons/google_docs/google_docs.py | 56 +++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 718952fba34..8a48de0b05c 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -4,6 +4,62 @@ import gdata.docs.client
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
+# _columns = {
+# 'id': fields.integer('ID', readonly=True),
+# 'model': fields.many2one('ir.model', 'Model'),
+# 'multiple': fields.boolean('Multiple'),
+# 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
+#
+# }
+#
+## edit_url_template = 'https://docs.google.com/Edit?docid=%s'
+## prefix_gdoc_id_res = 'document:'
+#
+# def google_docs_get(self, cr, uid, model, id):
+# attachment = self.search(cr, uid, [('res_model', '=', model), ('res_id', '=', id), ('type', '=', 'url'), ('url', 'like', 'https://docs.oogle.com')])
+# if attachment:
+# return self.read(cr, uid, attachment)[0]['url']
+# else:
+# url = self.pad_generate_url(cr, uid, model, id)
+# self.create(cr, uid, {
+# 'res_model' : model,
+# 'res_id' : id,
+# 'type' : 'url',
+# 'name' : 'Pad',
+# 'url' : url,
+# })
+# return url
+#
+# def generate_name(self, cr, uid, model, id):
+# template_vars = {
+# 'db' : cr.dbname,
+# 'model' : model,
+# 'id' : id,
+# 'salt' : salt,
+# 'name' : self.pool.get(model).name_get(cr,uid,[id])[0],
+# }
+# return pad_url_template % template_vars
+#
+#
+# def button_add_google_docs_google_docs_add_doc(self, cr, uid, model, id):
+# #pad_url_template = self.pool.get('res.users').browse(cr,uid,[uid])[0].company_id.pad_url_template
+# #s = string.ascii_uppercase + string.digits
+# #salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)])
+#
+# # i lookup in the table google_docs.templates to check the policy
+#
+# # if multiple: 1
+#
+# # if i find a template i will duplicate the template
+#
+# # else empty 'word' text
+#
+# # else
+# # if no document exists do like 1 -^
+# # else
+# # jumpt to the existing document
+#
+
class google_docs(osv.osv):
_name = 'google.docs'
From 8876e8c045fdee003b13cf1befa5e9daa4b2ebae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 16:02:34 +0100
Subject: [PATCH 013/546] [imp] button
bzr revid: rlo@openerp.com-20120224150234-l1do7nj8576lfwcd
---
addons/google_docs/res_company.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
create mode 100644 addons/google_docs/res_company.xml
diff --git a/addons/google_docs/res_company.xml b/addons/google_docs/res_company.xml
new file mode 100644
index 00000000000..0324039c8f2
--- /dev/null
+++ b/addons/google_docs/res_company.xml
@@ -0,0 +1,16 @@
+
+
+
+ res.company.form.gdocs
+ res.company
+ form
+
+
+
+
+
+
+
+
+
+
From fd914eb2e3e09fec08733989e5c8456d4516194a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 24 Feb 2012 16:29:20 +0100
Subject: [PATCH 014/546] [fix]
bzr revid: rlo@openerp.com-20120224152920-vdi47f2k49kke2e0
---
addons/google_docs/google_docs.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 8a48de0b05c..90edb15b104 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -67,7 +67,7 @@ class google_docs(osv.osv):
_columns = {
'id': fields.integer('ID', readonly=True),
'model': fields.many2one('ir.model', 'Model'),
- 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
+ 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False),
'name_template': fields.char('GDoc name template', size=64, translate=False)
}
@@ -96,7 +96,7 @@ class google_docs(osv.osv):
'salt' : salt,
'name' : '',
}
- name_template = 'Sales order %s %s'
+ name_template = 'Sales order %s'
# check template for the current model
model_obj = self.pool.get(model)
@@ -118,7 +118,7 @@ class google_docs(osv.osv):
client.http_client.debug = False
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
resource = client.get_resource_by_id(gdoc.gdocs_res_id)
- copied_resource = client.copy_resource(entry=resource, title= self.name_template % (, model))
+ copied_resource = client.copy_resource(entry=resource, title= self.name_template % (model, ))
return self.edit_url_template % (copied_resource.resource_id.text,)
From 16afc71f02b352f1c2ae817cf33c3ddb6c4558ae Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 27 Feb 2012 14:12:25 +0530
Subject: [PATCH 015/546] [IMP]hr_evaluation: Removed print & set to draft
button, Removed progress bar field, give access right, hide a group and
notebook and removed a demo data
bzr revid: mma@tinyerp.com-20120227084225-8buhhzz5lg7zftv4
---
addons/hr_evaluation/hr_evaluation.py | 6 ---
addons/hr_evaluation/hr_evaluation_data.xml | 43 +------------------
addons/hr_evaluation/hr_evaluation_view.xml | 12 ++----
.../report/hr_evaluation_report.py | 3 --
.../report/hr_evaluation_report_view.xml | 1 -
.../security/ir.model.access.csv | 2 +-
6 files changed, 7 insertions(+), 60 deletions(-)
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py
index 6e1983d7a11..27b36341284 100644
--- a/addons/hr_evaluation/hr_evaluation.py
+++ b/addons/hr_evaluation/hr_evaluation.py
@@ -167,7 +167,6 @@ class hr_evaluation(osv.osv):
('cancel','Cancelled'),
], 'State', required=True, readonly=True),
'date_close': fields.date('Ending Date', select=True),
- 'progress': fields.float("Progress"),
}
_defaults = {
'date': lambda *a: (parser.parse(datetime.now().strftime('%Y-%m-%d')) + relativedelta(months =+ 1)).strftime('%Y-%m-%d'),
@@ -245,7 +244,6 @@ class hr_evaluation(osv.osv):
return True
def button_done(self,cr, uid, ids, context=None):
- self.write(cr, uid, ids,{'progress': 1 * 100}, context=context)
self.write(cr, uid, ids,{'state':'done', 'date_close': time.strftime('%Y-%m-%d')}, context=context)
return True
@@ -312,7 +310,6 @@ class hr_evaluation_interview(osv.osv):
for id in self.browse(cr, uid, ids, context=context):
flag = False
wating_id = 0
- tot_done_req = 1
if not id.evaluation_id.id:
raise osv.except_osv(_('Warning !'),_("You cannot start evaluation without Appraisal."))
records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id], context=context)[0].survey_request_ids
@@ -322,11 +319,8 @@ class hr_evaluation_interview(osv.osv):
continue
if child.state != "done":
flag = True
- else:
- tot_done_req += 1
if not flag and wating_id:
self.survey_req_waiting_answer(cr, uid, [wating_id], context=context)
- hr_eval_obj.write(cr, uid, [id.evaluation_id.id], {'progress': tot_done_req * 100 / len(records)}, context=context)
self.write(cr, uid, ids, { 'state': 'done'}, context=context)
return True
diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml
index ec4b46f8a62..bf482d2fcd7 100644
--- a/addons/hr_evaluation/hr_evaluation_data.xml
+++ b/addons/hr_evaluation/hr_evaluation_data.xml
@@ -2,7 +2,7 @@
- Employee Appraisal
+ Self Appraisal
20
@@ -1157,37 +1157,11 @@ Once the form had been filled, the employee send it to his supervisor.
-
-
- Send to Subordinates
-
-
-
- bottom-up
-
-
-
-
-
-
-
-
- Send to Managers
-
-
-
- top-down
-
-
-
-
-
-
Send to Employee
-
+
self
@@ -1196,19 +1170,6 @@ Once the form had been filled, the employee send it to his supervisor.
-
-
- Final Interview With Manager
-
-
-
- final
-
-
-
-
-
-
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index 8a2aebcacdc..e1dd5e0b96f 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -160,15 +160,14 @@
-
-
+
-
+
-
+
-
+
@@ -303,7 +302,6 @@
-
@@ -324,7 +322,6 @@
-
@@ -342,7 +339,6 @@
-
diff --git a/addons/hr_evaluation/report/hr_evaluation_report.py b/addons/hr_evaluation/report/hr_evaluation_report.py
index bd9e5874d10..8e931b9f041 100644
--- a/addons/hr_evaluation/report/hr_evaluation_report.py
+++ b/addons/hr_evaluation/report/hr_evaluation_report.py
@@ -31,7 +31,6 @@ class hr_evaluation_report(osv.osv):
'create_date': fields.date('Create Date', readonly=True),
'delay_date':fields.float('Delay to Start', digits=(16,2),readonly=True),
'overpass_delay':fields.float('Overpassed Deadline', digits=(16,2), readonly=True),
- 'progress_bar' : fields.float("Progress"),
'day': fields.char('Day', size=128, readonly=True),
'deadline': fields.date("Deadline", readonly=True),
'request_id': fields.many2one('survey.request', 'Request_id', readonly=True),
@@ -77,7 +76,6 @@ class hr_evaluation_report(osv.osv):
to_char(s.create_date, 'MM') as month,
count(l.*) as nbr,
s.state,
- s.progress as progress_bar,
avg(extract('epoch' from age(s.create_date,CURRENT_DATE)))/(3600*24) as delay_date,
avg(extract('epoch' from age(s.date,CURRENT_DATE)))/(3600*24) as overpass_delay
from
@@ -96,7 +94,6 @@ class hr_evaluation_report(osv.osv):
s.date_close,
l.request_id,
s.rating,
- s.progress,
s.plan_id
)
""")
diff --git a/addons/hr_evaluation/report/hr_evaluation_report_view.xml b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
index c70c1d27923..2950d704e89 100644
--- a/addons/hr_evaluation/report/hr_evaluation_report_view.xml
+++ b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
@@ -20,7 +20,6 @@
-
diff --git a/addons/hr_evaluation/security/ir.model.access.csv b/addons/hr_evaluation/security/ir.model.access.csv
index e3a79b55a45..f9b8897eb01 100644
--- a/addons/hr_evaluation/security/ir.model.access.csv
+++ b/addons/hr_evaluation/security/ir.model.access.csv
@@ -25,7 +25,7 @@ access_survey_page_hr_user,survey.page.hr.user,survey.model_survey_page,base.gro
access_survey_response_hr_user,survey.response.hr.user,survey.model_survey_response,base.group_hr_user,1,1,1,0
access_survey_history_hr_user,survey.history.hr.user,survey.model_survey_history,base.group_hr_user,1,1,1,0
access_survey_request_hr_user,survey.request.hr.user,survey.model_survey_request,base.group_hr_user,1,1,1,0
-access_survey_question_column_heading_hr_user,survey.question.column.heading.hr.user,survey.model_survey_question_column_heading,base.group_hr_user,1,0,0,0
+access_survey_question_column_heading_hr_user,survey.question.column.heading.hr.user,survey.model_survey_question_column_heading,base.group_hr_user,1,1,1,0
access_survey_response_line_hr_user,survey.response.line.hr.user,survey.model_survey_response_line,base.group_hr_user,1,1,1,0
access_survey_tbl_column_heading_hr_user,survey.tbl.column.heading.hr.user,survey.model_survey_tbl_column_heading,base.group_hr_user,1,1,1,0
access_base_calendar_attendee_survey_user,base.calendar.calendar.attendee.survey.user,base_calendar.model_calendar_attendee,base.group_survey_user,1,1,1,0
From a57180173fecfe6c24965da6dcdf58258c06f0c2 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 27 Feb 2012 14:23:07 +0530
Subject: [PATCH 016/546] [IMP]hr_holidays: Set a unconfirmed instead of new.
bzr revid: mma@tinyerp.com-20120227085307-yxthcol3lwegltgz
---
addons/hr_holidays/hr_holidays.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 3dc8ae0467c..287558e5280 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -111,7 +111,7 @@ class hr_holidays(osv.osv):
_columns = {
'name': fields.char('Description', required=True, size=64),
- 'state': fields.selection([('draft', 'New'), ('confirm', 'To Approve'), ('refuse', 'Refused'),
+ 'state': fields.selection([('draft', 'Unconfirmed'), ('confirm', 'To Approve'), ('refuse', 'Refused'),
('validate1', 'Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')],
'State', readonly=True, help='The state is set to \'Draft\', when a holiday request is created.\
\nThe state is \'Waiting Approval\', when holiday request is confirmed by user.\
From ebfb0be2e156b49a14790300ce746dba78a159d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 10:02:24 +0100
Subject: [PATCH 017/546] [IMP] copy from pad
bzr revid: rlo@openerp.com-20120227090224-zujpg9zhf2nd5ioe
---
addons/google_docs/__openerp__.py | 12 ++++++++
.../{res_company.xml => res_gdocs.xml} | 2 +-
addons/google_docs/static/src/js/gdocs.js | 29 +++++++++++++++++++
addons/google_docs/static/src/xml/gdocs.xml | 13 +++++++++
4 files changed, 55 insertions(+), 1 deletion(-)
rename addons/google_docs/{res_company.xml => res_gdocs.xml} (91%)
create mode 100644 addons/google_docs/static/src/js/gdocs.js
create mode 100644 addons/google_docs/static/src/xml/gdocs.xml
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index 991a3e07e2c..2461be1e151 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -1,6 +1,18 @@
{
'name': 'Wiki',
'version': '0.1',
+ 'author': 'OpenERP SA',
+ 'website': 'http://openerp.com',
+ 'data': [
+ 'res_gdocs.xml'
+ ],
+ 'installable': True,
+ 'auto_install': False,
+ 'web': True,
+ 'js': ['static/src/js/gdocs.js'],
+ 'qweb' : [
+ "static/src/xml/*.xml",
+ ],
'depends': ['google_base_account'],
'description': 'Module to attach a google document to any model.'
}
diff --git a/addons/google_docs/res_company.xml b/addons/google_docs/res_gdocs.xml
similarity index 91%
rename from addons/google_docs/res_company.xml
rename to addons/google_docs/res_gdocs.xml
index 0324039c8f2..b1a54fdc63e 100644
--- a/addons/google_docs/res_company.xml
+++ b/addons/google_docs/res_gdocs.xml
@@ -2,7 +2,7 @@
res.company.form.gdocs
- res.company
+ google.docs
form
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
new file mode 100644
index 00000000000..e605577d45a
--- /dev/null
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -0,0 +1,29 @@
+openerp.gdocs = function(instance) {
+
+instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
+ on_attachments_loaded: function(attachments) {
+ this._super(attachments);
+ var self = this;
+ var $padbtn = self.$element.find('button.gdocs');
+ var is_pad = function(a) {
+ return a.type == 'url' && a.name == 'GDocs';
+ };
+ if (_.any(attachments, is_pad)) {
+ $padbtn.hide();
+ } else {
+ $padbtn.show().click(self.on_add_pad);
+ }
+ },
+ on_add_pad: function() {
+ var self = this;
+ var $padbtn = this.$element.find('button.gdocs');
+ $padbtn.attr('disabled', 'true').find('img, span').toggle();
+ this.view.dataset.call_button('pad_get', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
+ $padbtn.hide();
+ self.do_update();
+ self.do_action(r.result);
+ });
+ }
+});
+
+};
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
new file mode 100644
index 00000000000..52decbfdbc1
--- /dev/null
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+ Add GDoc
+
+
+
+
From eaf646c9e226c6bb729f5fdbdfdb291bf902631a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 10:19:29 +0100
Subject: [PATCH 018/546] [imp] view
bzr revid: rlo@openerp.com-20120227091929-pvcmtg5kes25pxid
---
addons/google_docs/res_gdocs.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/res_gdocs.xml b/addons/google_docs/res_gdocs.xml
index b1a54fdc63e..660252de986 100644
--- a/addons/google_docs/res_gdocs.xml
+++ b/addons/google_docs/res_gdocs.xml
@@ -7,7 +7,7 @@
-
+
From cea3437f596f73558e23f1e67d61029daccf8d6f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 11:56:36 +0100
Subject: [PATCH 019/546] [imp] view
bzr revid: rlo@openerp.com-20120227105636-czaw0ghb4jl6if1j
---
addons/google_docs/{res_gdocs.xml => google_docs.xml} | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename addons/google_docs/{res_gdocs.xml => google_docs.xml} (91%)
diff --git a/addons/google_docs/res_gdocs.xml b/addons/google_docs/google_docs.xml
similarity index 91%
rename from addons/google_docs/res_gdocs.xml
rename to addons/google_docs/google_docs.xml
index 660252de986..d0e842b566e 100644
--- a/addons/google_docs/res_gdocs.xml
+++ b/addons/google_docs/google_docs.xml
@@ -8,7 +8,7 @@
-
+
From 37ed7a1d9f1819fd39cbf0eb0679ae17e1afd91a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 13:38:34 +0100
Subject: [PATCH 020/546] [imp] view
bzr revid: rlo@openerp.com-20120227123834-todar214ngca7pu0
---
addons/google_docs/google_docs.py | 3 +--
addons/google_docs/static/src/js/gdocs.js | 20 ++++++++++----------
addons/google_docs/static/src/xml/gdocs.xml | 2 +-
3 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 90edb15b104..def1f3097e1 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -74,12 +74,11 @@ class google_docs(osv.osv):
edit_url_template = 'https://docs.google.com/Edit?docid=%s'
prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
- def copy_gdoc(self, cr, uid, model, folder=None, context=None):
+ def copy_gdoc(self, cr, uid, model, context=None):
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
- @param folder: folder in which to store the copy.
@param context: a standard dictionary for contextual values.
@return the url of the copy itself.
@return -1 if the template hasn't been assigned yet.
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index e605577d45a..30edffaad7f 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -4,22 +4,22 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
on_attachments_loaded: function(attachments) {
this._super(attachments);
var self = this;
- var $padbtn = self.$element.find('button.gdocs');
- var is_pad = function(a) {
+ var $gdocbtn = self.$element.find('button.gdocs');
+ var is_gdoc = function(a) {
return a.type == 'url' && a.name == 'GDocs';
};
- if (_.any(attachments, is_pad)) {
- $padbtn.hide();
+ if (_.any(attachments, is_gdoc)) {
+ $gdocbtn.hide();
} else {
- $padbtn.show().click(self.on_add_pad);
+ $gdocbtn.show().click(self.on_add_gdoc);
}
},
- on_add_pad: function() {
+ on_add_gdoc: function() {
var self = this;
- var $padbtn = this.$element.find('button.gdocs');
- $padbtn.attr('disabled', 'true').find('img, span').toggle();
- this.view.dataset.call_button('pad_get', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
- $padbtn.hide();
+ var $gdocbtn = this.$element.find('button.gdocs');alert($gdocbtn);
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ this.view.dataset.call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
+ $gdocbtn.hide();
self.do_update();
self.do_action(r.result);
});
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 52decbfdbc1..bc7a56842ba 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -4,7 +4,7 @@
-
+
Add GDoc
From 7f74731083ea8e3f6fbcec5aa7d3edef5803b1d7 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 27 Feb 2012 18:45:57 +0530
Subject: [PATCH 021/546] [IMP]purchase: Fix Error of email template, added
send button in workflow, change some state label name and its button position
bzr revid: mma@tinyerp.com-20120227131557-dl1ut04uypafpzwf
---
addons/email_template/email_template.py | 2 ++
addons/purchase/purchase.py | 23 +++++++++++++++++++++--
addons/purchase/purchase_view.xml | 13 +++++++------
addons/purchase/purchase_workflow.xml | 22 ++++++++++++++++++++++
4 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index 6c1571c5630..a6a2f9f2c82 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -56,6 +56,8 @@ class email_template(osv.osv):
:param str model: model name of the document record this mail is related to.
:param int res_id: id of the document record this mail is related to.
"""
+ if context is None:
+ context = {}
if not template: return u""
try:
template = tools.ustr(template)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 3d909c1085e..d342b7b1169 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -142,10 +142,11 @@ class purchase_order(osv.osv):
return res
STATE_SELECTION = [
- ('draft', 'Request for Quotation'),
+ ('draft', 'Draft PO'),
('wait', 'Waiting'),
+ ('send', 'RFQ Sent'),
('confirmed', 'Waiting Approval'),
- ('approved', 'Approved'),
+ ('approved', 'Purchase Order'),
('except_picking', 'Shipping Exception'),
('except_invoice', 'Invoice Exception'),
('done', 'Done'),
@@ -277,6 +278,24 @@ class purchase_order(osv.osv):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
+ def wkf_send_rfq(self, cr, uid, ids, context=None):
+
+ mod_obj = self.pool.get('ir.model.data')
+ template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'purchase.order')])
+ model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','email_compose_message_wizard_form')])
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
+ self.write(cr, uid, ids, {'state' : 'send'})
+
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(resource_id,'form')],
+ 'view_id': resource_id,
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': {'active_model': 'purchase.order', 'mail.compose.message.mode':'mass_mail', 'mail.compose.template_id' :template_id},
+ }
#TODO: implement messages system
def wkf_confirm_order(self, cr, uid, ids, context=None):
todo = []
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 1c936055aff..ccdc9858125 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -194,17 +194,18 @@
-
+
-
-
-
+
+
-
+
-
+
+
+
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index c978712c0a1..a7d67dd87a1 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -13,6 +13,12 @@
True
draft
+
+
+ send
+ function
+ wkf_send_rfq()
+
confirmed
@@ -90,6 +96,22 @@
purchase_confirm
+
+
+
+ send_rfq
+
+
+
+
+ purchase_confirm
+
+
+
+
+ purchase_cancel
+
+
From 95d9cb9f4ec264b0ee35fdc5bef9058d9cfdbe0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 14:54:25 +0100
Subject: [PATCH 022/546] [imp] view
bzr revid: rlo@openerp.com-20120227135425-879tmcgw20dfy2a1
---
addons/google_docs/__openerp__.py | 6 ++--
addons/google_docs/google_docs.py | 31 +++++++++++++++++----
addons/google_docs/static/src/js/gdocs.js | 1 +
addons/google_docs/static/src/xml/gdocs.xml | 2 +-
4 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index 2461be1e151..309ca13edc0 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -1,17 +1,17 @@
{
- 'name': 'Wiki',
+ 'name': 'Google Docs',
'version': '0.1',
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'data': [
- 'res_gdocs.xml'
+ 'google_docs.xml'
],
'installable': True,
'auto_install': False,
'web': True,
'js': ['static/src/js/gdocs.js'],
'qweb' : [
- "static/src/xml/*.xml",
+ "static/src/xml/gdocs.xml",
],
'depends': ['google_base_account'],
'description': 'Module to attach a google document to any model.'
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index def1f3097e1..59101ba5b09 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -70,7 +70,15 @@ class google_docs(osv.osv):
'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False),
'name_template': fields.char('GDoc name template', size=64, translate=False)
}
+ print '''
+#########################################
+
+GOOGLE DOCS
+
+#########################################
+
+'''
edit_url_template = 'https://docs.google.com/Edit?docid=%s'
prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
@@ -84,6 +92,15 @@ class google_docs(osv.osv):
@return -1 if the template hasn't been assigned yet.
@return -2 if the google_base_account hasn't been configured yet.
'''
+ print '''
+
+#########################################
+
+google_docs.copy_gdoc()
+
+#########################################
+
+'''
if context==None:
context={}
@@ -121,14 +138,15 @@ class google_docs(osv.osv):
return self.edit_url_template % (copied_resource.resource_id.text,)
+'''
def get_documents_list(self, cr, uid, context=None):
- '''Return the list of google documents available at the user's account.
+ ' ''Return the list of google documents available at the user's account.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param context: a standard dictionary for contextual values.
@return a list with information about the documents in form of tuples (document_name, document_resource_id).
@return -2 if the google_base_account hasn't been configured yet.
- '''
+ '' '
if context == None:
context = {}
@@ -146,10 +164,11 @@ class google_docs(osv.osv):
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith(prefix_gdoc_id_res), client.get_all_resources()))
+'''
-
+'''
def set_model_document_template(self, cr, uid, model, resource_id, context=None):
- '''Set the default document template for the specified model. This template doesn't have to be a google documents template itself, but just a document.
+ '' 'Set the default document template for the specified model. This template doesn't have to be a google documents template itself, but just a document.
@param cr: current row for the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
@@ -158,7 +177,7 @@ class google_docs(osv.osv):
@return 0 on successful execution.
@return -2 if the google_base_account hasn't been configured yet.
@return -3 if the given resource_id doesn't exist in the user's google docs account.
- '''
+ ' ''
if context == None:
context = {}
@@ -186,7 +205,7 @@ class google_docs(osv.osv):
})
return 0
-
+'''
class google_docs_folder(osv.osv):
_name = 'google.docs.folder'
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 30edffaad7f..579414ee74a 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -2,6 +2,7 @@ openerp.gdocs = function(instance) {
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
on_attachments_loaded: function(attachments) {
+ alert('gdocs.js.on_attachments_loaded()');
this._super(attachments);
var self = this;
var $gdocbtn = self.$element.find('button.gdocs');
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index bc7a56842ba..9f78a91c28f 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -4,7 +4,7 @@
-
+
Add GDoc
From 087c191730d611058b0303cf38d10989d868a7f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 14:57:51 +0100
Subject: [PATCH 023/546] [imp] view
bzr revid: rlo@openerp.com-20120227135751-33nd5qduv2jp58cu
---
addons/google_docs/google_docs.py | 56 -------------------------------
1 file changed, 56 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 59101ba5b09..2f2c4919271 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -4,62 +4,6 @@ import gdata.docs.client
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
-# _columns = {
-# 'id': fields.integer('ID', readonly=True),
-# 'model': fields.many2one('ir.model', 'Model'),
-# 'multiple': fields.boolean('Multiple'),
-# 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False)
-#
-# }
-#
-## edit_url_template = 'https://docs.google.com/Edit?docid=%s'
-## prefix_gdoc_id_res = 'document:'
-#
-# def google_docs_get(self, cr, uid, model, id):
-# attachment = self.search(cr, uid, [('res_model', '=', model), ('res_id', '=', id), ('type', '=', 'url'), ('url', 'like', 'https://docs.oogle.com')])
-# if attachment:
-# return self.read(cr, uid, attachment)[0]['url']
-# else:
-# url = self.pad_generate_url(cr, uid, model, id)
-# self.create(cr, uid, {
-# 'res_model' : model,
-# 'res_id' : id,
-# 'type' : 'url',
-# 'name' : 'Pad',
-# 'url' : url,
-# })
-# return url
-#
-# def generate_name(self, cr, uid, model, id):
-# template_vars = {
-# 'db' : cr.dbname,
-# 'model' : model,
-# 'id' : id,
-# 'salt' : salt,
-# 'name' : self.pool.get(model).name_get(cr,uid,[id])[0],
-# }
-# return pad_url_template % template_vars
-#
-#
-# def button_add_google_docs_google_docs_add_doc(self, cr, uid, model, id):
-# #pad_url_template = self.pool.get('res.users').browse(cr,uid,[uid])[0].company_id.pad_url_template
-# #s = string.ascii_uppercase + string.digits
-# #salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)])
-#
-# # i lookup in the table google_docs.templates to check the policy
-#
-# # if multiple: 1
-#
-# # if i find a template i will duplicate the template
-#
-# # else empty 'word' text
-#
-# # else
-# # if no document exists do like 1 -^
-# # else
-# # jumpt to the existing document
-#
-
class google_docs(osv.osv):
_name = 'google.docs'
From 3568bed68046537878e7386597abfb7978de3cdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 16:13:11 +0100
Subject: [PATCH 024/546] [imp] view
bzr revid: rlo@openerp.com-20120227151311-38go1bn2ihs1n5jq
---
addons/google_docs/static/src/js/gdocs.js | 10 ++++++++--
addons/google_docs/static/src/xml/gdocs.xml | 9 ++++++++-
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 579414ee74a..14996da46a5 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -2,7 +2,6 @@ openerp.gdocs = function(instance) {
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
on_attachments_loaded: function(attachments) {
- alert('gdocs.js.on_attachments_loaded()');
this._super(attachments);
var self = this;
var $gdocbtn = self.$element.find('button.gdocs');
@@ -17,7 +16,7 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
},
on_add_gdoc: function() {
var self = this;
- var $gdocbtn = this.$element.find('button.gdocs');alert($gdocbtn);
+ var $gdocbtn = this.$element.find('button.gdocs');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
this.view.dataset.call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
$gdocbtn.hide();
@@ -28,3 +27,10 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
});
};
+
+$(function() {
+ console.log($('#gd-button'));
+ $('#gd-button').click(function(){alert('click');});
+ alert('binded');
+}
+);
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 9f78a91c28f..61c169fe531 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -4,7 +4,14 @@
-
+
+
+
+
+
+
+
+
Add GDoc
From f0a9682a6aa6814817cca4e31fe9561bed60d126 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 17:12:00 +0100
Subject: [PATCH 025/546] [imp] js things
bzr revid: rlo@openerp.com-20120227161200-toovqcewybgxsitg
---
addons/google_docs/static/src/js/gdocs.js | 28 ++++++---------------
addons/google_docs/static/src/xml/gdocs.xml | 2 +-
2 files changed, 9 insertions(+), 21 deletions(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 14996da46a5..11690f70e2a 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -1,22 +1,16 @@
-openerp.gdocs = function(instance) {
+console.log('fegegegwnw')
+openerp.google_docs = function(instance) {
+console.log('nw')
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
- on_attachments_loaded: function(attachments) {
- this._super(attachments);
- var self = this;
- var $gdocbtn = self.$element.find('button.gdocs');
- var is_gdoc = function(a) {
- return a.type == 'url' && a.name == 'GDocs';
- };
- if (_.any(attachments, is_gdoc)) {
- $gdocbtn.hide();
- } else {
- $gdocbtn.show().click(self.on_add_gdoc);
- }
+ init: function() {
+ this._super.apply(this, arguments);
+ this.$element.delegate('.oe_google_docs_button', 'click', self.on_add_gdoc);
},
on_add_gdoc: function() {
var self = this;
- var $gdocbtn = this.$element.find('button.gdocs');
+console.log('--------');
+ var $gdocbtn = this.$element.find('.oe_google_docs_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
this.view.dataset.call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
$gdocbtn.hide();
@@ -28,9 +22,3 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
};
-$(function() {
- console.log($('#gd-button'));
- $('#gd-button').click(function(){alert('click');});
- alert('binded');
-}
-);
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 61c169fe531..7ee2297c545 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -11,7 +11,7 @@
-
+
Add GDoc
From af04b6860cfe10259a63a44cd6b4a4f8234eed8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 27 Feb 2012 17:14:13 +0100
Subject: [PATCH 026/546] [imp] js things
bzr revid: rlo@openerp.com-20120227161413-ie6cn7rwoezhht6v
---
addons/google_docs/static/src/js/gdocs.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 11690f70e2a..6ef889e3fa0 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -5,7 +5,7 @@ console.log('nw')
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
init: function() {
this._super.apply(this, arguments);
- this.$element.delegate('.oe_google_docs_button', 'click', self.on_add_gdoc);
+ this.$element.delegate('.oe_google_docs_button', 'click', this.on_add_gdoc);
},
on_add_gdoc: function() {
var self = this;
From ec2ceb5d6bf9c9a12102de64b2eded66cc7c7062 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Tue, 28 Feb 2012 09:22:26 +0100
Subject: [PATCH 027/546] [imp] js is calling the module
bzr revid: rlo@openerp.com-20120228082226-su74ddghivymtp09
---
addons/google_docs/static/src/js/gdocs.js | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 6ef889e3fa0..32a57e18c0c 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -1,18 +1,15 @@
-console.log('fegegegwnw')
-openerp.google_docs = function(instance) {
+openerp.google_docs = function(instance, session) {
-console.log('nw')
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
init: function() {
this._super.apply(this, arguments);
- this.$element.delegate('.oe_google_docs_button', 'click', this.on_add_gdoc);
+ this.$element.delegate('.oe_google_docs_button', 'click', this.on_add_gdoc);
},
on_add_gdoc: function() {
var self = this;
-console.log('--------');
var $gdocbtn = this.$element.find('.oe_google_docs_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- this.view.dataset.call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
+ new openerp.sessions.session0.web.DataSet(this, 'google.docs').call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
$gdocbtn.hide();
self.do_update();
self.do_action(r.result);
From 3e9fbd83ca03bc76ba62ca9a2fc3cc4888152ccc Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Tue, 28 Feb 2012 17:29:49 +0530
Subject: [PATCH 028/546] [IMP]purchase: Added a button receive invoice &
receive product, improve view and related code, change label done to paid
bzr revid: mma@tinyerp.com-20120228115949-03tbq9mqcr0bwrt2
---
addons/purchase/purchase.py | 63 +++++++++++++++++++++++++++----
addons/purchase/purchase_view.xml | 7 ++--
2 files changed, 60 insertions(+), 10 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index d342b7b1169..b3bd23b392d 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -149,7 +149,7 @@ class purchase_order(osv.osv):
('approved', 'Purchase Order'),
('except_picking', 'Shipping Exception'),
('except_invoice', 'Invoice Exception'),
- ('done', 'Done'),
+ ('done', 'Paid'),
('cancel', 'Cancelled')
]
@@ -274,28 +274,77 @@ class purchase_order(osv.osv):
fiscal_position = supplier.property_account_position and supplier.property_account_position.id or False
return {'value':{'partner_address_id': supplier_address['default'], 'pricelist_id': pricelist, 'fiscal_position': fiscal_position}}
+ def view_invoice(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ inv_ids = []
+ for po in self.browse(cr, uid, ids, context=context):
+ if po.invoice_method == 'manual':
+ if not po.invoice_ids:
+ raise osv.except_osv(_('Warring !'),
+ _('You have configure Invoice Control is: "%s", You must first Create all invoices related to this purchase order: "%s"') % (self._columns['invoice_method'].selection[0][1], po.name))
+ inv_ids+= [invoice.id for invoice in po.invoice_ids]
+
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
+ res_id = res and res[1] or False
+
+ return {
+ 'name': _('Supplier Invoices'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': [res_id],
+ 'res_model': 'account.invoice',
+ 'context': "{'type':'in_invoice', 'journal_type': 'purchase'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': inv_ids and inv_ids[0] or False,
+ }
+
+ def view_picking(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ pick_ids = []
+ for po in self.browse(cr, uid, ids, context=context):
+ pick_ids += [picking.id for picking in po.picking_ids]
+
+ res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_in_form')
+ res_id = res and res[1] or False
+
+ return {
+ 'name': _('Receptions'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': [res_id],
+ 'res_model': 'stock.picking',
+ 'context': "{'contact_display': 'partner'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': pick_ids and pick_ids[0] or False,
+ }
+
def wkf_approve_order(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
def wkf_send_rfq(self, cr, uid, ids, context=None):
-
mod_obj = self.pool.get('ir.model.data')
template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'purchase.order')])
- model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','email_compose_message_wizard_form')])
- resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
self.write(cr, uid, ids, {'state' : 'send'})
+ res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
+ res_id = res and res[1] or False
+
return {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
- 'views': [(resource_id,'form')],
- 'view_id': resource_id,
+ 'views': [(res_id,'form')],
+ 'view_id': res_id,
'type': 'ir.actions.act_window',
'target': 'new',
- 'context': {'active_model': 'purchase.order', 'mail.compose.message.mode':'mass_mail', 'mail.compose.template_id' :template_id},
+ 'context': {'active_model': 'purchase.order','mail.compose.template_id' :template_id},
}
+
#TODO: implement messages system
def wkf_confirm_order(self, cr, uid, ids, context=None):
todo = []
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index ccdc9858125..be0b8d17eed 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -194,16 +194,17 @@
-
+
-
+
-
+
+
From 841f8b12b413dd7a0d4091182d092128f27da5f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Tue, 28 Feb 2012 15:46:23 +0100
Subject: [PATCH 029/546] [imp] gdata code
bzr revid: rlo@openerp.com-20120228144623-4bk6lsnthk2elqbv
---
addons/google_docs/google_docs.py | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 2f2c4919271..1dd632aab83 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -49,38 +49,40 @@ google_docs.copy_gdoc()
if context==None:
context={}
- template_vars = {
+ '''template_vars = {
'db' : cr.dbname,
'model' : model,
'id' : id,
'salt' : salt,
'name' : '',
- }
+ }'''
name_template = 'Sales order %s'
- # check template for the current model
- model_obj = self.pool.get(model)
- res_gdocs_obj = self.pool.get('google.docs')
- domain = [('model' , '=', model_obj)]
- gdoc = res_gdocs_obj.search(cr,uid,domain,context=context)
- if not gdoc:
- return -1
-
# check google_base_account
users_obj = self.pool.get('res.users')
user = users_obj.browse(cr, uid, [uid])[0]
if not user.gmail_user or not user.gmail_password:
return -2
+ # check template for the current model
+ # TODO check module logic
+ '''model_obj = self.pool.get(model[0])
+ res_gdocs_obj = self.pool.get('google.docs')
+ domain = [('model' , '=', model_obj)]
+ gdoc = res_gdocs_obj.search(cr,uid,domain,context=context)
+ if not gdoc:
+
+ return -1
+'''
# copy the document
client = gdata.docs.client.DocsClient(source='openerp.com')
client.ssl = True
client.http_client.debug = False
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
- resource = client.get_resource_by_id(gdoc.gdocs_res_id)
- copied_resource = client.copy_resource(entry=resource, title= self.name_template % (model, ))
+ resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
+ new_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
- return self.edit_url_template % (copied_resource.resource_id.text,)
+ return self.edit_url_template % (new_resource.resource_id.text,)
'''
def get_documents_list(self, cr, uid, context=None):
From 06b32aedf47be98eb803c85211f49116110ec20e Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 11:39:31 +0530
Subject: [PATCH 030/546] [IMP]purchase: Improve warning message and set a
button attrs
bzr revid: mma@tinyerp.com-20120229060931-gsgg20m9mut5p10y
---
addons/purchase/purchase.py | 4 ++--
addons/purchase/purchase_view.xml | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index b3bd23b392d..1ac38b05001 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -280,8 +280,8 @@ class purchase_order(osv.osv):
for po in self.browse(cr, uid, ids, context=context):
if po.invoice_method == 'manual':
if not po.invoice_ids:
- raise osv.except_osv(_('Warring !'),
- _('You have configure Invoice Control is: "%s", You must first Create all invoices related to this purchase order: "%s"') % (self._columns['invoice_method'].selection[0][1], po.name))
+ raise osv.except_osv(_('warning !'),
+ _('Your Invoicing Control is based on order lines, so please create invoice from Purchase order lines.'))
inv_ids+= [invoice.id for invoice in po.invoice_ids]
res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index be0b8d17eed..6090bca78df 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -203,8 +203,8 @@
-
-
+
+
From 66eba554e45fd6797fdef07311bb44578f571209 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 11:43:32 +0530
Subject: [PATCH 031/546] [IMP]purchase:Added a Print Button in New state
bzr revid: mma@tinyerp.com-20120229061332-gagzxe9tf5pywhju
---
addons/purchase/purchase.py | 18 ++++++++++++++++++
addons/purchase/purchase_view.xml | 1 +
2 files changed, 19 insertions(+)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 1ac38b05001..f3ec32f2208 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -322,6 +322,24 @@ class purchase_order(osv.osv):
'res_id': pick_ids and pick_ids[0] or False,
}
+ def view_report(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ self.write(cr, uid, ids, {'state' : 'send'})
+
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ datas = {
+ 'ids': [],
+ 'model': 'purchase.order',
+ 'form': data
+ }
+ return {
+ 'type': 'ir.actions.report.xml',
+ 'report_name': 'purchase.quotation',
+ 'nodestroy': True,
+ 'datas': datas,
+ }
+
def wkf_approve_order(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 6090bca78df..2a17c9bc58d 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -197,6 +197,7 @@
+
From 5f50bd32e7cf7b87f769ded93bf69bce6ebf6dac Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 11:49:13 +0530
Subject: [PATCH 032/546] [IMP]purchase:Improve code state change by workflow
bzr revid: mma@tinyerp.com-20120229061913-oj8djiwaps5mdi1r
---
addons/purchase/purchase.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index f3ec32f2208..793d7e76fb1 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -323,9 +323,11 @@ class purchase_order(osv.osv):
}
def view_report(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
- self.write(cr, uid, ids, {'state' : 'send'})
+ for id in ids:
+ wf_service.trg_validate(uid, 'purchase.order', id, 'send_rfq', cr)
data = self.read(cr, uid, ids, [], context=context)[0]
datas = {
From 8082c6e4a3a41111c27d6362e7278b1d026fce2a Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Wed, 29 Feb 2012 12:17:05 +0530
Subject: [PATCH 033/546] [IMP] account, account_voucher : Improved workflow
state name, button name and also the position,Open payment in new window (and
close voucher when paid), added 'sent' state and its related changes.
bzr revid: mdi@tinyerp.com-20120229064705-x1j7ll1yst2ez5mf
---
addons/account/account_invoice.py | 24 +++++++++++++-
addons/account/account_invoice_view.xml | 13 ++++----
addons/account/account_invoice_workflow.xml | 32 ++++++++++++++++++-
addons/account_voucher/account_voucher.py | 2 +-
.../account_voucher_pay_invoice.xml | 2 +-
addons/account_voucher/invoice.py | 2 +-
.../voucher_payment_receipt_view.xml | 2 +-
addons/email_template/email_template.py | 2 ++
8 files changed, 67 insertions(+), 12 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 5e5ac5f482b..98379f67240 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -202,7 +202,8 @@ class account_invoice(osv.osv):
('draft','Draft'),
('proforma','Pro-forma'),
('proforma2','Pro-forma'),
- ('open','Open'),
+ ('open','Validated'),
+ ('sent','Sent'),
('paid','Paid'),
('cancel','Cancelled')
],'State', select=True, readonly=True,
@@ -370,6 +371,27 @@ class account_invoice(osv.osv):
_('There is no Accounting Journal of type Sale/Purchase defined!'))
else:
raise orm.except_orm(_('Unknown Error'), str(e))
+
+ def invoice_sent(self, cr, uid, ids, *args):
+ email_template_obj = self.pool.get('email.template')
+ mod_obj = self.pool.get('ir.model.data')
+
+ template_id = email_template_obj.search(cr, uid, [('name', '=', 'Automated Invoice Notification Mail')])[0]
+ template = email_template_obj.browse(cr, uid, template_id)
+ model_data_id = mod_obj._get_id(cr, uid, 'mail', 'email_compose_message_wizard_form')
+ res_id = mod_obj.browse(cr, uid, model_data_id).res_id
+
+ self.write(cr, uid, ids, {'state' : 'sent'})
+
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(res_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context':{'active_model':'account.invoice', 'mail.compose.template_id': template.id},
+ }
def confirm_paid(self, cr, uid, ids, context=None):
if context is None:
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 59977c252f9..0aa7e48b6fc 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -299,16 +299,17 @@
-
+
-
+
+
+
+
+
+
-
-
-
-
diff --git a/addons/account/account_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml
index 2af1e192a9b..58c4150a736 100644
--- a/addons/account/account_invoice_workflow.xml
+++ b/addons/account/account_invoice_workflow.xml
@@ -30,6 +30,14 @@ action_number()
write({'state':'open'})
function
+
+
+
+ sent
+ invoice_sent()
+ function
+
+
re-open
@@ -58,13 +66,30 @@ write({'state':'cancel'})
invoice_open
-
+
+
+
+ invoice_sent
+
+
account.move.line
move_line_id_payment_get()
test_paid()
+
+
+
+ account.move.line
+ move_line_id_payment_get()
+ test_paid()
+
+
+
+
+ invoice_cancel
+
@@ -86,6 +111,11 @@ write({'state':'cancel'})
invoice_cancel
+
+
+
+ invoice_sent
+
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 3ed173cca85..0a902fd48dc 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -772,7 +772,7 @@ class account_voucher(osv.osv):
def proforma_voucher(self, cr, uid, ids, context=None):
self.action_move_line_create(cr, uid, ids, context=context)
- return True
+ return {'type': 'ir.actions.act_window_close'}
def action_cancel_draft(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
diff --git a/addons/account_voucher/account_voucher_pay_invoice.xml b/addons/account_voucher/account_voucher_pay_invoice.xml
index 345241cb4ee..f93da8d370f 100644
--- a/addons/account_voucher/account_voucher_pay_invoice.xml
+++ b/addons/account_voucher/account_voucher_pay_invoice.xml
@@ -8,7 +8,7 @@
-
+
diff --git a/addons/account_voucher/invoice.py b/addons/account_voucher/invoice.py
index b108bc14fe3..006a622e25f 100644
--- a/addons/account_voucher/invoice.py
+++ b/addons/account_voucher/invoice.py
@@ -36,7 +36,7 @@ class invoice(osv.osv):
'res_model': 'account.voucher',
'type': 'ir.actions.act_window',
'nodestroy': True,
- 'target': 'current',
+ 'target': 'new',
'domain': '[]',
'context': {
'default_partner_id': inv.partner_id.id,
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 241bd23d5bb..43e316d1091 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -403,10 +403,10 @@
+
-
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index 6c1571c5630..a6a2f9f2c82 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -56,6 +56,8 @@ class email_template(osv.osv):
:param str model: model name of the document record this mail is related to.
:param int res_id: id of the document record this mail is related to.
"""
+ if context is None:
+ context = {}
if not template: return u""
try:
template = tools.ustr(template)
From f8213e68f0a1d5ffde27a47b70211a0cb205db9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 09:38:33 +0100
Subject: [PATCH 034/546] [imp] integration with google_base_account
bzr revid: rlo@openerp.com-20120229083833-yd0wfg8x5ywc9e1c
---
addons/google_docs/google_docs.py | 9 +++++++--
addons/google_docs/static/src/js/gdocs.js | 1 +
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 1dd632aab83..1c36533e614 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -23,7 +23,7 @@ GOOGLE DOCS
#########################################
'''
- edit_url_template = 'https://docs.google.com/Edit?docid=%s'
+ edit_url_template = 'https://docs.google.com/document/d/%s/edit'
prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
def copy_gdoc(self, cr, uid, model, context=None):
@@ -61,6 +61,9 @@ google_docs.copy_gdoc()
# check google_base_account
users_obj = self.pool.get('res.users')
user = users_obj.browse(cr, uid, [uid])[0]
+ print '%s' % user.__dict__
+ print '%s' % user.gmail_user
+ print '%s' % user.gmail_password
if not user.gmail_user or not user.gmail_password:
return -2
@@ -81,7 +84,9 @@ google_docs.copy_gdoc()
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
new_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
-
+ print new_resource.__dict__
+ print new_resource.resource_id.text
+ print new_resource.resource_id
return self.edit_url_template % (new_resource.resource_id.text,)
'''
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 32a57e18c0c..6e0ae93fdf3 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -10,6 +10,7 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
var $gdocbtn = this.$element.find('.oe_google_docs_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
new openerp.sessions.session0.web.DataSet(this, 'google.docs').call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
+ console.log(r);
$gdocbtn.hide();
self.do_update();
self.do_action(r.result);
From 8dcc88469eaf311966214c64d46715e095c3277b Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 29 Feb 2012 15:16:32 +0530
Subject: [PATCH 035/546] [IMP] sale: workflow improvements and send quatation
in mail feature implementation
bzr revid: psi@tinyerp.com-20120229094632-wvu5h6w0avbhto1b
---
addons/sale/edi/sale_order_action_data.xml | 20 +++++-----
addons/sale/sale.py | 46 ++++++++++++++++++++--
addons/sale/sale_view.xml | 13 +++---
addons/sale/sale_workflow.xml | 26 +++++++++++-
4 files changed, 86 insertions(+), 19 deletions(-)
diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml
index 3d7a554ff4a..56cee553b9e 100644
--- a/addons/sale/edi/sale_order_action_data.xml
+++ b/addons/sale/edi/sale_order_action_data.xml
@@ -2,14 +2,7 @@
-
- if not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
- code
- ir.actions.server
-
- True
- Auto-email confirmed sale orders
-
+
@@ -30,9 +23,18 @@
so users can freely customize/delete them -->
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 82bfda7b580..c13fae41c20 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -201,10 +201,11 @@ class sale_order(osv.osv):
'origin': fields.char('Source Document', size=64, help="Reference of the document that generated this sales order request."),
'client_order_ref': fields.char('Customer Reference', size=64),
'state': fields.selection([
- ('draft', 'Quotation'),
+ ('draft', 'Draft Quotation'),
+ ('sent', 'Quotation Sent'),
('waiting_date', 'Waiting Schedule'),
- ('manual', 'To Invoice'),
- ('progress', 'In Progress'),
+ ('manual', 'Sale to Invoice'),
+ ('progress', 'Sale in Progress'),
('shipping_except', 'Shipping Exception'),
('invoice_except', 'Invoice Exception'),
('done', 'Done'),
@@ -470,6 +471,17 @@ class sale_order(osv.osv):
inv_obj.button_compute(cr, uid, [inv_id])
return inv_id
+ def print_quotation(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ for id in ids:
+ wf_service.trg_validate(uid, 'sale.order', id, 'quotation_sent', cr)
+ datas = {
+ 'model': 'sale.order',
+ 'ids': ids,
+ 'form': self.read(cr, uid, ids, context=context)[0],
+ }
+ return {'type': 'ir.actions.report.xml', 'report_name': 'sale.order', 'datas': datas, 'nodestroy': True}
+
def manual_invoice(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
@@ -658,6 +670,34 @@ class sale_order(osv.osv):
self.log(cr, uid, o.id, message)
return True
+ def action_quotation_sent(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'sale.order')], context=context)
+ model_data_ids = mod_obj.search(cr, uid, [('model','=','ir.ui.view'),('name','=','email_compose_message_wizard_form')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ #EDI EXport data
+ id = ids[0]
+ if not self.browse(cr, uid, id, context).partner_id.opt_out:
+ order.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
+ ctx = context.copy()
+ ctx.update({'active_model': 'sale.order', 'active_id': id, 'mail.compose.template_id': template_id})
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(resource_id,'form')],
+ 'view_id': resource_id,
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': ctx,
+ 'nodestroy': True,
+ }
+
+ def _hook_message_sent(self, cr, uid, sale_id, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_validate(uid, 'sale.order', sale_id, 'quotation_sent', cr)
+ return True
+
def procurement_lines_get(self, cr, uid, ids, *args):
res = []
for order in self.browse(cr, uid, ids, context={}):
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 90d3838f5a0..f47bb09e2fa 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -200,20 +200,21 @@
-
+
-
+
-
-
+
+
+
+
+
-
-
diff --git a/addons/sale/sale_workflow.xml b/addons/sale/sale_workflow.xml
index 0ff5eb15ea0..59fce9f9d7b 100644
--- a/addons/sale/sale_workflow.xml
+++ b/addons/sale/sale_workflow.xml
@@ -13,6 +13,12 @@
True
draft
+
+
+ sent
+ function
+ write({'state':'sent'})
+
router
@@ -123,6 +129,24 @@
order_confirm
+
+
+
+ quotation_sent
+
+
+
+
+
+ cancel
+
+
+
+
+
+ order_confirm
+
+
@@ -180,7 +204,7 @@
manual_invoice
-
+
From 8dd0ad53f7ecac6078f1ab50b4132c7f711164f2 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 29 Feb 2012 15:25:58 +0530
Subject: [PATCH 036/546] [imp] mail, email_template: improvements
bzr revid: psi@tinyerp.com-20120229095558-ezomcdj23m6kcdlv
---
addons/email_template/email_template.py | 2 ++
addons/email_template/wizard/mail_compose_message.py | 4 +++-
addons/mail/mail_message.py | 4 +++-
addons/mail/wizard/mail_compose_message.py | 2 +-
4 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index 6c1571c5630..a6a2f9f2c82 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -56,6 +56,8 @@ class email_template(osv.osv):
:param str model: model name of the document record this mail is related to.
:param int res_id: id of the document record this mail is related to.
"""
+ if context is None:
+ context = {}
if not template: return u""
try:
template = tools.ustr(template)
diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py
index ef4572429a1..c68f884f7ef 100644
--- a/addons/email_template/wizard/mail_compose_message.py
+++ b/addons/email_template/wizard/mail_compose_message.py
@@ -95,19 +95,21 @@ class mail_compose_message(osv.osv_memory):
for fname, fcontent in attachment.iteritems():
data_attach = {
'name': fname,
- 'datas': base64.b64encode(fcontent),
+ 'datas': fcontent,
'datas_fname': fname,
'description': fname,
'res_model' : self._name,
'res_id' : ids[0] if ids else False
}
att_ids.append(attachment_obj.create(cr, uid, data_attach))
+ values['subtype'] = 'html'
values['attachment_ids'] = att_ids
else:
# restore defaults
values = self.default_get(cr, uid, self.fields_get_keys(cr, uid), context)
values.update(use_template=use_template, template_id=template_id)
+ values['subtype'] = 'html'
return {'value': values}
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 45a6019db3d..8e6472a265c 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -517,7 +517,9 @@ class mail_message(osv.osv):
message.write({'state':'sent', 'message_id': res})
else:
message.write({'state':'exception'})
-
+ model_pool = self.pool.get(message.model)
+ if hasattr(model_pool, '_hook_message_sent'):
+ model_pool._hook_message_sent(cr, uid, message.res_id, context=context)
# if auto_delete=True then delete that sent messages as well as attachments
message.refresh()
if message.state == 'sent' and message.auto_delete:
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 27ec13b2147..003ddd8b6c3 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -160,6 +160,7 @@ class mail_compose_message(osv.osv_memory):
result.update({
'subtype' : 'plain', # default to the text version due to quoting
'body_text' : body,
+ 'body_html' : message_data.body_html,
'subject' : subject,
'attachment_ids' : [],
'model' : message_data.model or False,
@@ -238,7 +239,6 @@ class mail_compose_message(osv.osv_memory):
subtype=mail.subtype, headers=headers, context=context)
# in normal mode, we send the email immediately, as the user expects us to (delay should be sufficiently small)
mail_message.send(cr, uid, [msg_id], context=context)
-
return {'type': 'ir.actions.act_window_close'}
def render_template(self, cr, uid, template, model, res_id, context=None):
From 98fc1ace87bcf80e55d7be1f069bb823a9a075f3 Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Wed, 29 Feb 2012 15:40:45 +0530
Subject: [PATCH 037/546] [IMP] account Improve the print button to call the
invoice_sent signal and also invoice_sent is triggered only when mail is
send.
bzr revid: mdi@tinyerp.com-20120229101045-w775o646hlu432ot
---
addons/account/account_invoice.py | 39 ++++++++++++++++++---
addons/account/account_invoice_view.xml | 4 +--
addons/account/account_invoice_workflow.xml | 2 +-
3 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 98379f67240..51533353be4 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -372,25 +372,54 @@ class account_invoice(osv.osv):
else:
raise orm.except_orm(_('Unknown Error'), str(e))
- def invoice_sent(self, cr, uid, ids, *args):
+ def _hook_message_sent(self, cr, uid, invoice_id, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_validate(uid, 'account.invoice', invoice_id, 'invoice_sent', cr)
+ return True
+
+ def invoice_print(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService('workflow')
+ for id in ids:
+ wf_service.trg_validate(uid, 'account.invoice', id, 'invoice_sent', cr)
+ datas = {
+ 'ids': ids,
+ 'model': 'account.invoice',
+ 'form': self.read(cr, uid, ids, context=context)[0]
+ }
+ return {
+ 'type': 'ir.actions.report.xml',
+ 'report_name': 'account.invoice',
+ 'datas': datas,
+ 'nodestroy' : True
+ }
+
+ def action_invoice_sent(self, cr, uid, ids, context=None):
email_template_obj = self.pool.get('email.template')
mod_obj = self.pool.get('ir.model.data')
- template_id = email_template_obj.search(cr, uid, [('name', '=', 'Automated Invoice Notification Mail')])[0]
+ template_id = email_template_obj.search(cr, uid, [('model_id', '=', 'account.invoice')], context=context)[0]
template = email_template_obj.browse(cr, uid, template_id)
model_data_id = mod_obj._get_id(cr, uid, 'mail', 'email_compose_message_wizard_form')
- res_id = mod_obj.browse(cr, uid, model_data_id).res_id
+ res_id = mod_obj.browse(cr, uid, model_data_id, context=context).res_id
- self.write(cr, uid, ids, {'state' : 'sent'})
+ #EDI EXport data
+ id = ids[0]
+ invoice = self.browse(cr, uid, id, context)
+ if not invoice.partner_id.opt_out:
+ invoice.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)
+ ctx = context.copy()
+ ctx.update({'active_model': 'account.invoice', 'active_id': invoice.id, 'mail.compose.template_id': template.id})
return {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(res_id, 'form')],
+ 'view_id': res_id,
'type': 'ir.actions.act_window',
'target': 'new',
- 'context':{'active_model':'account.invoice', 'mail.compose.template_id': template.id},
+ 'context': ctx,
+ 'nodestroy': True,
}
def confirm_paid(self, cr, uid, ids, context=None):
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 0aa7e48b6fc..cd70edb2349 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -302,8 +302,8 @@
-
-
+
+
diff --git a/addons/account/account_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml
index 58c4150a736..7e536036628 100644
--- a/addons/account/account_invoice_workflow.xml
+++ b/addons/account/account_invoice_workflow.xml
@@ -34,7 +34,7 @@ write({'state':'open'})
sent
- invoice_sent()
+ write({'state':'sent'})
function
From f4f13affad3ea93595a1d059be174447d64d16ff Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 15:46:53 +0530
Subject: [PATCH 038/546] [IMP]purchase: added message_hook method and improve
workflow and button
bzr revid: mma@tinyerp.com-20120229101653-wiuo4am11s1kaa5h
---
addons/purchase/purchase.py | 16 ++++++++++++++--
addons/purchase/purchase_view.xml | 2 +-
addons/purchase/purchase_workflow.xml | 2 +-
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 793d7e76fb1..9ebb084ecb2 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -346,14 +346,25 @@ class purchase_order(osv.osv):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
+ def _hook_message_sent(self, cr, uid, purchase_id, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_validate(uid, 'purchase.order', purchase_id, 'send_rfq', cr)
+ return True
+
def wkf_send_rfq(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'purchase.order')])
- self.write(cr, uid, ids, {'state' : 'send'})
res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
res_id = res and res[1] or False
+ #EDI EXport data
+ id = ids[0]
+ order = self.browse(cr, uid, id, context)
+ if not order.partner_id.opt_out:
+ order.edi_export_and_email(template_ext_id='purchase.email_template_edi_purchase', context=context)
+ ctx = context.copy()
+ ctx.update({'active_model': 'purchase.order', 'active_id': id, 'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
@@ -362,7 +373,8 @@ class purchase_order(osv.osv):
'view_id': res_id,
'type': 'ir.actions.act_window',
'target': 'new',
- 'context': {'active_model': 'purchase.order','mail.compose.template_id' :template_id},
+ 'context': ctx,
+ 'nodestroy': True,
}
#TODO: implement messages system
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 2a17c9bc58d..ad064bab696 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -196,7 +196,7 @@
-
+
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index a7d67dd87a1..38010780c7f 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -17,7 +17,7 @@
send
function
- wkf_send_rfq()
+ write({'state':'send'})
From 1e4d9f48d2b197400d9c4ca6e684101a1ada1e6a Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 15:52:43 +0530
Subject: [PATCH 039/546] [IMP]purchase:revert email_template changes
bzr revid: mma@tinyerp.com-20120229102243-vvft6tu6wn2jnkrv
---
addons/email_template/email_template.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index a6a2f9f2c82..6c1571c5630 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -56,8 +56,6 @@ class email_template(osv.osv):
:param str model: model name of the document record this mail is related to.
:param int res_id: id of the document record this mail is related to.
"""
- if context is None:
- context = {}
if not template: return u""
try:
template = tools.ustr(template)
From d49739ff8a9fbd4bf3d59ff9d386c82a343b2900 Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Wed, 29 Feb 2012 16:55:32 +0530
Subject: [PATCH 040/546] [IMP] account : Improve the workflow button
visibility.
bzr revid: mdi@tinyerp.com-20120229112532-qc7bmge9d6naqqt1
---
addons/account/account_invoice_view.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index cd70edb2349..e71f83b30f3 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -306,7 +306,7 @@
-
+
From ae97d281d309c0c4ba3cae832a3be97dc0055fd2 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 17:07:11 +0530
Subject: [PATCH 041/546] [IMP]purchase:comment code of edi for pending now
bzr revid: mma@tinyerp.com-20120229113711-jq8in1oww9o03on2
---
addons/purchase/purchase.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 9ebb084ecb2..eaf3e39ae3c 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -361,8 +361,8 @@ class purchase_order(osv.osv):
#EDI EXport data
id = ids[0]
order = self.browse(cr, uid, id, context)
- if not order.partner_id.opt_out:
- order.edi_export_and_email(template_ext_id='purchase.email_template_edi_purchase', context=context)
+ #if not order.partner_id.opt_out:
+ #order.edi_export_and_email(template_ext_id='purchase.email_template_edi_purchase', context=context)
ctx = context.copy()
ctx.update({'active_model': 'purchase.order', 'active_id': id, 'mail.compose.template_id': template_id})
return {
From 7650c331c5582fd25cae863a9ccdfb34e6b0abb9 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 29 Feb 2012 17:13:43 +0530
Subject: [PATCH 042/546] [IMP] sale: small change related to print order
button
bzr revid: psi@tinyerp.com-20120229114343-we8n5tlhfxxe3xv8
---
addons/sale/sale.py | 4 ++--
addons/sale/sale_view.xml | 1 -
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index c13fae41c20..a8b3f9d8f73 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -677,8 +677,8 @@ class sale_order(osv.osv):
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
#EDI EXport data
id = ids[0]
- if not self.browse(cr, uid, id, context).partner_id.opt_out:
- order.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
+# if not self.browse(cr, uid, id, context).partner_id.opt_out:
+# order.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
ctx = context.copy()
ctx.update({'active_model': 'sale.order', 'active_id': id, 'mail.compose.template_id': template_id})
return {
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index f47bb09e2fa..e01bf8ab725 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -206,7 +206,6 @@
-
From 57586ad1accb095612481947fb2cc081e6eade4b Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Wed, 29 Feb 2012 17:17:20 +0530
Subject: [PATCH 043/546] [IMP] account : Improve the workflow button
visibility and code.
bzr revid: mdi@tinyerp.com-20120229114720-hx6sexngsi4hgfg7
---
addons/account/account_invoice.py | 4 ++--
addons/account/account_invoice_view.xml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 51533353be4..3a82bfd9854 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -405,8 +405,8 @@ class account_invoice(osv.osv):
#EDI EXport data
id = ids[0]
invoice = self.browse(cr, uid, id, context)
- if not invoice.partner_id.opt_out:
- invoice.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)
+# if not invoice.partner_id.opt_out:
+# invoice.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)
ctx = context.copy()
ctx.update({'active_model': 'account.invoice', 'active_id': invoice.id, 'mail.compose.template_id': template.id})
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index e71f83b30f3..35b8cd2cadf 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -303,7 +303,7 @@
-
+
From 4c04da28b7e3c78785cbb51892b26facc1b15f1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 13:29:40 +0100
Subject: [PATCH 044/546] [imp] working... the only thing missing is linking
from the model web to the gdoc web
bzr revid: rlo@openerp.com-20120229122940-16h3bwa6j8zbz01s
---
addons/google_docs/google_docs.py | 152 +++++-----------------
addons/google_docs/static/src/js/gdocs.js | 4 +-
2 files changed, 36 insertions(+), 120 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 1c36533e614..57cd9441566 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -4,162 +4,80 @@ import gdata.docs.client
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
-class google_docs(osv.osv):
- _name = 'google.docs'
+class google_docs_config(osv.osv):
+ _name = 'google.docs.config'
+ _inherit = 'ir.attachment'
- _table = 'google_docs_templates'
_columns = {
- 'id': fields.integer('ID', readonly=True),
'model': fields.many2one('ir.model', 'Model'),
- 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False),
- 'name_template': fields.char('GDoc name template', size=64, translate=False)
+ 'gdocs_resource_id': fields.char('Google resource ID', size=64),
+ 'name_template': fields.char('GDoc name template', size=64)
}
- print '''
-#########################################
+ _defaults = {
+ 'name_template': 'Google Document'
+ }
-GOOGLE DOCS
-
-#########################################
-
-'''
edit_url_template = 'https://docs.google.com/document/d/%s/edit'
prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
def copy_gdoc(self, cr, uid, model, context=None):
+ #import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
@param context: a standard dictionary for contextual values.
@return the url of the copy itself.
- @return -1 if the template hasn't been assigned yet.
@return -2 if the google_base_account hasn't been configured yet.
'''
- print '''
-
-#########################################
-
-google_docs.copy_gdoc()
-
-#########################################
-
-'''
if context==None:
context={}
- '''template_vars = {
- 'db' : cr.dbname,
- 'model' : model,
- 'id' : id,
- 'salt' : salt,
- 'name' : '',
- }'''
name_template = 'Sales order %s'
# check google_base_account
users_obj = self.pool.get('res.users')
user = users_obj.browse(cr, uid, [uid])[0]
- print '%s' % user.__dict__
- print '%s' % user.gmail_user
- print '%s' % user.gmail_password
if not user.gmail_user or not user.gmail_password:
return -2
- # check template for the current model
- # TODO check module logic
- '''model_obj = self.pool.get(model[0])
- res_gdocs_obj = self.pool.get('google.docs')
- domain = [('model' , '=', model_obj)]
- gdoc = res_gdocs_obj.search(cr,uid,domain,context=context)
- if not gdoc:
-
- return -1
-'''
- # copy the document
+ # create the document
client = gdata.docs.client.DocsClient(source='openerp.com')
client.ssl = True
client.http_client.debug = False
client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
- new_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
- print new_resource.__dict__
- print new_resource.resource_id.text
- print new_resource.resource_id
- return self.edit_url_template % (new_resource.resource_id.text,)
+ gdocs_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
+ return gdocs_resource
-'''
- def get_documents_list(self, cr, uid, context=None):
- ' ''Return the list of google documents available at the user's account.
- @param cr: the current row from the database cursor.
- @param uid: the current user ID, for security checks.
- @param context: a standard dictionary for contextual values.
- @return a list with information about the documents in form of tuples (document_name, document_resource_id).
- @return -2 if the google_base_account hasn't been configured yet.
- '' '
+class google_docs(osv.osv):
+ _name = 'google.docs'
- if context == None:
- context = {}
- # check google_base_account
- users_obj = self.pool.get('res.users')
- user = users_obj.browse(cr, uid, [uid])[0]
- if not user.gmail_user or not user.gmail_password:
- return -2
+ def doc_get(self, cr, uid, model, id, context=None):
+ google_docs_ref = self.pool.get('google.docs.config')
+ gdocs_resource_id = google_docs_ref.search(cr, uid, [('model', '=', model)])
- # get the documents list
- client = gdata.docs.client.DocsClient(source='openerp.com')
- client.ssl = True
- client.http_client.debug = False
- client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+ if gdocs_resource_id:
+ return google_docs_ref.edit_url_template % (gdocs_resource_id, )
+ else:
+ gdocs_resource = google_docs_ref.copy_gdoc(cr, uid, model, context)
+ print gdocs_resource
+ if gdocs_resource == -2:
+ return gdocs_resource
- return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith(prefix_gdoc_id_res), client.get_all_resources()))
-'''
+ print gdocs_resource
-'''
- def set_model_document_template(self, cr, uid, model, resource_id, context=None):
- '' 'Set the default document template for the specified model. This template doesn't have to be a google documents template itself, but just a document.
- @param cr: current row for the database cursor.
- @param uid: the current user ID, for security checks.
- @param model: the current model name.
- @param resource_id: resource_id associated to the chosen document.
- @param context: a standard dictionary for contextual values.
- @return 0 on successful execution.
- @return -2 if the google_base_account hasn't been configured yet.
- @return -3 if the given resource_id doesn't exist in the user's google docs account.
- ' ''
-
- if context == None:
- context = {}
-
- # check google_base_account
- users_obj = self.pool.get('res.users')
- user = users_obj.browse(cr, uid, [uid])[0]
- if not user.gmail_user or not user.gmail_password:
- return -2
-
- # check resource_id
- client = gdata.docs.client.DocsClient(source='openerp.com')
- client.ssl = True
- client.http_client.debug = False
- client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
- try:
- client.get_resource_by_id(resource_id)
- except RequestError:
- return -3
-
- # set the model document template
- model_template_id = self.create(cr, uid,
- { 'model': self.pool.get(model),
- 'gdocs_res_id': resource_id
+ import pdb; pdb.set_trace()
+ # save the reference
+ gdocs_resource_id = gdocs_resource.resource_id.text[gdocs_resource.prefix_gdoc_id_res+1:]
+ google_docs_ref.create(cr, uid, {
+ 'model': model,
+ 'google_resource_id': gdocs_resource_id,
+ 'name': gdocs_resource_title.text,
})
-
- return 0
-'''
-
-class google_docs_folder(osv.osv):
- _name = 'google.docs.folder'
- _columns = {
- 'res_id': fields.char('GDocs resource id', size=64, translate=False),
- }
+ print gdocs_resource.resource_id.text
+ print gdocs_resource_id
+ return google_docs_ref.edit_url_template % (gdocs_resource_id,)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 6e0ae93fdf3..14103681306 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -9,11 +9,9 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- new openerp.sessions.session0.web.DataSet(this, 'google.docs').call_button('copy_gdoc', [[this.view.datarecord.id], this.view.dataset.get_context()], function(r) {
+ new openerp.sessions.session0.web.DataSet(this, 'google.docs').call('doc_get', [this.view.datarecord.id, this.view.dataset.get_context()], function(r) {
console.log(r);
- $gdocbtn.hide();
self.do_update();
- self.do_action(r.result);
});
}
});
From 854e18a73724b97107dcaf172c77855713fe7a18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 13:37:58 +0100
Subject: [PATCH 045/546] [imp]fixrkremove pdb statements
bzr revid: rlo@openerp.com-20120229123758-0tcguv9olvul3trk
---
addons/google_docs/google_docs.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 57cd9441566..abc7d81e189 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -70,9 +70,8 @@ class google_docs(osv.osv):
print gdocs_resource
- import pdb; pdb.set_trace()
# save the reference
- gdocs_resource_id = gdocs_resource.resource_id.text[gdocs_resource.prefix_gdoc_id_res+1:]
+ gdocs_resource_id = gdocs_resource.resource_id.text[len(google_docs_ref.prefix_gdoc_id_res):]
google_docs_ref.create(cr, uid, {
'model': model,
'google_resource_id': gdocs_resource_id,
From 67ffbbac7a14a31d278043f1a5b962a41730ece1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 13:39:42 +0100
Subject: [PATCH 046/546] [fix] remove debug statements
bzr revid: rlo@openerp.com-20120229123942-a3ntcfz15xgqek4g
---
addons/google_docs/google_docs.py | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index abc7d81e189..e253d62ffbb 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -64,12 +64,9 @@ class google_docs(osv.osv):
return google_docs_ref.edit_url_template % (gdocs_resource_id, )
else:
gdocs_resource = google_docs_ref.copy_gdoc(cr, uid, model, context)
- print gdocs_resource
if gdocs_resource == -2:
return gdocs_resource
- print gdocs_resource
-
# save the reference
gdocs_resource_id = gdocs_resource.resource_id.text[len(google_docs_ref.prefix_gdoc_id_res):]
google_docs_ref.create(cr, uid, {
@@ -77,6 +74,5 @@ class google_docs(osv.osv):
'google_resource_id': gdocs_resource_id,
'name': gdocs_resource_title.text,
})
- print gdocs_resource.resource_id.text
- print gdocs_resource_id
+
return google_docs_ref.edit_url_template % (gdocs_resource_id,)
From 16bfaa6fce17c8705a191b348d51b67970b1fa95 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 29 Feb 2012 18:23:19 +0530
Subject: [PATCH 047/546] [IMP] sale: small change
bzr revid: psi@tinyerp.com-20120229125319-8a71fmbcrv10383z
---
addons/sale/sale.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index a8b3f9d8f73..ba051d37a9e 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -676,11 +676,10 @@ class sale_order(osv.osv):
model_data_ids = mod_obj.search(cr, uid, [('model','=','ir.ui.view'),('name','=','email_compose_message_wizard_form')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
#EDI EXport data
- id = ids[0]
# if not self.browse(cr, uid, id, context).partner_id.opt_out:
# order.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
ctx = context.copy()
- ctx.update({'active_model': 'sale.order', 'active_id': id, 'mail.compose.template_id': template_id})
+ ctx.update({'active_model': 'sale.order', 'active_id': id[0], 'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
From c420db4bbfe6fe64bfc5488fda4705b2d67eb54b Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Wed, 29 Feb 2012 18:48:19 +0530
Subject: [PATCH 048/546] [IMP]hr_holidays: Set department readonly till
approved.
bzr revid: mma@tinyerp.com-20120229131819-x8rmt9ew3a8uysmd
---
addons/hr_holidays/hr_holidays.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 287558e5280..a999a3593f3 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -132,7 +132,7 @@ class hr_holidays(osv.osv):
'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone", select=True),
'parent_id': fields.many2one('hr.holidays', 'Parent'),
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
- 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True),
+ 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, store=True),
'category_id': fields.many2one('hr.employee.category', "Category", help='Category of Employee'),
'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Type', help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True),
'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'),
From 1ade3b205fc01dc4d476fa295d8e046a44755b19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 18:23:19 +0100
Subject: [PATCH 049/546] [fix]
bzr revid: rlo@openerp.com-20120229172319-rzwcu1egrhw9ggms
---
addons/google_docs/google_docs.py | 9 +++++----
addons/google_docs/static/src/js/gdocs.js | 4 ++--
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index e253d62ffbb..b60acd16197 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -55,11 +55,12 @@ class google_docs_config(osv.osv):
class google_docs(osv.osv):
_name = 'google.docs'
-
- def doc_get(self, cr, uid, model, id, context=None):
+ def doc_get(self, cr, uid, model, ids, context=None):
google_docs_ref = self.pool.get('google.docs.config')
- gdocs_resource_id = google_docs_ref.search(cr, uid, [('model', '=', model)])
-
+ gdocs_resource_id = google_docs_ref.search(cr, uid, [('model', '=', model), ('id', 'in', ids)])
+ #print gdocs_resource_id
+ #print google_docs_ref.edit_url_template % (gdocs_resource_id, )
+ #import pdb; pdb.set_trace()
if gdocs_resource_id:
return google_docs_ref.edit_url_template % (gdocs_resource_id, )
else:
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 14103681306..a126bfed5c3 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -9,8 +9,8 @@ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.exte
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- new openerp.sessions.session0.web.DataSet(this, 'google.docs').call('doc_get', [this.view.datarecord.id, this.view.dataset.get_context()], function(r) {
- console.log(r);
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id]], function(r) {
self.do_update();
});
}
From cde742506ee92500e9cd2e4c41b041613d225442 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 29 Feb 2012 19:45:20 +0100
Subject: [PATCH 050/546] [fix] logic...
bzr revid: rlo@openerp.com-20120229184520-vs679o9drs1vls4r
---
addons/google_docs/google_docs.py | 97 +++++++++++++++++++++----------
1 file changed, 65 insertions(+), 32 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index b60acd16197..689f5522cd3 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -4,24 +4,25 @@ import gdata.docs.client
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
-class google_docs_config(osv.osv):
- _name = 'google.docs.config'
+class google_docs_ir_attachment(osv.osv):
_inherit = 'ir.attachment'
- _columns = {
- 'model': fields.many2one('ir.model', 'Model'),
- 'gdocs_resource_id': fields.char('Google resource ID', size=64),
- 'name_template': fields.char('GDoc name template', size=64)
- }
+ def _auth(self, cr, uid):
+ # check google_base_account
+ users_obj = self.pool.get('res.users')
+ user = users_obj.browse(cr, uid, [uid])[0]
+ if not user.gmail_user or not user.gmail_password:
+ return -2
- _defaults = {
- 'name_template': 'Google Document'
- }
+ # login
+ client = gdata.docs.client.DocsClient(source='openerp.com')
+ client.ssl = True
+ client.http_client.debug = False
+ client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+
+ return client
- edit_url_template = 'https://docs.google.com/document/d/%s/edit'
- prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
-
- def copy_gdoc(self, cr, uid, model, context=None):
+ def create_empty_gdoc(self, cr, uid, model, context=None):
#import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@@ -35,45 +36,77 @@ class google_docs_config(osv.osv):
if context==None:
context={}
- name_template = 'Sales order %s'
-
- # check google_base_account
- users_obj = self.pool.get('res.users')
- user = users_obj.browse(cr, uid, [uid])[0]
- if not user.gmail_user or not user.gmail_password:
+ client = _auth(cr, uid)
+ if client == -2:
return -2
- # create the document
- client = gdata.docs.client.DocsClient(source='openerp.com')
- client.ssl = True
- client.http_client.debug = False
- client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
gdocs_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
return gdocs_resource
+ def copy_gdoc(self, cr, uid, model, gdocs_resource_id, context=None):
+ if context==None:
+ context={}
+
+ client = _auth(cr, uid)
+ if client == -2:
+ return -2
+
+ # fetch and copy the original document
+ original_resource = client.get_resource_by_id(gdocs_resource_id)
+ return client.copy_resource(entry=original_resource)
+
+ def gdoc_get(self, cr, uid, model, context=None):
+ google_docs_config_ref = self.pool.get('google.docs.config')
+ google_template_ids = google_docs_config_ref.search(cr, uid, [('model', '=', model)])
+ if not google_template_ids:
+ # there isn't any template. Create an empty doc.
+ return self.create_gdoc(cr, uid, model, context)
+
+ # otherwise, copy document from existing template
+ return self.copy_gdoc(cr, uid, model, google_template_ids[0].gdocs_resource_id
+
+class google_docs_config(osv.osv):
+ _name = 'google.docs.config'
+
+ _columns = {
+ 'model_id': fields.many2one('ir.model', 'Model'),
+ 'gdocs_resource_id': fields.char('Google resource ID', size=64),
+ 'name_template': fields.char('GDoc name template', size=64),
+ 'url': fields.char('url for the template', size=122),
+ }
+
+ _defaults = {
+ 'name_template': 'Google Document'
+ }
+
+ edit_url_template = 'https://docs.google.com/document/d/%s/edit'
+ prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
+
+
class google_docs(osv.osv):
_name = 'google.docs'
- def doc_get(self, cr, uid, model, ids, context=None):
- google_docs_ref = self.pool.get('google.docs.config')
+ def doc_get(self, cr, uid, model, ids, context=None):# TODO fix logic here
+ google_docs_ref = self.pool.get('ir.attachment')
gdocs_resource_id = google_docs_ref.search(cr, uid, [('model', '=', model), ('id', 'in', ids)])
#print gdocs_resource_id
#print google_docs_ref.edit_url_template % (gdocs_resource_id, )
- #import pdb; pdb.set_trace()
if gdocs_resource_id:
return google_docs_ref.edit_url_template % (gdocs_resource_id, )
else:
- gdocs_resource = google_docs_ref.copy_gdoc(cr, uid, model, context)
+ ir_attachment_res = self.pool.get('ir.attachment')
+ gdocs_resource = ir_attachment_res.create_empty_gdoc(cr, uid, model, context)
if gdocs_resource == -2:
return gdocs_resource
# save the reference
gdocs_resource_id = gdocs_resource.resource_id.text[len(google_docs_ref.prefix_gdoc_id_res):]
+ import pdb; pdb.set_trace()
google_docs_ref.create(cr, uid, {
- 'model': model,
- 'google_resource_id': gdocs_resource_id,
- 'name': gdocs_resource_title.text,
+ 'model_id': self.pool.get(model),
+ 'gdocs_resource_id': gdocs_resource_id,
+ 'name': gdocs_resource.title.text,
})
return google_docs_ref.edit_url_template % (gdocs_resource_id,)
From 120a4a9fd76abc284f22766b32b1683dbc73a24e Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Thu, 1 Mar 2012 10:57:38 +0530
Subject: [PATCH 051/546] [IMP]hr_holidays: Set department readonly via xml and
revert in py file
bzr revid: mma@tinyerp.com-20120301052738-oaj8phgg1h4p4jq7
---
addons/hr_holidays/hr_holidays.py | 2 +-
addons/hr_holidays/hr_holidays_view.xml | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index a999a3593f3..287558e5280 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -132,7 +132,7 @@ class hr_holidays(osv.osv):
'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone", select=True),
'parent_id': fields.many2one('hr.holidays', 'Parent'),
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
- 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, store=True),
+ 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True),
'category_id': fields.many2one('hr.employee.category', "Category", help='Category of Employee'),
'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Type', help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True),
'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'),
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 302ca4fe6ee..3f8490942f3 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -76,7 +76,7 @@
-
+
@@ -121,7 +121,7 @@
-
+
From 2947f6dbb8563bfab55d457e9b1c0cc99f0fc4f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Thu, 1 Mar 2012 15:45:07 +0100
Subject: [PATCH 052/546] [imp] add middleware support for spreadsheets and
presentations
bzr revid: rlo@openerp.com-20120301144507-k9kqsrdzwi0h8mf5
---
addons/google_docs/google_docs.py | 93 ++++++++++++++++++++-----------
1 file changed, 59 insertions(+), 34 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 689f5522cd3..3e6c398b155 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -22,39 +22,70 @@ class google_docs_ir_attachment(osv.osv):
return client
- def create_empty_gdoc(self, cr, uid, model, context=None):
+ def create_empty_google_doc(self, cr, uid, model, id, context=None):
#import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
@param context: a standard dictionary for contextual values.
- @return the url of the copy itself.
+ @return the document object.
@return -2 if the google_base_account hasn't been configured yet.
'''
- if context==None:
+ if context is None:
context={}
- client = _auth(cr, uid)
+ # authenticate
+ client = self._auth(cr, uid)
if client == -2:
return -2
- resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
- gdocs_resource = client.post(entry=resource, uri='https://docs.google.com/feeds/default/private/full/')
+ if 'type' not in context:
+ context['type'] = 'text'
+
+ # create the document in google docs
+ if context['type']=='slide':
+ local_resource = gdata.docs.data.Resource(gdata.docs.data.PRESENTATION_LABEL)
+ elif context['type']=='spreadsheet':
+ local_resource = gdata.docs.data.Resource(gdata.docs.data.SPREADSHEET_LABEL)
+ else:
+ local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
+ gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
+
+ # register into the db
+ self.create(cr, uid, {
+ 'model': context['active_model'], #model,
+ 'res_id': context['active_id'],
+ 'type': 'url',
+ #'name': TODO pending from the working config
+ 'url': gdocs_resource.get_alternate_link().href
+ })
+
return gdocs_resource
def copy_gdoc(self, cr, uid, model, gdocs_resource_id, context=None):
- if context==None:
+ if context is None:
context={}
- client = _auth(cr, uid)
+ client = self._auth(cr, uid)
if client == -2:
return -2
# fetch and copy the original document
original_resource = client.get_resource_by_id(gdocs_resource_id)
- return client.copy_resource(entry=original_resource)
+ copy_resource = client.copy_resource(entry=original_resource)
+
+ # register into the db
+ self.create(cr, uid, {
+ 'model': context['active_model'],
+ 'res_id': context['active_id'],
+ 'type': 'url',
+ #'name': TODO pending from the working config
+ 'url': copy_resource.get_alternate_link().href
+ })
+
+ return copy_resource
def gdoc_get(self, cr, uid, model, context=None):
google_docs_config_ref = self.pool.get('google.docs.config')
@@ -64,7 +95,7 @@ class google_docs_ir_attachment(osv.osv):
return self.create_gdoc(cr, uid, model, context)
# otherwise, copy document from existing template
- return self.copy_gdoc(cr, uid, model, google_template_ids[0].gdocs_resource_id
+ return self.copy_gdoc(cr, uid, model, google_template_ids[0].gdocs_resource_id)
class google_docs_config(osv.osv):
_name = 'google.docs.config'
@@ -72,41 +103,35 @@ class google_docs_config(osv.osv):
_columns = {
'model_id': fields.many2one('ir.model', 'Model'),
'gdocs_resource_id': fields.char('Google resource ID', size=64),
- 'name_template': fields.char('GDoc name template', size=64),
- 'url': fields.char('url for the template', size=122),
+ 'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
+ 'name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.')
+ # 'multi': fields.boolean('Multiple documents')
}
_defaults = {
'name_template': 'Google Document'
}
- edit_url_template = 'https://docs.google.com/document/d/%s/edit'
- prefix_gdoc_id_res = DOCUMENT_LABEL + ':'
class google_docs(osv.osv):
_name = 'google.docs'
def doc_get(self, cr, uid, model, ids, context=None):# TODO fix logic here
- google_docs_ref = self.pool.get('ir.attachment')
- gdocs_resource_id = google_docs_ref.search(cr, uid, [('model', '=', model), ('id', 'in', ids)])
- #print gdocs_resource_id
- #print google_docs_ref.edit_url_template % (gdocs_resource_id, )
- if gdocs_resource_id:
- return google_docs_ref.edit_url_template % (gdocs_resource_id, )
- else:
- ir_attachment_res = self.pool.get('ir.attachment')
- gdocs_resource = ir_attachment_res.create_empty_gdoc(cr, uid, model, context)
- if gdocs_resource == -2:
- return gdocs_resource
+ google_docs_config_ref = self.pool.get('google.docs.config')
+ ir_attachment_ref = self.pool.get('ir.attachment')
+ google_docs_config = google_docs_config_ref.search(cr, uid, [('model_id', '=', model)])
+
+ if not google_docs_config:
+ google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, ids, context)
+ #else:
+
- # save the reference
- gdocs_resource_id = gdocs_resource.resource_id.text[len(google_docs_ref.prefix_gdoc_id_res):]
- import pdb; pdb.set_trace()
- google_docs_ref.create(cr, uid, {
- 'model_id': self.pool.get(model),
- 'gdocs_resource_id': gdocs_resource_id,
- 'name': gdocs_resource.title.text,
- })
+ print google_docs_config
- return google_docs_ref.edit_url_template % (gdocs_resource_id,)
+ if not google_docs_config:
+ return -1
+
+
+
+ return 0
From 82937d5cc8a812bee3ed4199757417e78f534dff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Thu, 1 Mar 2012 16:09:14 +0100
Subject: [PATCH 053/546] [imp] add frontend support for spreadsheets and
presentations
bzr revid: rlo@openerp.com-20120301150914-0733ak0tdhdpaw8h
---
addons/google_docs/static/src/js/gdocs.js | 28 ++++++++++++++++++---
addons/google_docs/static/src/xml/gdocs.xml | 12 +++++++--
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index a126bfed5c3..9723aac2723 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -3,14 +3,34 @@ openerp.google_docs = function(instance, session) {
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
init: function() {
this._super.apply(this, arguments);
- this.$element.delegate('.oe_google_docs_button', 'click', this.on_add_gdoc);
+ this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
+ this.$element.delegate('.oe_google_docs_spreadsheet_button', 'click', this.on_add_spreadsheet_gdoc);
+ this.$element.delegate('.oe_google_docs_slide_button', 'click', this.on_add_slide_gdoc);
},
- on_add_gdoc: function() {
+ on_add_text_gdoc: function() {
var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_button');
+ var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id]], function(r) {
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
+ self.do_update();
+ });
+ },
+ on_add_spreadsheet_gdoc: function() {
+ var self = this;
+ var $gdocbtn = this.$element.find('.oe_google_docs_spreadsheet_button');
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord, id], 'spreadsheet'], function(r) {
+ self.do_update();
+ });
+ },
+ on_add_slide_gdoc: function() {
+ var self = this;
+ var $gdocbtn = this.$element.find('.oe_google_docs_slide_button');
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord,id], 'slide'], function(r) {
self.do_update();
});
}
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 7ee2297c545..f401512e96b 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -11,9 +11,17 @@
-
+
- Add GDoc
+ Add GDoc - text
+
+
+
+ Add GDoc - spreadsheet
+
+
+
+ Add GDoc - presentation
From 663a525f76ccf263dbb37b451a9c7f2898217a2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Thu, 1 Mar 2012 16:25:30 +0100
Subject: [PATCH 054/546] [imp] integrate frontend - middleware
bzr revid: rlo@openerp.com-20120301152530-2ldz1w96y4pu2x9w
---
addons/google_docs/google_docs.py | 47 +++++++++----------------------
1 file changed, 14 insertions(+), 33 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 3e6c398b155..040dce932ea 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -22,32 +22,26 @@ class google_docs_ir_attachment(osv.osv):
return client
- def create_empty_google_doc(self, cr, uid, model, id, context=None):
+ def create_empty_google_doc(self, cr, uid, model, id, type_doc):
#import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@param model: the current model name.
- @param context: a standard dictionary for contextual values.
+ @param type_doc: text, spreadsheet or slide.
@return the document object.
@return -2 if the google_base_account hasn't been configured yet.
'''
- if context is None:
- context={}
-
# authenticate
client = self._auth(cr, uid)
if client == -2:
return -2
- if 'type' not in context:
- context['type'] = 'text'
-
# create the document in google docs
- if context['type']=='slide':
+ if type_doc=='slide':
local_resource = gdata.docs.data.Resource(gdata.docs.data.PRESENTATION_LABEL)
- elif context['type']=='spreadsheet':
+ elif type_doc=='spreadsheet':
local_resource = gdata.docs.data.Resource(gdata.docs.data.SPREADSHEET_LABEL)
else:
local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
@@ -55,8 +49,8 @@ class google_docs_ir_attachment(osv.osv):
# register into the db
self.create(cr, uid, {
- 'model': context['active_model'], #model,
- 'res_id': context['active_id'],
+ 'model': model,
+ 'res_id': ids[0],
'type': 'url',
#'name': TODO pending from the working config
'url': gdocs_resource.get_alternate_link().href
@@ -64,7 +58,7 @@ class google_docs_ir_attachment(osv.osv):
return gdocs_resource
- def copy_gdoc(self, cr, uid, model, gdocs_resource_id, context=None):
+ def copy_gdoc(self, cr, uid, model, id):
if context is None:
context={}
@@ -78,8 +72,8 @@ class google_docs_ir_attachment(osv.osv):
# register into the db
self.create(cr, uid, {
- 'model': context['active_model'],
- 'res_id': context['active_id'],
+ 'model': model,
+ 'res_id': id[0],
'type': 'url',
#'name': TODO pending from the working config
'url': copy_resource.get_alternate_link().href
@@ -87,16 +81,6 @@ class google_docs_ir_attachment(osv.osv):
return copy_resource
- def gdoc_get(self, cr, uid, model, context=None):
- google_docs_config_ref = self.pool.get('google.docs.config')
- google_template_ids = google_docs_config_ref.search(cr, uid, [('model', '=', model)])
- if not google_template_ids:
- # there isn't any template. Create an empty doc.
- return self.create_gdoc(cr, uid, model, context)
-
- # otherwise, copy document from existing template
- return self.copy_gdoc(cr, uid, model, google_template_ids[0].gdocs_resource_id)
-
class google_docs_config(osv.osv):
_name = 'google.docs.config'
@@ -117,21 +101,18 @@ class google_docs_config(osv.osv):
class google_docs(osv.osv):
_name = 'google.docs'
- def doc_get(self, cr, uid, model, ids, context=None):# TODO fix logic here
+ def doc_get(self, cr, uid, model, id, type_doc):# TODO fix logic here
google_docs_config_ref = self.pool.get('google.docs.config')
ir_attachment_ref = self.pool.get('ir.attachment')
google_docs_config = google_docs_config_ref.search(cr, uid, [('model_id', '=', model)])
-
+
if not google_docs_config:
- google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, ids, context)
- #else:
-
+ google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, ids, type_doc)
+ else:
+ google_document = ir_attachment_ref.copy_gdoc(cr, uid, model, id)
print google_docs_config
if not google_docs_config:
return -1
-
-
- return 0
From 65d257d4e9fd9bee1c6ab82e63f4f122aa2ffe41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Thu, 1 Mar 2012 16:28:05 +0100
Subject: [PATCH 055/546] [imp]
bzr revid: rlo@openerp.com-20120301152805-p7wosq6x4johbosj
---
addons/google_docs/google_docs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 040dce932ea..34b4e5a16ed 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -107,7 +107,7 @@ class google_docs(osv.osv):
google_docs_config = google_docs_config_ref.search(cr, uid, [('model_id', '=', model)])
if not google_docs_config:
- google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, ids, type_doc)
+ google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, id, type_doc)
else:
google_document = ir_attachment_ref.copy_gdoc(cr, uid, model, id)
From 2b774dddfb3bd5cfd43fccade36f6ac362ab25d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 2 Mar 2012 09:15:13 +0100
Subject: [PATCH 056/546] [imp] js
bzr revid: rlo@openerp.com-20120302081513-mzexq3vw6ftzw45s
---
addons/google_docs/static/src/js/gdocs.js | 77 ++++++++++++-----------
1 file changed, 42 insertions(+), 35 deletions(-)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 9723aac2723..825bd577b66 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -1,40 +1,47 @@
openerp.google_docs = function(instance, session) {
-instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
- init: function() {
- this._super.apply(this, arguments);
- this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
- this.$element.delegate('.oe_google_docs_spreadsheet_button', 'click', this.on_add_spreadsheet_gdoc);
- this.$element.delegate('.oe_google_docs_slide_button', 'click', this.on_add_slide_gdoc);
- },
- on_add_text_gdoc: function() {
- var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
- $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
- self.do_update();
- });
- },
- on_add_spreadsheet_gdoc: function() {
- var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_spreadsheet_button');
- $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord, id], 'spreadsheet'], function(r) {
- self.do_update();
- });
- },
- on_add_slide_gdoc: function() {
- var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_slide_button');
- $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord,id], 'slide'], function(r) {
- self.do_update();
- });
- }
-});
+ instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
+ init: function() {
+ this._super.apply(this, arguments);
+ this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
+ this.$element.delegate('.oe_google_docs_spreadsheet_button', 'click', this.on_add_spreadsheet_gdoc);
+ this.$element.delegate('.oe_google_docs_slide_button', 'click', this.on_add_slide_gdoc);
+ },
+ on_add_text_gdoc: function() {
+ console.log('on_add_text_gdoc:');
+ var self = this;
+ var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
+ console.log('on_add_text_gdoc: return');
+ self.do_update();
+ });
+ },
+ on_add_spreadsheet_gdoc: function() {
+ console.log('on_add_spreadsheet_gdoc:');
+ var self = this;
+ var $gdocbtn = this.$element.find('.oe_google_docs_spreadsheet_button');
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ console.log('on_add_spreadsheet_gdoc:');
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'spreadsheet'], function(r) {
+ console.log('on_add_spreadsheet_gdoc: return');
+ self.do_update();
+ });
+ },
+ on_add_slide_gdoc: function() {
+ console.log ('on_add_slide_gdoc:');
+ var self = this;
+ var $gdocbtn = this.$element.find('.oe_google_docs_slide_button');
+ $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
+ var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
+ ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'slide'], function(r) {
+ console.log('on_add_slide_gdoc: return');
+ self.do_update();
+ });
+ }
+ });
};
From 9afb5cfe64b8f67e4ccfe6e048046fb6937aeef0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 2 Mar 2012 09:30:13 +0100
Subject: [PATCH 057/546] [imp] py
bzr revid: rlo@openerp.com-20120302083013-4pvtkjma36ovlzhy
---
addons/google_docs/google_docs.py | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 34b4e5a16ed..5e1f30e38fa 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -22,8 +22,8 @@ class google_docs_ir_attachment(osv.osv):
return client
- def create_empty_google_doc(self, cr, uid, model, id, type_doc):
- #import pdb; pdb.set_trace()
+ def create_empty_google_doc(self, cr, uid, model, ids, type_doc):
+ import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@@ -49,16 +49,16 @@ class google_docs_ir_attachment(osv.osv):
# register into the db
self.create(cr, uid, {
- 'model': model,
+ 'res_model': model,
'res_id': ids[0],
'type': 'url',
- #'name': TODO pending from the working config
+ 'name': 'new_foo', # TODO pending from the working config
'url': gdocs_resource.get_alternate_link().href
})
return gdocs_resource
- def copy_gdoc(self, cr, uid, model, id):
+ def copy_gdoc(self, cr, uid, model, ids):
if context is None:
context={}
@@ -72,10 +72,10 @@ class google_docs_ir_attachment(osv.osv):
# register into the db
self.create(cr, uid, {
- 'model': model,
- 'res_id': id[0],
+ 'res_model': model,
+ 'res_id': ids[0],
'type': 'url',
- #'name': TODO pending from the working config
+ 'name': 'copy_foo', # TODO pending from the working config
'url': copy_resource.get_alternate_link().href
})
From f0775d762e80c2fdd48b689b253bb02db14e569a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 2 Mar 2012 09:40:06 +0100
Subject: [PATCH 058/546] [imp] kind of working, just the configuration is
missing
bzr revid: rlo@openerp.com-20120302084006-m3qx6zfypl6g57r8
---
addons/google_docs/google_docs.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 5e1f30e38fa..3f544c983bc 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -23,7 +23,6 @@ class google_docs_ir_attachment(osv.osv):
return client
def create_empty_google_doc(self, cr, uid, model, ids, type_doc):
- import pdb; pdb.set_trace()
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@@ -52,7 +51,7 @@ class google_docs_ir_attachment(osv.osv):
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'new_foo', # TODO pending from the working config
+ 'name': 'new_foo %s' % (type_doc,) , # TODO pending from the working config
'url': gdocs_resource.get_alternate_link().href
})
@@ -75,7 +74,7 @@ class google_docs_ir_attachment(osv.osv):
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'copy_foo', # TODO pending from the working config
+ 'name': 'copy_foo %s' (type_doc,) , # TODO pending from the working config
'url': copy_resource.get_alternate_link().href
})
From ff1fc1a7e9476f33e8a580c0c1f8942e5004bf0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 2 Mar 2012 11:35:05 +0100
Subject: [PATCH 059/546] [imp]
bzr revid: rlo@openerp.com-20120302103505-em22nbb5chumfzuf
---
addons/google_docs/__openerp__.py | 3 +-
addons/google_docs/google_docs.py | 43 +++++++++++++++++------
addons/google_docs/static/src/js/gdocs.js | 18 ++++++----
3 files changed, 46 insertions(+), 18 deletions(-)
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index 309ca13edc0..be8eb85d21e 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -1,8 +1,9 @@
{
'name': 'Google Docs',
- 'version': '0.1',
+ 'version': '0.2',
'author': 'OpenERP SA',
'website': 'http://openerp.com',
+ 'category': 'Tools',
'data': [
'google_docs.xml'
],
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 3f544c983bc..a63043e65ba 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -1,8 +1,31 @@
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2012 OpenERP SA ().
+#
+# 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, fields
-import gdata.docs.data
-import gdata.docs.client
-from gdata.client import RequestError
-from gdata.docs.service import DOCUMENT_LABEL
+try:
+ import gdata.docs.data
+ import gdata.docs.client
+ from gdata.client import RequestError
+ from gdata.docs.service import DOCUMENT_LABEL
+except ImportError:
+ raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list'))
class google_docs_ir_attachment(osv.osv):
_inherit = 'ir.attachment'
@@ -12,7 +35,7 @@ class google_docs_ir_attachment(osv.osv):
users_obj = self.pool.get('res.users')
user = users_obj.browse(cr, uid, [uid])[0]
if not user.gmail_user or not user.gmail_password:
- return -2
+ return False
# login
client = gdata.docs.client.DocsClient(source='openerp.com')
@@ -29,13 +52,13 @@ class google_docs_ir_attachment(osv.osv):
@param model: the current model name.
@param type_doc: text, spreadsheet or slide.
@return the document object.
- @return -2 if the google_base_account hasn't been configured yet.
+ @return False if the google_base_account hasn't been configured yet.
'''
# authenticate
client = self._auth(cr, uid)
- if client == -2:
- return -2
+ if client == False:
+ return False
# create the document in google docs
if type_doc=='slide':
@@ -62,8 +85,8 @@ class google_docs_ir_attachment(osv.osv):
context={}
client = self._auth(cr, uid)
- if client == -2:
- return -2
+ if client == False:
+ return False
# fetch and copy the original document
original_resource = client.get_resource_by_id(gdocs_resource_id)
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 825bd577b66..63978868901 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -9,36 +9,40 @@ openerp.google_docs = function(instance, session) {
this.$element.delegate('.oe_google_docs_slide_button', 'click', this.on_add_slide_gdoc);
},
on_add_text_gdoc: function() {
- console.log('on_add_text_gdoc:');
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
- console.log('on_add_text_gdoc: return');
+ console.log(r);
+ if (r == 'False') {
+ var params = {
+ error: response,
+ message: "The user google credentials are not set yet. Contact your administrator for help."
+ }
+ $(openerp.web.qweb.render("DialogWarning", params)).dialog({
+ title: "User Google credentials are not yet set.",
+ modal: true,
+ });
+ }
self.do_update();
});
},
on_add_spreadsheet_gdoc: function() {
- console.log('on_add_spreadsheet_gdoc:');
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_spreadsheet_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- console.log('on_add_spreadsheet_gdoc:');
ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'spreadsheet'], function(r) {
- console.log('on_add_spreadsheet_gdoc: return');
self.do_update();
});
},
on_add_slide_gdoc: function() {
- console.log ('on_add_slide_gdoc:');
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_slide_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'slide'], function(r) {
- console.log('on_add_slide_gdoc: return');
self.do_update();
});
}
From b4688cd91ba74dd4317539e63db82c5a8a787632 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 5 Mar 2012 10:41:17 +0530
Subject: [PATCH 060/546] [IMP]: Purchase: Changed string for invoiced field
bzr revid: mma@tinyerp.com-20120305051117-hmgatham6qkl3z76
---
addons/purchase/purchase.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index eaf3e39ae3c..3b832cca7aa 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -180,7 +180,7 @@ class purchase_order(osv.osv):
'picking_ids': fields.one2many('stock.picking', 'purchase_id', 'Picking List', readonly=True, help="This is the list of picking list that have been generated for this purchase"),
'shipped':fields.boolean('Received', readonly=True, select=True, help="It indicates that a picking has been done"),
'shipped_rate': fields.function(_shipped_rate, string='Received', type='float'),
- 'invoiced': fields.function(_invoiced, string='Invoiced & Paid', type='boolean', help="It indicates that an invoice has been paid"),
+ 'invoiced': fields.function(_invoiced, string='Invoice Received', type='boolean', help="It indicates that an invoice has been paid"),
'invoiced_rate': fields.function(_invoiced_rate, string='Invoiced', type='float'),
'invoice_method': fields.selection([('manual','Based on Purchase Order lines'),('order','Based on generated draft invoice'),('picking','Based on receptions')], 'Invoicing Control', required=True,
help="Based on Purchase Order lines: place individual lines in 'Invoice Control > Based on P.O. lines' from where you can selectively create an invoice.\n" \
From 34d47a13ea5c3af61eb21501d495c1db74b6bcb2 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 5 Mar 2012 10:49:52 +0530
Subject: [PATCH 061/546] [REM]: Purchase: Removed print button [IMP]:
purchase: renamed Receive product button name
bzr revid: mma@tinyerp.com-20120305051952-46lj68covxrod54s
---
addons/purchase/purchase.py | 20 --------------------
addons/purchase/purchase_view.xml | 3 +--
2 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 3b832cca7aa..647b744e1c4 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -322,26 +322,6 @@ class purchase_order(osv.osv):
'res_id': pick_ids and pick_ids[0] or False,
}
- def view_report(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
- if context is None:
- context = {}
- for id in ids:
- wf_service.trg_validate(uid, 'purchase.order', id, 'send_rfq', cr)
-
- data = self.read(cr, uid, ids, [], context=context)[0]
- datas = {
- 'ids': [],
- 'model': 'purchase.order',
- 'form': data
- }
- return {
- 'type': 'ir.actions.report.xml',
- 'report_name': 'purchase.quotation',
- 'nodestroy': True,
- 'datas': datas,
- }
-
def wkf_approve_order(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index ad064bab696..6dbdcfeeb0c 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -197,7 +197,6 @@
-
@@ -205,7 +204,7 @@
-
+
From 900d064e3ea853108656215dece270b79781d8f5 Mon Sep 17 00:00:00 2001
From: "Mayur Maheshwari (OpenERP)"
Date: Mon, 5 Mar 2012 11:16:20 +0530
Subject: [PATCH 062/546] [IMP]: purchase: Improvements in purchase search
view: used the same for RfQ and Purchase Orders
bzr revid: mma@tinyerp.com-20120305054620-zxzydncz12nj6ms5
---
addons/purchase/purchase_view.xml | 45 ++-----------------
.../purchase_double_validation/__openerp__.py | 1 +
.../purchase_double_validation_view.xml | 16 +++++++
.../purchase_requisition_view.xml | 15 +------
4 files changed, 22 insertions(+), 55 deletions(-)
create mode 100644 addons/purchase_double_validation/purchase_double_validation_view.xml
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 6dbdcfeeb0c..42237c2a138 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -237,40 +237,6 @@
-
- request.quotation.select
- purchase.order
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
purchase.order.list.select
purchase.order
@@ -279,13 +245,10 @@
-
-
-
-
-
+
+
@@ -329,12 +292,12 @@
- Requests for Quotation
+ Quotations
ir.actions.act_window
purchase.order
{'search_default_draft': 1}
tree,form,graph,calendar
-
+
You can create a request for quotation when you want to buy products to a supplier but the purchase is not confirmed yet. Use also this menu to review requests for quotation created automatically based on your logistic rules (minimum stock, MTO, etc). You can convert the request for quotation into a purchase order once the order is confirmed. If you use the extended interface (from user's preferences), you can select the way to control your supplier invoices: based on the order, based on the receptions or manual encoding.
From 80229d461930b205f15d1d8d2651efe1913360ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Tue, 6 Mar 2012 13:58:58 +0100
Subject: [PATCH 073/546] [imp] user config
bzr revid: rlo@openerp.com-20120306125858-22qgeowa58mw419r
---
addons/google_docs/google_docs.py | 10 +++++-----
addons/google_docs/google_docs.xml | 3 +++
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 1fc3daf7959..91c6d1daab4 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -126,15 +126,15 @@ class users(osv.osv):
_description = "User\'s gdocs config"
_columns = {
- 'model_id': fields.many2one('ir.model', 'Model'),
- 'gdocs_resource_id': fields.char('Google resource ID', size=64),
- 'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
- 'name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.')
+ 'context_model_id': fields.many2one('ir.model', 'Model'),
+ 'context_gdocs_resource_id': fields.char('Google resource ID', size=64),
+ 'context_name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
+ 'context_name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.')
# 'multi': fields.boolean('Multiple documents')
}
_defaults = {
- 'name_template': 'Google Document'
+ 'context_name_template': 'Google Document'
}
def create(self, cr, uid, vals, context=None):
diff --git a/addons/google_docs/google_docs.xml b/addons/google_docs/google_docs.xml
index cb1fed68657..0aeff3dde5f 100644
--- a/addons/google_docs/google_docs.xml
+++ b/addons/google_docs/google_docs.xml
@@ -12,6 +12,9 @@
+
+
+
From 98036bbe03dde733bd680a947639309f97a4664e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Tue, 6 Mar 2012 14:08:08 +0100
Subject: [PATCH 074/546] [imp] user config
bzr revid: rlo@openerp.com-20120306130808-c9vvp9zq67j6g4jx
---
addons/google_docs/google_docs.xml | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/addons/google_docs/google_docs.xml b/addons/google_docs/google_docs.xml
index 0aeff3dde5f..333909f11a0 100644
--- a/addons/google_docs/google_docs.xml
+++ b/addons/google_docs/google_docs.xml
@@ -10,12 +10,15 @@
form
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
From e64820b32a92cea24647a8a5525c37364487c207 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 7 Mar 2012 11:44:04 +0530
Subject: [PATCH 075/546] [IMP] sale: set attrs on open invoice and open
delivery oder buttons
bzr revid: psi@tinyerp.com-20120307061404-uob7czxdiio8hmt8
---
addons/sale/sale_view.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 2a7b059016b..e7d2ab42223 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -210,8 +210,11 @@
-
-
+
+
From 116974c0d8dcd6da1c90a7847e9a11f74eb257cb Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 7 Mar 2012 11:54:12 +0530
Subject: [PATCH 076/546] [IMP] sale: improve action_view_delivery funtions
bzr revid: psi@tinyerp.com-20120307062412-82bdsvhif9cxktl2
---
addons/sale/sale.py | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index e031cac5964..d19d43a22cf 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -540,14 +540,13 @@ class sale_order(osv.osv):
pick_ids = []
for so in self.browse(cr, uid, ids, context=context):
pick_ids += [picking.id for picking in so.picking_ids]
-
if len(pick_ids) > 1:
- res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_search')
+ res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_tree')
res_id = res and res[1] or False,
return {
'name': _('Delivery Order'),
- 'view_type': 'search',
- 'view_mode': 'search',
+ 'view_type': 'form',
+ 'view_mode': 'tree',
'view_id': res_id,
'res_model': 'stock.picking',
'context': "{'type':'out'}",
From 553f0fe846c5e1c433165f59073b00ad0554d9be Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 7 Mar 2012 12:10:22 +0530
Subject: [PATCH 077/546] [imp] sale improve sale and mail
bzr revid: psi@tinyerp.com-20120307064022-4q3j3uqoao20eqqy
---
addons/mail/wizard/mail_compose_message.py | 3 ++-
addons/mail/wizard/mail_compose_message_view.xml | 1 +
addons/sale/edi/sale_order.py | 12 ++++++++++++
addons/sale/sale.py | 5 +----
4 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 90ecbcb3607..2010d7d0f5a 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -100,6 +100,7 @@ class mail_compose_message(osv.osv_memory):
if not result.get('email_from'):
current_user = self.pool.get('res.users').browse(cr, uid, uid, context)
result['email_from'] = current_user.user_email or False
+ result['subtype'] = 'html'
return result
_columns = {
@@ -158,7 +159,7 @@ class mail_compose_message(osv.osv_memory):
if not (subject.startswith('Re:') or subject.startswith(re_prefix)):
subject = "%s %s" % (re_prefix, subject)
result.update({
- 'subtype' : 'plain', # default to the text version due to quoting
+ 'subtype' : message_data.subtype or 'plain', # default to the text version due to quoting
'body_text' : body,
'body_html' : message_data.body_html,
'subject' : subject,
diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml
index d559d679c8b..3a44b040139 100644
--- a/addons/mail/wizard/mail_compose_message_view.xml
+++ b/addons/mail/wizard/mail_compose_message_view.xml
@@ -23,6 +23,7 @@
+
diff --git a/addons/sale/edi/sale_order.py b/addons/sale/edi/sale_order.py
index d40d0b613ed..12aee8a1812 100644
--- a/addons/sale/edi/sale_order.py
+++ b/addons/sale/edi/sale_order.py
@@ -24,6 +24,7 @@ from dateutil.relativedelta import relativedelta
from osv import fields, osv, orm
from edi import EDIMixin
+from edi.models import edi
from tools import DEFAULT_SERVER_DATE_FORMAT
SALE_ORDER_LINE_EDI_STRUCT = {
@@ -64,6 +65,17 @@ SALE_ORDER_EDI_STRUCT = {
class sale_order(osv.osv, EDIMixin):
_inherit = 'sale.order'
+ def action_quotation_sent(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ sale_objs = self.browse(cr, uid, ids, context=context)
+ edi_token = self.pool.get('edi.document').export_edi(cr, uid, sale_objs, context = context)[0]
+ web_root_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
+ edi_context = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
+ ctx = context.copy()
+ ctx.update(edi_context)
+ return super(sale_order, self).action_quotation_sent(cr, uid, ids, context=ctx)
+
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
"""Exports a Sale order"""
edi_struct = dict(edi_struct or SALE_ORDER_EDI_STRUCT)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index ba051d37a9e..d657eedd2bf 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -675,11 +675,8 @@ class sale_order(osv.osv):
template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'sale.order')], context=context)
model_data_ids = mod_obj.search(cr, uid, [('model','=','ir.ui.view'),('name','=','email_compose_message_wizard_form')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
- #EDI EXport data
-# if not self.browse(cr, uid, id, context).partner_id.opt_out:
-# order.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
ctx = context.copy()
- ctx.update({'active_model': 'sale.order', 'active_id': id[0], 'mail.compose.template_id': template_id})
+ ctx.update({'active_model': 'sale.order', 'active_id': ids[0], 'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
From 1fcc9a8b17bf2c730afa5ebaf71ee3d5d4975196 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 7 Mar 2012 10:30:30 +0100
Subject: [PATCH 078/546] [imp] add entries into user preferences form
bzr revid: rlo@openerp.com-20120307093030-hrp6k8vvyhej7enc
---
.../google_base_account_view.xml | 46 +++++++++++++------
addons/google_docs/google_docs.xml | 20 ++++++++
2 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/addons/google_base_account/google_base_account_view.xml b/addons/google_base_account/google_base_account_view.xml
index 9296ba135c0..eb01e3ad370 100644
--- a/addons/google_base_account/google_base_account_view.xml
+++ b/addons/google_base_account/google_base_account_view.xml
@@ -1,20 +1,36 @@
-
- res.users.google.form1
- res.users
- form
-
-
-
-
-
-
-
-
-
-
-
+
+ res.users.google.form1
+ res.users
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.users.prefs.google.form1
+ res.users
+ form
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/google_docs/google_docs.xml b/addons/google_docs/google_docs.xml
index 333909f11a0..1d49319749a 100644
--- a/addons/google_docs/google_docs.xml
+++ b/addons/google_docs/google_docs.xml
@@ -4,6 +4,26 @@
+
+ res.user.google_docs.prefs.inherited
+ res.users
+
+ form
+
+
+
+
+
+
+
+
+
+
+
+
res.user.google_docs.config.inherited
res.users
From 7947da855689976471cd67318527521dff21e75e Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Wed, 7 Mar 2012 15:40:46 +0530
Subject: [PATCH 079/546] [IMP]sale: update attrs on Open Invoice button
bzr revid: psi@tinyerp.com-20120307101046-yv27cggqlanh338i
---
addons/sale/sale_view.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index e7d2ab42223..2ad4059cb42 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -211,8 +211,8 @@
+ attrs="{'invisible': ['|','|','|',('state', '!=','progress'), ('invoiced', '=', True),('order_policy','=','picking'),
+ '&','&',('order_policy','=','postpaid'),('state', '=','progress'),('shipped','=',False)]}"/>
From b16de17c746c1acd459f1bd95e5beb6d42268467 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Fri, 9 Mar 2012 10:59:48 +0530
Subject: [PATCH 080/546] [IMP] sale: revert the changes related to EDI
bzr revid: psi@tinyerp.com-20120309052948-iy1o89q06uj440oy
---
addons/sale/edi/sale_order_action_data.xml | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml
index 56cee553b9e..3d7a554ff4a 100644
--- a/addons/sale/edi/sale_order_action_data.xml
+++ b/addons/sale/edi/sale_order_action_data.xml
@@ -2,7 +2,14 @@
-
+
+ if not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)
+ code
+ ir.actions.server
+
+ True
+ Auto-email confirmed sale orders
+
@@ -23,18 +30,9 @@
so users can freely customize/delete them -->
-
+
From 714c70e435e4efd24537a68c853e6b13b2f457b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 12 Mar 2012 13:38:52 +0100
Subject: [PATCH 081/546] [imp] menu entry
bzr revid: rlo@openerp.com-20120312123852-qc8881g3s3w1rk9n
---
addons/google_docs/res_config_user_view.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index 1292947812f..cc6268f6757 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -16,5 +16,6 @@
+
From a08205304ba18db7160c56ba4dc5502f36c689e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Mon, 12 Mar 2012 15:41:31 +0100
Subject: [PATCH 082/546] [imp]
bzr revid: rlo@openerp.com-20120312144131-k6sx56o0x699cr56
---
addons/google_docs/google_docs.py | 27 ++++++++++++---------
addons/google_docs/res_config_user_view.xml | 5 ++--
2 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 91c6d1daab4..874c8893ca6 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -109,7 +109,7 @@ class google_docs(osv.osv):
def doc_get(self, cr, uid, model, id, type_doc):# TODO fix logic here
google_docs_config_ref = self.pool.get('res.users')
ir_attachment_ref = self.pool.get('ir.attachment')
- google_docs_config = google_docs_config_ref.search(cr, uid, [('model_id', '=', model)])
+ google_docs_config = google_docs_config_ref.search(cr, uid, [('context_model_id', '=', model)])
if not google_docs_config:
google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, id, type_doc)
@@ -121,20 +121,22 @@ class google_docs(osv.osv):
if not google_docs_config:
return -1
-class users(osv.osv):
- _inherit = 'res.users'
- _description = "User\'s gdocs config"
+class config(osv.osv):
+ _name = 'google.docs.config'
+ _description = "Google Docs templates config"
_columns = {
'context_model_id': fields.many2one('ir.model', 'Model'),
'context_gdocs_resource_id': fields.char('Google resource ID', size=64),
'context_name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
- 'context_name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.')
- # 'multi': fields.boolean('Multiple documents')
+ 'context_name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.'),
+ 'context_multiple': fields.boolean('Multiple documents')
}
_defaults = {
- 'context_name_template': 'Google Document'
+ 'context_name_template': 'Google Document',
+ 'context_name': 'pr_%(name)',
+ 'context_multiple': False,
}
def create(self, cr, uid, vals, context=None):
@@ -143,12 +145,13 @@ class users(osv.osv):
if vals.get('context_gdocs_resource_id') and vals.get('context_model_id'):
self.write(cr, uid,
{
- 'model_id': model_obj.get(cr, uid, vals.get('context_model_id'))[0],
- 'gdocs_resource_id': vals.get('context_gdocs_resource_id'),
- 'name_template': vals('context_name_template'),
- 'name': vals('context_name'),
+ 'context_model_id': model_obj.get(cr, uid, vals.get('context_model_id'))[0],
+ 'context_gdocs_resource_id': vals.get('context_gdocs_resource_id'),
+ 'context_name_template': vals.get('context_name_template'),
+ 'context_name': self.context_name % {'name': vals.get('context_name')},
+ 'context_multiple': vals.get('context_multiple'),
},
context)
return res
-users()
+config()
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index cc6268f6757..25d043808f6 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -6,8 +6,7 @@
google_docs.config.user.inherited.form
- res.users
-
+ google.docs.config
form
@@ -16,6 +15,6 @@
-
+
From a03c7370a726745028b4ae95fb080212edcb09b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 10:28:16 +0100
Subject: [PATCH 083/546] [fix] fix views according to review
bzr revid: rlo@openerp.com-20120314092816-9y67h31gmm7lfjgf
---
.../google_base_account_view.xml | 16 ---------------
addons/google_docs/google_docs.xml | 20 -------------------
2 files changed, 36 deletions(-)
diff --git a/addons/google_base_account/google_base_account_view.xml b/addons/google_base_account/google_base_account_view.xml
index eb01e3ad370..3f228a6dee8 100644
--- a/addons/google_base_account/google_base_account_view.xml
+++ b/addons/google_base_account/google_base_account_view.xml
@@ -16,21 +16,5 @@
-
-
- res.users.prefs.google.form1
- res.users
- form
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/google_docs/google_docs.xml b/addons/google_docs/google_docs.xml
index 1d49319749a..333909f11a0 100644
--- a/addons/google_docs/google_docs.xml
+++ b/addons/google_docs/google_docs.xml
@@ -4,26 +4,6 @@
-
- res.user.google_docs.prefs.inherited
- res.users
-
- form
-
-
-
-
-
-
-
-
-
-
-
-
res.user.google_docs.config.inherited
res.users
From 7774af75d71376aa937acbbe3804daa3cdd92b01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 11:42:05 +0100
Subject: [PATCH 084/546] [imp] menu entry
bzr revid: rlo@openerp.com-20120314104205-y3rpasw7vft8lcb7
---
addons/google_docs/__openerp__.py | 7 +++++--
addons/google_docs/res_config_user_view.xml | 8 +++++++-
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index 84fc2899ec3..437e5a864f5 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -4,9 +4,9 @@
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'category': 'Tools',
- 'data': [
+ ''' 'data': [
'google_docs.xml'
- ],
+ ],'''
'installable': True,
'auto_install': False,
'web': True,
@@ -14,6 +14,9 @@
'qweb' : [
"static/src/xml/gdocs.xml",
],
+ 'update_xml': [
+ 'res_config_user_view.xml'
+ ],
'depends': ['google_base_account'],
'description': 'Module to attach a google document to any model.'
}
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index 25d043808f6..ecad7aaeb74 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -15,6 +15,12 @@
-
+
+ google_docs.config.user.inherited.form
+ google.docs.config
+ ir.actions.act_window
+
+
+
From d7eafc7be860c2716a7f4cf23841aa2c4d4b92e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 12:14:02 +0100
Subject: [PATCH 085/546] [imp] menu entry
bzr revid: rlo@openerp.com-20120314111402-pgvsget19m5ttzli
---
addons/google_docs/res_config_user_view.xml | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index ecad7aaeb74..6dee0d6211e 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -4,10 +4,10 @@
-
- google_docs.config.user.inherited.form
+
+ google_docs.config.form
google.docs.config
- form
+ tree
- google_docs.config.user.inherited.form
+ Models configuration
google.docs.config
ir.actions.act_window
-
+ form
+
-
+
+
From 416ffbb6350c45bc834974f36a3483348d58996a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 13:55:02 +0100
Subject: [PATCH 086/546] [imp]
bzr revid: rlo@openerp.com-20120314125502-ca1g8cw7y3dm65e4
---
addons/google_docs/google_docs.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 874c8893ca6..4d2533b9c0b 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -140,15 +140,15 @@ class config(osv.osv):
}
def create(self, cr, uid, vals, context=None):
- res = super(users, self).create(cr, uid, vals, context=context)
+ res = super(config, self).create(cr, uid, vals, context=context)
model_obj=self.pool.get('ir.model')
if vals.get('context_gdocs_resource_id') and vals.get('context_model_id'):
self.write(cr, uid,
{
- 'context_model_id': model_obj.get(cr, uid, vals.get('context_model_id'))[0],
+ 'context_model_id': model_obj.read(cr, uid, [vals.get('context_model_id')])[0],
'context_gdocs_resource_id': vals.get('context_gdocs_resource_id'),
'context_name_template': vals.get('context_name_template'),
- 'context_name': self.context_name % {'name': vals.get('context_name')},
+ 'context_name': vals.get('context_name'),
'context_multiple': vals.get('context_multiple'),
},
context)
From 38cd2dbe298f3b93b8ebc6dc87e016f0e6e09173 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 14:18:51 +0100
Subject: [PATCH 087/546] [imp] config form
bzr revid: rlo@openerp.com-20120314131851-a3kzuzxt7f33fc9x
---
addons/google_docs/google_docs.py | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 4d2533b9c0b..0d99f5f6d35 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -139,19 +139,4 @@ class config(osv.osv):
'context_multiple': False,
}
- def create(self, cr, uid, vals, context=None):
- res = super(config, self).create(cr, uid, vals, context=context)
- model_obj=self.pool.get('ir.model')
- if vals.get('context_gdocs_resource_id') and vals.get('context_model_id'):
- self.write(cr, uid,
- {
- 'context_model_id': model_obj.read(cr, uid, [vals.get('context_model_id')])[0],
- 'context_gdocs_resource_id': vals.get('context_gdocs_resource_id'),
- 'context_name_template': vals.get('context_name_template'),
- 'context_name': vals.get('context_name'),
- 'context_multiple': vals.get('context_multiple'),
- },
- context)
- return res
-
config()
From 78903a8554d776632a17cde897ddcd2a7093b329 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Wed, 14 Mar 2012 16:29:29 +0100
Subject: [PATCH 088/546] [imp]
bzr revid: rlo@openerp.com-20120314152929-gqshx94zrcn34qzk
---
addons/google_docs/google_docs.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 0d99f5f6d35..e78444fb045 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -139,4 +139,11 @@ class config(osv.osv):
'context_multiple': False,
}
+ def has_config_set(self, cr, uid, model):
+ print model
+ import pdb
+ pdb.set_trace()
+ domain = [('context_model_id', '=', model)]
+ return self.search_count(cr, uid, domain) != 0
+
config()
From 99fac6333ae1e87b7e9685eb4afd94a8bc976604 Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Fri, 16 Mar 2012 10:36:22 +0530
Subject: [PATCH 089/546] [IMP] stock : Improve the workflow button visibility.
bzr revid: mdi@tinyerp.com-20120316050622-7d7cldlkxdryq6o5
---
addons/stock/stock_view.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index ff3e1171dbf..c4ab0ac3462 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -1210,7 +1210,7 @@
-
+
From ebb97da4d16ffdbf74091bc6742f1f175ac0142b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20L=C3=B3pez=20L=C3=B3pez=20=28OpenERP=29?=
Date: Fri, 16 Mar 2012 10:00:54 +0100
Subject: [PATCH 090/546] [fix] fix according to requirements
bzr revid: rlo@openerp.com-20120316090054-0datu37ojj98lx13
---
addons/google_docs/google_docs.py | 12 +++----
addons/google_docs/static/src/js/gdocs.js | 39 ++++++++++-------------
2 files changed, 23 insertions(+), 28 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index e78444fb045..e822bb304bf 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -106,7 +106,7 @@ class google_docs_ir_attachment(osv.osv):
class google_docs(osv.osv):
_name = 'google.docs'
- def doc_get(self, cr, uid, model, id, type_doc):# TODO fix logic here
+ def doc_get(self, cr, uid, model, id, type_doc):
google_docs_config_ref = self.pool.get('res.users')
ir_attachment_ref = self.pool.get('ir.attachment')
google_docs_config = google_docs_config_ref.search(cr, uid, [('context_model_id', '=', model)])
@@ -139,11 +139,11 @@ class config(osv.osv):
'context_multiple': False,
}
- def has_config_set(self, cr, uid, model):
- print model
- import pdb
- pdb.set_trace()
+ def get_config(self, cr, uid, model):
domain = [('context_model_id', '=', model)]
- return self.search_count(cr, uid, domain) != 0
+ if self.search_count(cr, uid, domain) != 0:
+ return False
+ else:
+ return self.search(cr, uid, domain)
config()
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 63978868901..b7353fd0bba 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -4,11 +4,24 @@ openerp.google_docs = function(instance, session) {
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
init: function() {
this._super.apply(this, arguments);
- this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
- this.$element.delegate('.oe_google_docs_spreadsheet_button', 'click', this.on_add_spreadsheet_gdoc);
- this.$element.delegate('.oe_google_docs_slide_button', 'click', this.on_add_slide_gdoc);
+ var self = this;
+ var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
+ config.call('get_config', [this.view.dataset.ids[this.view.dataset.index]], function(r) {
+ console.log(r);
+ // if the configuration isn't set, the buttons should be hidden.
+ if (r==false) {
+ $('.oe_google_docs_text_button').css('display', 'none');
+
+ return;
+ }
+
+ var attachment = new instance.web.DataSet(this, 'ir.attachment', self.view.dataset.get_context());
+ attachment.call('copy_gdoc', [self.view.dataset.model, [self.view.datarecord.id]], function(res) {
+ console.log(res);
+ });
+ });
},
- on_add_text_gdoc: function() {
+ on_add_gdoc: function() {
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
@@ -28,24 +41,6 @@ openerp.google_docs = function(instance, session) {
self.do_update();
});
},
- on_add_spreadsheet_gdoc: function() {
- var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_spreadsheet_button');
- $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'spreadsheet'], function(r) {
- self.do_update();
- });
- },
- on_add_slide_gdoc: function() {
- var self = this;
- var $gdocbtn = this.$element.find('.oe_google_docs_slide_button');
- $gdocbtn.attr('disabled', 'true').find('img, span').toggle();
- var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
- ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'slide'], function(r) {
- self.do_update();
- });
- }
});
};
From c55193994d0421b1d9e80c808a415d1dba7299d6 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Mon, 19 Mar 2012 10:57:15 +0530
Subject: [PATCH 091/546] [IMP] sale: improve the logic of open invoice and
open delivery oder so they will work for multiple invoices and delivery
orders, added set to draft button in sent state
bzr revid: psi@tinyerp.com-20120319052715-n7nga0ky12mwwtya
---
addons/sale/sale.py | 91 +++++++++++++++++++++------------------
addons/sale/sale_view.xml | 4 +-
2 files changed, 50 insertions(+), 45 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index d19d43a22cf..3b7eff07cbf 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -516,60 +516,65 @@ class sale_order(osv.osv):
def action_view_invoice(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
inv_ids = []
+ result = {}
for so in self.browse(cr, uid, ids, context=context):
inv_ids+= [invoice.id for invoice in so.invoice_ids]
-
- res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
- res_id = res and res[1] or False
-
- return {
- 'name': _('Customer Invoices'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'view_id': [res_id],
- 'res_model': 'account.invoice',
- 'context': "{'type':'out_invoice', 'journal_type': 'sale'}",
- 'type': 'ir.actions.act_window',
- 'nodestroy': True,
- 'target': 'current',
- 'res_id': inv_ids and inv_ids[0] or False,
- }
+ if len(inv_ids)>1:
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_tree')
+ result.update({
+ 'view_mode': 'tree,form',
+ 'res_id': inv_ids or False
+ })
+ else:
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
+ result.update({
+ 'view_mode': 'form',
+ 'res_id': inv_ids and inv_ids[0] or False,
+ })
+ res_id = res and res[1] or False,
+ result.update({
+ 'name': _('Cutomer Invoice'),
+ 'view_type': 'form',
+ 'view_id': [res_id],
+ 'res_model': 'account.invoice',
+ 'context': "{'type':'out_invoice', 'journal_type': 'sale'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ })
+ return result
+
def action_view_delivery(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
pick_ids = []
+ result = {}
for so in self.browse(cr, uid, ids, context=context):
pick_ids += [picking.id for picking in so.picking_ids]
if len(pick_ids) > 1:
res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_tree')
- res_id = res and res[1] or False,
- return {
- 'name': _('Delivery Order'),
- 'view_type': 'form',
- 'view_mode': 'tree',
- 'view_id': res_id,
- 'res_model': 'stock.picking',
- 'context': "{'type':'out'}",
- 'type': 'ir.actions.act_window',
- 'nodestroy': True,
- 'target': 'current',
- 'res_id': pick_ids or False,
- }
- else:
+ result.update({
+ 'view_mode': 'tree,form',
+ 'res_id': pick_ids or False
+ })
+ else:
res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_form')
- res_id = res and res[1] or False,
- return {
- 'name': _('Delivery Order'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'view_id': res_id,
- 'res_model': 'stock.picking',
- 'context': "{'type':'out'}",
- 'type': 'ir.actions.act_window',
- 'nodestroy': True,
- 'target': 'current',
- 'res_id': pick_ids and pick_ids[0] or False,
- }
+ result.update({
+ 'view_mode': 'form',
+ 'res_id': pick_ids and pick_ids[0] or False,
+ })
+ res_id = res and res[1] or False,
+ result.update({
+ 'name': _('Delivery Order'),
+ 'view_type': 'form',
+ 'view_id': res_id,
+ 'res_model': 'stock.picking',
+ 'context': "{'type':'out'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ })
+ return result
def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception'], date_inv = False, context=None):
res = False
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 2ad4059cb42..8ff740144e8 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -203,11 +203,11 @@
-
+
-
+
Date: Mon, 19 Mar 2012 12:13:13 +0530
Subject: [PATCH 092/546] [IMP]hr_evaluation: Improvement in view of
hr.evaluation.interview model
bzr revid: mma@tinyerp.com-20120319064313-copl2xbroairqlhz
---
addons/hr_evaluation/hr_evaluation_view.xml | 27 +++++++++------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index 1f1b5af553c..e67378df124 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -298,21 +298,18 @@
From 9d5db695ee3e1cfc1f0d306bccf117640a14927b Mon Sep 17 00:00:00 2001
From: MVA
Date: Mon, 19 Mar 2012 11:31:32 +0100
Subject: [PATCH 094/546] [REF] correct the code and change the view files
bzr revid: mva@openerp.com-20120319103132-av7c09avg4p0xgt3
---
addons/google_docs/__openerp__.py | 3 --
addons/google_docs/google_docs.py | 53 +++++++++++----------
addons/google_docs/google_docs.xml | 25 ----------
addons/google_docs/res_config_user_view.xml | 30 +++++++++---
addons/google_docs/static/src/js/gdocs.js | 3 +-
addons/google_docs/static/src/xml/gdocs.xml | 10 +---
6 files changed, 54 insertions(+), 70 deletions(-)
delete mode 100644 addons/google_docs/google_docs.xml
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index 437e5a864f5..237804c4f5b 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -4,9 +4,6 @@
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'category': 'Tools',
- ''' 'data': [
- 'google_docs.xml'
- ],'''
'installable': True,
'auto_install': False,
'web': True,
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index e822bb304bf..d37f28eb349 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -30,22 +30,22 @@ except ImportError:
class google_docs_ir_attachment(osv.osv):
_inherit = 'ir.attachment'
- def _auth(self, cr, uid):
+ def _auth(self, cr, uid,context=None):
# check google_base_account
users_obj = self.pool.get('res.users')
user = users_obj.browse(cr, uid, [uid])[0]
- if not user.gmail_user or not user.gmail_password:
+ if not user.gmail_user or not user.gmail_password:
return False
# login
client = gdata.docs.client.DocsClient(source='openerp.com')
client.ssl = True
client.http_client.debug = False
- client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely')
+ client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely') #authentification in a gmail account
return client
- def create_empty_google_doc(self, cr, uid, model, ids, type_doc):
+ def create_empty_google_doc(self, cr, uid, model, ids, type_doc,context=None):
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@@ -54,12 +54,13 @@ class google_docs_ir_attachment(osv.osv):
@return the document object.
@return False if the google_base_account hasn't been configured yet.
'''
-
+
# authenticate
client = self._auth(cr, uid)
if client == False:
- return False
-
+ return False #return an error
+
+
# create the document in google docs
if type_doc=='slide':
local_resource = gdata.docs.data.Resource(gdata.docs.data.PRESENTATION_LABEL)
@@ -67,6 +68,7 @@ class google_docs_ir_attachment(osv.osv):
local_resource = gdata.docs.data.Resource(gdata.docs.data.SPREADSHEET_LABEL)
else:
local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
+
gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
# register into the db
@@ -76,30 +78,28 @@ class google_docs_ir_attachment(osv.osv):
'type': 'url',
'name': 'new_foo %s' % (type_doc,) , # TODO pending from the working config
'url': gdocs_resource.get_alternate_link().href
- })
-
+ },context=context)
+
+
return gdocs_resource
- def copy_gdoc(self, cr, uid, model, ids):
- if context is None:
- context={}
-
+ def copy_gdoc(self, cr, uid, model, ids,context=None):
client = self._auth(cr, uid)
if client == False:
return False
-
# fetch and copy the original document
original_resource = client.get_resource_by_id(gdocs_resource_id)
copy_resource = client.copy_resource(entry=original_resource)
-
+
# register into the db
self.create(cr, uid, {
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'copy_foo %s' (type_doc,) , # TODO pending from the working config
+ 'name': 'file_name',
+ 'name': 'copy_foo %s' (type_doc,) , #TODO pending from the working config
'url': copy_resource.get_alternate_link().href
- })
+ },context=context)
return copy_resource
@@ -107,20 +107,17 @@ class google_docs(osv.osv):
_name = 'google.docs'
def doc_get(self, cr, uid, model, id, type_doc):
- google_docs_config_ref = self.pool.get('res.users')
ir_attachment_ref = self.pool.get('ir.attachment')
- google_docs_config = google_docs_config_ref.search(cr, uid, [('context_model_id', '=', model)])
+ google_docs_config = self.pool.get('google.docs.config').search(cr, uid, [('context_model_id', '=', model)])
- if not google_docs_config:
- google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, id, type_doc)
- else:
+ if google_docs_config:
google_document = ir_attachment_ref.copy_gdoc(cr, uid, model, id)
-
- print google_docs_config
-
- if not google_docs_config:
+ else:
+ google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, id, type_doc)
return -1
+
+
class config(osv.osv):
_name = 'google.docs.config'
_description = "Google Docs templates config"
@@ -138,6 +135,10 @@ class config(osv.osv):
'context_name': 'pr_%(name)',
'context_multiple': False,
}
+ def has_config_set(self, cr, uid, model,context=None):
+ print model
+ import pdb
+ pdb.set_trace()
def get_config(self, cr, uid, model):
domain = [('context_model_id', '=', model)]
diff --git a/addons/google_docs/google_docs.xml b/addons/google_docs/google_docs.xml
deleted file mode 100644
index 333909f11a0..00000000000
--- a/addons/google_docs/google_docs.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
- res.user.google_docs.config.inherited
- res.users
-
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index 6dee0d6211e..09fa3ae4dda 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -4,25 +4,41 @@
-
- google_docs.config.form
+
+ google_docs.config.tree
google.docs.config
tree
-
+
-
+
+
+ google_docs.config.form
+ google.docs.config
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
Models configuration
google.docs.config
ir.actions.act_window
form
-
+
-
+
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index b7353fd0bba..c6bc1caa5ed 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -4,6 +4,7 @@ openerp.google_docs = function(instance, session) {
instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({
init: function() {
this._super.apply(this, arguments);
+ this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
var self = this;
var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
config.call('get_config', [this.view.dataset.ids[this.view.dataset.index]], function(r) {
@@ -21,7 +22,7 @@ openerp.google_docs = function(instance, session) {
});
});
},
- on_add_gdoc: function() {
+ on_add_text_gdoc: function() {
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index f401512e96b..1182e9f8421 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -4,13 +4,6 @@
-
-
-
-
-
-
-
Add GDoc - text
@@ -19,10 +12,11 @@
Add GDoc - spreadsheet
+
From f77cecb90c39041267455b05b23764f85e6783a5 Mon Sep 17 00:00:00 2001
From: MVA
Date: Tue, 20 Mar 2012 17:03:20 +0100
Subject: [PATCH 095/546] [IMP] add oauth
bzr revid: mva@openerp.com-20120320160320-tykxuosgpq1r28ag
---
addons/google_docs/google_docs.py | 52 +++++++++++++++------
addons/google_docs/res_config_user_view.xml | 2 -
addons/google_docs/static/src/js/gdocs.js | 1 -
addons/google_docs/static/src/xml/gdocs.xml | 7 ++-
4 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index d37f28eb349..09bb1879bdd 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -24,6 +24,9 @@ try:
import gdata.docs.client
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
+ import gdata.auth
+ import gdata.docs.service
+ import webbrowser
except ImportError:
raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list'))
@@ -56,11 +59,15 @@ class google_docs_ir_attachment(osv.osv):
'''
# authenticate
+
+ '''
client = self._auth(cr, uid)
if client == False:
- return False #return an error
-
-
+ return False
+ '''
+ client = self.pool.get('google.oauth')
+ client.login(cr,uid,ids,context=context)
+
# create the document in google docs
if type_doc=='slide':
local_resource = gdata.docs.data.Resource(gdata.docs.data.PRESENTATION_LABEL)
@@ -68,8 +75,9 @@ class google_docs_ir_attachment(osv.osv):
local_resource = gdata.docs.data.Resource(gdata.docs.data.SPREADSHEET_LABEL)
else:
local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
-
- gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
+
+ #create a new doc in Google Docs
+ gdocs_resource = client.Post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
# register into the db
self.create(cr, uid, {
@@ -117,14 +125,13 @@ class google_docs(osv.osv):
return -1
-
class config(osv.osv):
_name = 'google.docs.config'
_description = "Google Docs templates config"
_columns = {
'context_model_id': fields.many2one('ir.model', 'Model'),
- 'context_gdocs_resource_id': fields.char('Google resource ID', size=64),
+ 'context_gdocs_resource_id': fields.char('Google resource ID', size=64,help='This is the id of the template document you kind find it in the URL'),
'context_name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
'context_name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.'),
'context_multiple': fields.boolean('Multiple documents')
@@ -135,16 +142,35 @@ class config(osv.osv):
'context_name': 'pr_%(name)',
'context_multiple': False,
}
- def has_config_set(self, cr, uid, model,context=None):
- print model
- import pdb
- pdb.set_trace()
-
def get_config(self, cr, uid, model):
domain = [('context_model_id', '=', model)]
if self.search_count(cr, uid, domain) != 0:
return False
else:
return self.search(cr, uid, domain)
-
config()
+
+
+
+class oauth (osv.osv):
+ _name = 'google.oauth'
+ def login(self,cr,uid,ids,context=None):
+ consumer_key = '751376579939.apps.googleusercontent.com'
+ consumer_secret = '_KGpgyO8DZIseyG3N-j-h8gN'
+ gd_client = gdata.docs.service.DocsService()
+ #Set OAuth input parameters
+ gd_client.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1,consumer_key, consumer_secret=consumer_secret)
+ #Fetch OAuth Request token
+ request_token = gd_client.FetchOAuthRequestToken()
+ #Set the fetched OAuth token
+ gd_client.SetOAuthToken(request_token)
+ #Generate OAuth authorization URL
+ auth_url = gd_client.GenerateOAuthAuthorizationURL()
+ webbrowser.open(auth_url)
+ print gd_client.SetOAuthToken(request_token)
+ consumer_key = raw_input('Please enter consumer key: ')
+
+ #Upgrade to an OAuth access token
+ gd_client.UpgradeToOAuthAccessToken()
+ #Access Token
+ gd_client.token_store.find_token(request_token.scopes[0])
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index 09fa3ae4dda..9920cc6965b 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -29,8 +29,6 @@
-
-
Models configuration
google.docs.config
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index c6bc1caa5ed..c32dc4c8829 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -12,7 +12,6 @@ openerp.google_docs = function(instance, session) {
// if the configuration isn't set, the buttons should be hidden.
if (r==false) {
$('.oe_google_docs_text_button').css('display', 'none');
-
return;
}
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 1182e9f8421..927b35f115d 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -5,14 +5,13 @@
-
- Add GDoc - text
+
+ Add A Goole Docs
-
+
-
+
google_docs.config.tree
google.docs.config
tree
@@ -15,7 +15,7 @@
-
+
google_docs.config.form
google.docs.config
form
@@ -34,7 +34,7 @@
google.docs.config
ir.actions.act_window
form
-
+
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index 927b35f115d..acb352bf9b0 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -5,17 +5,8 @@
-
Add A Goole Docs
-
From 2f1baf8f40908b54db0950f596fbe98e35d7cf9a Mon Sep 17 00:00:00 2001
From: MVA
Date: Wed, 28 Mar 2012 11:34:56 +0200
Subject: [PATCH 102/546] [IMP] replace the static name in the document name
bzr revid: mva@openerp.com-20120328093456-7wgnnvizvg0r747i
---
addons/google_docs/google_docs.py | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index bba8524023a..8c882a3422a 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -61,13 +61,13 @@ class google_docs_ir_attachment(osv.osv):
local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
#create a new doc in Google Docs
gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
- name = gdocs_resource.title
+
# register into the db
self.create(cr, uid, {
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': name,
+ 'name': ('new_%s' % gdocs_resource.title.text),
'url': gdocs_resource.get_alternate_link().href,
},context=context)
@@ -86,8 +86,7 @@ class google_docs_ir_attachment(osv.osv):
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'file_name',
- 'name': 'copy_foo' , #TODO pending from the working config
+ 'name': 'copy_%s' % gdocs_resource.title.text,
'url': copy_resource.get_alternate_link().href
},context=context)
From c46481f1deb9e692058cd1ed42f9b96127ad6556 Mon Sep 17 00:00:00 2001
From: MVA
Date: Wed, 28 Mar 2012 11:47:18 +0200
Subject: [PATCH 103/546] [IMP] add a raise error to check if configuration is
ok
bzr revid: mva@openerp.com-20120328094718-xk5brbglmeo49cid
---
addons/google_docs/google_docs.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 8c882a3422a..13d9634dcf8 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -43,7 +43,8 @@ class google_docs_ir_attachment(osv.osv):
user_config = google_pool.default_get( cr, uid, {'user' : '' , 'password' : ''},context=context)
#login gmail account
client = google_pool.google_login( user_config['user'], user_config['password'], type='docs_client', context=context)
-
+ if not client:
+ raise osv.except_osv(('Google Docs Error!'),("Check your google configuration in users/synchronization") )
return client
def create_empty_google_doc(self, cr, uid, model, ids, type_doc,context=None):
From 774aa481c2f60df74d8b01f03b00cad002d8e105 Mon Sep 17 00:00:00 2001
From: MVA
Date: Wed, 28 Mar 2012 12:10:15 +0200
Subject: [PATCH 104/546] [IMP] correct the copy with the good document title
bzr revid: mva@openerp.com-20120328101015-4v1fit8z3cno9y91
---
addons/google_docs/google_docs.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 13d9634dcf8..1e6071cd716 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -78,16 +78,17 @@ class google_docs_ir_attachment(osv.osv):
def copy_gdoc(self, cr, uid, model, google_res_id, ids,context=None):
client = self._auth(cr, uid)
# fetch and copy the original document
+ print 'test'
original_resource = client.get_resource_by_id(google_res_id)
- #copy the document you choose in the configuration
- copy_resource = client.copy_resource(original_resource,'copy_foo')
+ #copy the document you choose in the configuration
+ copy_resource = client.copy_resource(original_resource,'copy_%s' % original_resource.title.text)
# register into the db
self.create(cr, uid, {
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'copy_%s' % gdocs_resource.title.text,
+ 'name': 'copy_%s' % original_resource.title.text,
'url': copy_resource.get_alternate_link().href
},context=context)
From 95a86ec57dfb22569ed9b1bd8ea36ae44f9e6856 Mon Sep 17 00:00:00 2001
From: MVA
Date: Wed, 28 Mar 2012 13:41:13 +0200
Subject: [PATCH 105/546] [IMP] add some comment and add a raise if the google
resource is not correct
bzr revid: mva@openerp.com-20120328114113-vspkkbvpdfnt3mho
---
addons/google_docs/google_docs.py | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 1e6071cd716..6e91ee64658 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -76,13 +76,18 @@ class google_docs_ir_attachment(osv.osv):
return 1
def copy_gdoc(self, cr, uid, model, google_res_id, ids,context=None):
+ '''
+ copy an existing document in google docs
+ '''
+
client = self._auth(cr, uid)
# fetch and copy the original document
- print 'test'
- original_resource = client.get_resource_by_id(google_res_id)
- #copy the document you choose in the configuration
- copy_resource = client.copy_resource(original_resource,'copy_%s' % original_resource.title.text)
-
+ try:
+ original_resource = client.get_resource_by_id(google_res_id)
+ #copy the document you choose in the configuration
+ copy_resource = client.copy_resource(original_resource,'copy_%s' % original_resource.title.text)
+ except:
+ raise osv.except_osv(('Google Docs Error!'),("Your ressource id is not correct. You can find the id in the google docs URL") )
# register into the db
self.create(cr, uid, {
'res_model': model,
@@ -126,6 +131,10 @@ class config(osv.osv):
'context_name': 'pr_%(name)',
}
def get_config(self, cr, uid, model):
+ '''
+ Method use with the js to hidde or show the add google doc button
+ @return : list of configuration ids or false
+ '''
domain = [('context_model_id', '=', model)]
if self.search_count(cr, uid, domain) != 0:
return False
From d4152e970378881f82373d4e09c8d23eea1d2535 Mon Sep 17 00:00:00 2001
From: MVA
Date: Fri, 30 Mar 2012 16:51:49 +0200
Subject: [PATCH 106/546] [IMP] change js remove unusfull code and the file
name configuration
bzr revid: mva@openerp.com-20120330145149-04gqj8lvleb9pa53
---
addons/google_docs/google_docs.py | 39 ++++++++++++---------
addons/google_docs/res_config_user_view.xml | 11 +++---
addons/google_docs/static/src/js/gdocs.js | 20 ++++-------
addons/google_docs/static/src/xml/gdocs.xml | 3 +-
4 files changed, 35 insertions(+), 38 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 6e91ee64658..3045cbab279 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -47,7 +47,7 @@ class google_docs_ir_attachment(osv.osv):
raise osv.except_osv(('Google Docs Error!'),("Check your google configuration in users/synchronization") )
return client
- def create_empty_google_doc(self, cr, uid, model, ids, type_doc,context=None):
+ def create_empty_google_doc(self, cr, uid, name_gdocs, model, ids, type_doc,context=None):
'''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity.
@param cr: the current row from the database cursor.
@param uid: the current user ID, for security checks.
@@ -62,24 +62,22 @@ class google_docs_ir_attachment(osv.osv):
local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL)
#create a new doc in Google Docs
gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/')
-
# register into the db
self.create(cr, uid, {
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': ('new_%s' % gdocs_resource.title.text),
+ 'name': 'Google Doc',
'url': gdocs_resource.get_alternate_link().href,
},context=context)
return 1
- def copy_gdoc(self, cr, uid, model, google_res_id, ids,context=None):
+ def copy_gdoc(self, cr, uid, name_gdocs, model, google_res_id, ids,context=None):
'''
copy an existing document in google docs
'''
-
client = self._auth(cr, uid)
# fetch and copy the original document
try:
@@ -93,7 +91,7 @@ class google_docs_ir_attachment(osv.osv):
'res_model': model,
'res_id': ids[0],
'type': 'url',
- 'name': 'copy_%s' % original_resource.title.text,
+ 'name': name_gdocs,
'url': copy_resource.get_alternate_link().href
},context=context)
@@ -104,14 +102,20 @@ class google_docs(osv.osv):
def doc_get(self, cr, uid, model, id, type_doc,context=None):
ir_attachment_ref = self.pool.get('ir.attachment')
- google_docs_config = self.pool.get('google.docs.config').search(cr, uid, [('context_model_id', '=', model)])
+ pool_gdoc_config = self.pool.get('google.docs.config')
+ google_docs_config = pool_gdoc_config.search(cr, uid, [('model_id', '=', model)])
+ name_gdocs=''
+ if google_docs_config:
+ name_gdocs = pool_gdoc_config.browse(cr,uid,google_docs_config,context=context)[0].name_template
+ print name_gdocs
+
# check if a model is configurate with a template
if google_docs_config:
for google_config in self.pool.get('google.docs.config').browse(cr,uid,google_docs_config,context=context):
- google_res_id = google_config.context_gdocs_resource_id
- google_document = ir_attachment_ref.copy_gdoc(cr, uid, model,google_res_id, id)
+ google_res_id = google_config.gdocs_resource_id
+ google_document = ir_attachment_ref.copy_gdoc(cr, uid,name_gdocs ,model,google_res_id, id)
else:
- google_document = ir_attachment_ref.create_empty_google_doc(cr, uid, model, id, type_doc)
+ google_document = ir_attachment_ref.create_empty_google_doc(cr, uid,name_gdocs, model, id, type_doc)
return -1
@@ -120,24 +124,25 @@ class config(osv.osv):
_description = "Google Docs templates config"
_columns = {
- 'context_model_id': fields.many2one('ir.model', 'Model'),
- 'context_gdocs_resource_id': fields.char('Google resource ID', size=64,help='This is the id of the template document you kind find it in the URL'),
- 'context_name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
- 'context_name': fields.char('Name', size=64, help='This is the attachment\'s name. As well, it appears on the panel.'),
+ 'model_id': fields.many2one('ir.model', 'Model'),
+ 'gdocs_resource_id': fields.char('Google resource ID', size=64,help='This is the id of the template document you kind find it in the URL'),
+ 'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
}
_defaults = {
- 'context_name_template': 'Google Document',
- 'context_name': 'pr_%(name)',
+ 'name_template': 'pr_%(name)',
}
def get_config(self, cr, uid, model):
'''
Method use with the js to hidde or show the add google doc button
@return : list of configuration ids or false
'''
- domain = [('context_model_id', '=', model)]
+ domain = [('model_id', '=', model)]
if self.search_count(cr, uid, domain) != 0:
return False
+ # attached only one document to a model
+ if self.pool.get('ir.attachment').search_count(cr,uid,[('url','like','https://docs.google.com/document%')]) !=0:
+ return False
else:
return self.search(cr, uid, domain)
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index be56f324d2d..46abe5b2d80 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -10,7 +10,7 @@
tree
-
+
@@ -21,10 +21,9 @@
form
-
-
-
-
+
+
+
@@ -34,7 +33,7 @@
google.docs.config
ir.actions.act_window
form
-
+
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index c32dc4c8829..9dc4f5c88d3 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -8,36 +8,28 @@ openerp.google_docs = function(instance, session) {
var self = this;
var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
config.call('get_config', [this.view.dataset.ids[this.view.dataset.index]], function(r) {
- console.log(r);
// if the configuration isn't set, the buttons should be hidden.
if (r==false) {
- $('.oe_google_docs_text_button').css('display', 'none');
+ $('.oe_google_docs_text_button',this.$element).hide();
return;
}
var attachment = new instance.web.DataSet(this, 'ir.attachment', self.view.dataset.get_context());
attachment.call('copy_gdoc', [self.view.dataset.model, [self.view.datarecord.id]], function(res) {
- console.log(res);
});
});
},
+ start: function() {
+ this._super();
+ console.log($('.oe_google_docs_text_button',this.$element))
+ $('.oe_google_docs_text_button',this.$element)
+ },
on_add_text_gdoc: function() {
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
- console.log(r);
- if (r == 'False') {
- var params = {
- error: response,
- message: "The user google credentials are not set yet. Contact your administrator for help."
- }
- $(openerp.web.qweb.render("DialogWarning", params)).dialog({
- title: "User Google credentials are not yet set.",
- modal: true,
- });
- }
self.do_update();
});
},
diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml
index acb352bf9b0..2de7efcbd43 100644
--- a/addons/google_docs/static/src/xml/gdocs.xml
+++ b/addons/google_docs/static/src/xml/gdocs.xml
@@ -5,7 +5,8 @@
- Add A Goole Docs
+
+ Goole Docs
From a85f78a48bb5a8681746925eaf6eb62243472453 Mon Sep 17 00:00:00 2001
From: "Atul Patel (OpenERP)"
Date: Mon, 2 Apr 2012 11:58:17 +0530
Subject: [PATCH 107/546] [ADD]event_sale: Add event_items fields for
product_ids and sales_ends fields.
bzr revid: atp@tinyerp.com-20120402062817-yjd1pay0kqolv8fe
---
addons/event_sale/event_sale.py | 30 +++++++++++++++++-
addons/event_sale/event_sale_view.xml | 45 +++++++++++++++++++++++++++
2 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py
index df115c0eef4..0208714b083 100644
--- a/addons/event_sale/event_sale.py
+++ b/addons/event_sale/event_sale.py
@@ -92,4 +92,32 @@ class sale_order_line(osv.osv):
message = _("The registration %s has been created from the Sale Order %s.") % (registration_id, order_line.order_id.name)
registration_obj.log(cr, uid, registration_id, message)
return super(sale_order_line, self).button_confirm(cr, uid, ids, context=context)
-
+
+class event_event(osv.osv):
+ _inherit = 'event.event'
+ _columns = {
+ 'event_item_ids': fields.one2many('event.items','event_id', 'Event Items'),
+ }
+
+class event_items(osv.osv):
+ _name = "event.items"
+ _columns = {
+ 'product_id': fields.many2one('product.product', 'Product', required=True),
+ 'qty': fields.integer('Quantity'),
+ 'price': fields.integer('Price'),
+ 'uom_id': fields.many2one('product.uom', 'Unit of Measure'),
+ 'discount': fields.integer('Discount'),
+ 'event_id': fields.many2one('event.event', 'Event'),
+ 'sales_end_date': fields.date('Sales End')
+ }
+
+ def onchange_product_id(self, cr, uid, ids, product, context=None):
+ product_obj = self.pool.get('product.product')
+ data = {}
+ if not product:
+ return {'value': data}
+ price = product_obj.browse(cr, uid, product).list_price
+ uom = product_obj.browse(cr, uid, product).uom_id.id
+ data['price'] = price
+ data['uom_id'] = uom
+ return {'value': data}
diff --git a/addons/event_sale/event_sale_view.xml b/addons/event_sale/event_sale_view.xml
index 4387e3a725a..1eb15e944a9 100644
--- a/addons/event_sale/event_sale_view.xml
+++ b/addons/event_sale/event_sale_view.xml
@@ -29,5 +29,50 @@
+
+
+ Events Inherit
+ event.event
+ form
+
+
+
+
+
+
+
+
+
+
+
+ Event Items Tree
+ event.items
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+ Event Items Form
+ event.items
+ form
+
+
+
+
+
From aa8e83ea2d44f8e59f4b6dee915f0aea101063fa Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Mon, 2 Apr 2012 18:06:51 +0530
Subject: [PATCH 108/546] [IMP] account, sale, purchase : Cleanup the use of
dicts, remove the automatic email send by the EDI and use proper template
based on an XML ID.
bzr revid: mdi@tinyerp.com-20120402123651-ekqw8z66ltpqnxgz
---
addons/account/account_invoice.py | 7 ++++---
addons/account/edi/invoice.py | 4 +---
addons/account/edi/invoice_action_data.xml | 4 ++++
addons/purchase/edi/purchase_order.py | 4 +---
addons/purchase/edi/purchase_order_action_data.xml | 6 +++++-
addons/purchase/purchase.py | 9 ++++-----
addons/sale/edi/sale_order.py | 6 ++----
addons/sale/edi/sale_order_action_data.xml | 4 ++++
addons/sale/sale.py | 7 ++++---
9 files changed, 29 insertions(+), 22 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 8d0d185db23..d715778584f 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -388,11 +388,12 @@ class account_invoice(osv.osv):
def action_invoice_sent(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
- template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'account.invoice')], context=context)[0]
+ template = mod_obj.get_object_reference(cr, uid, 'account', 'email_template_edi_invoice')
+ template_id = template and template[1] or False
res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
res_id = res and res[1] or False
- ctx = context.copy()
- ctx.update({'active_model': 'account.invoice', 'active_id': ids[0], 'mail.compose.template_id': template_id})
+ ctx = dict(context, active_model='account.invoice', active_id=ids[0])
+ ctx.update({'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
diff --git a/addons/account/edi/invoice.py b/addons/account/edi/invoice.py
index eb9f97c80db..6e4d601e987 100644
--- a/addons/account/edi/invoice.py
+++ b/addons/account/edi/invoice.py
@@ -79,9 +79,7 @@ class account_invoice(osv.osv, EDIMixin):
invoice_objs = self.browse(cr, uid, ids, context=context)
edi_token = self.pool.get('edi.document').export_edi(cr, uid, invoice_objs, context = context)[0]
web_root_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
- edi_context = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
- ctx = context.copy()
- ctx.update(edi_context)
+ ctx = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
return super(account_invoice, self).action_invoice_sent(cr, uid, ids, context=ctx)
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml
index ce837c6662b..4dd225a493d 100644
--- a/addons/account/edi/invoice_action_data.xml
+++ b/addons/account/edi/invoice_action_data.xml
@@ -2,6 +2,7 @@
+
@@ -31,9 +33,11 @@
so users can freely customize/delete them -->
+
diff --git a/addons/purchase/edi/purchase_order.py b/addons/purchase/edi/purchase_order.py
index 1994668b35b..3a82e990a14 100644
--- a/addons/purchase/edi/purchase_order.py
+++ b/addons/purchase/edi/purchase_order.py
@@ -69,9 +69,7 @@ class purchase_order(osv.osv, EDIMixin):
purchase_objs = self.browse(cr, uid, ids, context=context)
edi_token = self.pool.get('edi.document').export_edi(cr, uid, purchase_objs, context = context)[0]
web_root_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
- edi_context = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
- ctx = context.copy()
- ctx.update(edi_context)
+ ctx = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
return super(purchase_order, self).wkf_send_rfq(cr, uid, ids, context=ctx)
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
diff --git a/addons/purchase/edi/purchase_order_action_data.xml b/addons/purchase/edi/purchase_order_action_data.xml
index c4a7f75819a..5fafa1f4b1a 100644
--- a/addons/purchase/edi/purchase_order_action_data.xml
+++ b/addons/purchase/edi/purchase_order_action_data.xml
@@ -2,6 +2,7 @@
+
@@ -27,9 +29,11 @@
so users can freely customize/delete them -->
+
@@ -151,4 +155,4 @@ ${object.company_id.website or ''}
]]>
-
\ No newline at end of file
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 7e5c28d0050..19e3ce5db95 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -327,13 +327,12 @@ class purchase_order(osv.osv):
def wkf_send_rfq(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
- template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'purchase.order')], context=context)[0]
-
+ template = mod_obj.get_object_reference(cr, uid, 'purchase', 'email_template_edi_purchase')
+ template_id = template and template[1] or False
res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
res_id = res and res[1] or False
-
- ctx = context.copy()
- ctx.update({'active_model': 'purchase.order', 'active_id': ids[0], 'mail.compose.template_id': template_id})
+ ctx = dict(context, active_model='purchase.order', active_id=ids[0])
+ ctx.update({'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
diff --git a/addons/sale/edi/sale_order.py b/addons/sale/edi/sale_order.py
index 02c6ce617e9..b49f6c1e415 100644
--- a/addons/sale/edi/sale_order.py
+++ b/addons/sale/edi/sale_order.py
@@ -71,9 +71,7 @@ class sale_order(osv.osv, EDIMixin):
sale_objs = self.browse(cr, uid, ids, context=context)
edi_token = self.pool.get('edi.document').export_edi(cr, uid, sale_objs, context = context)[0]
web_root_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
- edi_context = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
- ctx = context.copy()
- ctx.update(edi_context)
+ ctx = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
return super(sale_order, self).action_quotation_sent(cr, uid, ids, context=ctx)
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
@@ -226,4 +224,4 @@ class sale_order_line(osv.osv, EDIMixin):
edi_doc_list.append(edi_doc)
return edi_doc_list
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml
index 9fcee173014..a92c87de46f 100644
--- a/addons/sale/edi/sale_order_action_data.xml
+++ b/addons/sale/edi/sale_order_action_data.xml
@@ -2,6 +2,7 @@
+
@@ -29,9 +31,11 @@
so users can freely customize/delete them -->
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 9eb1336a0d9..8f88e28a3b8 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -730,11 +730,12 @@ class sale_order(osv.osv):
def action_quotation_sent(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
- template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'sale.order')], context=context)[0]
+ template = mod_obj.get_object_reference(cr, uid, 'sale', 'email_template_edi_sale')
+ template_id = template and template[1] or False
res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
res_id = res and res[1] or False
- ctx = context.copy()
- ctx.update({'active_model': 'sale.order', 'active_id': ids[0], 'mail.compose.template_id': template_id})
+ ctx = dict(context, active_model='sale.order', active_id=ids[0])
+ ctx.update({'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
From fb989dbfb7161b9f79ce5bf2024a5f13423b1b6f Mon Sep 17 00:00:00 2001
From: MVA
Date: Mon, 2 Apr 2012 15:18:17 +0200
Subject: [PATCH 109/546] [IMP] change the way to name the attachement and
change when you already have a google document the button will be hide
bzr revid: mva@openerp.com-20120402131817-oxv227m8i11pfsjx
---
addons/google_docs/google_docs.py | 19 +++++------
addons/google_docs/static/src/js/gdocs.js | 40 +++++++++++++----------
2 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index 3045cbab279..e195fcf21a6 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -105,9 +105,11 @@ class google_docs(osv.osv):
pool_gdoc_config = self.pool.get('google.docs.config')
google_docs_config = pool_gdoc_config.search(cr, uid, [('model_id', '=', model)])
name_gdocs=''
+ model_fields_dic = self.pool.get(model).read(cr,uid,id,[])
+
if google_docs_config:
name_gdocs = pool_gdoc_config.browse(cr,uid,google_docs_config,context=context)[0].name_template
- print name_gdocs
+ name_gdocs = name_gdocs % model_fields_dic[0]
# check if a model is configurate with a template
if google_docs_config:
@@ -130,22 +132,17 @@ class config(osv.osv):
}
_defaults = {
- 'name_template': 'pr_%(name)',
+ 'name_template': 'pr_%(name)s',
}
- def get_config(self, cr, uid, model):
+ def get_config(self, cr, uid, ids, model,context=None):
'''
Method use with the js to hidde or show the add google doc button
@return : list of configuration ids or false
'''
- domain = [('model_id', '=', model)]
- if self.search_count(cr, uid, domain) != 0:
- return False
- # attached only one document to a model
- if self.pool.get('ir.attachment').search_count(cr,uid,[('url','like','https://docs.google.com/document%')]) !=0:
- return False
+ if self.pool.get('ir.attachment').search_count(cr,uid,[('url','like','https://docs.google.com/document%'),('res_model','=',model),('res_id','=',ids[0])]) !=0:
+ return False
else:
- return self.search(cr, uid, domain)
-
+ return True
config()
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 9dc4f5c88d3..425de5045d8 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -5,31 +5,35 @@ openerp.google_docs = function(instance, session) {
init: function() {
this._super.apply(this, arguments);
this.$element.delegate('.oe_google_docs_text_button', 'click', this.on_add_text_gdoc);
- var self = this;
- var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
- config.call('get_config', [this.view.dataset.ids[this.view.dataset.index]], function(r) {
- // if the configuration isn't set, the buttons should be hidden.
- if (r==false) {
- $('.oe_google_docs_text_button',this.$element).hide();
- return;
- }
+ },
+
+
+ on_attachments_loaded: function(attachments) {
+ this._super(attachments);
+ var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
+ config.call('get_config', [[this.view.datarecord.id],this.view.dataset.model,this.view.dataset.get_context()], function(r) {
+ if (r == false){
+ $('.oe_google_docs_text_button',this.$element).hide();
+ }
+ });
+ },
- var attachment = new instance.web.DataSet(this, 'ir.attachment', self.view.dataset.get_context());
- attachment.call('copy_gdoc', [self.view.dataset.model, [self.view.datarecord.id]], function(res) {
- });
- });
- },
- start: function() {
- this._super();
- console.log($('.oe_google_docs_text_button',this.$element))
- $('.oe_google_docs_text_button',this.$element)
- },
on_add_text_gdoc: function() {
var self = this;
var $gdocbtn = this.$element.find('.oe_google_docs_text_button');
$gdocbtn.attr('disabled', 'true').find('img, span').toggle();
var ds = new instance.web.DataSet(this, 'google.docs', this.view.dataset.get_context());
ds.call('doc_get', [this.view.dataset.model, [this.view.datarecord.id], 'text'], function(r) {
+ if (r == 'False') {
+ var params = {
+ error: response,
+ message: "The user google credentials are not set yet. Contact your administrator for help."
+ }
+ $(openerp.web.qweb.render("DialogWarning", params)).dialog({
+ title: "User Google credentials are not yet set.",
+ modal: true,
+ });
+ }
self.do_update();
});
},
From 3eb66d427a23399cc61fe3e4b5dcf7b84b99644a Mon Sep 17 00:00:00 2001
From: "Divyesh Makwana (Open ERP)"
Date: Tue, 3 Apr 2012 11:27:24 +0530
Subject: [PATCH 110/546] [IMP] email_template : Remove the subtype equal to
html.
bzr revid: mdi@tinyerp.com-20120403055724-fi7jvk30ptnydy61
---
addons/email_template/wizard/mail_compose_message.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py
index c68f884f7ef..a4fd749979c 100644
--- a/addons/email_template/wizard/mail_compose_message.py
+++ b/addons/email_template/wizard/mail_compose_message.py
@@ -102,14 +102,12 @@ class mail_compose_message(osv.osv_memory):
'res_id' : ids[0] if ids else False
}
att_ids.append(attachment_obj.create(cr, uid, data_attach))
- values['subtype'] = 'html'
values['attachment_ids'] = att_ids
else:
# restore defaults
values = self.default_get(cr, uid, self.fields_get_keys(cr, uid), context)
values.update(use_template=use_template, template_id=template_id)
- values['subtype'] = 'html'
return {'value': values}
From 515af1d3d988af70a833a22ada9edce49dd3c351 Mon Sep 17 00:00:00 2001
From: MVA
Date: Tue, 3 Apr 2012 09:07:52 +0200
Subject: [PATCH 111/546] [IMP] change the domain to enable spreadsheet and
reindentation in the js file
bzr revid: mva@openerp.com-20120403070752-4gfw1hg3p6ifzmwi
---
addons/google_docs/google_docs.py | 2 +-
addons/google_docs/static/src/js/gdocs.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index e195fcf21a6..5a6d33e9725 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -139,7 +139,7 @@ class config(osv.osv):
Method use with the js to hidde or show the add google doc button
@return : list of configuration ids or false
'''
- if self.pool.get('ir.attachment').search_count(cr,uid,[('url','like','https://docs.google.com/document%'),('res_model','=',model),('res_id','=',ids[0])]) !=0:
+ if self.pool.get('ir.attachment').search_count(cr,uid,[('url','like','https://docs.google.com/%'),('res_model','=',model),('res_id','=',ids[0])]) !=0:
return False
else:
return True
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 425de5045d8..a8e941f01f6 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -13,7 +13,7 @@ openerp.google_docs = function(instance, session) {
var config = new instance.web.DataSet(this, 'google.docs.config', this.view.dataset.get_context());
config.call('get_config', [[this.view.datarecord.id],this.view.dataset.model,this.view.dataset.get_context()], function(r) {
if (r == false){
- $('.oe_google_docs_text_button',this.$element).hide();
+ $('.oe_google_docs_text_button',this.$element).hide();
}
});
},
From cbf9c244beab1689c1499baad9a3084d18625474 Mon Sep 17 00:00:00 2001
From: "Jagdish Panchal (Open ERP)"
Date: Tue, 10 Apr 2012 12:46:27 +0530
Subject: [PATCH 112/546] [IMP] set home page of all menus
bzr revid: jap@tinyerp.com-20120410071627-4gk2gz2fhf45ruux
---
addons/account/account_invoice_view.xml | 3 +++
addons/account/board_account_view.xml | 2 +-
addons/document/board_document_view.xml | 4 ++--
addons/document/document_view.xml | 4 ++++
addons/event/event_view.xml | 2 ++
addons/hr/hr_board.xml | 2 +-
addons/hr/hr_view.xml | 3 +++
addons/membership/membership_view.xml | 2 ++
addons/mrp/board_manufacturing_view.xml | 4 ++--
addons/mrp/mrp_view.xml | 3 +++
addons/project/board_project_view.xml | 4 ++--
addons/project/project_view.xml | 3 +++
addons/purchase/board_purchase_view.xml | 2 +-
addons/purchase/purchase_view.xml | 11 +++++++----
.../purchase_requisition_view.xml | 2 +-
addons/sale/board_sale_view.xml | 4 ++--
addons/sale/sale_view.xml | 2 +-
addons/stock/board_warehouse_view.xml | 2 +-
addons/stock/stock_view.xml | 5 ++++-
19 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 6d499b4d3ad..4444c51dd02 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -430,6 +430,9 @@
With Customer Invoices you can create and manage sales invoices issued to your customers. OpenERP can also generate draft invoices automatically from sales orders or deliveries. You should only confirm them before sending them to your customers.
+
diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml
index 6417bb99d88..1d7865c0f01 100644
--- a/addons/account/board_account_view.xml
+++ b/addons/account/board_account_view.xml
@@ -63,7 +63,7 @@
-
+
diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml
index 4412423c97b..44fb44d2a18 100644
--- a/addons/document/board_document_view.xml
+++ b/addons/document/board_document_view.xml
@@ -49,8 +49,8 @@
id="menu_reports_document_manager"
icon="terp-graph"/>
-
+
board.document.manager.form1
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index e426444f26d..4ddd85bb8f7 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -357,6 +357,10 @@
action="action_document_file_form"
id="menu_document_files"
parent="menu_document_doc"/>
+
+
+
ir.actions.act_window
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 0825cef42c5..200b9f88237 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -304,6 +304,8 @@
Event is the low level object used by meeting and others documents that should be synchronized with mobile devices or calendar applications through caldav. Most of the users should work in the Calendar menu, and not in the list of events.
+
+
-
+
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index a954d916385..df5de845c9e 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -188,6 +188,9 @@
Here you can manage your work force by creating employees and assigning them specific properties in the system. Maintain all employee related information and keep track of anything that needs to be recorded for them. The personal information tab will help you maintain their identity data. The Categories tab gives you the opportunity to assign them related employee categories depending on their position and activities within the company. A category can be a seniority level within the company or a department. The Timesheets tab allows to assign them a specific timesheet and analytic journal where they will be able to enter time through the system. In the note tab, you can enter text data that should be recorded for a specific employee.
+
+
kanban
diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml
index bdb04525d43..074bed97fcd 100644
--- a/addons/membership/membership_view.xml
+++ b/addons/membership/membership_view.xml
@@ -208,6 +208,8 @@
+
+
diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml
index cb81d51d439..4ce4f5e5995 100644
--- a/addons/mrp/board_manufacturing_view.xml
+++ b/addons/mrp/board_manufacturing_view.xml
@@ -35,8 +35,8 @@
id="menu_board_manufacturing" parent="menus_dash_mrp"
sequence="1"/>
-
+
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index f96147e9344..7533ddea12e 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -840,6 +840,9 @@
+
+
Manufacturing Orders
ir.actions.act_window
diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml
index f4a855283ba..bca37ac3fc4 100644
--- a/addons/project/board_project_view.xml
+++ b/addons/project/board_project_view.xml
@@ -117,9 +117,9 @@
parent="menu_project_dashboard"
sequence="1"/>
-
+ name="Project" sequence="10" action="open_board_project"/> -->
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 95538513f0c..2b86de95427 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -542,6 +542,9 @@
+
+
Overpassed Tasks
project.task
diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml
index 4c9e776b96b..4d8280059b0 100644
--- a/addons/purchase/board_purchase_view.xml
+++ b/addons/purchase/board_purchase_view.xml
@@ -116,7 +116,7 @@
parent="menu_purchase_deshboard"
sequence="4"/>
-
+
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 007c85b98f1..4de426e71f9 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -3,7 +3,7 @@
@@ -312,8 +312,11 @@
-
+ sequence="0"/>
+
+
+
Purchase Orders
ir.actions.act_window
@@ -323,7 +326,7 @@
Use this menu to search within your purchase orders by references, supplier, products, etc. For each purchase order, you can track the products received, and control the supplier invoices.
-
+
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index d6a736eea9c..5e77f46b1a2 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -173,7 +173,7 @@
diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml
index 8a6caf1a849..4d45151dece 100644
--- a/addons/sale/board_sale_view.xml
+++ b/addons/sale/board_sale_view.xml
@@ -124,9 +124,9 @@
-
+ name="Sales"/> -->
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 09ad9381e26..6feff81e9ee 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -1,7 +1,7 @@
diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml
index b8de9cf445e..a24f59aa08f 100644
--- a/addons/stock/board_warehouse_view.xml
+++ b/addons/stock/board_warehouse_view.xml
@@ -70,7 +70,7 @@
-
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 592cb180d22..1d81f80829c 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -4,7 +4,7 @@
@@ -1924,6 +1924,9 @@
Stock Management
+
+
From 4347226b1d16f73c84f9606b613ec0053602d628 Mon Sep 17 00:00:00 2001
From: "Jagdish Panchal (Open ERP)"
Date: Tue, 10 Apr 2012 16:21:25 +0530
Subject: [PATCH 113/546] [IMP] board: improve xml code to set module kanban on
setting main menu
bzr revid: jap@tinyerp.com-20120410105125-ysmtfc1qgizmldly
---
addons/board/board_data_admin.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/board/board_data_admin.xml b/addons/board/board_data_admin.xml
index 5f8c2f1b05c..88580c3deb5 100644
--- a/addons/board/board_data_admin.xml
+++ b/addons/board/board_data_admin.xml
@@ -54,7 +54,7 @@
-
+
From 95952a8d56abb3c69e3597991b3c3819e65c8775 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Tue, 17 Apr 2012 15:03:40 +0530
Subject: [PATCH 114/546] [ADD] added functionality which checks the available
seats at the time of confirming registration, and set current date in demo
data inorder to show the upcoming events
bzr revid: bde@tinyerp.com-20120417093340-824lazijkbf83m1x
---
addons/event/event.py | 12 ++++++++++++
addons/event/event_demo.xml | 8 ++++----
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/addons/event/event.py b/addons/event/event.py
index 6bf1ea24786..071835fa240 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -102,6 +102,14 @@ class event_event(osv.osv):
total_confirmed = self.event.register_current
if total_confirmed < self.event.register_min or total_confirmed > self.event.register_max and self.event.register_max!=0:
raise osv.except_osv(_('Error!'),_("The total of confirmed registration for the event '%s' does not meet the expected minimum/maximum. You should maybe reconsider those limits before going further") % (self.event.name))
+
+ def check_registration_limits_before(self, cr, uid, ids, no_of_registration, context=None):
+ total_confirmed = self.browse(cr, uid, ids, context=context).register_current
+ register_max = self.browse(cr, uid, ids, context=context).register_max
+ available_seats = register_max - total_confirmed
+ if no_of_registration > available_seats:
+ raise osv.except_osv(_('Warning!'),_("Only %d Seats are Available!") % (available_seats))
+
def confirm_event(self, cr, uid, ids, context=None):
register_pool = self.pool.get('event.registration')
@@ -295,6 +303,10 @@ class event_registration(osv.osv):
def registration_open(self, cr, uid, ids, context=None):
""" Open Registration
"""
+ event_obj = self.pool.get('event.event')
+ event_id = self.browse(cr, uid, ids, context=context)[0].event_id.id
+ no_of_registration = self.browse(cr, uid, ids, context=context)[0].nb_register
+ event_obj.check_registration_limits_before(cr, uid, event_id, no_of_registration, context=context)
res = self.confirm_registration(cr, uid, ids, context=context)
self.mail_user(cr, uid, ids, context=context)
return res
diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml
index 96bc64e12aa..d5907b4bebf 100644
--- a/addons/event/event_demo.xml
+++ b/addons/event/event_demo.xml
@@ -38,16 +38,16 @@
Opera of Verdi
-
-
+
+
50
350
Conference on ERP Business
-
-
+
+
200
From 27d279e3c3e21233005efa5b4c2aca788044f912 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Tue, 17 Apr 2012 17:01:20 +0530
Subject: [PATCH 115/546] [IMP] improved the date manipulation in
event/event_demo.xml
bzr revid: bde@tinyerp.com-20120417113120-cm6tro3par1vtpy2
---
addons/event/event_demo.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml
index d5907b4bebf..81dad07b5e4 100644
--- a/addons/event/event_demo.xml
+++ b/addons/event/event_demo.xml
@@ -38,16 +38,16 @@
Opera of Verdi
-
-
+
+
50
350
Conference on ERP Business
-
-
+
+
200
From 89547acdfb6d883b6fc5c8790dbd2cc3abadedca Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Wed, 18 Apr 2012 14:56:37 +0530
Subject: [PATCH 116/546] [ADD] added text area in kanban view inorder to input
number of seats
bzr revid: bde@tinyerp.com-20120418092637-uprsxgafbu1tl8vw
---
addons/event/__openerp__.py | 3 +++
addons/event/event.py | 6 +++++-
addons/event/event_view.xml | 1 +
addons/event/static/src/css/event.css | 3 +++
4 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index ea0e4316ef5..b9753835aeb 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -54,6 +54,9 @@ Note that:
'demo_xml': ['event_demo.xml'],
'test': ['test/process/event_draft2done.yml'],
'css': ['static/src/css/event.css'],
+ 'js': [
+ #'static/src/js/event.js',
+ ],
'installable': True,
'application': True,
'auto_install': False,
diff --git a/addons/event/event.py b/addons/event/event.py
index 6bf1ea24786..27b8269db20 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -215,10 +215,13 @@ class event_event(osv.osv):
register_pool = self.pool.get('event.registration')
user_pool = self.pool.get('res.users')
user = user_pool.browse(cr, uid, uid, context=context)
+ print "user", user
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
+ print "curr_reg_ids", curr_reg_ids
#the subscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to subscribe
if not curr_reg_ids:
- curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id,})]
+ curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': 5})]
+ print "::::::::::::::", curr_reg_ids
return register_pool.confirm_registration(cr, 1, curr_reg_ids, context=context)
def unsubscribe_to_event(self, cr, uid, ids, context=None):
@@ -288,6 +291,7 @@ class event_registration(osv.osv):
return self.write(cr, uid, ids, {'state': 'draft'}, context=context)
def confirm_registration(self, cr, uid, ids, context=None):
+ print "confirm_registrationconfirm_registration"
self.message_append(cr, uid, ids,_('State set to open'),body_text= _('Open'))
return self.write(cr, uid, ids, {'state': 'open'}, context=context)
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 4e22569c3e1..d4bbe059084 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -203,6 +203,7 @@
+
Subscribe
diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css
index a0f738e6323..52cf194dbe7 100644
--- a/addons/event/static/src/css/event.css
+++ b/addons/event/static/src/css/event.css
@@ -115,4 +115,7 @@ div.oe_fold_column{
display: inline;
background-color: #DC5F59;
}
+ .no_of_seats{
+ width:40px;
+ }
From a163b926e393ef63b30c5f23aad2d652be7ef57d Mon Sep 17 00:00:00 2001
From: "DBR (OpenERP)"
Date: Wed, 18 Apr 2012 17:54:59 +0530
Subject: [PATCH 117/546] [IMP]stock: click on warehouse menu tn open product
kanban view
bzr revid: dbr@tinyerp.com-20120418122459-l27y5wa1b38oaid6
---
addons/product/product_view.xml | 11 +++++++++--
addons/stock/stock_view.xml | 2 +-
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 2a12fc9ad08..b721dd2031d 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -263,19 +263,26 @@
-
+
tree
-
+
form
+
+
+ kanban
+
+
+
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index cfa73a8806d..4edc1cef753 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -5,7 +5,7 @@
+ web_icon_hover="images/warehouse-hover.png" action="product.product_normal_action"/>
From 6dbbf9e79d16f83d46087b50466c34827823e582 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Thu, 19 Apr 2012 12:23:06 +0530
Subject: [PATCH 118/546] [IMP] resolve conflicts
bzr revid: psi@tinyerp.com-20120419065306-2ie570l1mpu9jegt
---
addons/mail/wizard/mail_compose_message.py | 5 -----
1 file changed, 5 deletions(-)
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 107ddfbe764..59554acd57b 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -259,12 +259,7 @@ class mail_compose_message(osv.osv_memory):
attachments=attachment, references=references, res_id=int(mail.res_id),
subtype=mail.subtype, headers=headers, context=context)]
# in normal mode, we send the email immediately, as the user expects us to (delay should be sufficiently small)
-<<<<<<< TREE
- mail_message.send(cr, uid, [msg_id], context=context)
-=======
mail_message.send(cr, uid, msg_ids, context=context)
-
->>>>>>> MERGE-SOURCE
return {'type': 'ir.actions.act_window_close'}
def render_template(self, cr, uid, template, model, res_id, context=None):
From c6ee2737b344ce7f211eac70c9b57c3b7850ea5f Mon Sep 17 00:00:00 2001
From: "DBR (OpenERP)"
Date: Thu, 19 Apr 2012 12:58:30 +0530
Subject: [PATCH 119/546] [IMP]sale : remove action of partner form
bzr revid: dbr@tinyerp.com-20120419072830-gu41w6tmdmfgowp5
---
addons/hr/hr_board.xml | 1 -
addons/sale/sale_view.xml | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/addons/hr/hr_board.xml b/addons/hr/hr_board.xml
index 20c0e626619..582d6175d8b 100644
--- a/addons/hr/hr_board.xml
+++ b/addons/hr/hr_board.xml
@@ -24,7 +24,6 @@
-
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 9b6ede9a278..fc9bc907b1e 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -2,8 +2,7 @@
+ id="base.menu_base_partner" name="Sales" sequence="0" groups="base.group_sale_salesman,base.group_sale_manager"/>
From 2a6a022d032bc3ebd52d93d2b9db8da8e3165bf2 Mon Sep 17 00:00:00 2001
From: "Purnendu Singh (OpenERP)"
Date: Thu, 19 Apr 2012 14:37:08 +0530
Subject: [PATCH 120/546] [IMP] remove conflicts
bzr revid: psi@tinyerp.com-20120419090708-ezvbeb00093ojkrt
---
addons/account/account_invoice_view.xml | 9 +--
addons/hr_holidays/hr_holidays_view.xml | 14 ----
addons/sale/sale.py | 94 -------------------------
addons/sale/sale_view.xml | 67 ++++++------------
4 files changed, 21 insertions(+), 163 deletions(-)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 88af88ac4e1..ac0fd9de962 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -303,18 +303,11 @@
-
+
-<<<<<<< TREE
-=======
-
-
-
-
->>>>>>> MERGE-SOURCE
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index b0db225df25..3006f50302e 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -87,17 +87,10 @@
-<<<<<<< TREE
-=======
-
-
-
-
->>>>>>> MERGE-SOURCE
@@ -138,17 +131,10 @@
-<<<<<<< TREE
-=======
-
-
-
-
->>>>>>> MERGE-SOURCE
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 43209ad4bcf..71846387f65 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -1473,98 +1473,6 @@ class sale_order_line(osv.osv):
sale_order_line()
-<<<<<<< TREE
-class sale_config_picking_policy(osv.osv_memory):
- _name = 'sale.config.picking_policy'
- _inherit = 'res.config'
-
- _columns = {
- 'name': fields.char('Name', size=64),
- 'sale_orders': fields.boolean('Based on Sales Orders',),
- 'deli_orders': fields.boolean('Based on Delivery Orders'),
- 'task_work': fields.boolean('Based on Tasks\' Work'),
- 'timesheet': fields.boolean('Based on Timesheet'),
- 'order_policy': fields.selection([
- ('manual', 'Invoice Based on Sales Orders'),
- ('picking', 'Invoice Based on Deliveries'),
- ], 'Main Method Based On', required=True, help="You can generate invoices based on sales orders or based on shippings."),
- 'charge_delivery': fields.boolean('Do you charge the delivery?'),
- 'time_unit': fields.many2one('product.uom','Main Working Time Unit')
- }
- _defaults = {
- 'order_policy': 'manual',
- 'time_unit': lambda self, cr, uid, c: self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c) and self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c)[0] or False,
- }
-
- def onchange_order(self, cr, uid, ids, sale, deli, context=None):
- res = {}
- if sale:
- res.update({'order_policy': 'manual'})
- elif deli:
- res.update({'order_policy': 'picking'})
- return {'value':res}
-
- def execute(self, cr, uid, ids, context=None):
- ir_values_obj = self.pool.get('ir.values')
- data_obj = self.pool.get('ir.model.data')
- menu_obj = self.pool.get('ir.ui.menu')
- module_obj = self.pool.get('ir.module.module')
- module_upgrade_obj = self.pool.get('base.module.upgrade')
- module_name = []
-
- group_id = data_obj.get_object(cr, uid, 'base', 'group_sale_salesman').id
-
- wizard = self.browse(cr, uid, ids)[0]
-
- if wizard.sale_orders:
- menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_invoicing_sales_order_lines').id
- menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]})
-
- if wizard.deli_orders:
- menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_action_picking_list_to_invoice').id
- menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]})
-
- if wizard.task_work:
- module_name.append('project_timesheet')
- module_name.append('project_mrp')
- module_name.append('account_analytic_analysis')
-
- if wizard.timesheet:
- module_name.append('account_analytic_analysis')
-
- if wizard.charge_delivery:
- module_name.append('delivery')
-
- if len(module_name):
- module_ids = []
- need_install = False
- module_ids = []
- for module in module_name:
- data_id = module_obj.name_search(cr, uid , module, [], '=')
- module_ids.append(data_id[0][0])
-
- for module in module_obj.browse(cr, uid, module_ids):
- if module.state == 'uninstalled':
- module_obj.state_update(cr, uid, [module.id], 'to install', ['uninstalled'], context)
- need_install = True
- cr.commit()
- if need_install:
- pooler.restart_pool(cr.dbname, update_module=True)[1]
-
- if wizard.time_unit:
- prod_id = data_obj.get_object(cr, uid, 'product', 'product_consultant').id
- product_obj = self.pool.get('product.product')
- product_obj.write(cr, uid, prod_id, {'uom_id':wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id})
-
- ir_values_obj.set(cr, uid, 'default', False, 'order_policy', ['sale.order'], wizard.order_policy)
- if wizard.task_work and wizard.time_unit:
- company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
- self.pool.get('res.company').write(cr, uid, [company_id], {
- 'project_time_mode_id': wizard.time_unit.id
- }, context=context)
-
-sale_config_picking_policy()
-
class mail_message(osv.osv):
_name = 'mail.message'
_inherit = 'mail.message'
@@ -1577,6 +1485,4 @@ class mail_message(osv.osv):
mail_message()
-=======
->>>>>>> MERGE-SOURCE
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 5c8db74b15d..025d27e48b1 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -97,22 +97,27 @@
form