[IMP] wip

bzr revid: nicolas.vanhoren@openerp.com-20101119081550-0ftgvc1vurkumejl
This commit is contained in:
nvi-openerp
2010-11-19 09:15:50 +01:00
parent 5b2a35641c
commit 16e9bde2c8
6 changed files with 113 additions and 114 deletions
+1
View File
@@ -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',
+54 -47
View File
@@ -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
View File
@@ -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