diff --git a/bin/addons/base/__openerp__.py b/bin/addons/base/__openerp__.py
index 492c397754d..73b428d805c 100644
--- a/bin/addons/base/__openerp__.py
+++ b/bin/addons/base/__openerp__.py
@@ -76,6 +76,7 @@
'security/ir.model.access.csv',
'res/res_widget_view.xml',
'res/res_widget_data.xml',
+ 'maintenance/maintenance_data.xml',
],
'demo_xml': [
'base_demo.xml',
diff --git a/bin/addons/base/maintenance/maintenance.py b/bin/addons/base/maintenance/maintenance.py
index 0ddf8486e9f..a109dea8021 100644
--- a/bin/addons/base/maintenance/maintenance.py
+++ b/bin/addons/base/maintenance/maintenance.py
@@ -26,6 +26,7 @@ from tools.misc import ustr
from tools.translate import _
import tools.maintenance as tm
import tools.ping
+import datetime
_nlogger = netsvc.Logger()
_CHAN = __name__.split()[-1]
@@ -95,63 +96,69 @@ class maintenance_contract(osv.osv):
res[contract.id] = ("unvalid", "valid")[contract.date_stop >= time.strftime('%Y-%m-%d')]
return res
- def send_ping(self, cr, uid, context={}):
- tools.ping.send_ping(cr, uid)
+ def check_validity(self, cr, uid, ids, context={}):
+ contract_id = ids[0]
+ contract = self.browse(cr, uid, contract_id)
+ valid = contract.state == "valid"
+
+ self.send_ping(cr, uid, ids, cron_mode=False, context=context)
+
+ contract = self.browse(cr, uid, contract_id)
+ valid2 = contract.state == "valid"
+ if not valid and not valid2:
+ raise osv.except_osv("Contract validation error",
+ "Please check your maintenance contract name and validity.")
+
+ def send_ping(self, cr, uid, ids, cron_mode=True, context={}):
+ try:
+ result = tools.ping.send_ping(cr, uid)
+ except:
+ if cron_mode:
+ pass # if ping fails that's bad but we don't want it to interfere
+ else:
+ raise osv.except_osv("Error", "Error during communication with the maintenance server.")
+
+ contracts = result["validity_dates"]
+ for contract in contracts:
+ c_id = self.search(cr, uid, [("name","=",contract)])[0]
+ date_from = contracts[contract][0]
+ date_to = contracts[contract][1]
+ valid = datetime.date.today() >= datetime.datetime.strptime(date_from, '%Y-%m-%d').date() \
+ and datetime.date.today() <= datetime.datetime.strptime(date_to, '%Y-%m-%d').date()
+ self.write(cr, uid, c_id, {
+ "date_start": date_from,
+ "date_stop": date_to,
+ "state": "valid" if valid else "unvalid",
+ })
+
+ if cron_mode:
+ cronosv = self.pool.get("ir.cron")
+ sched_id = cronosv.search(cr, uid, [("name","=","Maintenance Update Scheduler")])[0]
+ cronosv.write(cr, uid, sched_id, {
+ "interval_type": result["interval_type"],
+ "interval_number": result["interval_number"],
+ })
+
+ return True
_columns = {
- 'name' : fields.char('Contract ID', size=384, required=True, readonly=True),
+ 'name' : fields.char('Contract ID', size=384, required=True),
'date_start' : fields.date('Starting Date', readonly=True),
'date_stop' : fields.date('Ending Date', readonly=True),
- 'state' : fields.function(_valid_get, method=True, string="State", type="selection", selection=[('valid', 'Valid'),('unvalid', 'Unvalid')], readonly=True),
- 'kind' : fields.char('Kind', size=64, required=True, readonly=True),
+ 'state' : fields.function(_valid_get, method=True, string="State", type="selection",
+ selection=[('valid', 'Valid'),('unvalid', 'Unvalid')], readonly=True),
+ 'kind' : fields.char('Kind', size=64, readonly=True),
}
+
+ _defaults = {
+ 'state': 'unvalid',
+ }
+
_sql_constraints = [
('uniq_name', 'unique(name)', "Your maintenance contract is already subscribed in the system !")
]
maintenance_contract()
-
-class maintenance_contract_wizard(osv.osv_memory):
- _name = 'maintenance.contract.wizard'
-
- _columns = {
- 'name' : fields.char('Contract ID', size=384, required=True ),
- 'state' : fields.selection([('draft', 'Draft'),('validated', 'Validated'),('unvalidated', 'Unvalidated')], 'States'),
- }
-
- _defaults = {
- 'state' : lambda *a: 'draft',
- }
-
- def action_validate(self, cr, uid, ids, context=None):
- raise Exception("hahaha, this is a dirty exception to make you fail")
- if not ids:
- return False
- contract = self.read(cr, uid, ids, ['name'])[0]
-
- try:
- contract_info = tm.remote_contract(cr, uid, contract['name'])
- except tm.RemoteContractException, rce:
- raise osv.except_osv(_('Error'), ustr(rce))
-
- if contract_info['status'] == "valid":
-
- self.pool.get('maintenance.contract').create(
- cr,
- uid, {
- 'name' : contract['name'],
- 'date_start' : contract_info['date_from'],
- 'date_stop' : contract_info['date_to'],
- 'kind' : contract_info['kind'],
- }
- )
-
- return self.write(cr, uid, ids,
- {'state' : ['validated' if contract_info['status'] == "valid" else 'unvalidated'] },
- context=context)
-
-maintenance_contract_wizard()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/bin/addons/base/maintenance/maintenance_data.xml b/bin/addons/base/maintenance/maintenance_data.xml
new file mode 100644
index 00000000000..981a806bf0e
--- /dev/null
+++ b/bin/addons/base/maintenance/maintenance_data.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Maintenance Update Scheduler
+
+
+ 1
+ weeks
+ -1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bin/addons/base/maintenance/maintenance_security.xml b/bin/addons/base/maintenance/maintenance_security.xml
deleted file mode 100644
index 04b7d6dc2cf..00000000000
--- a/bin/addons/base/maintenance/maintenance_security.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/bin/addons/base/maintenance/maintenance_view.xml b/bin/addons/base/maintenance/maintenance_view.xml
index fac95d705a3..5c3adbfc988 100644
--- a/bin/addons/base/maintenance/maintenance_view.xml
+++ b/bin/addons/base/maintenance/maintenance_view.xml
@@ -22,12 +22,25 @@
form
@@ -66,58 +79,10 @@
-
-
-
-
- maintenance.contract.add.wizard
- maintenance.contract.wizard
- form
-
-
-
-
-
-
- Add Maintenance Contract
- ir.actions.act_window
- maintenance.contract.wizard
- form
- form
- new
-
-
-
+
diff --git a/bin/tools/ping.py b/bin/tools/ping.py
index dd45456fd02..6e6da3818b3 100644
--- a/bin/tools/ping.py
+++ b/bin/tools/ping.py
@@ -20,22 +20,35 @@
##############################################################################
import urllib
+from tools.safe_eval import safe_eval
import pooler
import config
+import release
def send_ping(cr, uid):
pool = pooler.get_pool(cr.dbname)
- args = urllib.urlencode({
- 'arg0': "coucou",
- })
- uo = urllib.urlopen(config.config.get("ping_url"), args)
+ dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
+ nbr_users = pool.get("res.users").search(cr, uid, [], count=True)
+ contractosv = pool.get('maintenance.contract')
+ contracts = contractosv.browse(cr, uid, contractosv.search(cr, uid, []))
+ msg = {
+ "dbuuid": dbuuid,
+ "nbr_users": nbr_users,
+ "dbname": cr.dbname,
+ "version": release.version,
+ "contracts": [c.name for c in contracts],
+ }
+
+ uo = urllib.urlopen(config.config.get("ping_url"), urllib.urlencode({'arg0': msg,}))
try:
submit_result = uo.read()
finally:
uo.close()
- return submit_result
+ result = safe_eval(submit_result)
+
+ return result