My schedule action does not work Odoo 13 why?

1.6k views Asked by At

I don't understand :

scheduler_demo/data/sheduler_data.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
  <data noupdate="1">
    <record id="ir_cron_scheduler_demo_action" model="ir.cron">
      <field name="name">Demo scheduler</field>
      <field name="model_id" ref="model_scheduler_demo"></field>
      <field name="state">code</field>
      <field name="code">model.process_demo_scheduler_queue()</field>
      <field name="active" eval="True"></field>
      <field name="user_id" ref="base.user_root"></field>
      <field name="interval_number">1</field>
      <field name="interval_type">days</field>
      <field name="numbercall">-1</field>
    </record>
  </data>
</odoo>

scheduler_demo/models/init.py :

from . import scheduler_demo

scheduler_demo/models/sheduler_demo.py :

# -*- coding: utf-8 -*-
from odoo import models, fields, api


class SchedulerDemo(models.Model):
    _name = 'scheduler.demo'

    name = fields.Char(required=True)
    number_of_updates = fields.Integer('Number of updates')

    @api.model
    def _process_demo_scheduler_queue(self):
        # Contains all records for the model scheduler.demo
        scheduler_demo_records = self.env['scheduler.demo'].search([])

        # Loop over the records one by one
        for demo_record in scheduler_demo_records:
            number_of_updates = demo_record.number_of_updates + 1

            # Update the record with the new number of updates
            demo_record.write({
                'number_of_updates': number_of_updates
            })

scheduler_demo/security/ir.model.access.csv :

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_scheduler_demo,access_scheduler_demo,model_scheduler_demo,base.group_user,1,1,1,1

scheduler_demo/views/menu.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <menuitem id="scheduler_demo_menu_root"
              name="Scheduler tutorial"
              sequence="98"></menuitem>

    <menuitem id="menu_scheduler_demo"
              name="Scheduler records"
              parent="scheduler_demo_menu_root"
              action="action_scheduler_demo_records"
              sequence="1"></menuitem>

    <record id="action_scheduler_demo_records" model="ir.actions.act_window">
        <field name="name">Scheduler records</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">scheduler.demo</field>
        <field name="search_view_id" ref="scheduler_demo_search_view"></field>
        <field name="view_mode">tree,form</field>
        <field name="help" type="html">
            <p class="o_view_nocontent_smiling_face">
                Create a new scheduler record by clicking on 'Create'.
            </p>
        </field>
    </record>
</odoo>

scheduler_demo/scheduler_demo.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
 <record id="scheduler_demo_tree_view" model="ir.ui.view">
 <field name="name">scheduler.demo.tree</field>
 <field name="model">scheduler.demo</field>
 <field name="arch" type="xml">
 <tree string="Scheduler records">
 <field name="name"></field>
 <field name="number_of_updates"></field>
 </tree>
 </field>
 </record>

 <record id="scheduler_demo_form_view" model="ir.ui.view">
 <field name="name">scheduler.demo.form</field>
 <field name="model">scheduler.demo</field>
 <field name="arch" type="xml">
 <form string="Scheduler record">
 <sheet>
 <group name="main_info">
 <field name="name"></field>
 <field name="number_of_updates"></field>
 <field name="write_date"></field>
 </group>
 </sheet>
 </form>
 </field>
 </record>

 <record id="scheduler_demo_search_view" model="ir.ui.view">
 <field name="name">scheduler.demo.search</field>
 <field name="model">scheduler.demo</field>
 <field name="arch" type="xml">
 <search string="Scheduler records">
 <field name="name"></field>
 <field name="number_of_updates"></field>
 </search>
 </field>
 </record>
</odoo>

scheduler_demo/__init__py :

from . import models

scheduler_demo/manifest.py :

{
    'name': "scheduler_demo",
    'depends': ['base', 'web'],
    'data': [
        'security/ir.model.access.csv',
        'data/scheduler_data.xml',
        'views/scheduler_demo.xml',
        'views/menu.xml',
    ],
    'installable': True,
    'application': False,
    'auto_install': False,
}

ERROR :

Odoo server error

psycopg2.IntegrityError: ERREUR:  une valeur NULL viole la contrainte NOT NULL de la colonne « activity_user_type »

DETAIL:  La ligne en échec contient (586, Demo scheduler, ir.actions.server, null, null, action, list,form, 1, 2020-09-25 13:32:44.223276, 1, 2020-09-25 13:32:44.223276, ir_cron, code, 5, 394, null, model.process_demo_scheduler_queue(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)

During handling of the above exception, another exception occurred:



Traceback (most recent call last):
  File "/opt/odoo/odoo/http.py", line 624, 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 14, in reraise
    raise value
  File "/opt/odoo/odoo/http.py", line 669, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo/http.py", line 350, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo/http.py", line 915, 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 1326, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/addons/web/controllers/main.py", line 1314, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo/api.py", line 387, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo/api.py", line 374, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-65>", line 2, in button_immediate_upgrade
  File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 72, in check_and_log
    return method(self, *args, **kwargs)
  File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 634, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 573, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/opt/odoo/odoo/modules/registry.py", line 86, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/opt/odoo/odoo/modules/loading.py", line 419, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "/opt/odoo/odoo/modules/loading.py", line 315, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/opt/odoo/odoo/modules/loading.py", line 225, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package, report=report)
  File "/opt/odoo/odoo/modules/loading.py", line 68, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
  File "/opt/odoo/odoo/tools/convert.py", line 736, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
  File "/opt/odoo/odoo/tools/convert.py", line 803, in convert_xml_import
    obj.parse(doc.getroot())
  File "/opt/odoo/odoo/tools/convert.py", line 721, in parse
    exc_info[2]
  File "/opt/odoo/odoo/tools/pycompat.py", line 13, in reraise
    raise value.with_traceback(tb)
  File "/opt/odoo/odoo/tools/convert.py", line 712, in parse
    self._tag_root(de)
  File "/opt/odoo/odoo/tools/convert.py", line 674, in _tag_root
    f(rec)
  File "/opt/odoo/odoo/tools/convert.py", line 674, in _tag_root
    f(rec)
  File "/opt/odoo/odoo/tools/convert.py", line 577, in _tag_record
   record = model._load_records([data], self.mode == 'update')
  File "/opt/odoo/odoo/models.py", line 4084, in _load_records
    records = self._load_records_create([data['values'] for data in to_create])
  File "/opt/odoo/odoo/models.py", line 3998, in _load_records_create
    return self.create(values)
  File "<decorator-gen-40>", line 2, in create
  File "/opt/odoo/odoo/api.py", line 317, in _model_create_single
    return self.browse().concat(*(create(self, vals) for vals in arg))
  File "/opt/odoo/odoo/api.py", line 317, in <genexpr>
    return self.browse().concat(*(create(self, vals) for vals in arg))
  File "/opt/odoo/odoo/addons/base/models/ir_cron.py", line 71, in create
    return super(ir_cron, self).create(values)
  File "<decorator-gen-3>", line 2, in create
  File "/opt/odoo/odoo/api.py", line 335, in _model_create_multi
    return create(self, [arg])
  File "/opt/odoo/odoo/models.py", line 3740, in create
    for data in parent_data_list
  File "<decorator-gen-34>", line 2, in create
  File "/opt/odoo/odoo/api.py", line 336, in _model_create_multi
    return create(self, arg)
  File "/opt/odoo/odoo/addons/base/models/ir_actions.py", line 59, in create
    res = super(IrActions, self).create(vals_list)
  File "<decorator-gen-3>", line 2, in create
  File "/opt/odoo/odoo/api.py", line 336, in _model_create_multi
    return create(self, arg)
  File "/opt/odoo/odoo/models.py", line 3746, in create
    records = self._create(data_list)
  File "/opt/odoo/odoo/models.py", line 3832, in _create
    cr.execute(query, params)
  File "/opt/odoo/odoo/sql_db.py", line 168, in wrapper
    return f(self, *args, **kwargs)
  File "/opt/odoo/odoo/sql_db.py", line 245, in execute
    res = self._obj.execute(query, params)

odoo.tools.convert.ParseError: "ERREUR:  une valeur NULL viole la contrainte NOT NULL de la colonne « activity_user_type »
DETAIL:  La ligne en échec contient (586, Demo scheduler, ir.actions.server, null, null, action, list,form, 1, 2020-09-25 13:32:44.223276, 1, 2020-09-25 13:32:44.223276, ir_cron, code, 5, 394, null, model.process_demo_scheduler_queue(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
" while parsing /home/brenda/Code/app_odoo/scheduler_demo/data/scheduler_data.xml:2, near

<odoo>
  <data noupdate="1">
    <record id="ir_cron_scheduler_demo_action" model="ir.cron">
      <field name="name">Demo scheduler</field>
      <field name="model_id" ref="model_scheduler_demo"/>
      <field name="state">code</field>
      <field name="code">model.process_demo_scheduler_queue()</field>
      <field name="active" eval="True"/>
      <field name="user_id" ref="base.user_root"/>
      <field name="interval_number">1</field>
      <field name="interval_type">days</field>
      <field name="numbercall">-1</field>
    </record>
  </data>
</odoo>

I do not understand the error, I tested a lot of modification without success, could someone help me please.

1

There are 1 answers

0
Kenly On BEST ANSWER

Odoo defines ir_actions_server_id field (in ir.crom model) and set delegate attribute to True (corresponds to _inherits) which means that ir.actions.server fields are available in the ir.cron model.

The activity_user_type field is defined in mail (add it to module dependency) module as required field set by default to specific, so you can't have the above error using the default implementation.

You can reproduce a similar error by inheriting the ir.actions.server model and altering the default attribute (set it to False) of a required field.

The folowing code will raise an odoo.tools.convert.ParseError

class IrActionsServer(models.Model):
    _inherit = 'ir.actions.server'

    usage = fields.Selection(default=False)

It could also be the result of overriding the create method and setting the value of activity_user_type to another field value which is finally evaluated to False.