-
+
@@ -133,7 +133,7 @@
-
+
diff --git a/openerp/addons/base/module/wizard/base_update_translations_view.xml b/openerp/addons/base/module/wizard/base_update_translations_view.xml
index 1fe52511ebb..4a20ef30bee 100644
--- a/openerp/addons/base/module/wizard/base_update_translations_view.xml
+++ b/openerp/addons/base/module/wizard/base_update_translations_view.xml
@@ -10,7 +10,9 @@
diff --git a/openerp/addons/base/publisher_warranty/__init__.py b/openerp/addons/base/publisher_warranty/__init__.py
deleted file mode 100644
index 6b60ddf3ca1..00000000000
--- a/openerp/addons/base/publisher_warranty/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import publisher_warranty
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/openerp/addons/base/publisher_warranty/publisher_warranty.py b/openerp/addons/base/publisher_warranty/publisher_warranty.py
deleted file mode 100644
index 897210ce817..00000000000
--- a/openerp/addons/base/publisher_warranty/publisher_warranty.py
+++ /dev/null
@@ -1,354 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 OpenERP S.A. ().
-#
-# 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 .
-#
-##############################################################################
-"""
-Module to handle publisher warranty contracts as well as notifications from
-OpenERP.
-"""
-
-import datetime
-import logging
-import sys
-import urllib
-import urllib2
-
-import pooler
-import release
-from osv import osv, fields
-from tools.translate import _
-from tools.safe_eval import safe_eval
-from tools.config import config
-from tools import misc
-
-_logger = logging.getLogger(__name__)
-
-"""
-Time interval that will be used to determine up to which date we will
-check the logs to see if a message we just received was already logged.
-@type: datetime.timedelta
-"""
-_PREVIOUS_LOG_CHECK = datetime.timedelta(days=365)
-
-class publisher_warranty_contract(osv.osv):
- """
- Osv representing a publisher warranty contract.
- """
- _name = "publisher_warranty.contract"
-
- def _get_valid_contracts(self, cr, uid):
- """
- Return the list of the valid contracts encoded in the system.
-
- @return: A list of contracts
- @rtype: list of publisher_warranty.contract browse records
- """
- return [contract for contract in self.browse(cr, uid, self.search(cr, uid, []))
- if contract.state == 'valid']
-
- def status(self, cr, uid):
- """ Method called by the client to check availability of publisher warranty contract. """
-
- contracts = self._get_valid_contracts(cr, uid)
- return {
- 'status': "full" if contracts else "none" ,
- 'uncovered_modules': list(),
- }
-
- def send(self, cr, uid, tb, explanations, remarks=None, issue_name=None):
- """ Method called by the client to send a problem to the publisher warranty server. """
-
- if not remarks:
- remarks = ""
-
- valid_contracts = self._get_valid_contracts(cr, uid)
- valid_contract = valid_contracts[0]
-
- try:
- origin = 'client'
- dbuuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
- db_create_date = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.create_date')
- user = self.pool.get("res.users").browse(cr, uid, uid)
- user_name = user.name
- email = user.email
-
- msg = {'contract_name': valid_contract.name,
- 'tb': tb,
- 'explanations': explanations,
- 'remarks': remarks,
- 'origin': origin,
- 'dbname': cr.dbname,
- 'dbuuid': dbuuid,
- 'db_create_date': db_create_date,
- 'issue_name': issue_name,
- 'email': email,
- 'user_name': user_name,
- }
-
-
- add_arg = {"timeout":30} if sys.version_info >= (2,6) else {}
- uo = urllib2.urlopen(config.get("publisher_warranty_url"),
- urllib.urlencode({'arg0': msg, "action": "send",}),**add_arg)
- try:
- submit_result = uo.read()
- finally:
- uo.close()
-
- result = safe_eval(submit_result)
-
- crm_case_id = result
-
- if not crm_case_id:
- return False
-
- except osv.except_osv:
- raise
- except Exception:
- _logger.warning("Error sending problem report", exc_info=1)
- raise osv.except_osv(_("Error"),
- _("Error during communication with the publisher warranty server."))
-
- return True
-
- def check_validity(self, cr, uid, ids, context=None):
- """
- Check the validity of a publisher warranty contract. This method just call get_logs() but checks
- some more things, so it can be called from a user interface.
- """
- contract_id = ids[0]
- contract = self.browse(cr, uid, contract_id)
- state = contract.state
- validated = state != "unvalidated"
-
- self.get_logs(cr, uid, ids, cron_mode=False, context=context)
-
- contract = self.browse(cr, uid, contract_id)
- validated2 = contract.state != "unvalidated"
- if not validated and not validated2:
- raise osv.except_osv(_("Contract validation error"),
- _("Please verify your publisher warranty serial number and validity."))
- return True
-
- def get_logs(self, cr, uid, ids, cron_mode=True, context=None):
- """
- Send a message to OpenERP's publisher warranty server to check the validity of
- the contracts, get notifications, etc...
-
- @param cron_mode: If true, catch all exceptions (appropriate for usage in a cron).
- @type cron_mode: boolean
- """
- try:
- try:
- result = get_sys_logs(cr, uid)
- except Exception:
- if cron_mode: # we don't want to see any stack trace in cron
- return False
- _logger.debug("Exception while sending a get logs messages", exc_info=1)
- raise osv.except_osv(_("Error"), _("Error during communication with the publisher warranty server."))
-
- contracts = result["contracts"]
- for contract in contracts:
- c_id = self.search(cr, uid, [("name","=",contract)])[0]
- # for backward compatibility
- if type(contracts[contract]) == tuple:
- self.write(cr, uid, c_id, {
- "date_start": contracts[contract][0],
- "date_stop": contracts[contract][1],
- "state": contracts[contract][2],
- "check_support": False,
- "check_opw": False,
- "kind": "",
- })
- else:
- self.write(cr, uid, c_id, {
- "date_start": contracts[contract]["date_from"],
- "date_stop": contracts[contract]["date_to"],
- "state": contracts[contract]["state"],
- "check_support": contracts[contract]["check_support"],
- "check_opw": contracts[contract]["check_opw"],
- "kind": contracts[contract]["kind"],
- })
-
-
- limit_date = (datetime.datetime.now() - _PREVIOUS_LOG_CHECK).strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT)
-
- # old behavior based on res.log; now on mail.message, that is not necessarily installed
- mail_message_obj = self.pool.get('mail.message')
- if mail_message_obj:
- for message in result["messages"]:
- ids = mail_message_obj.search(cr, uid, [("model", "=", "publisher_warranty.contract"),
- ("create_date", ">=", limit_date),
- ("body_text", "=", message)])
- if ids:
- continue
- mail_message_obj.create(cr, uid, {
- 'name': message,
- 'model': "publisher_warranty.contract",
- 'user_id': False,
- }, context=context)
- except Exception:
- if cron_mode:
- return False # we don't want to see any stack trace in cron
- else:
- raise
- return True
-
- def get_last_user_messages(self, cr, uid, limit, context=None):
- """
- Get the messages to be written in the web client.
- @return: A list of html messages with ids, can be False or empty.
- @rtype: list of tuples(int,string)
- """
- if not self.pool.get('mail.message'):
- return []
- ids = self.pool.get('mail.message').search(cr, uid, [("model", "=", "publisher_warranty.contract")]
- , order="create_date desc", limit=limit, context=context)
- if not ids:
- return []
- messages = [(x.id, x.name) for x in self.pool.get('mail.message').browse(cr, uid, ids, context=context)]
- return messages
-
- _columns = {
- 'name' : fields.char('Serial Key', size=384, required=True, help="Your OpenERP Publisher's Warranty Contract unique key, also called serial number."),
- 'date_start' : fields.date('Starting Date', readonly=True),
- 'date_stop' : fields.date('Ending Date', readonly=True),
- 'state' : fields.selection([('unvalidated', 'Unvalidated'), ('valid', 'Valid')
- , ('terminated', 'Terminated'), ('canceled', 'Canceled')], string="State", readonly=True),
- 'kind' : fields.char('Contract Category', size=64, readonly=True),
- "check_support": fields.boolean("Support Level 1", readonly=True),
- "check_opw": fields.boolean("OPW", readonly=True, help="Checked if this is an OpenERP Publisher's Warranty contract (versus older contract types"),
- }
-
- _defaults = {
- 'state': 'unvalidated',
- }
-
- _sql_constraints = [
- ('uniq_name', 'unique(name)', "That contract is already registered in the system.")
- ]
-
-publisher_warranty_contract()
-
-class maintenance_contract(osv.osv_memory):
- """ Old osv we only keep for compatibility with the clients. """
-
- _name = "maintenance.contract"
-
- def status(self, cr, uid):
- return self.pool.get("publisher_warranty.contract").status(cr, uid)
-
- def send(self, cr, uid, tb, explanations, remarks=None, issue_name=None):
- return self.pool.get("publisher_warranty.contract").send(cr, uid, tb,
- explanations, remarks, issue_name)
-
-maintenance_contract()
-
-class publisher_warranty_contract_wizard(osv.osv_memory):
- """
- A wizard osv to help people entering a publisher warranty contract.
- """
- _name = 'publisher_warranty.contract.wizard'
- _inherit = "ir.wizard.screen"
-
- _columns = {
- 'name' : fields.char('Serial Key', size=256, required=True, help="Your OpenERP Publisher's Warranty Contract unique key, also called serial number."),
- 'state' : fields.selection([("draft", "Draft"), ("finished", "Finished")])
- }
-
- _defaults = {
- "state": "draft",
- }
-
- def action_validate(self, cr, uid, ids, context=None):
- if not ids:
- return False
-
- wiz = self.browse(cr, uid, ids[0])
- c_name = wiz.name
-
- contract_osv = self.pool.get("publisher_warranty.contract")
- contracts = contract_osv.search(cr, uid, [("name","=",c_name)])
- if contracts:
- raise osv.except_osv(_("Error"), _("That contract is already registered in the system."))
-
- contract_id = contract_osv.create(cr, uid, {
- "name": c_name,
- "state": "unvalidated",
- })
-
- contract_osv.check_validity(cr, uid, [contract_id])
-
- self.write(cr, uid, ids, {"state": "finished"})
-
- # We should return an action ?
- return True
-
-
-publisher_warranty_contract_wizard()
-
-def get_sys_logs(cr, uid):
- """
- Utility method to send a publisher warranty get logs messages.
- """
- pool = pooler.get_pool(cr.dbname)
-
- dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
- db_create_date = pool.get('ir.config_parameter').get_param(cr, uid, 'database.create_date')
- limit_date = datetime.datetime.now()
- limit_date = limit_date - datetime.timedelta(15)
- limit_date_str = limit_date.strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT)
- nbr_users = pool.get("res.users").search(cr, uid, [], count=True)
- nbr_active_users = pool.get("res.users").search(cr, uid, [("date", ">=", limit_date_str)], count=True)
- nbr_share_users = False
- nbr_active_share_users = False
- if "share" in pool.get("res.users")._all_columns:
- nbr_share_users = pool.get("res.users").search(cr, uid, [("share", "=", True)], count=True)
- nbr_active_share_users = pool.get("res.users").search(cr, uid, [("share", "=", True), ("date", ">=", limit_date_str)], count=True)
- contractosv = pool.get('publisher_warranty.contract')
- contracts = contractosv.browse(cr, uid, contractosv.search(cr, uid, []))
- user = pool.get("res.users").browse(cr, uid, uid)
- msg = {
- "dbuuid": dbuuid,
- "nbr_users": nbr_users,
- "nbr_active_users": nbr_active_users,
- "nbr_share_users": nbr_share_users,
- "nbr_active_share_users": nbr_active_share_users,
- "dbname": cr.dbname,
- "db_create_date": db_create_date,
- "version": release.version,
- "contracts": [c.name for c in contracts],
- "language": user.lang,
- }
-
- add_arg = {"timeout":30} if sys.version_info >= (2,6) else {}
- arguments = {'arg0': msg, "action": "update",}
- arguments_raw = urllib.urlencode(arguments)
- url = config.get("publisher_warranty_url")
- uo = urllib2.urlopen(url, arguments_raw, **add_arg)
- try:
- submit_result = uo.read()
- finally:
- uo.close()
-
- result = safe_eval(submit_result) if submit_result else {}
-
- return result
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/openerp/addons/base/publisher_warranty/publisher_warranty_data.xml b/openerp/addons/base/publisher_warranty/publisher_warranty_data.xml
deleted file mode 100644
index 68594e5d88f..00000000000
--- a/openerp/addons/base/publisher_warranty/publisher_warranty_data.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
- Update System Logs
-
-
- 1
- weeks
- -1
-
-
-
-
- 1000
-
-
-
-
\ No newline at end of file
diff --git a/openerp/addons/base/publisher_warranty/publisher_warranty_view.xml b/openerp/addons/base/publisher_warranty/publisher_warranty_view.xml
deleted file mode 100644
index f4c196db672..00000000000
--- a/openerp/addons/base/publisher_warranty/publisher_warranty_view.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
- publisher_warranty.contract.tree
- publisher_warranty.contract
-
-
-
-
-
-
-
-
-
-
-
- publisher_warranty.contract.form
- publisher_warranty.contract
-
-
-
-
-
-
- publisher_warranty.contract.search
- publisher_warranty.contract
-
-
-
-
-
-
-
-
-
-
- publisher_warranty.contract.calendar
- publisher_warranty.contract
-
-
-
-
-
-
-
-
-
- Contracts
- ir.actions.act_window
- publisher_warranty.contract
- form
- tree,form,calendar
-
-
-
-
-
-
- publisher_warranty.contract.add.wizard
- publisher_warranty.contract.wizard
-
-
-
-
-
-
- Register a Contract
- ir.actions.act_window
- publisher_warranty.contract.wizard
- form
- form
- new
-
-
-
-
-
diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py
index c1062f2af2c..f6f0d1808e4 100644
--- a/openerp/addons/base/res/res_company.py
+++ b/openerp/addons/base/res/res_company.py
@@ -24,6 +24,7 @@ from osv import fields
import os
import tools
import openerp
+from openerp import SUPERUSER_ID
from tools.translate import _
from tools.safe_eval import safe_eval as eval
@@ -156,7 +157,7 @@ class res_company(osv.osv):
# select only the currently visible companies (according to rules,
# which are probably to allow to see the child companies) even if
# she belongs to some other companies.
- user = self.pool.get('res.users').browse(cr, 1, uid, context=context)
+ user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context)
cmp_ids = list(set([user.company_id.id] + [cmp.id for cmp in user.company_ids]))
return cmp_ids
return super(res_company, self)._search(cr, uid, args, offset=offset, limit=limit, order=order,
diff --git a/openerp/addons/base/res/res_config.xml b/openerp/addons/base/res/res_config.xml
index a705250b989..342aeaa6e0f 100644
--- a/openerp/addons/base/res/res_config.xml
+++ b/openerp/addons/base/res/res_config.xml
@@ -1,6 +1,7 @@
-
+
+
res.config.view.base
res.config
diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py
index ac8ce1758cf..81dedbc992f 100644
--- a/openerp/addons/base/res/res_currency.py
+++ b/openerp/addons/base/res/res_currency.py
@@ -98,7 +98,10 @@ class res_currency(osv.osv):
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
res = super(res_currency, self).read(cr, user, ids, fields, context, load)
currency_rate_obj = self.pool.get('res.currency.rate')
- for r in res:
+ values = res
+ if not isinstance(values, (list)):
+ values = [values]
+ for r in values:
if r.__contains__('rate_ids'):
rates=r['rate_ids']
if rates:
diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py
index 93d12228ebe..e4d6d0341b0 100644
--- a/openerp/addons/base/res/res_partner.py
+++ b/openerp/addons/base/res/res_partner.py
@@ -227,10 +227,20 @@ class res_partner(osv.osv):
def _get_default_image(self, cr, uid, is_company, context=None):
if is_company:
- image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'company_image.png')
+ image = open(openerp.modules.get_module_resource('base', 'static/src/img', 'company_image.png')).read()
else:
- image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'partner_image.png')
- return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
+ from PIL import Image
+ from StringIO import StringIO
+ from random import random
+ color = (int(random() * 192 + 32), int(random() * 192 + 32), int(random() * 192 + 32))
+ face = Image.open(openerp.modules.get_module_resource('base', 'static/src/img', 'avatar.png'))
+ avatar = Image.new('RGB', face.size)
+ avatar.paste(color)
+ avatar.paste(face, mask=face)
+ buffer = StringIO()
+ avatar.save(buffer, 'PNG')
+ image = buffer.getvalue()
+ return tools.image_resize_image_big(image.encode('base64'))
_defaults = {
'active': True,
diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml
index 92a264f0089..a369be28dc9 100644
--- a/openerp/addons/base/res/res_partner_view.xml
+++ b/openerp/addons/base/res/res_partner_view.xml
@@ -95,7 +95,7 @@