GitHub PullRequestReviewCommentEvent at 2014-12-09 12:49:10
Repository: odoo
Actor: dka-odoo
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/odoo/odoo/pulls/comments/21525517","id":21525517,"diff_hunk":"@@ -0,0 +1,339 @@\n+(function() {\n+    \"use strict\";\n+    var instance = openerp;\n+    var QWeb = instance.web.qweb;\n+    instance.planner = {};\n+\n+\n+    instance.web.WebClient.include({\n+        start: function() {\n+            this.planner_manager =  new instance.planner.PlannerManager();\n+            return this._super.apply(this, arguments);\n+        },\n+        show_application: function() {\n+            var self = this;\n+            this._super.apply(this, arguments);\n+            self.menu.on(\"on_top_menu_click\", self.planner_manager, self.planner_manager.on_menu_clicked);\n+        }\n+    });\n+\n+    instance.web.Menu.include({\n+        on_top_menu_click: function(ev) {\n+            this._super.apply(this, arguments);\n+            this.trigger('on_top_menu_click', $(ev.currentTarget).data('menu'));\n+            this.reflow(); //to handle progressbar display in case of menu overflowing\n+        }\n+    });\n+\n+    instance.planner.PlannerManager = instance.web.Widget.extend({\n+        init: function() {\n+            this._super();\n+            var self = this;\n+            self.fetch_application_planner().done(function(apps) {\n+                self.planner_apps = apps;\n+                self.planner_launcher = new instance.planner.PlannerLauncher();\n+            });\n+        },\n+        on_menu_clicked: function(menu_id) {\n+            var self= this;\n+            self.planner_launcher.prependTo(window.$('.oe_systray'));\n+            if (_.contains(_.keys(self.planner_apps), ''+menu_id)) {\n+                self.planner_launcher.planner_data = self.planner_apps[menu_id];\n+                self.planner_launcher.set_planner_tooltip(self.planner_apps[menu_id].tooltip_planner);\n+                self.planner_launcher.update_progress_value(self.planner_apps[menu_id].progress);\n+                self.planner_launcher.show();\n+            } else {\n+                self.planner_launcher.hide();\n+            }\n+\n+        },\n+        fetch_application_planner: function() {\n+            var self = this;\n+            var def = $.Deferred();\n+            if (this.planner_bymenu) {\n+                def.resolve(self.planner_bymenu);\n+            } else {\n+                self.planner_bymenu = {};\n+                (new instance.web.Model('planner.planner')).query().all().then(function(res) {\n+                    _(res).each(function(planner) {\n+                        self.planner_bymenu[planner.menu_id[0]] = planner;\n+                    });\n+                    def.resolve(self.planner_bymenu);\n+                }).fail(function() {def.reject();});\n+            }\n+            return def;\n+        }\n+\n+    });\n+\n+    /**\n+        this widget handles the show/hide of progress bar base on menu clicked by the users,\n+        fetch applications planner data from database, and instantiate the PlannerDialog.\n+    */\n+    instance.planner.PlannerLauncher = instance.web.Widget.extend({\n+        template: \"PlannerLauncher\",\n+        events: {\n+            'click .oe_planner_progress': 'toggle_dialog'\n+        },\n+\n+        init: function() {\n+            this._super();\n+            this.dialog = new instance.planner.PlannerDialog(this);\n+        },\n+        start: function() {\n+            this.dialog.appendTo(document.body);\n+            return this._super.apply(this, arguments);\n+        },\n+        show: function() {\n+            this.$el.show();\n+        },\n+        hide: function() {\n+            this.$el.hide();\n+        },\n+        set_planner_tooltip: function(tooltip) {\n+            this.$(\".oe_planner_progress\").tooltip({html: true, title: tooltip, placement: 'bottom', delay: {'show': 500}});\n+        },\n+        update_progress_value: function(progress_value) {\n+            this.$(\".progress-bar\").css('width', progress_value+\"%\");\n+        },\n+        toggle_dialog: function() {\n+            this.dialog.$('#PlannerModal').modal('toggle');\n+        }\n+    });\n+\n+\n+    /**\n+        this widget handles the display of planner dialog and all the pages of planner,\n+        and also handles some operations like go to next page, mark step as done,\n+        store user's filled values into database etc...\n+    */\n+    instance.planner.PlannerDialog = instance.web.Widget.extend({\n+        template: \"PlannerDialog\",\n+        events: {\n+            'show.bs.modal': 'show',\n+            'hide.bs.modal': 'hide',\n+            'click .oe_planner div[id^=\"planner_page\"] a[href^=\"#planner_page\"]': 'next_page',\n+            'click .oe_planner li a[href^=\"#planner_page\"]': 'onclick_menu',\n+            'click .oe_planner div[id^=\"planner_page\"] button[data-progress^=\"planner_page\"]': 'mark_as_done'\n+        },\n+\n+        init: function(parent) {\n+            this._super(parent);\n+            this.planner_launcher = parent;\n+        },\n+        onclick_menu: function(ev) {\n+            ev.stopPropagation();\n+            var page_id = $(ev.currentTarget).attr('href').replace('#', '');\n+            this._switch_page(page_id);\n+        },\n+        next_page: function(ev) {\n+            ev.stopPropagation();\n+            var next_page_id = $(ev.currentTarget).attr('href').replace('#', '');\n+            this._switch_page(next_page_id);\n+        },\n+        _switch_page: function(planner_page_id) {\n+            this.$el.find(\".oe_planner li a[href^='#planner_page']\").parent().removeClass('active');\n+            this.$el.find(\".oe_planner li a[href=#\"+planner_page_id+\"]\").parent().addClass('active');\n+            this.$el.find(\".oe_planner div[id^='planner_page']\").removeClass('in');\n+            this.$el.find(\".oe_planner div[id=\"+planner_page_id+\"]\").addClass('in');\n+            this.values['last_open_page'] = planner_page_id;\n+        },\n+        mark_as_done: function(ev) {\n+            var self = this;\n+            var btn = $(ev.currentTarget);\n+            var active_menu = self.$el.find(\".oe_planner li a[href=#\"+btn.attr('data-progress')+\"] span\");\n+            var active_page = self.$el.find(\".oe_planner div[id^='planner_page'].panel-collapse.collapse.in\");\n+\n+            //find all inputs elements of current page\n+            var input_element = self.$el.find(\".oe_planner div[id=\"+btn.attr('data-progress')+\"] textarea[id^='input_element'], .oe_planner div[id=\"+btn.attr('data-progress')+\"] input[id^='input_element'], select[id^='input_element']\");\n+            var next_button = self.$el.find(\".oe_planner a[data-parent=\"+btn.attr('data-progress')+\"]\");\n+            if (!btn.hasClass('fa-check-square-o')) {\n+                //find menu element and marked as check\n+                active_menu.addClass('fa-check');\n+                //mark checked on button\n+                btn.addClass('fa-check-square-o btn-default').removeClass('fa-square-o btn-primary');\n+                next_button.addClass('btn-primary').removeClass('btn-default');\n+                self.update_input_value(input_element, true);\n+                self.values[btn.attr('id')] = 'checked';\n+                self.progress = self.progress + 1;\n+                active_page.addClass('marked');\n+                setTimeout(function() { active_page.removeClass('marked'); }, 1000);\n+\n+            } else {\n+                btn.removeClass('fa-check-square-o btn-default').addClass('fa fa-square-o btn-primary');\n+                next_button.addClass('btn-default').removeClass('btn-primary');\n+                active_menu.removeClass('fa-check');\n+                self.values[btn.attr('id')] = '';\n+                self.update_input_value(input_element, false);\n+                self.progress = self.progress - 1;\n+            }\n+\n+            var total_progress = parseInt((self.progress / self.btn_mark_as_done.length) * 100, 10);\n+            //call update_planner_data to store JSON data into database\n+            self.update_planner_data(JSON.stringify(self.values), total_progress).then(function () {\n+                //update inner and outer progress bar value\n+                self.planner_launcher.update_progress_value(total_progress);\n+                self.$el.find(\".progress-bar\").css('width', total_progress+\"%\");\n+                self.$el.find(\".progress_col\").find('span.counter').text(total_progress+\"%\");\n+                self.planner_data['progress'] = total_progress;\n+            });\n+        },\n+\n+        /**\n+            @param {boolean} save If set to true, store values of all input elements\n+            else clear the values of input elements.\n+        */\n+        update_input_value: function(input_element, save) {\n+            var self = this;\n+            _.each(input_element, function(element) {\n+                var $el = $(element);\n+                if ($el.attr('type') == 'checkbox' || $el.attr('type') == 'radio') {\n+                    if ($el.is(':checked') && save) {\n+                        self.values[$el.attr(\"id\")] = 'checked';\n+                        $el.attr('checked', 'checked');\n+                    } else {\n+                        self.values[$el.attr(\"id\")] = \"\";\n+                    }\n+                } else { \n+                    if (save) {\n+                        self.values[$el.attr(\"id\")] = $el.val();\n+                        //set value to input element, to get those value when printing report\n+                        $el.attr('value', $el.val());\n+                    } else {\n+                        self.values[$el.attr(\"id\")] = \"\";\n+                    }\n+                }\n+            });\n+        },\n+        update_planner_data: function(data, progress_value) {","path":"addons/planner/static/src/js/planner.js","position":208,"original_position":208,"commit_id":"9af1bef855bc7bd9f2cbeca6a4c5c8c8852653f7","original_commit_id":"9af1bef855bc7bd9f2cbeca6a4c5c8c8852653f7","user":{"login":"dka-odoo","id":7599807,"avatar_url":"https://avatars.githubusercontent.com/u/7599807?v=3","gravatar_id":"","url":"https://api.github.com/users/dka-odoo","html_url":"https://github.com/dka-odoo","followers_url":"https://api.github.com/users/dka-odoo/followers","following_url":"https://api.github.com/users/dka-odoo/following{/other_user}","gists_url":"https://api.github.com/users/dka-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/dka-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dka-odoo/subscriptions","organizations_url":"https://api.github.com/users/dka-odoo/orgs","repos_url":"https://api.github.com/users/dka-odoo/repos","events_url":"https://api.github.com/users/dka-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/dka-odoo/received_events","type":"User","site_admin":false},"body":"Done!","created_at":"2014-12-09T12:49:10Z","updated_at":"2014-12-09T12:49:10Z","html_url":"https://github.com/odoo/odoo/pull/2896#discussion_r21525517","pull_request_url":"https://api.github.com/repos/odoo/odoo/pulls/2896","_links":{"self":{"href":"https://api.github.com/repos/odoo/odoo/pulls/comments/21525517"},"html":{"href":"https://github.com/odoo/odoo/pull/2896#discussion_r21525517"},"pull_request":{"href":"https://api.github.com/repos/odoo/odoo/pulls/2896"}}},"pull_request":{"url":"https://api.github.com/repos/odoo/odoo/pulls/2896","id":22208121,"html_url":"https://github.com/odoo/odoo/pull/2896","diff_url":"https://github.com/odoo/odoo/pull/2896.diff","patch_url":"https://github.com/odoo/odoo/pull/2896.patch","issue_url":"https://api.github.com/repos/odoo/odoo/issues/2896","number":2896,"state":"open","locked":false,"title":"[crm] implementation planner","user":{"login":"rim-odoo","id":7300760,"avatar_url":"https://avatars.githubusercontent.com/u/7300760?v=3","gravatar_id":"","url":"https://api.github.com/users/rim-odoo","html_url":"https://github.com/rim-odoo","followers_url":"https://api.github.com/users/rim-odoo/followers","following_url":"https://api.github.com/users/rim-odoo/following{/other_user}","gists_url":"https://api.github.com/users/rim-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rim-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rim-odoo/subscriptions","organizations_url":"https://api.github.com/users/rim-odoo/orgs","repos_url":"https://api.github.com/users/rim-odoo/repos","events_url":"https://api.github.com/users/rim-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/rim-odoo/received_events","type":"User","site_admin":false},"body":"- Task: https://www.odoo.com/web/#id=8592&view_type=form&model=project.task&menu_id=3942&action=327\r\n- Pad: https://pad.odoo.com/p/r.4BHh6hQdZ4GPR2qE","created_at":"2014-10-03T14:56:35Z","updated_at":"2014-12-09T12:49:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6c06b415781148e1149995f0bc7169be5ec9ebbe","assignee":{"login":"rim-odoo","id":7300760,"avatar_url":"https://avatars.githubusercontent.com/u/7300760?v=3","gravatar_id":"","url":"https://api.github.com/users/rim-odoo","html_url":"https://github.com/rim-odoo","followers_url":"https://api.github.com/users/rim-odoo/followers","following_url":"https://api.github.com/users/rim-odoo/following{/other_user}","gists_url":"https://api.github.com/users/rim-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rim-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rim-odoo/subscriptions","organizations_url":"https://api.github.com/users/rim-odoo/orgs","repos_url":"https://api.github.com/users/rim-odoo/repos","events_url":"https://api.github.com/users/rim-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/rim-odoo/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/odoo/odoo/pulls/2896/commits","review_comments_url":"https://api.github.com/repos/odoo/odoo/pulls/2896/comments","review_comment_url":"https://api.github.com/repos/odoo/odoo/pulls/comments/{number}","comments_url":"https://api.github.com/repos/odoo/odoo/issues/2896/comments","statuses_url":"https://api.github.com/repos/odoo/odoo/statuses/9af1bef855bc7bd9f2cbeca6a4c5c8c8852653f7","head":{"label":"odoo-dev:master-planner-widget-sri","ref":"master-planner-widget-sri","sha":"9af1bef855bc7bd9f2cbeca6a4c5c8c8852653f7","user":{"login":"odoo-dev","id":7466976,"avatar_url":"https://avatars.githubusercontent.com/u/7466976?v=3","gravatar_id":"","url":"https://api.github.com/users/odoo-dev","html_url":"https://github.com/odoo-dev","followers_url":"https://api.github.com/users/odoo-dev/followers","following_url":"https://api.github.com/users/odoo-dev/following{/other_user}","gists_url":"https://api.github.com/users/odoo-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo-dev/subscriptions","organizations_url":"https://api.github.com/users/odoo-dev/orgs","repos_url":"https://api.github.com/users/odoo-dev/repos","events_url":"https://api.github.com/users/odoo-dev/events{/privacy}","received_events_url":"https://api.github.com/users/odoo-dev/received_events","type":"Organization","site_admin":false},"repo":{"id":19853934,"name":"odoo","full_name":"odoo-dev/odoo","owner":{"login":"odoo-dev","id":7466976,"avatar_url":"https://avatars.githubusercontent.com/u/7466976?v=3","gravatar_id":"","url":"https://api.github.com/users/odoo-dev","html_url":"https://github.com/odoo-dev","followers_url":"https://api.github.com/users/odoo-dev/followers","following_url":"https://api.github.com/users/odoo-dev/following{/other_user}","gists_url":"https://api.github.com/users/odoo-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo-dev/subscriptions","organizations_url":"https://api.github.com/users/odoo-dev/orgs","repos_url":"https://api.github.com/users/odoo-dev/repos","events_url":"https://api.github.com/users/odoo-dev/events{/privacy}","received_events_url":"https://api.github.com/users/odoo-dev/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/odoo-dev/odoo","description":"RD Dev Repository","fork":true,"url":"https://api.github.com/repos/odoo-dev/odoo","forks_url":"https://api.github.com/repos/odoo-dev/odoo/forks","keys_url":"https://api.github.com/repos/odoo-dev/odoo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/odoo-dev/odoo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/odoo-dev/odoo/teams","hooks_url":"https://api.github.com/repos/odoo-dev/odoo/hooks","issue_events_url":"https://api.github.com/repos/odoo-dev/odoo/issues/events{/number}","events_url":"https://api.github.com/repos/odoo-dev/odoo/events","assignees_url":"https://api.github.com/repos/odoo-dev/odoo/assignees{/user}","branches_url":"https://api.github.com/repos/odoo-dev/odoo/branches{/branch}","tags_url":"https://api.github.com/repos/odoo-dev/odoo/tags","blobs_url":"https://api.github.com/repos/odoo-dev/odoo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/odoo-dev/odoo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/odoo-dev/odoo/git/refs{/sha}","trees_url":"https://api.github.com/repos/odoo-dev/odoo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/odoo-dev/odoo/statuses/{sha}","languages_url":"https://api.github.com/repos/odoo-dev/odoo/languages","stargazers_url":"https://api.github.com/repos/odoo-dev/odoo/stargazers","contributors_url":"https://api.github.com/repos/odoo-dev/odoo/contributors","subscribers_url":"https://api.github.com/repos/odoo-dev/odoo/subscribers","subscription_url":"https://api.github.com/repos/odoo-dev/odoo/subscription","commits_url":"https://api.github.com/repos/odoo-dev/odoo/commits{/sha}","git_commits_url":"https://api.github.com/repos/odoo-dev/odoo/git/commits{/sha}","comments_url":"https://api.github.com/repos/odoo-dev/odoo/comments{/number}","issue_comment_url":"https://api.github.com/repos/odoo-dev/odoo/issues/comments/{number}","contents_url":"https://api.github.com/repos/odoo-dev/odoo/contents/{+path}","compare_url":"https://api.github.com/repos/odoo-dev/odoo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/odoo-dev/odoo/merges","archive_url":"https://api.github.com/repos/odoo-dev/odoo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/odoo-dev/odoo/downloads","issues_url":"https://api.github.com/repos/odoo-dev/odoo/issues{/number}","pulls_url":"https://api.github.com/repos/odoo-dev/odoo/pulls{/number}","milestones_url":"https://api.github.com/repos/odoo-dev/odoo/milestones{/number}","notifications_url":"https://api.github.com/repos/odoo-dev/odoo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/odoo-dev/odoo/labels{/name}","releases_url":"https://api.github.com/repos/odoo-dev/odoo/releases{/id}","created_at":"2014-05-16T11:16:19Z","updated_at":"2014-12-03T12:49:58Z","pushed_at":"2014-12-09T12:43:05Z","git_url":"git://github.com/odoo-dev/odoo.git","ssh_url":"git@github.com:odoo-dev/odoo.git","clone_url":"https://github.com/odoo-dev/odoo.git","svn_url":"https://github.com/odoo-dev/odoo","homepage":"https://www.odoo.com","size":955616,"stargazers_count":36,"watchers_count":36,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"open_issues_count":13,"forks":15,"open_issues":13,"watchers":36,"default_branch":"master"}},"base":{"label":"odoo:master","ref":"master","sha":"52c3b52bf09fea7e0920ebcec3f0e8acb066b2b7","user":{"login":"odoo","id":6368483,"avatar_url":"https://avatars.githubusercontent.com/u/6368483?v=3","gravatar_id":"","url":"https://api.github.com/users/odoo","html_url":"https://github.com/odoo","followers_url":"https://api.github.com/users/odoo/followers","following_url":"https://api.github.com/users/odoo/following{/other_user}","gists_url":"https://api.github.com/users/odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo/subscriptions","organizations_url":"https://api.github.com/users/odoo/orgs","repos_url":"https://api.github.com/users/odoo/repos","events_url":"https://api.github.com/users/odoo/events{/privacy}","received_events_url":"https://api.github.com/users/odoo/received_events","type":"Organization","site_admin":false},"repo":{"id":19745004,"name":"odoo","full_name":"odoo/odoo","owner":{"login":"odoo","id":6368483,"avatar_url":"https://avatars.githubusercontent.com/u/6368483?v=3","gravatar_id":"","url":"https://api.github.com/users/odoo","html_url":"https://github.com/odoo","followers_url":"https://api.github.com/users/odoo/followers","following_url":"https://api.github.com/users/odoo/following{/other_user}","gists_url":"https://api.github.com/users/odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo/subscriptions","organizations_url":"https://api.github.com/users/odoo/orgs","repos_url":"https://api.github.com/users/odoo/repos","events_url":"https://api.github.com/users/odoo/events{/privacy}","received_events_url":"https://api.github.com/users/odoo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/odoo/odoo","description":"Odoo (formerly OpenERP). Open Source Apps To Grow Your Business.","fork":false,"url":"https://api.github.com/repos/odoo/odoo","forks_url":"https://api.github.com/repos/odoo/odoo/forks","keys_url":"https://api.github.com/repos/odoo/odoo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/odoo/odoo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/odoo/odoo/teams","hooks_url":"https://api.github.com/repos/odoo/odoo/hooks","issue_events_url":"https://api.github.com/repos/odoo/odoo/issues/events{/number}","events_url":"https://api.github.com/repos/odoo/odoo/events","assignees_url":"https://api.github.com/repos/odoo/odoo/assignees{/user}","branches_url":"https://api.github.com/repos/odoo/odoo/branches{/branch}","tags_url":"https://api.github.com/repos/odoo/odoo/tags","blobs_url":"https://api.github.com/repos/odoo/odoo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/odoo/odoo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/odoo/odoo/git/refs{/sha}","trees_url":"https://api.github.com/repos/odoo/odoo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/odoo/odoo/statuses/{sha}","languages_url":"https://api.github.com/repos/odoo/odoo/languages","stargazers_url":"https://api.github.com/repos/odoo/odoo/stargazers","contributors_url":"https://api.github.com/repos/odoo/odoo/contributors","subscribers_url":"https://api.github.com/repos/odoo/odoo/subscribers","subscription_url":"https://api.github.com/repos/odoo/odoo/subscription","commits_url":"https://api.github.com/repos/odoo/odoo/commits{/sha}","git_commits_url":"https://api.github.com/repos/odoo/odoo/git/commits{/sha}","comments_url":"https://api.github.com/repos/odoo/odoo/comments{/number}","issue_comment_url":"https://api.github.com/repos/odoo/odoo/issues/comments/{number}","contents_url":"https://api.github.com/repos/odoo/odoo/contents/{+path}","compare_url":"https://api.github.com/repos/odoo/odoo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/odoo/odoo/merges","archive_url":"https://api.github.com/repos/odoo/odoo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/odoo/odoo/downloads","issues_url":"https://api.github.com/repos/odoo/odoo/issues{/number}","pulls_url":"https://api.github.com/repos/odoo/odoo/pulls{/number}","milestones_url":"https://api.github.com/repos/odoo/odoo/milestones{/number}","notifications_url":"https://api.github.com/repos/odoo/odoo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/odoo/odoo/labels{/name}","releases_url":"https://api.github.com/repos/odoo/odoo/releases{/id}","created_at":"2014-05-13T15:38:58Z","updated_at":"2014-12-09T11:48:05Z","pushed_at":"2014-12-09T11:55:45Z","git_url":"git://github.com/odoo/odoo.git","ssh_url":"git@github.com:odoo/odoo.git","clone_url":"https://github.com/odoo/odoo.git","svn_url":"https://github.com/odoo/odoo","homepage":"https://www.odoo.com","size":943166,"stargazers_count":1659,"watchers_count":1659,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1311,"mirror_url":null,"open_issues_count":1560,"forks":1311,"open_issues":1560,"watchers":1659,"default_branch":"8.0"}},"_links":{"self":{"href":"https://api.github.com/repos/odoo/odoo/pulls/2896"},"html":{"href":"https://github.com/odoo/odoo/pull/2896"},"issue":{"href":"https://api.github.com/repos/odoo/odoo/issues/2896"},"comments":{"href":"https://api.github.com/repos/odoo/odoo/issues/2896/comments"},"review_comments":{"href":"https://api.github.com/repos/odoo/odoo/pulls/2896/comments"},"review_comment":{"href":"https://api.github.com/repos/odoo/odoo/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/odoo/odoo/pulls/2896/commits"},"statuses":{"href":"https://api.github.com/repos/odoo/odoo/statuses/9af1bef855bc7bd9f2cbeca6a4c5c8c8852653f7"}}}}