[IMP] : ranking and visits management
authorajay javiya (OpenERP) <aja@tinyerp.com>
Fri, 28 Mar 2014 06:35:23 +0000 (12:05 +0530)
committerajay javiya (OpenERP) <aja@tinyerp.com>
Fri, 28 Mar 2014 06:35:23 +0000 (12:05 +0530)
bzr revid: aja@tinyerp.com-20140328063523-ttuhcai8aybtbmk0

addons/website_blog/controllers/main.py
addons/website_blog/models/website_blog.py

index abf8a66..bf77c63 100644 (file)
@@ -19,7 +19,6 @@
 #
 ##############################################################################
 
-import random
 import werkzeug
 from datetime import datetime
 
@@ -195,12 +194,13 @@ class WebsiteBlog(http.Controller):
         response = request.website.render("website_blog.blog_post_complete", values)
         response.set_cookie('visited_blogs', ','.join(map(str, visited_ids)))
 
-        # Increase counter and ranking ratio for order
-        d = datetime.now() - datetime.strptime(blog_post.create_date, "%Y-%m-%d %H:%M:%S")
-        blog_post_obj.write(cr, SUPERUSER_ID, [blog_post.id], {
-            'visits': blog_post.visits+1,
-            'ranking': blog_post.visits * (0.5+random.random()) / max(3, d.days)
-        },context=context)
+        request.session[request.session_id] = request.session.get(request.session_id, [])
+        if not (blog_post.id in request.session[request.session_id]):
+            request.session[request.session_id].append(blog_post.id)
+            # Increase counter
+            blog_post_obj.write(cr, SUPERUSER_ID, [blog_post.id], {
+                'visits': blog_post.visits+1,
+            },context=context)
         return response
 
     def _blog_post_message(self, user, blog_post_id=0, **post):
index 5d6ac65..2d1d4ac 100644 (file)
@@ -19,6 +19,8 @@
 #
 ##############################################################################
 
+import random
+from datetime import datetime
 
 from openerp import tools
 from openerp import SUPERUSER_ID
@@ -58,6 +60,14 @@ class BlogPost(osv.Model):
     _description = "Blog Post"
     _inherit = ['mail.thread', 'website.seo.metadata']
     _order = 'id DESC'
+
+    def _compute_ranking(self, cr, uid, ids, name, arg, context=None):
+        res = {}
+        for blog_post in self.browse(cr, uid, ids, context=context):
+            d = datetime.now() - datetime.strptime(blog_post.create_date, tools.DEFAULT_SERVER_DATETIME_FORMAT)
+            res[blog_post.id] = blog_post.visits * (0.5+random.random()) / max(3, d.days)
+        return res
+
     _columns = {
         'name': fields.char('Title', required=True, translate=True),
         'sub_title' : fields.char('Sub Title', translate=True),
@@ -100,7 +110,7 @@ class BlogPost(osv.Model):
             select=True, readonly=True,
         ),
         'visits': fields.integer('No of Views', readonly=True),
-        'ranking': fields.float('Ranking', readonly=True),
+        'ranking': fields.function(_compute_ranking, string='Ranking', type='float'),
     }
     _defaults = {
         'website_published': False,