{"action":"created","comment":{"url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/comments/33333249","id":33333249,"diff_hunk":"@@ -0,0 +1,339 @@\n+# -*- encoding: utf-8 -*-\r\n+##############################################################################\r\n+#\r\n+#    Copyright (C) 2015 Compassion CH (http://www.compassion.ch)\r\n+#    Releasing children from poverty in Jesus' name\r\n+#    @author: Albert SHENOUDA <albert.shenouda@efrei.net>\r\n+#\r\n+#    The licence is in the file __openerp__.py\r\n+#\r\n+##############################################################################\r\n+\r\n+from openerp.tests import common\r\n+from datetime import datetime\r\n+from openerp import netsvc\r\n+from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as DF\r\n+import logging\r\n+logger = logging.getLogger(__name__)\r\n+\r\n+\r\n+class test_contract_compassion(common.TransactionCase):\r\n+    \"\"\"\r\n+        Test Project contract compassion.\r\n+        We are testing 3 scenarios :\r\n+         - in the first, we are testing the changement of state of a contract\r\n+         and we are testing what is happening when we pay an invoice.\r\n+         - in the second one, we are testing what is happening when we cancel\r\n+         a contract.\r\n+         - in the last one, we are testing the _reset_open_invoices method.\r\n+    \"\"\"\r\n+\r\n+    def setUp(self):\r\n+        super(test_contract_compassion, self).setUp()\r\n+        # Creation of an account\r\n+        account_type = self.registry('account.account.type').search(\r\n+            self.cr, self.uid, [\r\n+                ('code', '=', 'receivable'),\r\n+            ])[0]\r\n+        property_account_receivable = self.registry('account.account').search(\r\n+            self.cr, self.uid, [\r\n+                ('type', '=', 'receivable'),\r\n+                ('user_type', '=', account_type)\r\n+            ])[0]\r\n+        account_type = self.registry('account.account.type').search(\r\n+            self.cr, self.uid, [\r\n+                ('code', '=', 'payable'),\r\n+            ])[0]\r\n+        property_account_payable = self.registry('account.account').search(\r\n+            self.cr, self.uid, [\r\n+                ('type', '=', 'payable'),\r\n+                ('user_type', '=', account_type)])[0]\r\n+        property_account_income = self.registry('account.account').search(\r\n+            self.cr, self.uid, [\r\n+                ('type', '=', 'receivable'),\r\n+                ('name', '=', 'Property Account Income Test')\r\n+            ])[0]\r\n+        # Creation of partners\r\n+        partner_obj = self.registry('res.partner')\r\n+        self.partner_id = partner_obj.create(self.cr, self.uid, {\r\n+            'name': 'Monsieur Client 197',\r\n+            'property_account_receivable': property_account_receivable,\r\n+            'property_account_payable': property_account_payable,\r\n+            'notification_email_send': 'none',\r\n+            'ref': '00001111',\r\n+        })\r\n+        self.partner_id1 = partner_obj.create(self.cr, self.uid, {\r\n+            'name': 'Client 197',\r\n+            'property_account_receivable': property_account_receivable,\r\n+            'property_account_payable': property_account_payable,\r\n+            'notification_email_send': 'none',\r\n+            'ref': '00002222',\r\n+        })\r\n+        # Creation of a payement term\r\n+        payment_term_obj = self.registry('account.payment.term')\r\n+        self.payment_term_id = payment_term_obj.search(self.cr, self.uid, [\r\n+            ('name', '=', '15 Days')\r\n+        ])[0]\r\n+\r\n+        product_obj = self.registry('product.product')\r\n+        product_obj.write(self.cr, self.uid, 1, {\r\n+            'property_account_income': property_account_income,\r\n+            })\r\n+\r\n+    def _create_contract(self, start_date, group_id, channel,\r\n+                         next_invoice_date):\r\n+        \"\"\"\r\n+            Create a contract. For that purpose we have created a partner\r\n+            to get his id.\r\n+        \"\"\"\r\n+        # Creation of a contract\r\n+        contract_obj = self.registry('recurring.contract')\r\n+        group_obj = self.registry('recurring.contract.group')\r\n+        group = group_obj.browse(self.cr, self.uid, group_id)\r\n+        partner_id = group.partner_id.id\r\n+        contract_id = contract_obj.create(self.cr, self.uid, {\r\n+            'start_date': start_date,\r\n+            'partner_id': partner_id,\r\n+            'group_id': group_id,\r\n+            'channel': channel,\r\n+            'next_invoice_date': next_invoice_date,\r\n+            'type': 'O',\r\n+        })\r\n+        return contract_id\r\n+\r\n+    def _create_contract_line(self, contract_id, quantity, price):\r\n+        \"\"\" Create contract's lines \"\"\"\r\n+        contract_line_obj = self.registry('recurring.contract.line')\r\n+        contract_line_id = contract_line_obj.create(self.cr, self.uid, {\r\n+            'product_id': 1,\r\n+            'amount': price,\r\n+            'quantity': quantity,\r\n+            'contract_id': contract_id,\r\n+        })\r\n+        return contract_line_id\r\n+\r\n+    def _create_group(self, change_method, rec_value, rec_unit, partner_id,\r\n+                      adv_biling_months, payment_term_id, ref=None):\r\n+        \"\"\"\r\n+            Create a group with 2 possibilities :\r\n+                - ref is not given so it takes \"/\" default values\r\n+                - ref is given\r\n+        \"\"\"\r\n+        group_obj = self.registry('recurring.contract.group')\r\n+        group_id = group_obj.create(self.cr, self.uid, {\r\n+            'partner_id': partner_id,\r\n+        })\r\n+        group = group_obj.browse(self.cr, self.uid, group_id)\r\n+        group_vals = {\r\n+            'change_method': change_method,\r\n+            'recurring_value': rec_value,\r\n+            'recurring_unit': rec_unit,\r\n+            'partner_id': partner_id,\r\n+            'advance_billing_months': adv_biling_months,\r\n+            'payment_term_id': payment_term_id,\r\n+        }\r\n+        if ref:\r\n+            group_vals['ref'] = ref\r\n+        group.write(group_vals)\r\n+        return group_id\r\n+\r\n+    def _pay_invoice(self, invoice_id):\r\n+        journal_obj = self.registry('account.journal')\r\n+        bank_journal_id = self.registry('account.journal').search(\r\n+            self.cr, self.uid, [('code', '=', 'TBNK')])[0]\r\n+        bank_journal = journal_obj.browse(self.cr, self.uid, bank_journal_id)\r\n+        move_obj = self.registry('account.move')\r\n+        move_line_obj = self.registry('account.move.line')\r\n+        invoice = self.registry('account.invoice').browse(\r\n+            self.cr, self.uid, invoice_id)\r\n+        account_id = invoice.partner_id.property_account_receivable.id\r\n+        move_id = move_obj.create(self.cr, self.uid, {\r\n+            'journal_id': bank_journal_id\r\n+        })\r\n+        move_line_obj.create(self.cr, self.uid, {\r\n+            'name': 'BNK-' + invoice.number,\r\n+            'move_id': move_id,\r\n+            'partner_id': invoice.partner_id.id,\r\n+            'account_id': bank_journal.default_debit_account_id.id,\r\n+            'debit': invoice.amount_total,\r\n+            'journal_id': bank_journal_id,\r\n+            'period_id': invoice.period_id.id,\r\n+            'date': invoice.date_due\r\n+        })\r\n+        mv_line_id = move_line_obj.create(self.cr, self.uid, {\r\n+            'name': 'PAY-' + invoice.number,\r\n+            'move_id': move_id,\r\n+            'partner_id': invoice.partner_id.id,\r\n+            'account_id': account_id,\r\n+            'credit': invoice.amount_total,\r\n+            'journal_id': invoice.journal_id.id,\r\n+            'period_id': invoice.period_id.id,\r\n+            'date': invoice.date_due\r\n+        })\r\n+        move_obj.button_validate(self.cr, self.uid, [move_id])\r\n+        to_reconcile = move_line_obj.search(self.cr, self.uid, [\r\n+            ('move_id', '=', invoice.move_id.id),\r\n+            ('account_id', '=', account_id)]) + [mv_line_id]\r\n+        move_line_obj.reconcile(self.cr, self.uid, to_reconcile)\r\n+\r\n+    def test_contract_compassion_first_scenario(self):\r\n+        \"\"\"\r\n+            In this test we are testing states changement of a contract and if\r\n+            the old invoice are well cancelled when we pay one invoice.\r\n+        \"\"\"\r\n+        # Testing area creation\r\n+        self.contract_group = self._create_group(\r\n+            'do_nothing', 1, 'month', self.partner_id, 5, self.payment_term_id)\r\n+        self.contract_id = self._create_contract(\r\n+            datetime.today().strftime(DF), self.contract_group,\r\n+            'phone', datetime.today().strftime(DF))\r\n+        self.contract_line_id = self._create_contract_line(\r\n+            self.contract_id, '2', '40.0')\r\n+\r\n+        contract_obj = self.registry('recurring.contract')\r\n+        contract = contract_obj.browse(self.cr, self.uid, self.contract_id)\r\n+        self.assertEqual(contract.state, 'draft')\r\n+\r\n+        # Switching to \"waiting for payment\" state\r\n+        wf_service = netsvc.LocalService('workflow')\r\n+        wf_service.trg_validate(\r\n+            self.uid, 'recurring.contract',\r\n+            self.contract_id, 'contract_validated', self.cr)\r\n+        contract_wait = contract_obj.browse(\r\n+            self.cr, self.uid, self.contract_id)\r\n+        self.assertEqual(contract_wait.state, 'waiting')\r\n+        invoice_obj = self.registry('account.invoice')\r\n+        invoicer_obj = self.registry('recurring.invoicer')\r\n+        invoicer_id = contract_wait.button_generate_invoices()\r\n+        invoicer = invoicer_obj.browse(self.cr, self.uid, invoicer_id)\r\n+        invoices = invoicer.invoice_ids\r\n+        nb_invoices = len(invoices)\r\n+        self.assertEqual(nb_invoices, 6)\r\n+        invoice3 = invoices[3]\r\n+        self.assertEqual(invoice3.state, 'open')\r\n+        # Payment of the third invoice so the\r\n+        # contract will be on the active state and the 2 first invoices should\r\n+        # be canceled.\r\n+        self._pay_invoice(invoice3.id)\r\n+        invoice_paid = invoice_obj.browse(self.cr, self.uid, invoices[0].id)\r\n+        invoice_paid1 = invoice_obj.browse(self.cr, self.uid, invoices[1].id)\r\n+        invoice_paid2 = invoice_obj.browse(self.cr, self.uid, invoices[2].id)\r\n+        invoice_paid3 = invoice_obj.browse(self.cr, self.uid, invoice3.id)\r\n+        invoice_paid4 = invoice_obj.browse(self.cr, self.uid, invoices[4].id)\r\n+        invoice_paid5 = invoice_obj.browse(self.cr, self.uid, invoices[5].id)\r\n+        contract_act = contract_obj.browse(self.cr, self.uid, self.contract_id)\r\n+        self.assertEqual(invoice_paid3.state, 'paid')\r\n+        self.assertEqual(invoice_paid.state, 'open')\r\n+        self.assertEqual(invoice_paid1.state, 'open')\r\n+        self.assertEqual(invoice_paid2.state, 'open')\r\n+        self.assertEqual(invoice_paid4.state, 'cancel')\r\n+        self.assertEqual(invoice_paid5.state, 'cancel')\r\n+        self.assertEqual(contract_act.state, 'active')\r\n+        wf_service.trg_validate(\r\n+            self.uid, 'recurring.contract',\r\n+            self.contract_id, 'contract_terminated', self.cr)\r\n+        contract_term = contract_obj.browse(\r\n+            self.cr, self.uid, self.contract_id)\r\n+        self.assertEqual(contract_term.state, 'terminated')\r\n+\r\n+    def test_contract_compassion_second_scenario(self):\r\n+        \"\"\"\r\n+            Testing if invoices are well concelled when we cancel the related\r\n+            contract.\r\n+        \"\"\"\r\n+        # Testing area creation\r\n+        self.contract_group = self._create_group(\r\n+            'do_nothing', 1, 'month', self.partner_id1, 1,\r\n+            self.payment_term_id)\r\n+        self.contract_id = self._create_contract(\r\n+            datetime.today().strftime(DF), self.contract_group, 'postal',\r\n+            datetime.today().strftime(DF))\r\n+        self.contract_line_id = self._create_contract_line(\r\n+            self.contract_id, '3', '200.0')\r\n+\r\n+        # Switch to \"waiting for payment\" state\r\n+        wf_service = netsvc.LocalService('workflow')\r\n+        wf_service.trg_validate(\r\n+            self.uid, 'recurring.contract',\r\n+            self.contract_id, 'contract_validated', self.cr)\r\n+        contract_obj = self.registry('recurring.contract')\r\n+        contract_wait = contract_obj.browse(\r\n+            self.cr, self.uid, self.contract_id)\r\n+        invoicer_obj = self.registry('recurring.invoicer')\r\n+        invoicer_id = contract_wait.button_generate_invoices()\r\n+        invoicer = invoicer_obj.browse(self.cr, self.uid, invoicer_id)\r\n+        invoices = invoicer.invoice_ids\r\n+        invoice = invoices[0]\r\n+        invoice1 = invoices[1]\r\n+        self.assertEqual(invoice.state, 'open')\r\n+        self.assertEqual(invoice1.state, 'open')\r\n+\r\n+        # Cancelling of the contract\r\n+        wf_service.trg_validate(\r\n+            self.uid, 'recurring.contract',\r\n+            self.contract_id, 'contract_terminated', self.cr)\r\n+        contract_act = contract_obj.browse(\r\n+            self.cr, self.uid, self.contract_id)\r\n+        self.assertEqual(contract_act.state, 'cancelled')\r\n+        invoice_cancel = self.registry('account.invoice').browse(\r\n+            self.cr, self.uid, invoice.id)\r\n+        invoice1_cancel = self.registry('account.invoice').browse(\r\n+            self.cr, self.uid, invoice1.id)\r\n+        self.assertEqual(invoice_cancel.state, 'cancel')\r\n+        self.assertEqual(invoice1_cancel.state, 'cancel')\r\n+\r\n+    def test_reset_open_invoices(self):\r\n+        \"\"\"\r\n+            Testing of the method that update invoices when the contract\r\n+            is updated.\r\n+            THe invoice paid should not be updated, whereas the other one\r\n+            should be upadted.\r\n+        \"\"\"\r\n+        # Testing area creation\r\n+        self.contract_group = self._create_group(\r\n+            'do_nothing', 1, 'month', self.partner_id, 1,\r\n+            self.payment_term_id)\r\n+        self.contract_group2 = self._create_group(\r\n+            'do_nothing', 1, 'month', self.partner_id1, 2,\r\n+            self.payment_term_id)\r\n+        self.contract_id = self._create_contract(\r\n+            datetime.today().strftime(DF), self.contract_group,\r\n+            'postal', datetime.today().strftime(DF))\r\n+        self.contract_line_id = self._create_contract_line(\r\n+            self.contract_id, '2', '60.0')\r\n+\r\n+        wf_service = netsvc.LocalService('workflow')\r\n+        wf_service.trg_validate(\r\n+            self.uid, 'recurring.contract',\r\n+            self.contract_id, 'contract_validated', self.cr)\r\n+        contract_obj = self.registry('recurring.contract')\r\n+        contract_wait = contract_obj.browse(\r","path":"contract_compassion/tests/test_contract_compassion.py","position":310,"original_position":310,"commit_id":"063d594ba840fd5e8b21a06fe44ddb3ba0023d18","original_commit_id":"063d594ba840fd5e8b21a06fe44ddb3ba0023d18","user":{"login":"ecino","id":8435180,"avatar_url":"https://avatars.githubusercontent.com/u/8435180?v=3","gravatar_id":"","url":"https://api.github.com/users/ecino","html_url":"https://github.com/ecino","followers_url":"https://api.github.com/users/ecino/followers","following_url":"https://api.github.com/users/ecino/following{/other_user}","gists_url":"https://api.github.com/users/ecino/gists{/gist_id}","starred_url":"https://api.github.com/users/ecino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ecino/subscriptions","organizations_url":"https://api.github.com/users/ecino/orgs","repos_url":"https://api.github.com/users/ecino/repos","events_url":"https://api.github.com/users/ecino/events{/privacy}","received_events_url":"https://api.github.com/users/ecino/received_events","type":"User","site_admin":false},"body":"Use contract variable","created_at":"2015-06-26T07:07:21Z","updated_at":"2015-06-26T07:07:21Z","html_url":"https://github.com/CompassionCH/compassion-modules/pull/93#discussion_r33333249","pull_request_url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93","_links":{"self":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/comments/33333249"},"html":{"href":"https://github.com/CompassionCH/compassion-modules/pull/93#discussion_r33333249"},"pull_request":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93"}}},"pull_request":{"url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93","id":38517268,"html_url":"https://github.com/CompassionCH/compassion-modules/pull/93","diff_url":"https://github.com/CompassionCH/compassion-modules/pull/93.diff","patch_url":"https://github.com/CompassionCH/compassion-modules/pull/93.patch","issue_url":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/93","number":93,"state":"open","locked":false,"title":"1.5 devel","user":{"login":"albertsh","id":12492795,"avatar_url":"https://avatars.githubusercontent.com/u/12492795?v=3","gravatar_id":"","url":"https://api.github.com/users/albertsh","html_url":"https://github.com/albertsh","followers_url":"https://api.github.com/users/albertsh/followers","following_url":"https://api.github.com/users/albertsh/following{/other_user}","gists_url":"https://api.github.com/users/albertsh/gists{/gist_id}","starred_url":"https://api.github.com/users/albertsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/albertsh/subscriptions","organizations_url":"https://api.github.com/users/albertsh/orgs","repos_url":"https://api.github.com/users/albertsh/repos","events_url":"https://api.github.com/users/albertsh/events{/privacy}","received_events_url":"https://api.github.com/users/albertsh/received_events","type":"User","site_admin":false},"body":"Add of the test for contract_compassion module : \r\n     - Remove of demo directory\r\n     - Set travis for compassion-modules\r\n     - Fix some issues in contract_compassion","created_at":"2015-06-25T06:58:29Z","updated_at":"2015-06-26T07:07:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f8beb39f40febc6eaef740392ccc1fcf63fc3ae7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93/commits","review_comments_url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93/comments","review_comment_url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/93/comments","statuses_url":"https://api.github.com/repos/CompassionCH/compassion-modules/statuses/063d594ba840fd5e8b21a06fe44ddb3ba0023d18","head":{"label":"albertsh:1.5-devel","ref":"1.5-devel","sha":"063d594ba840fd5e8b21a06fe44ddb3ba0023d18","user":{"login":"albertsh","id":12492795,"avatar_url":"https://avatars.githubusercontent.com/u/12492795?v=3","gravatar_id":"","url":"https://api.github.com/users/albertsh","html_url":"https://github.com/albertsh","followers_url":"https://api.github.com/users/albertsh/followers","following_url":"https://api.github.com/users/albertsh/following{/other_user}","gists_url":"https://api.github.com/users/albertsh/gists{/gist_id}","starred_url":"https://api.github.com/users/albertsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/albertsh/subscriptions","organizations_url":"https://api.github.com/users/albertsh/orgs","repos_url":"https://api.github.com/users/albertsh/repos","events_url":"https://api.github.com/users/albertsh/events{/privacy}","received_events_url":"https://api.github.com/users/albertsh/received_events","type":"User","site_admin":false},"repo":{"id":35809318,"name":"compassion-modules","full_name":"albertsh/compassion-modules","owner":{"login":"albertsh","id":12492795,"avatar_url":"https://avatars.githubusercontent.com/u/12492795?v=3","gravatar_id":"","url":"https://api.github.com/users/albertsh","html_url":"https://github.com/albertsh","followers_url":"https://api.github.com/users/albertsh/followers","following_url":"https://api.github.com/users/albertsh/following{/other_user}","gists_url":"https://api.github.com/users/albertsh/gists{/gist_id}","starred_url":"https://api.github.com/users/albertsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/albertsh/subscriptions","organizations_url":"https://api.github.com/users/albertsh/orgs","repos_url":"https://api.github.com/users/albertsh/repos","events_url":"https://api.github.com/users/albertsh/events{/privacy}","received_events_url":"https://api.github.com/users/albertsh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/albertsh/compassion-modules","description":"Odoo modules for Compassion","fork":true,"url":"https://api.github.com/repos/albertsh/compassion-modules","forks_url":"https://api.github.com/repos/albertsh/compassion-modules/forks","keys_url":"https://api.github.com/repos/albertsh/compassion-modules/keys{/key_id}","collaborators_url":"https://api.github.com/repos/albertsh/compassion-modules/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/albertsh/compassion-modules/teams","hooks_url":"https://api.github.com/repos/albertsh/compassion-modules/hooks","issue_events_url":"https://api.github.com/repos/albertsh/compassion-modules/issues/events{/number}","events_url":"https://api.github.com/repos/albertsh/compassion-modules/events","assignees_url":"https://api.github.com/repos/albertsh/compassion-modules/assignees{/user}","branches_url":"https://api.github.com/repos/albertsh/compassion-modules/branches{/branch}","tags_url":"https://api.github.com/repos/albertsh/compassion-modules/tags","blobs_url":"https://api.github.com/repos/albertsh/compassion-modules/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/albertsh/compassion-modules/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/albertsh/compassion-modules/git/refs{/sha}","trees_url":"https://api.github.com/repos/albertsh/compassion-modules/git/trees{/sha}","statuses_url":"https://api.github.com/repos/albertsh/compassion-modules/statuses/{sha}","languages_url":"https://api.github.com/repos/albertsh/compassion-modules/languages","stargazers_url":"https://api.github.com/repos/albertsh/compassion-modules/stargazers","contributors_url":"https://api.github.com/repos/albertsh/compassion-modules/contributors","subscribers_url":"https://api.github.com/repos/albertsh/compassion-modules/subscribers","subscription_url":"https://api.github.com/repos/albertsh/compassion-modules/subscription","commits_url":"https://api.github.com/repos/albertsh/compassion-modules/commits{/sha}","git_commits_url":"https://api.github.com/repos/albertsh/compassion-modules/git/commits{/sha}","comments_url":"https://api.github.com/repos/albertsh/compassion-modules/comments{/number}","issue_comment_url":"https://api.github.com/repos/albertsh/compassion-modules/issues/comments{/number}","contents_url":"https://api.github.com/repos/albertsh/compassion-modules/contents/{+path}","compare_url":"https://api.github.com/repos/albertsh/compassion-modules/compare/{base}...{head}","merges_url":"https://api.github.com/repos/albertsh/compassion-modules/merges","archive_url":"https://api.github.com/repos/albertsh/compassion-modules/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/albertsh/compassion-modules/downloads","issues_url":"https://api.github.com/repos/albertsh/compassion-modules/issues{/number}","pulls_url":"https://api.github.com/repos/albertsh/compassion-modules/pulls{/number}","milestones_url":"https://api.github.com/repos/albertsh/compassion-modules/milestones{/number}","notifications_url":"https://api.github.com/repos/albertsh/compassion-modules/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/albertsh/compassion-modules/labels{/name}","releases_url":"https://api.github.com/repos/albertsh/compassion-modules/releases{/id}","created_at":"2015-05-18T09:36:53Z","updated_at":"2015-05-18T09:36:53Z","pushed_at":"2015-06-26T06:57:41Z","git_url":"git://github.com/albertsh/compassion-modules.git","ssh_url":"git@github.com:albertsh/compassion-modules.git","clone_url":"https://github.com/albertsh/compassion-modules.git","svn_url":"https://github.com/albertsh/compassion-modules","homepage":"","size":2319,"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":"master"}},"base":{"label":"CompassionCH:1.5-devel","ref":"1.5-devel","sha":"d86b512841ca5fbe03c36e1577c8c24f345a7e4f","user":{"login":"CompassionCH","id":8435213,"avatar_url":"https://avatars.githubusercontent.com/u/8435213?v=3","gravatar_id":"","url":"https://api.github.com/users/CompassionCH","html_url":"https://github.com/CompassionCH","followers_url":"https://api.github.com/users/CompassionCH/followers","following_url":"https://api.github.com/users/CompassionCH/following{/other_user}","gists_url":"https://api.github.com/users/CompassionCH/gists{/gist_id}","starred_url":"https://api.github.com/users/CompassionCH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CompassionCH/subscriptions","organizations_url":"https://api.github.com/users/CompassionCH/orgs","repos_url":"https://api.github.com/users/CompassionCH/repos","events_url":"https://api.github.com/users/CompassionCH/events{/privacy}","received_events_url":"https://api.github.com/users/CompassionCH/received_events","type":"Organization","site_admin":false},"repo":{"id":23073482,"name":"compassion-modules","full_name":"CompassionCH/compassion-modules","owner":{"login":"CompassionCH","id":8435213,"avatar_url":"https://avatars.githubusercontent.com/u/8435213?v=3","gravatar_id":"","url":"https://api.github.com/users/CompassionCH","html_url":"https://github.com/CompassionCH","followers_url":"https://api.github.com/users/CompassionCH/followers","following_url":"https://api.github.com/users/CompassionCH/following{/other_user}","gists_url":"https://api.github.com/users/CompassionCH/gists{/gist_id}","starred_url":"https://api.github.com/users/CompassionCH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CompassionCH/subscriptions","organizations_url":"https://api.github.com/users/CompassionCH/orgs","repos_url":"https://api.github.com/users/CompassionCH/repos","events_url":"https://api.github.com/users/CompassionCH/events{/privacy}","received_events_url":"https://api.github.com/users/CompassionCH/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CompassionCH/compassion-modules","description":"Odoo modules for Compassion","fork":false,"url":"https://api.github.com/repos/CompassionCH/compassion-modules","forks_url":"https://api.github.com/repos/CompassionCH/compassion-modules/forks","keys_url":"https://api.github.com/repos/CompassionCH/compassion-modules/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CompassionCH/compassion-modules/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CompassionCH/compassion-modules/teams","hooks_url":"https://api.github.com/repos/CompassionCH/compassion-modules/hooks","issue_events_url":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/events{/number}","events_url":"https://api.github.com/repos/CompassionCH/compassion-modules/events","assignees_url":"https://api.github.com/repos/CompassionCH/compassion-modules/assignees{/user}","branches_url":"https://api.github.com/repos/CompassionCH/compassion-modules/branches{/branch}","tags_url":"https://api.github.com/repos/CompassionCH/compassion-modules/tags","blobs_url":"https://api.github.com/repos/CompassionCH/compassion-modules/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CompassionCH/compassion-modules/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CompassionCH/compassion-modules/git/refs{/sha}","trees_url":"https://api.github.com/repos/CompassionCH/compassion-modules/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CompassionCH/compassion-modules/statuses/{sha}","languages_url":"https://api.github.com/repos/CompassionCH/compassion-modules/languages","stargazers_url":"https://api.github.com/repos/CompassionCH/compassion-modules/stargazers","contributors_url":"https://api.github.com/repos/CompassionCH/compassion-modules/contributors","subscribers_url":"https://api.github.com/repos/CompassionCH/compassion-modules/subscribers","subscription_url":"https://api.github.com/repos/CompassionCH/compassion-modules/subscription","commits_url":"https://api.github.com/repos/CompassionCH/compassion-modules/commits{/sha}","git_commits_url":"https://api.github.com/repos/CompassionCH/compassion-modules/git/commits{/sha}","comments_url":"https://api.github.com/repos/CompassionCH/compassion-modules/comments{/number}","issue_comment_url":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/comments{/number}","contents_url":"https://api.github.com/repos/CompassionCH/compassion-modules/contents/{+path}","compare_url":"https://api.github.com/repos/CompassionCH/compassion-modules/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CompassionCH/compassion-modules/merges","archive_url":"https://api.github.com/repos/CompassionCH/compassion-modules/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CompassionCH/compassion-modules/downloads","issues_url":"https://api.github.com/repos/CompassionCH/compassion-modules/issues{/number}","pulls_url":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls{/number}","milestones_url":"https://api.github.com/repos/CompassionCH/compassion-modules/milestones{/number}","notifications_url":"https://api.github.com/repos/CompassionCH/compassion-modules/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CompassionCH/compassion-modules/labels{/name}","releases_url":"https://api.github.com/repos/CompassionCH/compassion-modules/releases{/id}","created_at":"2014-08-18T14:08:09Z","updated_at":"2015-05-08T09:31:58Z","pushed_at":"2015-06-25T14:53:08Z","git_url":"git://github.com/CompassionCH/compassion-modules.git","ssh_url":"git@github.com:CompassionCH/compassion-modules.git","clone_url":"https://github.com/CompassionCH/compassion-modules.git","svn_url":"https://github.com/CompassionCH/compassion-modules","homepage":"","size":4779,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":4,"forks":7,"open_issues":4,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93"},"html":{"href":"https://github.com/CompassionCH/compassion-modules/pull/93"},"issue":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/93"},"comments":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/issues/93/comments"},"review_comments":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93/comments"},"review_comment":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/pulls/93/commits"},"statuses":{"href":"https://api.github.com/repos/CompassionCH/compassion-modules/statuses/063d594ba840fd5e8b21a06fe44ddb3ba0023d18"}}}}