← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client-web/improved_calendar into lp:openobject-client-web

 

cpa(OpenERP) has proposed merging lp:~openerp-dev/openobject-client-web/improved_calendar into lp:openobject-client-web.

Requested reviews:
  OpenERP SA's Web Client R&D (openerp-dev-web)
Related bugs:
  #506483 Week number differs on monthly calendar
  https://bugs.launchpad.net/bugs/506483


hello,
I have fixed calendar week as per ubuntu calendar.
-Week start from sunday.
-Week number start from 1.

bug no:-506483

Thanks.
-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/improved_calendar/+merge/44455
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client-web/improved_calendar.
=== modified file 'addons/view_calendar/static/javascript/calendar_date.js'
--- addons/view_calendar/static/javascript/calendar_date.js	2010-08-10 12:08:29 +0000
+++ addons/view_calendar/static/javascript/calendar_date.js	2010-12-22 12:47:04 +0000
@@ -76,18 +76,35 @@
     return Math.floor((this.getTime() - dt.getTime()) / 86400000);
 };
 
-Date.prototype.getWeek = function(monday) {
-
-    var yday = this.getDayOfYear();
-    var wday = this.getDay();
-
-    if (monday) {
-        wday = wday ? wday - 1 : 6;
-    }
-
-    return Math.floor((yday + 7 - wday) / 7);
+Date.prototype.getWeek = function (dowOffset) {
+	
+	dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; 
+	var newYear = new Date(this.getFullYear(),0,1);
+	var day = newYear.getDay() - dowOffset; //the day of week the year begins on
+	day = (day >= 0 ? day : day + 7);
+	var daynum = Math.floor((this.getTime() - newYear.getTime() -
+	(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
+	var weeknum;
+	//if the year starts before the middle of a week
+	if(day <= 4) {
+		weeknum = Math.floor((daynum+day-1)/7) + 1;
+		if(weeknum > 52) {
+			nYear = new Date(this.getFullYear() + 1,0,1);
+			nday = nYear.getDay() - dowOffset;
+			nday = nday >= 0 ? nday : nday + 7;
+			/*if the next year starts before the middle of
+			the week, it is week #1 of that year*/
+			weeknum = nday <= 4 ? 1 : 53;
+		}
+	}
+	else {
+		weeknum = Math.floor((daynum+day-1)/7);
+	}
+	return weeknum;
 };
 
+
+
 Date.prototype.strftime = function(format) {
 
     if (!format) return this.toLocaleString();

=== modified file 'addons/view_calendar/static/javascript/calendar_month.js'
--- addons/view_calendar/static/javascript/calendar_month.js	2010-12-16 07:23:41 +0000
+++ addons/view_calendar/static/javascript/calendar_month.js	2010-12-22 12:47:04 +0000
@@ -40,7 +40,7 @@
 
         this.starts = MochiKit.DateTime.isoDate(getNodeAttribute('calMonth', 'dtStart'));
         this.first = MochiKit.DateTime.isoDate(getNodeAttribute('calMonth', 'dtFirst'));
-        this.firstWeek = this.first.getWeek(1);
+
 
         this.month = this.first.getMonth();
 
@@ -87,18 +87,25 @@
         this.weeks = [];
 
         var dt = new Date(this.starts);
+        var weekcount = dt.getWeek(0);
         for (var i = 0; i < 6; i++) {
 
             var week = new MonthCalendar.Week(this, dt);
             this.weeks = this.weeks.concat(week);
-
-            var a = MochiKit.DOM.A({href: 'javascript: void(0)', onclick : "getCalendar('" + week.days[0] + "', 'week')"}, this.firstWeek + i);
-
+			
+			for (var j = 0; j < 7; j ++) {
+                if (weekcount >= 52){
+					if (dt.getWeek(0) == 1){
+						weekcount = 1;
+					}
+                }
+                dt = dt.getNext();
+            }
+			
+            var a = MochiKit.DOM.A({href: 'javascript: void(0)', onclick : "getCalendar('" + week.days[0] + "', 'week')"}, weekcount);
             appendChildNodes('calTimeCol', DIV({'style': 'height: 133px'}, a));
-
-            for (var j = 0; j < 7; j ++) {
-                dt = dt.getNext();
-            }
+			 
+			weekcount= weekcount + 1;  
         }
 
         //calEventNew
@@ -235,10 +242,10 @@
 
         var getWeekIndex = function(dt) {
             // get the first day of the week and return the week number
-            while (dt.getWeekDay() > 0) {
+            while (dt.getWeekDay() < 6) {
                 dt = dt.getPrevious();
             }
-            return dt.getWeek(1);
+            return dt.getWeek(0);
         }
 
         var self = this;
@@ -515,10 +522,10 @@
                 for (var j = i + 1; j < i + evt.dayspan; j++) {
 
                     if (j == 7) break;
-
+					
                     var d = self.days[j];
                     var cnt = containers[d];
-
+					
                     forEach(cnt.events, function(e) {
                         cnt.rows.push(evt.row);
                         e.row = e.row >= evt.row ? e.row + 1 : e.row;

=== modified file 'addons/view_calendar/widgets/utils.py'
--- addons/view_calendar/widgets/utils.py	2010-08-10 12:08:29 +0000
+++ addons/view_calendar/widgets/utils.py	2010-12-22 12:47:04 +0000
@@ -129,9 +129,11 @@
         y = self._day.year
         m = self._day.month
         d = self._day.day
-
-        wd = calendar.weekday(y, m, d)
-
+        
+        wd = Day(y, m, d).isoweekday()
+        if wd==7:
+           wd=0
+           
         result = []
 
         for i in range(wd, 0, -1):
@@ -143,7 +145,7 @@
         return result
 
     def number(self):
-        return self._day.strftime('%W')
+        return self._day.strftime('%U')
 
     days = property(days)
     number = property(number)
@@ -204,15 +206,13 @@
     def days(self):
         days = []
 
-        starts = self.range[0]
         first = Day(self.year, self.month, 1)
-
+        starts = first.isocalendar()[2]
         for i in range(starts, 0, -1):
             days += [first.fromordinal(first.toordinal() - i)]
 
         for i in range(42 - starts):
-            days += [first.fromordinal(first.toordinal() + i)]
-
+            days += [first.fromordinal(first.toordinal() + i)]   
         return days
 
     def weeks(self):


Follow ups