{"action":"created","comment":{"url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/comments/30392324","id":30392324,"diff_hunk":"@@ -0,0 +1,269 @@\n+# -*- coding: utf-8 -*-\n+##############################################################################\n+# For copyright and license notices, see __openerp__.py file in root directory\n+##############################################################################\n+from openerp import models, fields, api, exceptions, _\n+\n+\n+class ProcurementOrder(models.Model):\n+    _inherit = 'procurement.order'\n+\n+    @api.one\n+    def _compute_show_button_create(self):\n+        bom_obj = self.env['mrp.bom']\n+        self.show_button_create = False\n+        if self.location_id.usage == 'internal':\n+            cond = [('parent_procurement_id', '=', self.id)]\n+            child_procs = self.search(cond, limit=1)\n+            if not child_procs:\n+                cond = ['|', ('product_tmpl_id', '=',\n+                        self.product_id.product_tmpl_id.id),\n+                        ('product_id', '=', self.product_id.id)]\n+                boms = bom_obj.search(cond)\n+                if boms:\n+                    self.show_button_create = True\n+\n+    @api.one\n+    def _compute_show_button_delete(self):\n+        bom_obj = self.env['mrp.bom']\n+        self.show_button_delete = False\n+        if self.location_id.usage == 'internal':\n+            cond = [('parent_procurement_id', '=', self.id)]\n+            child_procs = self.search(cond, limit=1)\n+            if child_procs:\n+                cond = ['|', ('product_tmpl_id', '=',\n+                        self.product_id.product_tmpl_id.id),\n+                        ('product_id', '=', self.product_id.id)]\n+                boms = bom_obj.search(cond)\n+                if boms:\n+                    self.show_button_delete = True\n+\n+    level = fields.Integer(string='Level')\n+    parent_procurement_id = fields.Many2one(\n+        'procurement.order', string='Procurement Parent')\n+    show_button_create = fields.Boolean(\n+        string='Show button Create', compute='_compute_show_button_create')\n+    show_button_delete = fields.Boolean(\n+        string='Show button Delete', compute='_compute_show_button_delete')\n+\n+    @api.multi\n+    def make_mo(self):\n+        production_obj = self.env['mrp.production']\n+        result = super(ProcurementOrder, self).make_mo()\n+        procurement = self.browse(result.keys()[0])\n+        production = production_obj.browse(result.values()[0])\n+        if procurement.plan:\n+            production.write({'plan': procurement.plan.id})\n+        return result\n+\n+    @api.multi\n+    def set_main_plan(self):\n+        procurement_obj = self.env['procurement.order']\n+        for record in self:\n+            if record.production_id:\n+                production = record.production_id\n+                if production.plan:\n+                    moves = production.move_lines\n+                    for move in moves:\n+                        procurements = procurement_obj.search(\n+                            [('move_dest_id', '=', move.id)])\n+                        procurements.write({'plan': production.plan.id})\n+                        procurements.refresh()\n+                        procurements.set_main_plan()\n+                    if record.move_ids:\n+                        for move in record.move_ids:\n+                            procurements = procurement_obj.search(\n+                                [('move_dest_id', '=', move.id)])\n+                            procurements.write({'plan': production.plan.id})\n+                            procurements.refresh()\n+                            procurements.set_main_plan()\n+        return True\n+\n+    @api.multi\n+    def run(self, autocommit=False):\n+        res = super(ProcurementOrder, self).run(autocommit=autocommit)\n+        self.set_main_plan()\n+        return res\n+\n+    @api.multi\n+    def button_erase_lower_levels(self):\n+        self.ensure_one()\n+        cond = [('parent_procurement_id', 'child_of', self.id),\n+                ('id', '!=', self.id)]\n+        procs = self.search(cond)\n+        procs.cancel()\n+        procs.unlink()\n+        return {'view_type': 'form,tree',\n+                'view_mode': 'form',\n+                'res_model': 'procurement.plan',\n+                'res_id': self.plan.id,\n+                'view_id': False,\n+                'type': 'ir.actions.act_window',\n+                'target': 'current',\n+                }\n+\n+    @api.multi\n+    def button_create_lower_levels(self):\n+        bom_obj = self.env['mrp.bom']\n+        self.ensure_one()\n+        cond = ['|', ('product_tmpl_id', '=',\n+                self.product_id.product_tmpl_id.id),\n+                ('product_id', '=', self.product_id.id)]\n+        boms = bom_obj.search(cond)\n+        if not boms:\n+            message = (_('BoM not found, for product: %s') %\n+                       (self.product_id.name))\n+            message += \"<br></p>\"\n+            self.plan._create_message_error(message)\n+        else:\n+            product_errors = []\n+            sorted_boms = sorted(boms, key=lambda l: l.sequence,\n+                                 reverse=True)\n+            for line in sorted_boms[0].bom_line_ids:\n+                qty = ((line.product_qty * self.product_qty) /\n+                       sorted_boms[0].product_qty)\n+                product_errors = self.plan._calculate_bom_line_details(\n+                    line, qty, self.level, product_errors, self,\n+                    sorted_boms[0])\n+            if product_errors:\n+                message = ''\n+                for line_error in product_errors:\n+                    message += line_error['error'] + \"<br>\"\n+                message += \"</p>\"\n+                self.plan._create_message_error(message)\n+        return {'view_type': 'form,tree',\n+                'view_mode': 'form',\n+                'res_model': 'procurement.plan',\n+                'res_id': self.plan.id,\n+                'view_id': False,\n+                'type': 'ir.actions.act_window',\n+                'target': 'current',\n+                }\n+\n+\n+class ProcurementPlan(models.Model):\n+    _name = 'procurement.plan'\n+    _inherit = ['procurement.plan', 'mail.thread']\n+\n+    production_ids = fields.One2many(\n+        'mrp.production', 'plan', string='Productions', readonly=True)\n+\n+    @api.multi\n+    def button_wizard_import(self):\n+        self.ensure_one()\n+        context = self.env.context.copy()\n+        context['active_id'] = self.id\n+        context['active_ids'] = [self.id]\n+        context['active_model'] = 'procurement.plan'\n+        return {'name': _('Import Procurements'),\n+                'type': 'ir.actions.act_window',\n+                'view_type': 'form',\n+                'view_mode': 'form',\n+                'res_model': 'wiz.import.procurement.from.plan',\n+                'target': 'new',\n+                'context': context,\n+                }\n+\n+    @api.one\n+    def button_generate_procurements(self):\n+        procurement_obj = self.env['procurement.order']\n+        bom_obj = self.env['mrp.bom']\n+        for procurement in self.procurement_ids.filtered(\n+                lambda r: r.level == 0 and r.location_id.usage == 'internal'):\n+            cond = [('parent_procurement_id', '=', procurement.id)]\n+            child_procs = procurement_obj.search(cond, limit=1)\n+            if not child_procs:\n+                cond = ['|', ('product_tmpl_id', '=',\n+                        procurement.product_id.product_tmpl_id.id),\n+                        ('product_id', '=', procurement.product_id.id)]\n+                boms = bom_obj.search(cond)\n+                if not boms:\n+                    message = (_('BoM not found, for product: %s') %\n+                               (procurement.product_id.name))\n+                    message += \"<br></p>\"\n+                    self._create_message_error(message)\n+                else:\n+                    product_errors = []\n+                    sorted_boms = sorted(boms, key=lambda l: l.sequence,\n+                                         reverse=True)\n+                    for line in sorted_boms[0].bom_line_ids:\n+                        qty = ((line.product_qty * procurement.product_qty) /\n+                               sorted_boms[0].product_qty)\n+                        product_errors = self._calculate_bom_line_details(\n+                            line, qty, 0, product_errors, procurement,\n+                            sorted_boms[0])\n+                    if product_errors:\n+                        message = ''\n+                        for line_error in product_errors:\n+                            message += line_error['error'] + \"<br>\"\n+                        message += \"</p>\"\n+                        self._create_message_error(message)\n+        self._catch_purchases()\n+\n+    def _create_message_error(self, message):\n+        m = \"<p> \" + (str(fields.Datetime.now()) + ': ' +\n+                      _('THEY HAVE NOT GENERATED ALL PROCUREMENTS')) + \"<br>\"\n+        m += \"<br> <br>\"\n+        m += message\n+        vals = {'type': 'comment',\n+                'model': 'procurement.plan',\n+                'record_name': self.name,\n+                'res_id': self.id,\n+                'body': m}\n+        self.env['mail.message'].create(vals)\n+\n+    def _calculate_bom_line_details(self, line, qty, level, product_errors,\n+                                    procurement, bom):\n+        level += 1\n+        if not line.product_id and not line.product_template:\n+            product_errors.append(\n+                {'error': (_('Product has not been found, or product template,'\n+                             ' on the list of materials %s, Level %s')\n+                           % (bom.name, str(level)))})\n+        elif not line.product_id and line.product_template:\n+            product_errors.append(\n+                {'error': (_('Product has not been found on the list of'\n+                             ' materials %s, product template %s, Level %s') %\n+                           (bom.name, line.product_template.name,\n+                            str(level)))})\n+        else:\n+            procurement = self._create_procurement_from_bom_line(\n+                level, line.product_id, qty, procurement)\n+        for child in line.child_line_ids:\n+            if child.child_line_ids:\n+                self._calculate_bom_line_details(\n+                    child, child.product_qty * qty, level,\n+                    product_errors, procurement, bom)\n+            else:\n+                procurement = self._create_procurement_from_bom_line(\n+                    level+1, child.product_id, child.product_qty * qty,\n+                    procurement)\n+        return product_errors\n+\n+    def _create_procurement_from_bom_line(self, level, product, qty,\n+                                          procurement):\n+        procurement_obj = self.env['procurement.order']\n+        vals = self._prepare_procurements_vals(level, product, qty,\n+                                               procurement)\n+        proc = procurement_obj.create(vals)\n+        proc.write({'rule_id': procurement_obj._find_suitable_rule(proc)})\n+        return proc\n+\n+    def _prepare_procurements_vals(self, level, product, qty, procurement):\n+        procurement_obj = self.env['procurement.order']\n+        warehouse_ids = self.env['stock.warehouse'].search([])","path":"procurement_plan_mrp/models/procurement.py","position":254,"original_position":254,"commit_id":"495e56c739a1628b49d8e70a95284ae28c24ae0e","original_commit_id":"e429d6c070e38a2734d17ff402929a641108601c","user":{"login":"pedrobaeza","id":7165771,"avatar_url":"https://avatars.githubusercontent.com/u/7165771?v=3","gravatar_id":"","url":"https://api.github.com/users/pedrobaeza","html_url":"https://github.com/pedrobaeza","followers_url":"https://api.github.com/users/pedrobaeza/followers","following_url":"https://api.github.com/users/pedrobaeza/following{/other_user}","gists_url":"https://api.github.com/users/pedrobaeza/gists{/gist_id}","starred_url":"https://api.github.com/users/pedrobaeza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pedrobaeza/subscriptions","organizations_url":"https://api.github.com/users/pedrobaeza/orgs","repos_url":"https://api.github.com/users/pedrobaeza/repos","events_url":"https://api.github.com/users/pedrobaeza/events{/privacy}","received_events_url":"https://api.github.com/users/pedrobaeza/received_events","type":"User","site_admin":false},"body":"Viendo esto, me he dado cuenta que los planes de abastecimiento no los hemos hecho multi-almacén. Importamos todos los abastecimientos, independientemente de a qué almacén vayan a ir, pero luego hacemos cosas como ésta de coger el primer almacén que haya.\r\n\r\nHay que definir un almacén a nivel de plan de abastecimiento, y restringir las importaciones a los abastecimiento cuyas ubicaciones sean child_of la del almacén.","created_at":"2015-05-15T08:23:49Z","updated_at":"2015-05-15T08:23:49Z","html_url":"https://github.com/odoomrp/odoomrp-wip/pull/799#discussion_r30392324","pull_request_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799","_links":{"self":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/comments/30392324"},"html":{"href":"https://github.com/odoomrp/odoomrp-wip/pull/799#discussion_r30392324"},"pull_request":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799"}}},"pull_request":{"url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799","id":34396643,"html_url":"https://github.com/odoomrp/odoomrp-wip/pull/799","diff_url":"https://github.com/odoomrp/odoomrp-wip/pull/799.diff","patch_url":"https://github.com/odoomrp/odoomrp-wip/pull/799.patch","issue_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/799","number":799,"state":"open","locked":false,"title":"[IMP] procurements_plan, mrp_procurements_plan: Modified modules per cla...","user":{"login":"alfredoavanzosc","id":8257820,"avatar_url":"https://avatars.githubusercontent.com/u/8257820?v=3","gravatar_id":"","url":"https://api.github.com/users/alfredoavanzosc","html_url":"https://github.com/alfredoavanzosc","followers_url":"https://api.github.com/users/alfredoavanzosc/followers","following_url":"https://api.github.com/users/alfredoavanzosc/following{/other_user}","gists_url":"https://api.github.com/users/alfredoavanzosc/gists{/gist_id}","starred_url":"https://api.github.com/users/alfredoavanzosc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alfredoavanzosc/subscriptions","organizations_url":"https://api.github.com/users/alfredoavanzosc/orgs","repos_url":"https://api.github.com/users/alfredoavanzosc/repos","events_url":"https://api.github.com/users/alfredoavanzosc/events{/privacy}","received_events_url":"https://api.github.com/users/alfredoavanzosc/received_events","type":"User","site_admin":false},"body":"...im CLM0285-MPS y planificación.\r\n\r\n\"procurements_plan\", y \"mrp_procurements_plan\" modificados de arriba a abajo, a petición de Ana, en reclamación CLM0285-MPS y planificación.","created_at":"2015-04-29T19:21:39Z","updated_at":"2015-05-15T08:23:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"447602f57805b6aff2182159ae16e7624b301a6b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799/commits","review_comments_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799/comments","review_comment_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/comments{/number}","comments_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/799/comments","statuses_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/statuses/495e56c739a1628b49d8e70a95284ae28c24ae0e","head":{"label":"alfredoavanzosc:odoomrp-procurements_plan","ref":"odoomrp-procurements_plan","sha":"495e56c739a1628b49d8e70a95284ae28c24ae0e","user":{"login":"alfredoavanzosc","id":8257820,"avatar_url":"https://avatars.githubusercontent.com/u/8257820?v=3","gravatar_id":"","url":"https://api.github.com/users/alfredoavanzosc","html_url":"https://github.com/alfredoavanzosc","followers_url":"https://api.github.com/users/alfredoavanzosc/followers","following_url":"https://api.github.com/users/alfredoavanzosc/following{/other_user}","gists_url":"https://api.github.com/users/alfredoavanzosc/gists{/gist_id}","starred_url":"https://api.github.com/users/alfredoavanzosc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alfredoavanzosc/subscriptions","organizations_url":"https://api.github.com/users/alfredoavanzosc/orgs","repos_url":"https://api.github.com/users/alfredoavanzosc/repos","events_url":"https://api.github.com/users/alfredoavanzosc/events{/privacy}","received_events_url":"https://api.github.com/users/alfredoavanzosc/received_events","type":"User","site_admin":false},"repo":{"id":34321725,"name":"odoomrp-wip-1","full_name":"alfredoavanzosc/odoomrp-wip-1","owner":{"login":"alfredoavanzosc","id":8257820,"avatar_url":"https://avatars.githubusercontent.com/u/8257820?v=3","gravatar_id":"","url":"https://api.github.com/users/alfredoavanzosc","html_url":"https://github.com/alfredoavanzosc","followers_url":"https://api.github.com/users/alfredoavanzosc/followers","following_url":"https://api.github.com/users/alfredoavanzosc/following{/other_user}","gists_url":"https://api.github.com/users/alfredoavanzosc/gists{/gist_id}","starred_url":"https://api.github.com/users/alfredoavanzosc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alfredoavanzosc/subscriptions","organizations_url":"https://api.github.com/users/alfredoavanzosc/orgs","repos_url":"https://api.github.com/users/alfredoavanzosc/repos","events_url":"https://api.github.com/users/alfredoavanzosc/events{/privacy}","received_events_url":"https://api.github.com/users/alfredoavanzosc/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/alfredoavanzosc/odoomrp-wip-1","description":"WIP of OdooMRP","fork":true,"url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1","forks_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/forks","keys_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/teams","hooks_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/hooks","issue_events_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/issues/events{/number}","events_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/events","assignees_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/assignees{/user}","branches_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/branches{/branch}","tags_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/tags","blobs_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/statuses/{sha}","languages_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/languages","stargazers_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/stargazers","contributors_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/contributors","subscribers_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/subscribers","subscription_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/subscription","commits_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/contents/{+path}","compare_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/merges","archive_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/downloads","issues_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/issues{/number}","pulls_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/pulls{/number}","milestones_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/milestones{/number}","notifications_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/labels{/name}","releases_url":"https://api.github.com/repos/alfredoavanzosc/odoomrp-wip-1/releases{/id}","created_at":"2015-04-21T10:59:59Z","updated_at":"2015-04-21T11:00:01Z","pushed_at":"2015-05-15T06:38:45Z","git_url":"git://github.com/alfredoavanzosc/odoomrp-wip-1.git","ssh_url":"git@github.com:alfredoavanzosc/odoomrp-wip-1.git","clone_url":"https://github.com/alfredoavanzosc/odoomrp-wip-1.git","svn_url":"https://github.com/alfredoavanzosc/odoomrp-wip-1","homepage":"http://www.odoomrp.com","size":3526,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"8.0"}},"base":{"label":"odoomrp:8.0","ref":"8.0","sha":"eb868f0225a63b1561c7e3a741c823329a037530","user":{"login":"odoomrp","id":7858947,"avatar_url":"https://avatars.githubusercontent.com/u/7858947?v=3","gravatar_id":"","url":"https://api.github.com/users/odoomrp","html_url":"https://github.com/odoomrp","followers_url":"https://api.github.com/users/odoomrp/followers","following_url":"https://api.github.com/users/odoomrp/following{/other_user}","gists_url":"https://api.github.com/users/odoomrp/gists{/gist_id}","starred_url":"https://api.github.com/users/odoomrp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoomrp/subscriptions","organizations_url":"https://api.github.com/users/odoomrp/orgs","repos_url":"https://api.github.com/users/odoomrp/repos","events_url":"https://api.github.com/users/odoomrp/events{/privacy}","received_events_url":"https://api.github.com/users/odoomrp/received_events","type":"Organization","site_admin":false},"repo":{"id":22124768,"name":"odoomrp-wip","full_name":"odoomrp/odoomrp-wip","owner":{"login":"odoomrp","id":7858947,"avatar_url":"https://avatars.githubusercontent.com/u/7858947?v=3","gravatar_id":"","url":"https://api.github.com/users/odoomrp","html_url":"https://github.com/odoomrp","followers_url":"https://api.github.com/users/odoomrp/followers","following_url":"https://api.github.com/users/odoomrp/following{/other_user}","gists_url":"https://api.github.com/users/odoomrp/gists{/gist_id}","starred_url":"https://api.github.com/users/odoomrp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoomrp/subscriptions","organizations_url":"https://api.github.com/users/odoomrp/orgs","repos_url":"https://api.github.com/users/odoomrp/repos","events_url":"https://api.github.com/users/odoomrp/events{/privacy}","received_events_url":"https://api.github.com/users/odoomrp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/odoomrp/odoomrp-wip","description":"WIP of OdooMRP","fork":false,"url":"https://api.github.com/repos/odoomrp/odoomrp-wip","forks_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/forks","keys_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/keys{/key_id}","collaborators_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/teams","hooks_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/hooks","issue_events_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/events{/number}","events_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/events","assignees_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/assignees{/user}","branches_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/branches{/branch}","tags_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/tags","blobs_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/git/refs{/sha}","trees_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/git/trees{/sha}","statuses_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/statuses/{sha}","languages_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/languages","stargazers_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/stargazers","contributors_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/contributors","subscribers_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/subscribers","subscription_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/subscription","commits_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/commits{/sha}","git_commits_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/git/commits{/sha}","comments_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/comments{/number}","issue_comment_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/comments{/number}","contents_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/contents/{+path}","compare_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/compare/{base}...{head}","merges_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/merges","archive_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/downloads","issues_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues{/number}","pulls_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls{/number}","milestones_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/milestones{/number}","notifications_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/labels{/name}","releases_url":"https://api.github.com/repos/odoomrp/odoomrp-wip/releases{/id}","created_at":"2014-07-22T23:29:59Z","updated_at":"2015-05-11T13:11:20Z","pushed_at":"2015-05-15T08:21:53Z","git_url":"git://github.com/odoomrp/odoomrp-wip.git","ssh_url":"git@github.com:odoomrp/odoomrp-wip.git","clone_url":"https://github.com/odoomrp/odoomrp-wip.git","svn_url":"https://github.com/odoomrp/odoomrp-wip","homepage":"http://www.odoomrp.com","size":10706,"stargazers_count":34,"watchers_count":34,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":62,"mirror_url":null,"open_issues_count":39,"forks":62,"open_issues":39,"watchers":34,"default_branch":"8.0"}},"_links":{"self":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799"},"html":{"href":"https://github.com/odoomrp/odoomrp-wip/pull/799"},"issue":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/799"},"comments":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/issues/799/comments"},"review_comments":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799/comments"},"review_comment":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/pulls/799/commits"},"statuses":{"href":"https://api.github.com/repos/odoomrp/odoomrp-wip/statuses/495e56c739a1628b49d8e70a95284ae28c24ae0e"}}}}