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
- - - - - - + + + + + + + + + + + + + +