Skip to Content
Menu
This question has been flagged
1 Reply
15651 Views

Is it possible to assign colors to a certain event state as default? (Calendar)

I.e. Ocupied is red / available is green / no-show is blue / ready to start is yellow...

right now odoo as default color for 1st event, 2nd event is another color.. i want by state! is it possible and how? Thanks!

Avatar
Discard

Lo resolviste te puedo ayudar?

Best Answer

Hello Rick,

FYI odoo is currently setting event colors based on different partners not based on different events.
Regarding your requirement, yes you can replace this current functionality with the state field. For that, you just need to do the following steps.

For odoo12,
1)Inherit calendar view and change attribute color="state(your_field_name)"
2)Then you have to assign a color index to your state by updating the init method for "web.CalendarRenderer".
E.g - this.color_map.state(your_field_name) = 2(will be index value);

For more information, you can contact us.

Regards,





Email: odoo@aktivsoftware.com

Skype: kalpeshmaheshwari

   

Avatar
Discard
Author

This is 1):

<record id="view_calendar_event_calendar_inherit" model="ir.ui.view">

<field name="name">calendar.event.calendar.inherit</field>

<field name="model">calendar.event</field>

<field name="inherit_id" ref="view_calendar_event_calendar"/>

<field name="arch" type="xml">

<calendar string="Meetings" date_start="start" date_stop="stop" date_delay="duration" all_day="allday"

readonly_form_view_id="%(calendar.view_calendar_event_form_popup)s"

event_open_popup="true"

event_limit="3"

color="NEWCOLOR">

</calendar>

</field>

</record>

But i didn't exactly understood the 2) part, can you explain it better if you can? It would be a huge help!

Thank you for your understanding.

Hello Ricardo Gil,

-In the calendar module, you can find the "web.CalendarRenderer" class.

-You have to change that class's init function.

-So inherit that function and you can find the "color_map" variable in that.

-In that "color_map" you will get data for "NEWCOLOR" field, so you have to assign a color index value to those data. then your functionality will work.

FYI We have already developed a module for this functionality for V12, if you need that then you can contact us.

Author

in this: init: function (parent, state, params) {

this._super.apply(this, arguments);

this.displayFields = params.displayFields;

this.model = params.model;

this.filters = [];

-> this.color_map = {};

if (params.eventTemplate) {

this.qweb = new QWeb(session.debug, {_s: session.origin});

this.qweb.add_template(utils.json_node_to_xml(params.eventTemplate));

and i have the getColor:

getColor: function (key) {

if (!key) {

return;

}

if (this.color_map[key]) {

return this.color_map[key];

}

// check if the key is a css color

if (typeof key === 'string' && key.match(/^((#[A-F0-9]{3})|(#[A-F0-9]{6})|((hsl|rgb)a?\(\s*(?:(\s*\d{1,3}%?\s*),?){3}(\s*,[0-9.]{1,4})?\))|)$/i)) {

return this.color_map[key] = key;

}

var index = (((_.keys(this.color_map).length + 1) * 5) % 24) + 1;

this.color_map[key] = index;

return index;

Have to say color_map[0] = red / color_map[1] = green in my inherence... right?

Author

if possible , if you could show what you did in your module, it would hep me a lot!!

I've build the module i want with the changes i need but the only thing missing is the colors... I would realy appreciate it!! Thank you :)

Related Posts Replies Views Activity
0
Aug 19
2901
1
Jul 24
2628
1
Jul 20
4891
4
Jul 24
10618
1
Dec 21
4188