codup / odoo-eam Goto Github PK
View Code? Open in Web Editor NEWEnterprise Asset Management for Odoo
Home Page: http://codup.com/en/applications/maintenance.html
Enterprise Asset Management for Odoo
Home Page: http://codup.com/en/applications/maintenance.html
Nothing occurs when I press "Save" or "Attach"
¿Any documentation?
Thank you.
Hi, first of all, thank you for the module, but in my opinion a bit complex (for me).
I'm trying to "decrypt" the method replan_pm to know how the maintenance orders are calculated.
Because I would want to know how to control the maintenance order scheduled day and hour.
Is there any tutorial or explanation? Here is, for now, what i think each variable means.
Context:
For now i don't know how to change the meter total value, once i've changed the last reading value.
def replan_pm(self, cr, uid, context=None):
rule_obj = self.pool.get('mro.pm.rule')
meter_obj = self.pool.get('mro.pm.meter')
ids = rule_obj.search(cr, uid, [])
for rule in rule_obj.browse(cr,uid,ids,context=context):
tasks = [x for x in rule.pm_rules_line_ids]
if rule.meter_id.state != 'reading' or not len(tasks):
continue
tasks.sort(lambda y,x: cmp(x.meter_interval_id.interval_max, y.meter_interval_id.interval_max))
# A day in seconds
K = 3600.0*24
hf = len(tasks)-1
lf = 0
task_ids = []
# Meter last reading total value
Ci = []
# Meter min interval in seconds
Imin = []
# Meter max interval in seconds
Imax = []
Si = []
Dmin = []
Dmax = []
Dopt = []
for task in tasks:
task_ids.append(task.task_id.id)
order_ids = self.search(cr, uid,
[('asset_id', '=', rule.asset_id.id),
('state', 'not in', ('draft','cancel')),
('maintenance_type', '=', 'pm'),
('task_id', 'in', task_ids)],
limit=1, order='date_execution desc')
if len(order_ids) > 0:
date = self.browse(cr, uid, order_ids[0], context=context).date_execution
Ci.append(K*meter_obj.get_reading(cr, uid, rule.meter_id.id, date))
else: Ci.append(0)
Imin.append(K*task.meter_interval_id.interval_min)
Imax.append(K*task.meter_interval_id.interval_max)
Si.append(0)
Dmin.append(0)
Dmax.append(0)
Dopt.append(0)
# Meter last reading total value in seconds
C = K*rule.meter_id.total_value
# Meter last reading date in seconds
Dc = 1.0*calendar.timegm(time.strptime(rule.meter_id.date, "%Y-%m-%d"))
# Meter utilization (per day)
N = rule.meter_id.utilization
# Months (horizon) in seconds
Hp = 3600.0*24*31*rule.horizon
# Current date in seconds
Dn = 1.0*calendar.timegm(time.strptime(time.strftime('%Y-%m-%d',time.gmtime()),"%Y-%m-%d"))
# Meter interval steps
Si[lf] = Imin[lf]
for i in range(hf):
Si[i+1] = self.find_step(Ci[i+1], Ci[i] + Si[i], Imin[i+1], Imax[i+1])
for i in range(hf+1):
# Meter_Last_Reading_Date_In_Seconds + (Meter_Min_Interval - Meter_Last_Reading_Total_Value_In_Seconds + Maintenance_Last_Order_Execution_Date_In_Seconds) / Meter_Utilization
# Meter last reading date in seconds (2017-01-04 00:00:00)
Dmin[i] = Dc + (Imin[i] - C + Ci[i])/N
Dmax[i] = Dmin[i] + (Imax[i] - Imin[i])/N
Dopt[i] = Dc + (Si[i] - C + Ci[i])/N
# Dp = Meter_Last_Reading_Date_In_Seconds - Meter_Last_Reading_Total_Value_In_Seconds
Dp = Dopt[hf]
for i in range(hf):
if Dp > Dmax[i]: Dp = Dmax[i]
# Dp = Dn = Current Date in seconds
if Dp<Dn: Dp=Dn
# Cp = Meter_Last_Reading_Total_Value_In_Seconds + (Current_Date_In_Seconds - Meter_Last_Reading_Date_In_Seconds) / Meter_Utilization
Cp = C + (Dp - Dc)*N
delta = Cp - Ci[hf]
order_ids = self.search(cr, uid,
[('asset_id', '=', rule.asset_id.id),
('state', '=', 'draft'),
('maintenance_type', '=', 'pm'),
('task_id', 'in', task_ids)],
order='date_execution')
for order in self.browse(cr, uid, order_ids, context=context):
Tp = time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime(Dp))
values = {
'date_planned':Tp,
'date_scheduled':Tp,
'date_execution':Tp,
'origin': rule.name,
'state': 'draft',
'maintenance_type': 'pm',
'asset_id': rule.asset_id.id,
}
task = tasks[hf].task_id
Ci[hf] = Cp
Si[hf] = self.find_step(Ci[hf], Ci[hf-1] + Si[hf-1], Imin[hf], Imax[hf])
for i in range(hf):
if Dmin[i] < Dp + (Si[hf]-Imax[i]+Imin[i])/N:
task = tasks[i].task_id
for j in range(hf-i):
Ci[i+j] = Cp
for j in range(hf-i):
Si[i+j] = self.find_step(Ci[i+j], Ci[i+j-1] + Si[i+j-1], Imin[i+j], Imax[i+j])
Dmin[i+j] = Dp + Imin[i+j]/N
Dmax[i+j] = Dp + Imax[i+j]/N
Dopt[i+j] = Dp + Si[i+j]/N
break
Si[hf] = self.find_step(Ci[hf], Ci[hf-1] + Si[hf-1], Imin[hf], Imax[hf])
Dmin[hf] = Dp + Imin[hf]/N
Dmax[hf] = Dp + Imax[hf]/N
Dopt[hf] = Dp + Si[hf]/N
values['task_id'] = task.id
values['description'] = task.name
values['tools_description'] = task.tools_description
values['labor_description'] = task.labor_description
values['operations_description'] = task.operations_description
values['documentation_description'] = task.documentation_description
parts_lines = [[2,line.id] for line in order.parts_lines]
for line in task.parts_lines:
parts_lines.append([0,0,{
'name': line.name,
'parts_id': line.parts_id.id,
'parts_qty': line.parts_qty,
'parts_uom': line.parts_uom.id,
}])
values['parts_lines'] = parts_lines
self.write(cr, uid, [order.id], values)
Dp = Dopt[hf]
for i in range(hf):
if Dp > Dmax[i]: Dp = Dmax[i]
Co = Cp
Cp = C + (Dp - Dc)*N
delta = Cp - Co
# Dp -> Dhp (order range)
Dhp = Dn + Hp
while Dp < Dhp:
Tp = time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime(Dp))
values = {
'date_planned':Tp,
'date_scheduled':Tp, # time.strftime('%Y-%m-%d 10:00:00',time.gmtime(Dp))
# TODO: possible modification in case of desired specific maintenance scheduled hour
'date_execution':Tp,
'origin': rule.name,
'state': 'draft',
'maintenance_type': 'pm',
'asset_id': rule.asset_id.id,
}
task = tasks[hf].task_id
Ci[hf] = Cp
Si[hf] = self.find_step(Ci[hf], Ci[hf-1] + Si[hf-1], Imin[hf], Imax[hf])
for i in range(hf):
if Dmin[i] < Dp + (Si[hf]-Imax[i]+Imin[i])/N:
task = tasks[i].task_id
for j in range(hf-i):
Ci[i+j] = Cp
for j in range(hf-i):
Si[i+j] = self.find_step(Ci[i+j], Ci[i+j-1] + Si[i+j-1], Imin[i+j], Imax[i+j])
Dmin[i+j] = Dp + Imin[i+j]/N
Dmax[i+j] = Dp + Imax[i+j]/N
Dopt[i+j] = Dp + Si[i+j]/N
break
Si[hf] = self.find_step(Ci[hf], Ci[hf-1] + Si[hf-1], Imin[hf], Imax[hf])
Dmin[hf] = Dp + Imin[hf]/N
Dmax[hf] = Dp + Imax[hf]/N
Dopt[hf] = Dp + Si[hf]/N
values['task_id'] = task.id
values['description'] = task.name
values['tools_description'] = task.tools_description
values['labor_description'] = task.labor_description
values['operations_description'] = task.operations_description
values['documentation_description'] = task.documentation_description
parts_lines = []
for line in task.parts_lines:
parts_lines.append([0,0,{
'name': line.name,
'parts_id': line.parts_id.id,
'parts_qty': line.parts_qty,
'parts_uom': line.parts_uom.id,
}])
values['parts_lines'] = parts_lines
self.create(cr, uid, values)
Dp = Dopt[hf]
for i in range(hf):
if Dp > Dmax[i]: Dp = Dmax[i]
Co = Cp
Cp = C + (Dp - Dc)*N
delta = Cp - Co
return True
Kind regards.
Field mro.request.execution_date: parameter 'select' is no longer supported; use 'index' instead.
Field mro.request.requested_date: parameter 'select' is no longer supported; use 'index' instead.
Field mro.task.parts.line.parts_qty: parameter 'digits_compute' is no longer supported; use 'digits' instead.
Field mro.task.parts.line.task_id: parameter 'select' is no longer supported; use 'index' instead.
Field mro.order.parts.line.maintenance_id: parameter 'select' is no longer supported; use 'index' instead.
Field mro.order.parts.line.parts_qty: parameter 'digits_compute' is no longer supported; use 'digits' instead.
Field mro.order.date_planned: parameter 'select' is no longer supported; use 'index' instead.
Field mro.order.date_scheduled: parameter 'select' is no longer supported; use 'index' instead.
Create Maintenance Order
Added Planned Parts (the parts I have on the Inventory)
Save Maintenance Order
Confirm Maintenance
After that cannot continue the wf even if [Force Reservation]
Please let me know if exists some wiki...
Higor
eg,
we have a plane, the wings of plane must clean every 7 days.
and the head of the plane must clean every 10 days.
and we need the alerts and auto generate the "clean order" schedule.
tks
While installing this https://apps.odoo.com/apps/modules/11.0/mro/ application on Odoo 11, I am getting the following error
Error:
Odoo Server Error
Traceback (most recent call last):
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 650, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\tools\pycompat.py", line 87, in reraise
raise value
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 692, in dispatch
result = self._call_function(**self.params)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 342, in _call_function
return checked_call(self.db, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\service\model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 335, in checked_call
result = self.endpoint(*a, **kw)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 936, in call
return self.method(*args, **kw)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 515, in response_wrap
response = f(*args, **kw)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\web\controllers\main.py", line 935, in call_button
action = self._call_kw(model, method, args, {})
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\web\controllers\main.py", line 923, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\api.py", line 689, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\api.py", line 680, in call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\base\module\module.py", line 71, in check_and_log
return method(self, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\base\module\module.py", line 448, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\base\module\module.py", line 541, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\modules\registry.py", line 85, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\modules\loading.py", line 343, in load_modules
loaded_modules, update_module)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\modules\loading.py", line 242, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\modules\loading.py", line 130, in load_module_graph
model_names = registry.load(cr, package)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\modules\registry.py", line 252, in load
model = cls._build_model(self, cr)
File "C:\Program Files (x86)\Odoo 11.0\server\odoo\models.py", line 447, in _build_model
raise TypeError("Model %r inherits from non-existing model %r." % (name, parent))
TypeError: Model 'mro.order' inherits from non-existing model 'ir.needaction_mixin'.
I have copied these folders to addons folder.
Hi,
This is great work!
Would you consider porting this modules to the OCA, so many other people can benefit from and contribute to? This can get a lot more attention
The installation didn't pass and issued this error:
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 500, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 517, in dispatch
result = self._call_function(*_self.params)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 283, in _call_function
return checked_call(self.db, *args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/service/model.py", line 113, in wrapper
return f(dbname, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 280, in checked_call
return self.endpoint(_a, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 733, in call
return self.method(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 376, in response_wrap
response = f(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 450, in button_immediate_install
return self._button_immediate_function(cr, uid, ids, self.button_install, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 498, in _button_immediate_function
registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/registry.py", line 324, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 358, in load_modules
loaded_modules, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 263, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 182, in load_module_graph
_load_data(cr, module_name, idref, mode, kind='data')
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 118, in _load_data
tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 899, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 985, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 851, in parse
self._tags[rec.tag](self.cr, rec, n, mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 765, in _tag_record
id = self.pool['ir.model.data']._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/ir/ir_model.py", line 1052, in _update
res_id = model_obj.create(cr, uid, values, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/ir/ir_ui_view.py", line 264, in create
context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 332, in old_api
result = method(recs, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 3960, in create
record = self.browse(self._create(old_vals))
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 235, in wrapper
return new_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 464, in new_api
result = method(self._model, cr, uid, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 4151, in _create
recs._validate_fields(vals)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 235, in wrapper
return new_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 1295, in _validate_fields
raise ValidationError('\n'.join(errors))
ParseError: "ValidateError
Field(s) arch
failed against a constraint: Invalid view definition
Error details:
Field asset_ids
does not exist
Error context:
View asset.mrp.bom.form
[view_id: 2240, xml_id: n/a, model: mrp.bom, parent_id: 1256]" while parsing /media/akram/Data/projects/servers/odoo/source/addons/asset_mrp/mrp_view.xml:24, near
asset.mrp.bom.form
mrp.bom
When creating an mro.order and set a part, you cannot consume a part that is in stock.
action_confirm ALWAYS creates a procurement order without checking stock available.
How to reproduce:
Consuming available parts is essential in a business where several parts are in stock for hot swapping, or even consumables.
Are there any plans to attend to this issue or is development halted at this point?
I translated most of EAM but some fields and lables are not translatable.
At the module mro in i18n at the archive pt.po there is a error: an initial "av" before the comment.
av# Translation of Odoo Server.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0\n"
Odoo Server Error
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 643, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 680, in dispatch
result = self._call_function(*_self.params)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 316, in _call_function
return checked_call(self.db, *args, *_kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper
return f(dbname, _args, *_kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 309, in checked_call
result = self.endpoint(_a, *_kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 959, in call
return self.method(_args, *_kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 509, in response_wrap
response = f(_args, *_kw)
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 896, in call_button
action = self._call_kw(model, method, args, {})
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 884, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, _args, *_kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 250, in wrapper
return old_api(self, _args, *_kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/addons/mro/wizard/convert_order.py", line 43, in convert_order
'category_id': order.asset_id.category_id.id if order.asset_id.category_id else 1,
AttributeError: 'asset.asset' object has no attribute 'category_id'
manifest.py from this module states dependency on web_maps module, while the actual name is web_map
could you add a help for the two fields date_planned
and date_scheduled
the names have very close semantics for me and I totally don't understand what they are used for.
With latest clone for v10.0 install mro
module gives this traceback
https://gist.github.com/ovnicraft/4a95be7c5a53287e2d81be854c7e339b
The installation did not pass and issues and error:
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 500, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 517, in dispatch
result = self._call_function(*_self.params)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 283, in _call_function
return checked_call(self.db, *args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/service/model.py", line 113, in wrapper
return f(dbname, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 280, in checked_call
return self.endpoint(_a, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 733, in call
return self.method(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 376, in response_wrap
response = f(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 537, in button_immediate_upgrade
return self._button_immediate_function(cr, uid, ids, self.button_upgrade, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 498, in _button_immediate_function
registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/registry.py", line 324, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 358, in load_modules
loaded_modules, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 263, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 182, in load_module_graph
_load_data(cr, module_name, idref, mode, kind='data')
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 118, in _load_data
tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 899, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 985, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 851, in parse
self._tags[rec.tag](self.cr, rec, n, mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 765, in _tag_record
id = self.pool['ir.model.data']._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/ir/ir_model.py", line 1052, in _update
res_id = model_obj.create(cr, uid, values, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/ir/ir_ui_view.py", line 264, in create
context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 332, in old_api
result = method(recs, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 3960, in create
record = self.browse(self._create(old_vals))
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 235, in wrapper
return new_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 464, in new_api
result = method(self._model, cr, uid, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 4151, in _create
recs._validate_fields(vals)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 235, in wrapper
return new_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/models.py", line 1295, in _validate_fields
raise ValidationError('\n'.join(errors))
ParseError: "ValidateError
Field(s) arch
failed against a constraint: Invalid view definition
Error details:
Field asset_ids
does not exist
Error context:
View asset.mrp.bom.form
[view_id: 2242, xml_id: n/a, model: mrp.bom, parent_id: 1256]" while parsing /media/akram/Data/projects/servers/odoo/source/addons/asset_mrp/mrp_view.xml:24, near
asset.mrp.bom.form
mrp.bom
when creating a corrective maintenance order without any reference to a maintenance requent a shot dump's occurred in evaluating task field:
the system log is reported below:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 675, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 331, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 324, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 933, in call
return self.method(*args, **kw)
File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 504, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 885, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 877, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 679, in call_kw
return call_kw_model(method, model, args, kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 664, in call_kw_model
result = method(recs, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 1600, in name_search
return self._name_search(name, args, operator, limit=limit)
File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 1613, in _name_search
ids = self._search(args, limit=limit, access_rights_uid=access_rights_uid)
File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4224, in _search
query = self._where_calc(args)
File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4025, in _where_calc
where_clause, where_params = e.to_sql()
File "/usr/lib/python2.7/dist-packages/odoo/osv/expression.py", line 1290, in to_sql
q, p = self.__leaf_to_sql(leaf)
File "/usr/lib/python2.7/dist-packages/odoo/osv/expression.py", line 1215, in __leaf_to_sql
raise ValueError("Invalid domain term %r" % (leaf,))
ValueError: Invalid domain term (u'category_id', u'in', {u'name': u'222'})
I would like to define a meter such a 'time since maintenance' and have this to schedule maintenance every year for some equipment and every 6 month for other equipment, so ideally I'd like this meter to be reset to 0 after each scheduled maintenance. Currently, the only way I found is to have a reading type set to 'cng' and to input a negative delta equal to the current total value after the maintenance, but this is not quite satisfactory, and having a reset to 0 button would be nice.
Or am I missing something ?
It shows an error when I try to register a Maintenance Request
And another error is available parts are not shown on maintenance orders even though they exist in inventory
Error - Register Maintenance Request (SEND REQUEST):
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo13/odoo/http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo13/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo/odoo13/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/opt/odoo/odoo13/odoo/http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo13/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo13/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo13/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo/odoo13/odoo/http.py", line 915, in call
return self.method(*args, **kw)
File "/opt/odoo/odoo13/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/odoo13/addons/web/controllers/main.py", line 1326, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/opt/odoo/odoo13/addons/web/controllers/main.py", line 1314, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo13/odoo/api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo13/odoo/api.py", line 374, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/opt/odoo/odoo13-custom-addons/mro/mro.py", line 337, in action_send
request.write(value)
File "/opt/odoo/odoo13/addons/mail/models/mail_thread.py", line 329, in write
tracking = track_self.with_context(clean_context(self._context)).message_track(tracked_fields, initial_values)
File "/opt/odoo/odoo13/addons/mail/models/mail_thread.py", line 656, in message_track
if not subtype.exists():
AttributeError: 'str' object has no attribute 'exists'
When running the planner with only one task, I think the code does not behave as it should, and this could indicate a possible bug in the underlying logic. One suspicious line is https://github.com/codup/odoo-eam/blob/master/mro_pm/mro.py#L192
in this line, when only one task is present, hf
is 0
, the code seems to be relying on the fact that Ci[0] and Ci[-1] are both valid indexes, in this case referring to the same value in the array, whereas when you get more tasks, two different values are used.
Is this intended?
Proactive Maintenance installation did not pass and issues this error:
Traceback (most recent call last):
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 500, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 517, in dispatch
result = self._call_function(*_self.params)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 283, in _call_function
return checked_call(self.db, *args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/service/model.py", line 113, in wrapper
return f(dbname, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 280, in checked_call
return self.endpoint(_a, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 733, in call
return self.method(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/openerp/http.py", line 376, in response_wrap
response = f(_args, *_kw)
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/media/akram/Data/projects/servers/odoo/source/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 450, in button_immediate_install
return self._button_immediate_function(cr, uid, ids, self.button_install, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, _args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/openerp/addons/base/module/module.py", line 498, in _button_immediate_function
registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/registry.py", line 324, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 358, in load_modules
loaded_modules, update_module)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 263, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 185, in load_module_graph
_load_data(cr, module_name, idref, mode, kind='demo')
File "/media/akram/Data/projects/servers/odoo/source/openerp/modules/loading.py", line 118, in _load_data
tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 899, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 985, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 851, in parse
self._tags[rec.tag](self.cr, rec, n, mode=mode)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 379, in _tag_function
_eval_xml(self,rec, self.pool, cr, uid, self.idref, context=context)
File "/media/akram/Data/projects/servers/odoo/source/openerp/tools/convert.py", line 230, in _eval_xml
res = getattr(model, method)(cr, uid, _args)
File "/media/akram/Data/projects/servers/odoo/source/openerp/api.py", line 237, in wrapper
return old_api(self, *args, *_kwargs)
File "/media/akram/Data/projects/servers/odoo/source/addons/mro_pm/mro.py", line 64, in replan_pm
tasks.sort(lambda y,x: cmp(x.meter_interval_id.interval_max, y.meter_interval_id.interval_max))
ParseError: "'mro.pm.rule.line' object has no attribute 'sort'" while parsing /media/akram/Data/projects/servers/odoo/source/addons/mro_pm/mro_pm_demo.xml:132, near
I'm confused about the find_step
implementation in mro.order (from mrp_pm).
The return value is clearly in the interval[tmin, tmax] but I don't understand the underlying logic, especially the function is not monotonous as the [start, end] interval increases.
Could you consider adding a docstring explaining the logic?
Hello,
The strategy you suggest ( to schedule orders with a date different than the current one ) fails when setting an order with a date previous than the current one. You can see this behaviour in the image attached.
It's ok if the algorithm does not create all the past orders, I'm fine with that, but I would like then that the order being created keep the step range. It is being created on the current date instead.
Could you check?
Thanks
Getting Strange error while just adding the addons directory in the odoo config file:
2017-12-19 06:08:57,789 20379 INFO ? odoo: database: default@default:default
2017-12-19 06:08:57,800 20379 INFO ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:9001
2017-12-19 06:08:57,912 20379 INFO ? odoo.addons.base.ir.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
2017-12-19 06:09:26,589 20379 INFO ? werkzeug: 127.0.0.1 - - [19/Dec/2017 06:09:26] "GET / HTTP/1.1" 500 -
2017-12-19 06:09:26,591 20379 ERROR ? werkzeug: Error on request:
Traceback (most recent call last):
File "/home/sunny/.local/lib/python3.5/site-packages/werkzeug/serving.py", line 267, in run_wsgi
execute(self.server.app)
File "/home/sunny/.local/lib/python3.5/site-packages/werkzeug/serving.py", line 255, in execute
application_iter = app(environ, start_response)
File "/home/sunny/Work/odoo/odoo11/odoo/odoo/service/server.py", line 251, in app
return self.app(e, s)
File "/home/sunny/Work/odoo/odoo11/odoo/odoo/service/wsgi_server.py", line 166, in application
return application_unproxied(environ, start_response)
File "/home/sunny/Work/odoo/odoo11/odoo/odoo/service/wsgi_server.py", line 154, in application_unproxied
result = handler(environ, start_response)
File "/home/sunny/Work/odoo/odoo11/odoo/odoo/http.py", line 1297, in call
self.load_addons()
File "/home/sunny/Work/odoo/odoo11/odoo/odoo/http.py", line 1313, in load_addons
manifest = ast.literal_eval(pycompat.to_native(manifest_data))
File "/usr/lib/python3.5/ast.py", line 46, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.5/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "", line 1
# -- coding: utf-8 --
^
SyntaxError: invalid character in identifier
Please link to account move and journal entry, IMHO it should be no 1 priority otherwise these good modules in this repo that aim to fill the existing gap in odoo, become less useful.
Also please consider: most part used in maintenance will be expenses type, some may adjusted to increase asset value (if the part is significantly big in value and upgrade the asset, let the user check) So please consider to reduce the inventory valuation versus increase the expenses. With this automated journal entry the double entry can be avoided, avoid being forget to journal the expenses and the stock value, and the real time financial condition can be maintain.
Regards,
Bun Hin
Erro:
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo/http.py", line 650, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/opt/odoo/odoo/http.py", line 692, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo/http.py", line 342, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo/service/model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo/http.py", line 335, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo/odoo/http.py", line 936, in call
return self.method(*args, **kw)
File "/opt/odoo/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 938, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/odoo/addons/web/controllers/main.py", line 926, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo/api.py", line 689, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo/api.py", line 680, in call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "/opt/odoo/odoo/addons/base/module/module.py", line 71, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo/odoo/addons/base/module/module.py", line 449, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/opt/odoo/odoo/addons/base/module/module.py", line 542, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "/opt/odoo/odoo/modules/registry.py", line 85, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/opt/odoo/odoo/modules/loading.py", line 380, in load_modules
loaded_modules, update_module, models_to_check)
File "/opt/odoo/odoo/modules/loading.py", line 274, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/opt/odoo/odoo/modules/loading.py", line 192, in load_module_graph
module.with_context(overwrite=overwrite)._update_translations()
File "/opt/odoo/odoo/addons/base/module/module.py", line 866, in _update_translations
self.env['ir.translation'].load_module_terms(mod_names, filter_lang)
File "/opt/odoo/odoo/addons/base/ir/ir_translation.py", line 730, in load_module_terms
tools.trans_load(self._cr, base_trans_file, lang, verbose=False, module_name=module_name, context=context)
File "/opt/odoo/odoo/tools/translate.py", line 1007, in trans_load
result = trans_load_data(cr, fileobj, fileformat, lang, verbose=verbose, module_name=module_name, context=context)
File "/opt/odoo/odoo/tools/translate.py", line 1125, in trans_load_data
for row in reader:
File "/opt/odoo/odoo/tools/translate.py", line 557, in next
raise Exception("malformed file: bad line: %s" % line)
Exception: malformed file: bad line: av# Translation of Odoo Server.
My question here is, if this repo works with asset core from odoo, for management in production looks ok, but still require accounting integration, works with it ?
Hi codup.
In v8 accounting moves for realtime stock evaluation are only generated for "non-interal" stock locations.
You introduce a new type "Asset Location".
What should happen accounting-wise if I consume parts(with realtime evaluation) from an Internal Stock Location (in the process of MRO maintenance) to the Asset Location of the Asset I repair?
Basically we need to track expenses for the spareparts (from InternalStock) used for MRO maintenance of an Asset in the AssetAccount that is set in Accounting/Assets.
Will your module generate such accounting moves?
As per now I dont see them generated so I dont know if it is my faulty config or the module is not designed to do that.
Many thanks and спасибо for your great work.
Hi, I installed MRO on odoo 10.
I used Request and order without problem.
I don't understand hoow add the product to Order Maintenance.
If I add a product, this product is always in "waiting for availability".
How do I configure the product ?
It is just a part of product, but it is not enough.
Hi,
We tested your module and it works fine.
We have some additional features requirements, and would be open to sponsor those.
How can I get in touch with you with full specs?
Kind regards,
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.