Merge lp:~openerp-dev/openerp-web/trunk-calendar-favorite-meeting-psa into lp:openerp-web

Proposed by Paramjit Singh Sahota(OpenERP)
Status: Work in progress
Proposed branch: lp:~openerp-dev/openerp-web/trunk-calendar-favorite-meeting-psa
Merge into: lp:openerp-web
Diff against target: 380 lines (+177/-104)
4 files modified
addons/web_calendar/static/src/css/web_fullcalendar.css (+21/-2)
addons/web_calendar/static/src/css/web_fullcalendar.sass (+20/-5)
addons/web_calendar/static/src/js/web_calendar.js (+110/-67)
addons/web_calendar/static/src/xml/web_fullcalendar.xml (+26/-30)
To merge this branch: bzr merge lp:~openerp-dev/openerp-web/trunk-calendar-favorite-meeting-psa
Reviewer Review Type Date Requested Status
OpenERP R&D Web Team Pending
Review via email: mp+210972@code.launchpad.net

Description of the change

Hello,

Improved calendar's favorite meeting list and added a input box to directly insert the partner in favorite list and 'X' to remove the partner's name from the favorite meeting list in calendar view.

Related branch: https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-calendar-favorite-meeting-psa

Thankz.

To post a comment you must log in.
3958. By Paramjit Singh Sahota(OpenERP)

[IMP] Improved code and typo and removed unused class

3959. By Paramjit Singh Sahota(OpenERP)

[IMP] Improved code and added m2o inline in calendar view.

3960. By Paramjit Singh Sahota(OpenERP)

[MERGE] Merged lp:openerp-web

3961. By Paramjit Singh Sahota(OpenERP)

[IMP] Improved code according to inline m2o.

3962. By Paramjit Singh Sahota(OpenERP)

[MERGE] MERged lp:openerp-web.

3963. By Paramjit Singh Sahota(OpenERP)

[IMP] Improved code
1/. Filters will be visible to the user who has created means users are able to view there own filters only.
2/. The 'X' remove icon is not visible in the filter name of the logined user.

3964. By Paramjit Singh Sahota(OpenERP)

[MERGE] Merged lp:openerp-web.

3965. By Pariket Trivedi(OpenERP)

[IMP]: clear the m2o input field.

3966. By Paramjit Singh Sahota(OpenERP)

[MERGE] Merged lp:openerp-web

3967. By Pariket Trivedi(OpenERP)

[IMP]: add style and chnage css.

3968. By Pariket Trivedi(OpenERP)

[IMP]: m2o field display after favorite calendar.

3969. By Pariket Trivedi(OpenERP)

[MERGE] :latest web

3970. By Pariket Trivedi(OpenERP)

[IMP]: close button color lightgray.

3971. By Pariket Trivedi(OpenERP)

[IMP]: chnage create contact for get_value methods.

3972. By Pariket Trivedi(OpenERP)

[IMP]: clear input box after repeat partner.

3973. By Pariket Trivedi(OpenERP)

[MERGE]: lp:openerp-web.

3974. By Pariket Trivedi(OpenERP)

[IMP] revert last 2 revision.

3975. By Pariket Trivedi(OpenERP)

[IMP]: minor improvement.

3976. By Pariket Trivedi(OpenERP)

[IMP]: add Condition for filter visiable only calendar contact

3977. By Pariket Trivedi(OpenERP)

[IMP]: minor change in Condition for filter visiable only calendar contact

Unmerged revisions

3977. By Pariket Trivedi(OpenERP)

[IMP]: minor change in Condition for filter visiable only calendar contact

3976. By Pariket Trivedi(OpenERP)

[IMP]: add Condition for filter visiable only calendar contact

3975. By Pariket Trivedi(OpenERP)

[IMP]: minor improvement.

3974. By Pariket Trivedi(OpenERP)

[IMP] revert last 2 revision.

3973. By Pariket Trivedi(OpenERP)

[MERGE]: lp:openerp-web.

3972. By Pariket Trivedi(OpenERP)

[IMP]: clear input box after repeat partner.

3971. By Pariket Trivedi(OpenERP)

[IMP]: chnage create contact for get_value methods.

3970. By Pariket Trivedi(OpenERP)

[IMP]: close button color lightgray.

3969. By Pariket Trivedi(OpenERP)

[MERGE] :latest web

3968. By Pariket Trivedi(OpenERP)

[IMP]: m2o field display after favorite calendar.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/web_calendar/static/src/css/web_fullcalendar.css'
2--- addons/web_calendar/static/src/css/web_fullcalendar.css 2014-01-10 17:03:33 +0000
3+++ addons/web_calendar/static/src/css/web_fullcalendar.css 2014-04-22 09:29:10 +0000
4@@ -11,6 +11,27 @@
5 .openerp td.oe_calendar_sidebar_container {
6 padding: 10px; }
7
8+.openerp .oe_calendar_responsible .oe_remove_follower {
9+ cursor: pointer;
10+ position: absolute;
11+ right: 0px;
12+ line-height: 20px;
13+ color: #D3D3D3; }
14+
15+.openerp .oe_calendar_all_responsibles .oe_favorite_name {
16+ width: 200px;
17+ overflow: hidden;
18+ white-space: nowrap;
19+ text-overflow: ellipsis; }
20+
21+.openerp .oe_calendar_sidebar .oe_calendar_mini_bottom {
22+ margin-bottom: 20px;
23+}
24+
25+.openerp .oe_calendar_sidebar .oe_add_input_box > div > input{
26+ width: 200px;
27+}
28+
29 img.attendee_head {
30 height: 18px;
31 width: 18px; }
32@@ -271,5 +292,3 @@
33 color: #cd74e6; }
34 .openerp .oe_calendar_table .color_24 {
35 color: #a47ae2; }
36-.openerp .oe_calendar_table .oe_calendar_buttons_add_contact .add_contacts_link_btn {
37- margin-top: 10px; }
38
39=== modified file 'addons/web_calendar/static/src/css/web_fullcalendar.sass'
40--- addons/web_calendar/static/src/css/web_fullcalendar.sass 2014-01-10 17:03:33 +0000
41+++ addons/web_calendar/static/src/css/web_fullcalendar.sass 2014-04-22 09:29:10 +0000
42@@ -53,7 +53,26 @@
43
44 .openerp
45 td.oe_calendar_sidebar_container
46- padding: 10px
47+ padding: 10px
48+ .oe_calendar_responsible
49+ .oe_remove_follower
50+ cursor: pointer
51+ position: absolute
52+ right: 0px
53+ line-height: 20px
54+ color: #D3D3D3
55+ .oe_calendar_all_responsibles
56+ .oe_favorite_name
57+ width: 200px
58+ overflow: hidden
59+ white-space: nowrap
60+ text-overflow: ellipsis
61+ .oe_calendar_sidebar
62+ .oe_calendar_mini_bottom
63+ margin-bottom: 20px
64+ .oe_add_input_box > div > input
65+ width: 200px
66+
67
68 img.attendee_head
69 height: 18px
70@@ -415,7 +434,3 @@
71
72 .color_24
73 color: $color24
74-
75- .oe_calendar_buttons_add_contact
76- .add_contacts_link_btn
77- margin-top: 10px
78\ No newline at end of file
79
80=== modified file 'addons/web_calendar/static/src/js/web_calendar.js'
81--- addons/web_calendar/static/src/js/web_calendar.js 2014-04-16 15:15:43 +0000
82+++ addons/web_calendar/static/src/js/web_calendar.js 2014-04-22 09:29:10 +0000
83@@ -313,60 +313,10 @@
84 firstDay: translate.firstDay,
85 });
86
87-
88 if (this.useContacts) {
89- //Get my Partner ID
90-
91- new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.dataset.context.uid]]).first()
92- .done(
93- function(result) {
94- var sidebar_items = {};
95- var filter_value = result.partner_id[0];
96- var filter_item = {
97- value: filter_value,
98- label: result.partner_id[1] + _lt(" [Me]"),
99- color: self.get_color(filter_value),
100- avatar_model: self.avatar_model,
101- is_checked: true
102- };
103-
104- sidebar_items[filter_value] = filter_item ;
105- filter_item = {
106- value: -1,
107- label: _lt("Everybody's calendars"),
108- color: self.get_color(-1),
109- avatar_model: self.avatar_model,
110- is_checked: false
111- };
112- sidebar_items[-1] = filter_item ;
113- //Get my coworkers/contacts
114- new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
115- _.each(result, function(item) {
116- filter_value = item.partner_id[0];
117- filter_item = {
118- value: filter_value,
119- label: item.partner_id[1],
120- color: self.get_color(filter_value),
121- avatar_model: self.avatar_model,
122- is_checked: true
123- };
124- sidebar_items[filter_value] = filter_item ;
125- });
126-
127- self.all_filters = sidebar_items;
128- self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
129-
130- self.sidebar.filter.events_loaded(self.all_filters);
131- self.sidebar.filter.set_filters();
132-
133- self.sidebar.filter.addUpdateButton();
134- }).done(function () {
135- self.$calendar.fullCalendar('refetchEvents');
136- });
137- }
138- );
139+ new reload_favorite_list(this);
140 }
141- this.extraSideBar();
142+ this.extraSideBar();
143 }
144 self.$calendar.fullCalendar(self.get_fc_init_options());
145
146@@ -1377,20 +1327,23 @@
147
148 instance.web_calendar.Sidebar = instance.web.Widget.extend({
149 template: 'CalendarView.sidebar',
150-
151+
152 start: function() {
153 this._super();
154 this.filter = new instance.web_calendar.SidebarFilter(this, this.getParent());
155 this.filter.appendTo(this.$el.find('.oe_calendar_filter'));
156- }
157+ },
158 });
159+
160 instance.web_calendar.SidebarFilter = instance.web.Widget.extend({
161 events: {
162- 'change input:checkbox': 'filter_click'
163+ 'change input:checkbox': 'filter_click',
164+ 'click span.oe_remove_follower': 'destroy_filter',
165 },
166 init: function(parent, view) {
167 this._super(parent);
168 this.view = view;
169+ this.ds_message = new instance.web.DataSetSearch(this, 'calendar.contacts');
170 },
171 set_filters: function() {
172 var self = this;
173@@ -1399,6 +1352,12 @@
174 self.$('div.oe_calendar_responsible input[value=' + o.value + ']').prop('checked',o.is_checked);
175 }
176 });
177+ // When mouse-enter the favorite list it will show the 'X' for removing partner from the favorite list.
178+ if (self.view.useContacts){
179+ self.$('.oe_calendar_all_responsibles').on('mouseenter mouseleave', function(e) {
180+ self.$('.oe_remove_follower').toggleClass('hidden', e.type == 'mouseleave');
181+ });
182+ }
183 },
184 events_loaded: function(filters) {
185 var self = this;
186@@ -1409,24 +1368,108 @@
187 filters.push(o);
188 }
189 });
190- }
191- this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
192+ }
193+
194+ this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters, this: self }));
195 },
196 filter_click: function(e) {
197- var self = this;
198+ var self = this;
199 self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
200 self.view.$calendar.fullCalendar('refetchEvents');
201 },
202- addUpdateButton: function() {
203- var self=this;
204- this.$('div.oe_calendar_all_responsibles').append(QWeb.render('CalendarView.sidebar.button_add_contact'));
205- this.$(".add_contacts_link_btn").on('click', function() {
206- self.rpc("/web/action/load", {
207- action_id: "calendar.action_calendar_contacts"
208- }).then( function(result) { return self.do_action(result); });
209- });
210-
211+ addInputBox: function() {
212+ var self = this;
213+ if (this.dfm)
214+ return;
215+ this.dfm = new instance.web.form.DefaultFieldManager(self);
216+ this.dfm.extend_field_desc({
217+ partner_id: {
218+ relation: "res.partner",
219+ },
220+ });
221+ this.ir_model_m2o = new instance.web.form.FieldMany2One(self.dfm, {
222+ attrs: {
223+ class: 'oe_add_input_box',
224+ name: "partner_id",
225+ type: "many2one",
226+ options: '{"no_open": True}',
227+ placeholder:"Select Favorite Calendar",
228+ },
229+ });
230+ this.ir_model_m2o.insertAfter($('div.oe_calendar_filter'));
231+ this.ir_model_m2o.on('change:value', self, function() {
232+ self.add_filter();
233+ });
234+ },
235+ add_filter: function() {
236+ $.map(this.ir_model_m2o.display_value, function(element,index) {
237+ new instance.web.Model('calendar.contacts').call("create", [{'partner_id': index}]);
238+ });
239+ new reload_favorite_list(this);
240+ },
241+ destroy_filter: function(e) {
242+ var self= this;
243+ if (! confirm(_t("Do you really want to delete this filter from favorite?"))) { return false; }
244+ var id = $(e.currentTarget)[0].dataset.id;
245+ this.ds_message.call('search', [[['partner_id', '=', parseInt(id)]]]).then(function(record){
246+ return self.ds_message.unlink(record);
247+ }).done(function() {
248+ new reload_favorite_list(self);
249+ });
250 },
251 });
252
253+ function reload_favorite_list(result) {
254+ var self = current = result;
255+ if (result.view) {
256+ self = result.view;
257+ }
258+ //Get my Partner ID
259+ new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",self.dataset.context.uid]]).first()
260+ .done(function(result) {
261+ var sidebar_items = {};
262+ var filter_value = result.partner_id[0];
263+ var filter_item = {
264+ value: filter_value,
265+ label: result.partner_id[1] + _lt(" [Me]"),
266+ color: self.get_color(filter_value),
267+ avatar_model: self.avatar_model,
268+ is_checked: true,
269+ is_remove: false,
270+ };
271+ sidebar_items[filter_value] = filter_item ;
272+ filter_item = {
273+ value: -1,
274+ label: _lt("All Meetings"),
275+ color: self.get_color(-1),
276+ avatar_model: self.avatar_model,
277+ is_checked: false
278+ };
279+ sidebar_items[-1] = filter_item ;
280+ new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
281+ _.each(result, function(item) {
282+ filter_value = item.partner_id[0];
283+ filter_item = {
284+ value: filter_value,
285+ label: item.partner_id[1],
286+ color: self.get_color(filter_value),
287+ avatar_model: self.avatar_model,
288+ is_checked: true
289+ };
290+ sidebar_items[filter_value] = filter_item ;
291+ });
292+ self.all_filters = sidebar_items;
293+ self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
294+ self.sidebar.filter.events_loaded(self.all_filters);
295+ self.sidebar.filter.set_filters();
296+ self.sidebar.filter.addInputBox();
297+ }).done(function () {
298+ self.$calendar.fullCalendar('refetchEvents');
299+ if (current.ir_model_m2o) {
300+ current.ir_model_m2o.set_value(false);
301+ }
302+ });
303+ });
304+ }
305+
306 };
307
308=== modified file 'addons/web_calendar/static/src/xml/web_fullcalendar.xml'
309--- addons/web_calendar/static/src/xml/web_fullcalendar.xml 2014-01-10 17:03:33 +0000
310+++ addons/web_calendar/static/src/xml/web_fullcalendar.xml 2014-04-22 09:29:10 +0000
311@@ -16,30 +16,33 @@
312 </table>
313 </t>
314
315- <t t-name="CalendarView.sidebar">
316+ <t t-name="CalendarView.sidebar">
317 <div class="oe_calendar_sidebar">
318- <div class="oe_calendar_mini" />
319- <div class="oe_calendar_filter">
320- <h3><t t-esc="widget.getParent().color_string"/></h3>
321- </div>
322- </div>
323- </t>
324- <t t-name="CalendarView.sidebar.responsible">
325- <div class="oe_calendar_all_responsibles">
326- <div t-foreach="filters" class="oe_calendar_responsible" >
327- <t t-if="filters_value.value&gt;=-1"> <!-- don't display if no value given (or undefined) -->
328- <input type="checkbox" name="selection" t-att-value="filters_value.value" checked="checked" />
329- <t t-if="filters_value.value == -1">
330- <span><i t-attf-class="fa fa-users fa-fw cal_avatar" ></i></span>
331- </t>
332- <t t-if="(filters_value.value != -1) &amp;&amp; filters_value.avatar_model ">
333- <img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&amp;field=image_small&amp;id=' + filters_value.value" class="cal_avatar"/>
334- </t>
335- <span t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
336- </t>
337- </div>
338- </div>
339- </t>
340+ <div class="oe_calendar_mini oe_calendar_mini_bottom"/>
341+ <div class="oe_calendar_filter">
342+ <h3><t t-esc="widget.name"/></h3>
343+ </div>
344+ </div>
345+ </t>
346+ <t t-name="CalendarView.sidebar.responsible">
347+ <div class="oe_calendar_all_responsibles">
348+ <div t-foreach="filters" class="oe_favorite_name oe_calendar_responsible" >
349+ <t t-if="filters_value.value&gt;=-1"> <!-- don't display if no value given (or undefined) -->
350+ <input type="checkbox" name="selection" t-att-value="filters_value.value" checked="checked" />
351+ <t t-if="filters_value.value == -1">
352+ <span><i t-attf-class="fa fa-users fa-fw cal_avatar" ></i></span>
353+ </t>
354+ <t t-if="(filters_value.value != -1) &amp;&amp; filters_value.avatar_model ">
355+ <img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&amp;field=image_small&amp;id=' + filters_value.value" class="cal_avatar"/>
356+ </t>
357+ <span t-att-title='filters_value.label' t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
358+ <t t-if="(filters_value.value != -1) &amp;&amp; (filters_value.is_remove != false)">
359+ <span class="oe_remove_follower oe_e hidden" title="Remove this favorite from the list" t-att-data-id="filters_value.value">X</span>
360+ </t>
361+ </t>
362+ </div>
363+ </div>
364+ </t>
365
366 <div t-name="CalendarView.buttons" class="oe_calendar_buttons">
367 <t t-if="widget.options.action_buttons !== false">
368@@ -53,13 +56,6 @@
369 </t>
370 </t>
371 </div>
372-
373- <div t-name="CalendarView.sidebar.button_add_contact" class="oe_calendar_buttons_add_contact">
374- <button class='oe_button oe_form_button oe_link add_contacts_link_btn' style='margin-top:10px'>
375- <span class='add_contacts_link'>See Employee's Meeting</span>
376- </button>
377- </div>
378-
379
380 <div t-name="CalendarView.quick_create" class="oe_calendar_quick_create openerp">
381