[IMP] wip
bzr revid: nicolas.vanhoren@openerp.com-20101119081550-0ftgvc1vurkumejl
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="ir_cron_ping_scheduler" model="ir.cron">
|
||||
<field name="name">Maintenance Update Scheduler</field>
|
||||
<field eval="True" name="active" />
|
||||
<field name="user_id" ref="base.user_root" />
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">weeks</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="True" name="doall" />
|
||||
<field eval="'maintenance.contract'" name="model" />
|
||||
<field eval="'send_ping'" name="function" />
|
||||
<field eval="'(None,)'" name="args" />
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="0">
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -22,12 +22,25 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Maintenance Contract">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
</group>
|
||||
<field name="state" colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<group col="2">
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<field name="state"/>
|
||||
<field name="kind"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<button name="check_validity" string="Validate" type="object"
|
||||
attrs="{'invisible':[('state','in',['valid'])]}"/>
|
||||
<button name="check_validity" string="Refresh Validation Dates" type="object"
|
||||
attrs="{'invisible':[('state','in',['unvalid'])]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -66,58 +79,10 @@
|
||||
<field name="search_view_id" ref="maintenance_contract_search_view"/>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="Maintenance"
|
||||
id="maintenance"
|
||||
<menuitem name="Maintenance" id="maintenance"
|
||||
parent="base.menu_administration" groups="base.group_extended"/>
|
||||
|
||||
<menuitem
|
||||
action="action_maintenance_contract_form"
|
||||
id="menu_maintenance_contract"
|
||||
parent="maintenance"/>
|
||||
|
||||
<record id="maintenance_contract_add_wizard" model="ir.ui.view">
|
||||
<field name="name">maintenance.contract.add.wizard</field>
|
||||
<field name="model">maintenance.contract.wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Add Maintenance Contract" col="2">
|
||||
<group col="1">
|
||||
<separator string="Add Maintenance Contract" />
|
||||
<group states="draft">
|
||||
<field name="name" width="250" />
|
||||
<newline />
|
||||
<field name="state" invisible="1" />
|
||||
</group>
|
||||
<group states="validated">
|
||||
<label string="Maintenance contract added !"/>
|
||||
</group>
|
||||
<group states="unvalidated">
|
||||
<label string="Could you check your contract information ?" />
|
||||
</group>
|
||||
</group>
|
||||
<group colspan="4">
|
||||
<button type="object" string="_Cancel" icon="gtk-cancel" special="cancel" states="draft"/>
|
||||
<button type="object" string="_Validate" icon="gtk-apply" name="action_validate" states="draft"/>
|
||||
<button type="object" string="_Close" icon="gtk-close" special="cancel" states="validated,unvalidated"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_maintenance_contract_add_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Add Maintenance Contract</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">maintenance.contract.wizard</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
action="action_maintenance_contract_add_wizard"
|
||||
id="menu_maintenance_contract_add"
|
||||
parent="maintenance" />
|
||||
<menuitem action="action_maintenance_contract_form" id="menu_maintenance_contract" parent="maintenance"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
+18
-5
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user