Giter Club home page Giter Club logo

odoo-eam's People

Contributors

bgkerion avatar coduper avatar gurneyalex avatar higorvaz avatar mrvdb avatar sysadminmatmoz avatar traviswaelbro avatar wowas18 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

odoo-eam's Issues

mro_pm: suspicious behaviour when planning with only 1 rule and 1 task

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?

[10.0] integrated with accounting?

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 ?

How Maintenance orders are calculated

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:

  • One rule
  • The rule has one task
  • The task meter is 7.0 - 7.0 (I think this means 7 days, but i'm pretty sure that i'm wrong.)
  • The asset meter min_utilization is 1.0
  • The asset meter av_time is 1.0
  • The asset meter last reading record total value is 0

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.

Convert to Task error

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'

Asset PM: installation error on latest EAM and odoo8 linux 64

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

[11.0] Getting Error only by adding the module folder in the addons path !

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

[QUESTION] V8: Asset Warehouse: Accounting Lines

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.

Some warnings in Odoo 10 implementation

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.

mro_pm: find_step logic

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?

Asset Purchase: installation error on latest EAM and odoo8 linux 64

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














Error during installation on Odoo 11 Community Version

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.

V8 MRO

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

Cannot complete the workflow

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

Dummy order on a past date

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

Screenshot_2019-11-22 Maintenance Orders - Odoo

Assets MRP: installation error on latest odoo-linux 64bit

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














Translation pt

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.

This file contains the translation of the following modules:

* mro

msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0\n"

can this plan the maintenance by date?

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

Error when installing MRO on V11.

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.

[wishlist] mro.pm.meter: reset

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 ?

BUG: Cannot consume parts already in stock (procurement order always created)

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:

  1. Create a new mro.order and set a needed part that is already in stock.
  2. Confirm the order (status changes to Waiting Parts - 'released')
  3. Force Parts reservation only tries to move stock in procurement order.

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?

Additional developpment

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,

short dump in creating corrective maintenance order

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'})

Errors v.13

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'

Configure product

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.