diff --git a/bin/addons/base/publisher_warranty/publisher_warranty.py b/bin/addons/base/publisher_warranty/publisher_warranty.py
index 2017abc5208..3ac355ec53c 100644
--- a/bin/addons/base/publisher_warranty/publisher_warranty.py
+++ b/bin/addons/base/publisher_warranty/publisher_warranty.py
@@ -18,11 +18,14 @@
# along with this program. If not, see .
#
##############################################################################
+"""
+Module to handle publisher warranty contracts as well as notifications from
+OpenERP.
+"""
from osv import osv, fields
import logging
from tools.translate import _
-import tools.maintenance as tm
import urllib
from tools.safe_eval import safe_eval
import pooler
@@ -32,9 +35,18 @@ import release
_logger = logging.getLogger(__name__)
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']
@@ -57,18 +69,27 @@ class publisher_warranty_contract(osv.osv):
valid_contract = valid_contracts[0]
try:
- rc = tm.remote_contract(cr, uid, valid_contract.name)
-
origin = 'client'
dbuuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
- crm_case_id = rc.submit_6({
- 'contract_name': valid_contract.name,
+
+ msg = {'contract_name': valid_contract.name,
'tb': tb,
'explanations': explanations,
'remarks': remarks,
'origin': origin,
'dbname': cr.dbname,
- 'dbuuid': dbuuid})
+ 'dbuuid': dbuuid}
+
+ uo = urllib.urlopen(config.get("publisher_warranty_url"),
+ urllib.urlencode({'arg0': msg, "action": "send",}))
+ try:
+ submit_result = uo.read()
+ finally:
+ uo.close()
+
+ result = safe_eval(submit_result)
+
+ crm_case_id = result
if not crm_case_id:
return False
@@ -83,6 +104,10 @@ class publisher_warranty_contract(osv.osv):
return True
def check_validity(self, cr, uid, ids, context={}):
+ """
+ Check the validity of a publisher warranty contract. This method just call send_ping() 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
@@ -97,6 +122,13 @@ class publisher_warranty_contract(osv.osv):
_("Please check your publisher warranty contract name and validity."))
def send_ping(self, cr, uid, ids, cron_mode=True, context={}):
+ """
+ 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 = send_ping(cr, uid)
@@ -124,6 +156,14 @@ class publisher_warranty_contract(osv.osv):
"interval_type": result["interval_type"],
"interval_number": result["interval_number"],
})
+
+ self.pool.get('res.log').create(cr, uid,
+ {
+ 'name': result["message"],
+ 'res_model': "Maintenance Notifications",
+ },
+ context=context
+ )
except:
_logger.debug("Exception while interpreting the result of a ping", exc_info=1)
if cron_mode:
@@ -166,10 +206,18 @@ class maintenance_contract(osv.osv_memory):
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'
_columns = {
'name' : fields.char('Contract Name', size=256, required=True ),
+ 'state' : fields.selection([("draft", "Draft"), ("finished", "Finished")])
+ }
+
+ _defaults = {
+ "state": "draft",
}
def action_validate(self, cr, uid, ids, context=None):
@@ -191,11 +239,17 @@ class publisher_warranty_contract_wizard(osv.osv_memory):
contract_osv.check_validity(cr, uid, [contract_id])
- return {'type': 'ir.actions.act_window_close'}
+ self.write(cr, uid, ids, {"state": "finished"})
+
+ return True
+
publisher_warranty_contract_wizard()
def send_ping(cr, uid):
+ """
+ Utility method to send a publisher warranty ping.
+ """
pool = pooler.get_pool(cr.dbname)
dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
diff --git a/bin/addons/base/publisher_warranty/publisher_warranty_view.xml b/bin/addons/base/publisher_warranty/publisher_warranty_view.xml
index 9263903d5c6..69f27eef61a 100644
--- a/bin/addons/base/publisher_warranty/publisher_warranty_view.xml
+++ b/bin/addons/base/publisher_warranty/publisher_warranty_view.xml
@@ -91,14 +91,23 @@
form
@@ -116,6 +125,19 @@
action="action_publisher_warranty_contract_add_wizard"
id="menu_publisher_warranty_contract_add"
parent="publisher_warranty" />
+
+
+ Notifications
+ res.log
+ form
+ {'search_default_my': 1}
+ [('res_model','=','Maintenance Notifications')]
+
+
+
diff --git a/bin/tools/maintenance.py b/bin/tools/maintenance.py
deleted file mode 100644
index f8f8e9f11d3..00000000000
--- a/bin/tools/maintenance.py
+++ /dev/null
@@ -1,93 +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 xmlrpclib
-import config
-import pooler
-
-
-class RemoteConnectionException(Exception):
- pass
-
-class RemoteConnection:
-
- def __init__(self, server, db, login, password):
- self._server = server.strip()
- if not self._server.endswith("/"):
- self._server += "/"
- self._db = db
- self._login = login
- self._password = password
-
- rpc = xmlrpclib.ServerProxy(self._server + "xmlrpc/common")
- try:
- self._userid = rpc.login(self._db, self._login, self._password)
- except:
- raise RemoteConnectionException("Unable to contact the remote server")
-
- if not self._userid:
- raise RemoteConnectionException("Unable to contact the remote server")
-
- self._rpc = xmlrpclib.ServerProxy(self._server + "xmlrpc/object")
-
- def get_remote_object(self, object):
- return RemoteObject(self, object)
-
-class RemoteObject(object):
-
- def __init__(self, connection, object):
- self._c = connection
- self._object = object
-
- def __getattr__(self, fun):
- def remote_call(*args, **kwargs):
- return self._c._rpc.execute(self._c._db, self._c._userid,
- self._c._password, self._object, fun, *args, **kwargs)
- return remote_call
-
- def __getitem__(self, item):
- return getattr(self, item)
-
-class RemoteContractException(Exception): pass
-
-def remote_contract(cr, uid, contract_id):
- pool = pooler.get_pool(cr.dbname)
- dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
-
- try:
- ro = RemoteConnection(config.config.get("maintenance_server"), config.config.get("maintenance_db"),
- config.config.get("maintenance_login"), config.config.get("maintenance_password")
- ).get_remote_object('maintenance.maintenance')
- except:
- raise RemoteContractException("Unable to contact the migration server")
-
- info = ro.check_contract_6({
- "contract_name": contract_id,
- "dbuuid": dbuuid,
- "dbname": cr.dbname})
- for n in info:
- setattr(ro, n, info[n])
-
- return ro
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-